web-dev-qa-db-ja.com

iptablesルールを期限切れにする方法は?

これは可能だと誰かが私に言ったが、私はグーグルやマンページで何も見つけることができません。

IPを一定期間禁止した後、自動的に禁止を解除しました。

20
HappyDeveloper

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 

また、iptablesのrecentモジュールも見てください。これと--secondsオプションは、実際のニーズによっては役立つ場合があります。 man iptables 詳細については。

18
Eduardo Ivanec

タイムスタンプ(おそらくエポックからの秒数)をコメントに含めます。期限切れのルールを定期的にスイープします。

最新の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コマンドを出力する代わりに。

11
Seth Robertson

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チェーンへの「入り口」です。

  • Sshチェーンのルール1は、ソー​​スIPがリスト「ブラックリスト」にあるかどうかを確認します。その場合、接続はドロップされ、24時間ブラックリストタイマーが再起動されます。ルール1がfalseの場合、ルール2に進みます。
  • Sshチェーンのルール2は、ソースIPが5分間に4回を超える接続試行を行ったかどうかを確認します。もしそうなら、それはリスト「ブラックリスト」に追加されるチェーン「ブラック」にパケットを送ります。チェーンが「黒」になり、接続が削除されます。これで完了です。
  • チェーン「ssh」のルール3は、ルール1と2が偽の場合にのみ到達します。その場合、パケットはACCEPTされ、送信元IPがリスト「タイマー」に追加されるため、接続試行の頻度を監視できます。

「--reap」オプションは、リストを検索して、設定された制限時間より古いアイテムをすべて削除するようにカーネルに指示します。リスト「タイマー」の場合は5分、リスト「ブラックリスト」の場合は24時間。

注:余分なスペースは読みやすくするためのもので、シェルスクリプトではオプションです。

5
Glen

IPTablesには、このために特別に作成された機能があります。IPSetです。ルールを1回作成すると、通常どおり持続しますが、IP(またはポート)のセットをチェックして一致を確認します。クールなのは、このセットをファイアウォールの残りの部分に影響を与えずに動的かつ効率的に更新できることです。

メイン websiteexamples

したがって、それを使用するには、atまたはcronを使用して削除をスケジュールする必要があります。

4
Allen

fail2ban を使用して、IPアドレスを禁止し、アドレスが禁止される期間を構成できます。

2
user9517

誰かがすでに言ったように:この機能には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

これは、この動作を制御するための好ましい方法です。

2
Navern

Netfilter recent またはtimeモジュールを使用して、これを実現したいことに応じて、これを実現できます。

どちらも iptablesのマニュアルページ に記載されています。

0
TimS

IPを一定期間禁止した後、自動的に禁止を解除しました。

あなたは次のものを試すことができます

# iptables -I INTPUT -s xxx.xxx.xxx.xxx -m time --utc --datestart 2013-09-09T15:00 --datestop 2013-09-09T15:30 -j DROP
0
ALex_hha