これは可能だと誰かが言ったが、グーグルやマニュアルページには何も見つからない。
一定期間IPを禁止する必要があり、その後自動的に禁止を解除しました。
これは可能だと誰かが言ったが、グーグルやマニュアルページには何も見つからない。
一定期間IPを禁止する必要があり、その後自動的に禁止を解除しました。
回答:
iptablesがルールを完全に削除することを意味する場合、私が知る限り、それを行うことはできません。これの目的は何ですか?何らかの自動一時禁止が必要な場合、標準ソリューションはfail2banです。
または、cronジョブを使用して、追加しているルールを削除することもできます。または、インタラクティブに実行したい場合は、ジョブを削除することをお勧めしますat
。
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
またrecent
、iptables のモジュールもご覧ください。これは、--seconds
実際のニーズに応じて、オプションとともに役立つ場合があります。man iptables
詳細については。
/bin/sh
デフォルトで実行されます。ただし、この場合はおそらく問題になりません。
タイムスタンプ(おそらくエポックからの秒数)をコメントに追加します。期限切れのルールを定期的にスイープします。
最新のLinuxカーネルは、直接iptablesルールとしてではなく、iptableルールによって調べられたキャッシュへのIPアドレスの動的ロードをサポートしていることに注意してください。
例:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
もちろんiptables -D INPUT $1
、コマンドを印刷する代わりにできます。
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
:ルールが同様に作られていますiptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
iptablesには、ユーザー定義の条件が満たされた場合にリストにIPアドレスを自動的に追加する方法があります。私は以下を使用して、sshポートへの自動化されたハックの試みを回避します。
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
これは、同じIPアドレスからの接続試行を60秒ごとに1回に制限することにより、サーバーへのアクセスを取得する自動試行を制限するのに役立ちます。
5分間に4回などの時間枠で設定された試行回数を許可し、失敗した場合は24時間などのより長い期間ブラックリストに登録する場合は、次のようにできます。
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
上記では、2つのチェーンを作成します。「ssh」と「black」、および2つのリスト。「タイマー」、および「ブラックリスト」。
簡単に 上記の最後のチェーンは、sshチェーンへの「戸口」です。
「--reap」オプションは、リストを検索し、設定された制限時間よりも古いアイテムをパージするようカーネルに指示します。リスト「タイマー」の場合は5分、リスト「ブラックリスト」の場合は24時間。
注:余分なスペースは読みやすくするためのものであり、シェルスクリプトではオプションです。
fail2banを使用して、IPアドレスを禁止し、アドレスが禁止される期間を設定できます。
誰かがすでに言ったように、この機能にはipsetを使用する必要があります。
ipsetは、タイムアウト値を持つIPアドレスを追加できます。タイムアウトが終了すると、レコードはipsetから自動的に削除されます。
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
これは、この動作を制御するための望ましい方法です。
あなたはnetfilterのいずれかを達成したい正確に何に応じて、最近または時間のモジュールは、これを達成するために使用することができます。
両方ともiptablesのマニュアルページに文書化されています。