我使用IPSet来为不同的国家build立IP范围如下:
# Canada ipset -F ca.zone ipset -N ca.zone nethash for IP in $(wget -O - http://www.ipdeny.com/ipblocks/data/countries/ca.zone) do ipset -A ca.zone $IP echo $IP done
然后,我使用以下iptables规则阻止来自服务器上某些端口的国家/地区:
iptables -A INPUT -m set --match-set fr.zone src -p tcp --dport 15765 -j DROP iptables -A INPUT -m set --match-set cn.zone src -p tcp --dport 15765 -j DROP iptables -A INPUT -m set --match-set ca.zone src -p tcp --dport 16247 -j DROP iptables -A INPUT -m set --match-set de.zone src -p tcp --dport 16247 -j DROP
这一切都运作良好,但我想通过只允许某些IPSet国家IP范围实现一些端口的相反。 例如,阻止所有IP与我的uk.zone和th.zone集合中的IP不同。
我需要什么iptables规则来实现呢?
扭转推定:允许通过你想要的,然后否认其余的:
iptables -A INPUT -m set --match-set uk.zone src -p tcp --dport 15765 -j ACCEPT iptables -A INPUT -m set --match-set th.zone src -p tcp --dport 15765 -j ACCEPT iptables -A INPUT -p tcp --dport 15765 -j DROP
(类似的端口16247,或尝试使用-m multiport获得-m multiport )。 请注意,顺序非常重要:exception( ACCEPT )需要在规则( DROP )之前。