Como eu permito que apenas determinados conjuntos IPSet acessem uma certa porta com o iptables?

3

Estou usando o IPSet para criar intervalos de IP para diferentes países da seguinte forma:

# 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

Estou bloqueando esses países de certas portas no meu servidor com as seguintes regras do 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

Isso tudo funciona bem, mas eu quero alcançar o oposto disso para algumas das portas, permitindo apenas determinados intervalos de ip de país IPSet. Por exemplo, bloqueie todos os IPs para além daqueles dentro dos meus conjuntos uk.zone e th.zone.

Quais regras do iptables eu precisaria para conseguir isso?

    
por James Morrison 25.10.2013 / 15:39

1 resposta

3

Inverta a suposição: permita através daqueles que você quer, então negue o resto:

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

(e da mesma forma para a porta 16247, ou tente ficar esperto com -m multiport ). Observe que o pedido é importante: as exceções ( ACCEPT s) precisam vir antes da regra ( DROP ).

    
por 25.10.2013 / 15:52