Iptables acrescenta padrão de regra depois de "-A INPUT -j REJECT --rejeitar-com icmp-host-proibido"

6

Eu uso o iptables para abrir a porta 80 para HTTP no CentOS 6.4 Eu costumo usar o vim para editar o / etc / sysconfig / iptables Mas desta vez eu uso o comando / sbin / iptables.

# /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
# service iptables restart

Quando listo as regras, vejo http assim:

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 

Mas não consigo me conectar ao servidor web de outra máquina Eu verifiquei o arquivo iptables e vejo o conteúdo assim:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [88:9264]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Eu tive que colocar manualmente a linha:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

antes

-A INPUT -j REJECT --reject-with icmp-host-prohibited

e depois quando eu reiniciar o serviço iptables. Deu certo!

Então, como é possível adicionar novas regras de maneira correta? Obrigado!

    
por tungns 24.07.2013 / 03:42

1 resposta

14

O comando -A para iptables simplesmente "anexa" uma regra. Então, se você é um conjunto de regras existente, é assim:

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

E você corre:

# /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

Então, é claro, isso terminará após a regra REJECT (porque você disse para anexar a regra ao conjunto de caracteres existente). Você tem algumas escolhas:

  1. Você pode simplesmente editar /etc/sysconfig/iptables manualmente, inserir as regras desejadas e executar service iptables restart .
  2. Você pode usar a ferramenta lokkit para modificar o firewall. Por exemplo, lokkit -p 80:tcp . Isso atualizará automaticamente /etc/sysconfig/iptables , bem como o firewall ativo.
  3. Você pode usar o sinal -I <num> para iptables para inserir a regra na posição especificada na lista. O --line-numbers flag pode ser útil para descobrir o que <num> deve ser. Você precisará executar service iptables save depois de fazer as alterações dessa maneira.

Se você realmente quiser fazer esse tipo de coisa usando apenas comandos de acréscimo, precisará realizar uma pequena configuração primeiro. Crie uma nova cadeia (chamada, talvez, allow_services ):

iptables -N allow_services

Adicione uma regra à sua corrente INPUT no local apropriado que pula para essa nova cadeia:

iptables -I INPUT 5 -j allow_services

E, a partir daí, você pode simplesmente adicionar novos serviços à cadeia allow_services :

iptables -A allow_services -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

Supondo que você coloque sua regra de salto (a opção -j ) antes da% final REJECT , isso fará o que você parece estar perguntando.

    
por 24.07.2013 / 03:53

Tags