Linux
如何只允許某些 IPSet 集使用 iptables 訪問某個埠?
我正在使用 IPSet 為不同國家/地區建構 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 範圍來為某些埠實現相反的效果。例如,除了我的 uk.zone 和 th.zone 集內的 IP 之外,阻止所有 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
)。請注意,順序很重要:例外 (ACCEPT
s) 需要在規則 (DROP
) 之前。