Permitir que o iptables permita o alcance de ip somente em portas específicas

4

Em esta pergunta vejo uma linha assim, isso permitirá que eu diga "permitir que esses endereços IP se conectem"

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -j ACCEPT

Agora, quero proteger ainda mais isso para que essa regra se aplique apenas a portas específicas. Eu tenho usado um comando como este para minhas portas regulares:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Posso combinar esses dois para tornar uma porta específica permitida somente para um intervalo, como este

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 --dport 12345 -j ACCEPT

Obviamente, estou hesitante em apenas fazer chamadas de iptables por vontade própria. :) Obrigado!

    
por corsiKa 17.03.2011 / 02:43

3 respostas

4

A última linha que você tem lá deve funcionar, você só precisa ter certeza de ter um -p protocolo lá, como --dport não funciona como uma opção por conta própria.

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -p tcp --dport 12345 -j ACCEPT
    
por 17.03.2011 / 02:45
2

Como alternativa, instale ipset e você poderá alterar a lista de endereços IP sem mexer nas regras iptables :

ipset -N AllowedSources ipmap --network 10.50.10.0/24
for i in $LIST_OF_ALLOWED_SOURCES; do ipset -A AllowedSources $i; done
iptables -A INPUT -m set --match-set AllowedSources src -p tcp --dport 12345 -j ACCEPT

Agora, se você precisar adicionar outra fonte permitida:

ipset -A AllowedSources a.b.c.d

Você precisa "descartar" um host das origens permitidas:

ipset -D AllowedSources e.f.g.h

Você pode salvar seus conjuntos:

ipset --save > /etc/ipset.conf

Que você pode restaurar durante a inicialização, antes implementar seu iptables (ou então, o iptables irá reclamar!):

ipset --restore < /etc/ipset.conf

Você pode até criar um conjunto de IPs que corresponderá à porta de destino do IP de origem e , por exemplo:

ipset -N AllowedAccess ipporthash --network 10.50.0.0/16
# These hosts may access port 12345
for i in $LIST_OF_ALLOWED_TO_12345; do ipset -A AllowedAccess $i,12345; done
# These hosts may access port 23456
for i in $LIST_OF_ALLOWED_TO_23456; do ipset -A AllowedAccess $i,23456; done
# These hosts may access port 34567
for i in $LIST_OF_ALLOWED_TO_34567; do ipset -A AllowedAccess $i,34567; done
# Now that the IP set has been created, we can use it in iptables
iptables -A INPUT -m set --match-set AllowedAccess src,dst -j ACCEPT
# Note that we use "src,dst", meaning that we want to match source IP, but
# destination port
# Also note, if you need to match against a single port, the ipmap method
# will be slightly faster.

Mais informações sobre ipset : link

Se você estiver usando o Ubuntu , não será possível instalar o pacote ipset de seu repositório. Use minha dica: link

    
por 17.03.2011 / 05:53
1

Você tem a idéia básica certa, você pode combiná-los em uma regra como essa.

No entanto, apesar do que algumas respostas dizem, você não deve usar um intervalo como 10.50. 10.20-80 (expandirá para 10.50.10.20-80.0.0.0 - use o comando iptables para verificar). Você precisa usar o endereço IP completo no intervalo, por exemplo 10.50.10.20-10.50.10.80.

Além disso, se você especificar um número de porta, precisará declarar um protocolo que suporte portas, portanto, a regra revisada seria:

iptables -A INPUT -p tcp -m iprange --src-range 10.50.10.20-10.50.10.80 --dport 12345 -j ACCEPT

Documentação sobre o iprange: link

    
por 04.09.2015 / 16:15

Tags