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


18

これは可能だと誰かが言ったが、グーグルやマニュアルページには何も見つからない。

一定期間IPを禁止する必要があり、その後自動的に禁止を解除しました。

回答:


18

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詳細については。


ああ、 'at'の仕事は素晴らしいですね。nohupおよび&と組み合わせることができますか?どうやって?
HappyDeveloper

nohupを使用する必要はありません-atジョブは、作成に使用した端末から独立して実行されます。つまり、環境変数を継承しないシェルで実行され、/bin/shデフォルトで実行されます。ただし、この場合はおそらく問題になりません。
エドゥアルドイヴァネック

9

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

最新の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、コマンドを印刷する代わりにできます。


いい案。
抜本的な

+1非常に良いアイデアです。おそらく最も単純ではありませんが、間違いなくきちんとしています。
カイルスミス

1
@HappyDeveloper:追加/スイープの例を提供
セスロバートソン

1
:ハハ私はちょうど私が私のクリーンアップのためのawkを使用し、同様にこれをしなければならなかった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"
カイル・スミス

perlの私の2セント:iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
tuomassalo

5

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が偽の場合、ルール2に進みます。
  • sshチェーンのルール2は、ソースIPが5分間に4回を超える接続試行を行ったかどうかを確認します。その場合、パケットをチェーン「ブラック」に送信し、そこでリスト「ブラックリスト」に追加されます。チェーンは「黒」で接続をドロップし、完了です。
  • チェーン「ssh」のルール3に到達するのは、ルール1と2が偽の場合のみです。その場合、パケットは受け入れられ、ソースIPがリスト「タイマー」に追加されるため、接続試行の頻度を監視できます。

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

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


3

IPTablesには、このために明示的に作成された機能、IPセットがあります。ルールを1回作成すると、通常どおりルールが保持されますが、一致するIP(またはポート)のセットがチェックインされます。クールなのは、このセットを、ファイアウォールの残りの部分を乱すことなく動的かつ効率的に更新できることです。

メインのウェブサイト

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



2

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

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


0

一定期間IPを禁止する必要があり、その後自動的に禁止を解除しました。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.