IPTables - 允许(接受)阻止(丢弃)子网内的特定 IP

IPTables - 允许(接受)阻止(丢弃)子网内的特定 IP

我对 IPTABLES 还很陌生,但我已经编写了一个脚本,可以从输入文件 blacklist.txt 中阻止多个 Amazon EC2 的 IP 范围:

...
54.66.0.0/16
54.67.0.0/16
...

我还有一个单独的 whilelist.txt 文件,其中包含友好 IP 地址(这里是任意的),包括:

54.66.1.1
54.67.1.2

下面是我正在运行的 bash 脚本的简化版本,用于阻止黑名单 IP 并允许白名单 IP:

#!/bin/sh

TABLENAME="EC2LIST"


iptables -N $TABLENAME

# Block These
while read ip; do

    # Create the drop rule
    iptables -t filter -A $TABLENAME -s $ip -j DROP

done <~/ec2block/blacklist.txt  # The blacklist location

# Delete matching rules from blacklist
while read ip; do

    # Remove any matching explicit whitelisted IPs from Blacklist
    # This will fail if explicit record doesn't exit. Ommitted check for existence.
    iptables -t -D $TABLENAME -s $ip -j DROP

    # Accept this incoming IP
    iptables -A INPUT -i eth0 -s $ip -j ACCEPT

done <~/ec2block/whitelist.txt  # Edit this location if needed

# Drop incoming packets from EC2LIST
iptables -I INPUT -j $TABLENAME

我是否可以保证具有 ACCEPT 规则且位于 DROP 规则阻止范围内的 IP 将被接受?

有没有更好、更可接受的方法来做到这一点?我一直在寻找 ACCEPT 规则与 DROP 规则的优先级,但找不到太多。

一台服务器是 CentOS,另一台在 Gentoo 上实现。我不记得哪个是哪个,但必须使用:

service iptables save

以下是输出的示例

$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
EC2LIST    all  --  anywhere             anywhere
ACCEPT     all  --  ec2-54-66-1-1.ap-southeast-2.compute.amazonaws.com  anywhere
ACCEPT     all  --  ec2-54-67-1-2.ap-southeast-2.compute.amazonaws.com  anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain EC2LIST (1 references)
target     prot opt source               destination
DROP       all  --  ec2-54-66-0-0.ap-southeast-2.compute.amazonaws.com/16  anywhere
DROP       all  --  ec2-54-67-0-0.us-west-1.compute.amazonaws.com/16  anywhere

答案1

Iptables 的规则是按顺序处理的。当一条规则匹配时,处理停止。如果您使用嵌套链(即 EC2LIST),如果嵌套链中没有匹配项,则嵌套链“返回调用链”。

您可以(也应该)利用这一点。如果您有一个符合 REJECTED 规则的 IP,并且想要将其列入白名单,请在 REJECT/DROP 之前为其添加 ACCEPT 规则。

答案2

感谢 jurez,我找到了答案。如果我要添加接受降低规则添加到同一列表,在 DROP 规则之前添加的 ACCEPT 规则将优先。

操作顺序可能不完全正确或不符合惯例,但如果我试图允许123.123.123.123但阻止其余的123.123.0.0123.123.255.255:例如。

iptables -A EC2BLOCK -i eth0 -s 123.123.123.123 -j ACCEPT
iptables -t filter -A EC2BLOCK -s 123.123.0.0/16 -j DROP
iptables -I INPUT -j EC2BLOCK

相关内容