iptables开启后造成本地套接字阻塞的问题
前段时间,我使用iptables实现了针对IP地址与MAC地址的白名单功能,即将INPUT链的默认规则设为DROP:
iptables -P INPUT DROP
这样就能拒绝一切外来报文。随后只需要添加规则,将IP地址和MAC地址设为ACCEPT,即加入白名单:
iptables -A INPUT -m mac --mac-source 98:FC:84:E8:BA:C5 -j ACCEPT iptables -A INPUT -s 192.168.2.7 -j ACCEPT
删除的方法也很简单:
iptables -D INPUT -m mac --mac-source 98:FC:84:E8:BA:C5 -j ACCEPT iptables -D INPUT -s 192.168.2.7 -j ACCEPT
但我发现使能后,造成了一个功能的阻塞。深入代码探究发现,是因为该功能使用了本地套接字,而该套接字的connect请求被iptables的INPUT链的默认规则拦下来了。解决方法也很简单,添加一条规则把回送地址加入白名单中:
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
这样就可以解决本地套接字的阻塞问题。最好将该语句添加到开机执行的配置文件中,避免以后每次开机需要手动设置。