我想在几个小时内阻止来自特定地址的流量。我用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。因此,您的第一次尝试会拒绝所有未经明确授权的流量。你的第二次尝试还拒绝所有未明确授权的流量,但第二条规则允许大多数流量(它只阻止一些应该允许通过的内容,例如 ICMP 错误 - 您应该始终允许RELATED
通过)。
第一个匹配适用。规则 1 在特定时间窗口内允许来自 10.10.10.21 的流量。规则 2 始终允许(几乎)所有流量。由于规则 1 是规则 2 的子集,因此它是多余的。
要在指定时间窗口之外拒绝来自 10.10.10.21 的流量,您需要修改规则 2 以排除来自 10.10.10.21 的流量,或者在其间添加一条拒绝流量的规则。我认为第二个选项更清楚。
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
注意你应该总是对被阻止的流量使用 REJECT,而不是 DROP。您无法将链策略设置为 DROP,这就是为什么我在最后添加了显式 REJECT 规则的原因。