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:
- Você pode simplesmente editar
/etc/sysconfig/iptables
manualmente, inserir as regras desejadas e executarservice iptables restart
. - 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. - Você pode usar o sinal
-I <num>
paraiptables
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á executarservice 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.