O Ubuntu iptables permite endereços IP certificados

2

Eu tenho um cluster do riak que preciso apenas permitir que determinados endereços IP acessem as informações. No momento, estou usando, -A INPUT -s 192.168.10.200 -j ACCEPT , para permitir esse endereço IP e, na parte inferior de minhas regras, tenho -A INPUT -j REJECT e -A FORWARD -j REJECT para rejeitar outro tráfego. Alguém pode aconselhar onde eu estou indo errado? Obrigado!

As regras completas:

-A INPUT -s 192.168.1.181 -j ACCEPT
-I INPUT -p tcp --dport 8098 -j ACCEPT
-I INPUT -p tcp --dport 8099 -j ACCEPT
-I INPUT -p tcp --dport 4369 -j ACCEPT
-I INPUT -p tcp --dport 5678:5679 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT -A FORWARD -j REJECT
    
por Queencity13 22.02.2011 / 15:25

3 respostas

2

O Netfilter possui 5 cadeias principais. Você pode ignorar PREROUTING e POSTROUTING por enquanto, então os 3 que você precisa manipular são INPUT, FORWARD e OUTPUT.

INPUT e OUTPUT controlam o tráfego direcionado ao próprio sistema, enquanto o FORWARD controla o tráfego que passa por e é direcionado para outra máquina (o caso de um gateway).

No seu caso, se você quiser permitir que usuários externos se conectem ao próprio sistema, será necessário o seguinte conjunto de regras:

# Rule 1: accept packets from established connections to enter and leave the system
iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -m state --state ESTABLISHED -j ACCEPT

# Rule 2: accept new connections entering the system
iptables -A INPUT -i eth0 -p tcp -s 192.168.10.200 -m state --state NEW -j ACCEPT 



# Rule 3: block all connections entering and leaving the system (if not previously accepted)
iptables -A INPUT -i eth0 -j DROP

# note: only use the filtering on output if you want to control outgoing connection
# if you want to let all connections leave your system, just comment this out
iptables -A OUTPUT -o eth0 -j DROP 

As regras 1 e 3 são gerais, a regra 2 é específica da conexão. Basta usar essa amostra e adicionar a nova Regra 2 quando precisar de novas conexões.

Se você quiser algo mais sólido, dê uma olhada nisso: link

    
por 22.02.2011 / 16:59
1

Não é suficiente permitir o tráfego de entrada usando: -A INPUT -s 192.168.10.200 ou o tráfego encaminhado usando: -A INPUT -s 192.168.10.200 . Você está perdendo o tráfego relacionado. Você precisa adicionar:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

INPUT deve ser usado para o tráfego destinado ao próprio firewall. FORWARD deve ser usado para o tráfego destinado a outras máquinas. Além disso, certifique-se de ativar o encaminhamento de IP neste caso.

    
por 22.02.2011 / 16:00
1

Ok, li suas regras completas.

Uma coisa importante primeiro: Por favor não misture -A com -I.

  • -A acrescenta regras ao final da cadeia
  • -I insere regras na cadeia (se a posição não for especificada, ela será inserida no primeiro lugar )

Então, as regras do iptables são:

-A INPUT -p tcp --dport 5678:5679 -j ACCEPT
-A INPUT -p tcp --dport 4369 -j ACCEPT
-A INPUT -p tcp --dport 8099 -j ACCEPT
-A INPUT -p tcp --dport 8098 -j ACCEPT
-A INPUT -s 192.168.1.181 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT

Como você pode ver, as regras de entrada # 1 a # 4 não limitam nenhum endereço de origem.

Agora, se você realmente quiser limitar o acesso a essas portas para 192.168.1.181, terá que fazer assim:

# Established connections should just pass
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Loopbacks will not match 192.168.1.181, so we ACCEPT them here
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Other than 192.168.1.181, we reject
-A INPUT -s 192.168.1.181 -j in_allow
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
# Allow only the following ports
-A in_allow -p tcp --dport 5678:5679 -j ACCEPT
-A in_allow -p tcp --dport 4369 -j ACCEPT
-A in_allow -p tcp --dport 8099 -j ACCEPT
-A in_allow -p tcp --dport 8098 -j ACCEPT
-A in_allow -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A in_allow -p icmp -m icmp --icmp-type 8 -j ACCEPT
#
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT

Apenas uma pergunta: por que o -m state --state NEW para --dport 2500 ?

Nota importante: Não se esqueça de primeiro FLUSH e APAGAR todas as regras do iptables antes de aplicar o acima.

    
por 08.03.2011 / 10:14