wget bloqueado pelo iptables no CentOS 5.5 e no iptables 1.3.5

1

Com essas regras, não consigo usar o wget em um endereço externo ou enviar e-mails por meio de um servidor SMTP externo:

#!/bin/bash

# Flush all current rules from iptables
iptables -F

# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Set access for localhost
iptables -A INPUT -i lo -j ACCEPT

# Accept packets belonging to established and related connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow incoming web traffic
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Save settings
/sbin/service iptables save

Mas se eu adicionar isso, funciona:

iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT

A regra a seguir não deveria permitir nenhuma conexão de entrada originada por uma solicitação anterior?

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

EDITAR: quando executo o script recebo 2 erros:

iptables: Unknown error 4294967295
iptables: Unknown error 4294967295

Estou usando o CentOS 5.5 e o iptables 1.3.5. Cavando mais Eu descobri que há um bug nesta versão: link Isso pode ser a causa do problema? problema?

EDIT 2: se eu correr demsg recebo a mesma mensagem repetida:

ip_tables: udp match: only valid for protocol 17

EDIT 3: Executando iptables -L INPUT -v -n depois que um wget bem-sucedido mostra:

# iptables -L INPUT -v -n
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   31  2020 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443
    4   938 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:53
   12 11439 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80

EDIT 4: A execução do script sh -x mostra:

 # sh -x firewall.conf
+ iptables -F
+ iptables -A INPUT -p tcp --dport 22 -j ACCEPT
+ iptables -P INPUT DROP
+ iptables -P FORWARD DROP
+ iptables -P OUTPUT ACCEPT
+ iptables -A INPUT -i lo -j ACCEPT
+ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables: Unknown error 4294967295
+ iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables: Unknown error 4294967295
+ iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables: Unknown error 4294967295
+ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
+ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
+ /sbin/service iptables save
Saving firewall rules to /etc/sysconfig/iptables:          [  OK  ]
    
por SCL 31.03.2011 / 20:20

5 respostas

3

você não tem nenhuma regra na cadeia OUTPUT e a política padrão para ela é DROP, então os pacotes tcp iniciais enviados pelo seu sistema quando você tenta abrir a conexão http ou smtp são descartados. Você precisa adicionar regras como essas para permitir http e smtp de saída para wget e email:

iptables -A SAÍDA -p tcp --dport 80 -m state --state NOVO -j ACCEPT

iptables -A SAÍDA -p tcp --dport 25 -m state --state NOVO -j ACCEPT

você pode consolidá-los em uma regra usando multiportas:

iptables -A OUTPUT -p tcp -m multiport --dados 25,80 -m state --state NOVO -j ACCEPT

    
por 31.03.2011 / 22:23
1

Você já tentou

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Pode estar relacionado ao módulo "estado" / extensão do kernel ausente / tendo-problemas / jogando-mente-jogos (?).

Pode valer a pena.

    
por 31.03.2011 / 22:40
1

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

Isso está apenas fazendo rastreamento de conexão em dados que cruzam a cadeia de entrada. Sua conexão ainda não está estabelecida, você ainda está fazendo um handshake de três vias (handshake TCP de três vias). Então conntrack está negando a conexão como deveria.

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

deve corrigir isso.

    
por 31.03.2011 / 22:58
1

Eu acho que você deveria atualizar seu iptables ; o meu já é a versão 1.4.10.

Por exemplo, o 'Erro desconhecido 4294967295' foi corrigido em 1.3.6: link

Claro, isso provavelmente precisará de uma atualização do kernel.

    
por 01.04.2011 / 05:11
0

Você deve "parear" as regras entre INPUT e OUTPUT

Como o wget de saída está solicitando o uso da porta 21,80 e / ou 443 TCP OUTPUT, e precisa de permissão para "incoming INPUT" do sourceport 20,21,80 e / ou 443 tente isto:

# rule OUT first :
iptables -A OUTPUT -p tcp -o ethX -d 0/0 -m multiport --dport 21,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT

# rule for "coming back" from OUT to INPUT :
iptables -A INPUT -p tcp -i ethX -s 0/0 -m multiport --sport 20,21,80,443 -m state --state ESTABLISHED -j ACCEPT

em que ethX é sua interface de eth externa (eth0 eth1 ou qualquer outra)

Regra de envio de mensagens pelo SMTP externo? Faça o mesmo, apenas mude o dport e o sport em cada regra acima

Espero que ajude, funcione para mim.

Btw, Meu iptables é v1.3.5 e meu padrão INPUT OUTPUT FORWARD é definido como DROP: -)

    
por 11.04.2011 / 12:46