数時間、特定のアドレスのトラフィックをブロックしたいと思います。私は使うfirehol
私を支配するルール。
次のルールは、目標時間内のすべてのトラフィックをブロックします。
ACCEPT all -- anywhere anywhere ctstate NEW,ESTABLISHED TIME from 06:00:00 to 16:00:00 UTC
特定のIPに対して同じルールを変更する
ACCEPT all -- 10.10.10.21 anywhere ctstate NEW,ESTABLISHED TIME from 06:00:00 to 16:00:00 UTC
ACCEPT all -- anywhere anywhere ctstate NEW,ESTABLISHED
ブロックしないトラフィック10.10.10.21
。順序が正しいようです(より具体的なものからより一般的なものまで)。何が欠けている可能性があるのだろうか。
(これはタイムアウトに関連する抜粋ですiptables -L
。特定のIPに特定のルールを追加したときに変更されるルール(上記の時間以外のすべてのトラフィックをブロックする -working-ルールとは反対)
答え1
ACCEPTルールのみがあり、一部のトラフィックがブロックされている場合は、ルールのポリシーがDROPであることを意味します。したがって、最初の試みでは、明示的に承認されていないすべてのトラフィックが拒否されます。 2回目の試み返品明示的に承認されていないすべてのトラフィックを拒否しますが、2番目のルールはほとんどのトラフィックを許可します(常に許可する必要があるICMPエラーなど、許可する必要があるいくつかのエントリのみをブロックしますRELATED
)。
最初の一致が適用されます。ルール 1 は、特定の時間枠内で 10.10.10.21 のトラフィックを許可します。ルール 2 は常に (ほぼ) すべてのトラフィックを許可します。ルール 1 はルール 2 のサブセットなので、重複します。
指定された期間に加えて10.10.10.21のトラフィックを拒否するには、ルール2を変更して10.10.10.21のトラフィックを除外するか、それらの間にトラフィックを拒否するルールを追加する必要があります。私は2番目のオプションがより明確だと思います。
iptables -A INPUT -j ACCEPT -s 10.10.10.21 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -m time --timestart 06:00:00 --timestop 16:00
iptables -A INPUT -j REJECT -s 10.10.10.21 -m conntrack --ctstate NEW,ESTABLISHED,RELATED
iptables -A INPUT -j ACCEPT -m conntrack --ctstate NEW,ESTABLISHED,RELATED
iptables -A INPUT -j REJECT
気づくブロックされたトラフィックには常にDROPではなくREJECTを使用する必要があります。。チェーンポリシーをDROPに設定できないため、最後に明示的なREJECTルールを追加しました。