私は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
)の前に来る必要があります。