Regras de IPtables para bloquear o intervalo de IP

1

Eu apliquei as seguintes regras de um arquivo de texto chamado "iptables.save" para iptables.

Mas, para meu espanto, descobri que o endereço IP 107.22.26.176 ainda é capaz de acessar meu servidor via TCP.

O que eu fiz de errado? A ordem das regras está incorreta?

Obrigado por qualquer conselho.

iptables.save
===================

*filter

-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -s 107.20.0.0/14 -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -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
COMMIT

Update1: Aqui está a saída do iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             loopback/8          reject-with icmp-port-unreachable 

DROP       all  --  ec2-107-20-0-0.compute-1.amazonaws.com/14  anywhere            

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www 
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request 
LOG        all  --  anywhere             anywhere            limit: avg 5/min burst 5 LOG level debug prefix 'iptables denied: ' 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere 

Update2: acho que sei porquê. Eu uso o Cloudflare para resolver meu nome de domínio, então o iptables só vê os endereços IP do Cloudflare em vez dos IPs dos visitantes. Minha pergunta agora é: existe uma maneira de o iptables ver os IPs reais? Obrigado.

    
por GooDoo 09.04.2013 / 10:51

2 respostas

1

Respondendo a segunda questão - o seu proxy reverso (como eu presumo que é o que o cloudflare é) deveria estar te dando um cabeçalho HTTP informando a conexão real do IP-x-forward-for.

link

No entanto, isso significa que iptables não é a ferramenta certa para o trabalho. Você precisa filtrar essas conexões no nível do aplicativo (na configuração do seu servidor, com base no valor desse cabeçalho http). Ou talvez o cloudflare tenha seu próprio caminho para bloquear IPs no perímetro.

    
por 10.04.2013 / 07:36
0

A primeira regra INPUT não deve ser 'Accept all'. Todas as outras regras perdem efeito então. Tente colocar a primeira regra do iptables.save no final ou simplesmente apague-a. Então faça o comando restore novamente.

Como alternativa, você pode inserir:

iptables -D INPUT -i lo -j ACCEPT

no terminal

    
por 09.04.2013 / 11:56