我正在尝试设置一个 iptables 配置,以便仅当它们处于 ESTABLISHED 状态时才允许来自我的 CentOS 6.2 服务器的出站连接。目前,以下设置非常适合 sshd,但由于我无法弄清楚的原因,所有 Samba 规则都被完全忽略了。
用于设置所有规则的 iptables Bash 脚本:
# Remove all existing rules
iptables -F
# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Allow incoming SSH
iptables -A INPUT -i eth0 -p tcp --dport 22222 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22222 -m state --state ESTABLISHED -j ACCEPT
# Allow incoming Samba
iptables -A INPUT -i eth0 -s 10.1.1.0/24 -p udp --dport 137:138 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -d 10.1.1.0/24 -p udp --sport 137:138 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -s 10.1.1.0/24 -p tcp --dport 139 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -d 10.1.1.0/24 -p tcp --sport 139 -m state --state ESTABLISHED -j ACCEPT
# Enable these rules
service iptables restart
运行上述脚本后的 iptables 规则列表:
[root@repoman ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:22222 state NEW,ESTABLISHED
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp spt:22222 state ESTABLISHED
最终,我试图像对 sshd 所做的那样限制 Samba。此外,我试图将连接限制在以下 IP 地址范围内: 10.1.1.12 - 10.1.1.19
你们能提供一些指示,甚至可能提供一个完整的解决方案吗?我已经广泛阅读了man iptables,所以我不确定为什么 Samba 规则被抛弃了。
此外,删除-s 10.1.1.0/24标志不会改变规则被忽略的事实。
您不了解连接状态的含义。NEW 表示这是连接中的第一个数据包,在 TCP 的情况下是第一个 SYN 数据包。ESTABLISHED 表示数据包属于现有连接,在 TCP 的情况下是第一个 SYN 数据包之后的所有内容。为了使连接进入 ESTABLISHED 状态,第一个数据包需要通过。通过只允许 ESTABLISHED 连接,您将阻止第一个数据包,因此永远不会建立连接。
建立iptables时通常使用连接跟踪的方式是监管每个连接的第一个数据包(即状态NEW),然后允许所有处于ESTABLISHED状态的数据包通过。由于连接只能在第一个数据包被允许的情况下进入 ESTABLISHED 状态,因此接受处于 ESTABLISHED 状态的所有数据包是安全的。
最后
service iptables restart
才是问题所在。当您运行这些iptables
命令时,这些规则会立即生效。iptables
您在那里重新启动的服务使用配置文件在系统启动时加载所有防火墙规则。当您运行它时,它会用存储的配置中的任何内容替换您刚刚制定的所有规则。根据这个你应该做的是使用
iptables
命令使防火墙正常工作,然后service iptables save
保存防火墙配置以供下次启动。