Problema de IPtables no CentOS 5.6

3

Estou tendo um problema com o IPtables em uma máquina CentOS 5.6 que anteriormente estava funcionando bem, não tenho certeza quando isso começou, pois só percebi o problema quando cheguei para permitir um novo IP em uma porta.

Basicamente, quando tento parar, iniciar ou reiniciar, obtenho o seguinte:

Flushing firewall rules: [  OK  ]
Setting chains to policy ACCEPT: security raw nat mangle filter [FAILED]
Unloading iptables modules: [  OK  ]

Por alguma razão, não importa o que eu faça, não posso reconfigurar as regras. Eu tentei ir tão longe a ponto de desinstalar IPtables completamente (através do yum), mas mesmo depois de um sistema reiniciar, ele ainda estava permitindo apenas conexões para as portas que estavam abertas antes do problema começar, e filtrando todo o resto.

Estou realmente no meu limite, iptables status mostra cadeias completamente vazias, mas ainda não há alegria quanto a conexões externas.

Qualquer ideia seria apreciada. Se você quiser que eu forneça mais alguma informação, por favor me avise.

Obrigado antecipadamente,
Sam.

EDIT: O conteúdo de /etc/sysconfig/iptables (está basicamente vazio devido a ter removido e reinstalado o iptables).

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

EDIT 2:

Se eu executar /etc/init.d/iptables stop i:

Flushing firewall rules: [  OK  ]
Setting chains to policy ACCEPT: security raw nat mangle filter [FAILED]
Unloading iptables modules: [  OK  ]

E as regras vazias:

$ iptables -L -n -v
Chain INPUT (policy ACCEPT 81 packets, 6575 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 72 packets, 4133 bytes)
 pkts bytes target     prot opt in     out     source               destination

Mas ainda bloqueia e filtra as portas.

Da mesma forma, os resultados iniciais são:

/etc/init.d/iptables start
Flushing firewall rules: [  OK  ]
Setting chains to policy ACCEPT: security raw nat mangle filter [FAILED]
Unloading iptables modules: [  OK  ]
Applying iptables firewall rules: [  OK  ]

iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  207 54155 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:!0x17/0x02 reject-with tcp-reset 
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID 
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    4   228 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 
    2   116 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143 
    1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:993 
    2   128 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:995 
    0     0 ACCEPT     tcp  --  *      *       -sanitized-          0.0.0.0/0           tcp dpt:22 
    0     0 ACCEPT     tcp  --  *      *       192.168.0.0/16       0.0.0.0/0           tcp dpt:22 
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 code 0 
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:!0x17/0x02 reject-with tcp-reset 
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID 
    0     0 ACCEPT     all  --  lo     lo      0.0.0.0/0            0.0.0.0/0           
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  158 25662 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:!0x17/0x02 reject-with tcp-reset 
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID 
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
   33  2351 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Mas ainda não consigo conectar na porta 22 do SSH (de outro modo, estou usando um console serial).

    
por Sam 11.07.2011 / 12:38

4 respostas

5

Este tópico tinha uma solução que funcionou para mim: link

A solução é adicionar as seguintes linhas ao /etc/init.d/iptables

    echo -n $"${IPTABLES}: Setting chains to policy $policy: "
    ret=0
    for i in $tables; do
        echo -n "$i "
        case "$i" in
+           security)
+               $IPTABLES -t filter -P INPUT $policy \
+                   && $IPTABLES -t filter -P OUTPUT $policy \
+                   && $IPTABLES -t filter -P FORWARD $policy \
+                   || let ret+=1
+               ;;
            raw)
                $IPTABLES -t raw -P PREROUTING $policy \
                    && $IPTABLES -t raw -P OUTPUT $policy \
                    || let ret+=1
                ;;
    
por 20.07.2011 / 23:44
3

Você está executando isso no Linode (ou outro VPS)? Eu pergunto isso porque, procurando por "Definir cadeias para política ACCEPT: segurança nat mangle filtro" no Google, encontrei a seguinte referência:

Linode.com Forum :: Exibir tópico - IPTables
link

Naquela discussão, a mensagem relevante é essa do usuário " troublshootr ", que também menciona o CentOS (eu em negrito o que me parece a parte da solução do resposta):

I asked the same question and it wasn't really answered. This is what I received from support:

" The issue is that the "Latest 2.6 Paravirt" kernel has a "security" chain and iptables doesn't know how to handle it. Usually switching to the "Latest 2.6 Stable" kernel resolves the issue without any further tweaking of the iptables init script (it often just ignores that chain and starts normally). Our builds team is indeed aware of this problem, however I do not have an ETA on if/when it will be resolved. It is perfectly fine to continue using our "Latest 2.6 Stable" kernel -- this kernel was actually the default selection for CentOS deployments until recently. No applications, with the exception of iptables, will operate differently when using the stable kernel. "

Isso ajuda?

    
por 11.07.2011 / 13:11
1

Você está, por acaso, executando o Webmin ou outro painel de controle neste servidor?

Eu tive o mesmo problema com um servidor CentOS 5.6, onde tudo que eu fazia com iptables através da linha de comando era liberado após uma reinicialização; somente as regras que eu inseri através da interface no Webmin ficariam.

    
por 11.07.2011 / 14:02
1

Na mensagem de erro, cada um dos itens listados é uma tabela iptables separada. Tabelas individuais são suportadas pelos módulos do kernel :

  • the iptable_raw module will, when loaded, register a hook that will be called before any other Netfilter hook. It provides a table called raw that can be used to filter packets before they reach more memory-demanding operations such as Connection Tracking.
  • the iptable_mangle module registers a hook and mangle table to run after Connection Tracking (but still before any other table), so that modifications can be made to the packet that may influence further rules such as NAT or filtering.
  • the iptable_nat module registers two hooks: DNAT-based transformations are applied before the filter hook, SNAT-based transformations are applied afterwards. The nat table that is made available to iptables is merely a “configuration database” for NAT mappings only, and not intended for filtering of any kind.
  • the iptable_filter module registers the filter table, used for general-purpose filtering (firewalling).

A tabela security é relativamente nova, e é possível que o kernel que você está usando não a tenha compilado. Você pode confirmar isso executando iptables -t <table> -L ; ou seja:

adam@adamc: $ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

adam@adamc: $ sudo iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

O verdadeiro truque é que não tenho idéia de como dizer ao CentOS para não se incomodar em carregar a tabela security . Percorrer o script de inicialização pode revelar um arquivo de configuração onde essas linhas estão listadas; Na falta disso, você pode editar o script de inicialização diretamente para remover quaisquer tabelas que você não tenha instalado.

    
por 11.07.2011 / 17:53