为Samba提供安全的iptablesconfiguration

我试图设置一个iptablesconfiguration,使得只有在状态为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

你们可以提供一些指针,甚至可能是一个完整的解决scheme吗? 我已经读过很多iptables了,所以我不确定为什么Samba规则会被抛出。

此外,删除-s 10.1.1.0/24标志不会改变规则被忽略的事实。

这是service iptables restart的问题。 当你运行iptables命令时,这些规则立即生效。 你正在重新启动的iptables服务使用一个configuration文件在系统启动时加载所有的防火墙规则。 当你运行它时,它会replace你刚刚用存储configuration中的任何规则。

根据这个你应该做的就是使用iptables命令使防火墙正常工作,然后service iptables save以保存下次启动的防火墙configuration。

你不明白连接状态是什么意思。 NEW表示这是连接中的第一个数据包,在TCP的情况下是第一个SYN数据包。 ESTABLISHED意味着数据包属于现有的连接,在TCP的情况下是第一个SYN数据包之后的所有数据。 为了使连接进入ESTABLISHED状态,第一个数据包需要通过。 通过只允许ESTABLISHED连接阻止第一个数据包,所以连接永远不会build立。

设置iptables时通常使用连接跟踪的方式是监视每个连接的第一个数据包(即状态NEW),然后允许处于ESTABLISHED状态的所有数据包通过。 由于一个连接只有在第一个数据包被允许的情况下才能进入ESTABLISHED状态,接受处于ESTABLISHED状态的所有数据包是安全的。