iptables regras muito restritivas; O servidor Web do Drupal não pode acessar repositórios, ntp ou mesmo sites

2

Este é um site do Drupal rodando o Ubuntu 12.04 LTS no Linode. Alguém recentemente mudou as regras do iptables e vários problemas começaram.

Estes incluem:

  1. Nossa proteção contra spam do Mollom não está funcionando no site do Drupal porque o servidor não pode acessar o serviço externo. (mais detalhes abaixo)

  2. Relatórios do Drupal, "Seu sistema ou configuração de rede não permite que o Drupal acesse páginas da web, resultando em funcionalidade reduzida." (mais detalhes abaixo)

  3. o servidor não pode fazer ping na Internet

    ping google.com
    ping: host desconhecido google.com

  4. Outros serviços de rede falham. Por exemplo:

    $ sudo ntpdate ntp.ubuntu.com Exiting, name server não pode ser usado: Falha temporária na resolução de nomes (-3) 1 Jun 16:42:34 ntpdate [7420]: servidor de nomes não pode ser usado: falha temporária na resolução de nomes (-3)
    atualização do apt-get Err link preciso Release.gpg
      Falha temporária na resolução de 'us.archive.ubuntu.com' Err link precis-security Release.gpg
      Falha temporária ao resolver 'security.ubuntu.com'

  5. O servidor está funcionando muito mal. Erros como o seguinte podem estar relacionados à impossibilidade de acessar a Internet devido às regras do iptables?

    Sem memória: Mate o processo 2300 (mysqld) marque 129 ou sacrifique a criança Processo morto 2300 (mysqld) total-vm: 354780kB, anon-rss: 53180kB, arquivo-rss: 0kB Memória insuficiente: Matar processo 5937 (mysqld) marcar 60 ou sacrificar filho Processo morto 5937 (mysqld) total-vm: 344040kB, anon-rss: 78988kB, arquivo-rss: 0kB

Aqui estão os erros do Drupal em mais detalhes. A configuração do Drupal não foi alterada - apenas o iptables foi alterado afaik:

1. Falha no status da solicitação HTTP Seu sistema ou configuração de rede não permite que o Drupal acesse páginas da web, resultando em funcionalidade reduzida. Isso pode ser devido à configuração do seu servidor da web ou às configurações do PHP e deve ser resolvido para baixar informações sobre atualizações disponíveis, buscar feeds do agregador, fazer login via OpenID ou usar outros serviços dependentes da rede. Se você tem certeza de que o Drupal pode acessar páginas da web, mas você ainda está vendo esta mensagem, você pode adicionar $ conf ['drupal_http_request_fails'] = FALSE; na parte inferior do seu arquivo settings.php.

2. Erro de serviço das chaves da API do Mollom As chaves da API do Mollom não puderam ser verificadas. Por favor, tente novamente mais tarde. Esse problema impede que os membros se registrem em nosso site ou postem comentários.

Aqui estão as regras atuais (problemáticas) do iptables. (BTW, a porta 2222 era originalmente a porta SSH. Agora alguém alterou o SSH de volta para a porta 22, mas aparentemente deixou a porta 2222 aberta no iptables, mas isso é um problema separado):

# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
fail2ban-apache-overflows  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
fail2ban-apache  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
DROP       all  --  69.30.238.162        0.0.0.0/0           
DROP       all  --  121.205.199.140      0.0.0.0/0           
DROP       all  --  137.117.129.250      0.0.0.0/0           
DROP       all  --  117.26.252.26        0.0.0.0/0           
DROP       all  --  112.111.165.71       0.0.0.0/0           
DROP       all  --  175.42.95.145        0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 state NEW,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:2222 state NEW,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 state NEW,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:2222

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:80 state ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:2222 state ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:443 state ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:2222

Chain fail2ban-apache (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-apache-overflows (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0  

Minha pergunta: como não sei nada sobre a configuração do fail2ban, quais são as alterações mínimas que posso fazer para restaurar a funcionalidade básica (especialmente para serviços de saída, já que esses parecem ser o principal problema)?

ATUALIZAÇÃO: com base na resposta de Michael Kjörling, aqui estão as regras atualizadas do iptables. Está correto?

# cat iptables.modified.rules 
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*security
:INPUT ACCEPT [60016:6837978]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*raw
:PREROUTING ACCEPT [72450:7582406]
:OUTPUT ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*nat
:PREROUTING ACCEPT [7899:447793]
:INPUT ACCEPT [7787:439884]
:OUTPUT ACCEPT [5818:4357219]
:POSTROUTING ACCEPT [5818:4357219]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*mangle
:PREROUTING ACCEPT [72450:7582406]
:INPUT ACCEPT [72450:7582406]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [60450:61970107]
:POSTROUTING ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun  1 21:26:17 2013
*filter
:INPUT DROP [44:2387]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [78:41503]
:fail2ban-apache - [0:0]
:fail2ban-apache-overflows - [0:0]
-A INPUT -s 69.30.238.162/32 -j DROP
-A INPUT -s 121.205.199.140/32 -j DROP
-A INPUT -s 137.117.129.250/32 -j DROP
-A INPUT -s 117.26.252.26/32 -j DROP
-A INPUT -s 112.111.165.71/32 -j DROP
-A INPUT -s 175.42.95.145/32 -j DROP
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache
-A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m state --state RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A fail2ban-apache -j RETURN
-A fail2ban-apache-overflows -j RETURN
COMMIT
# Completed on Sat Jun  1 21:26:17 2013
    
por MountainX 01.06.2013 / 22:30

1 resposta

3

O fato de o assassino da OOM estar funcionando pode estar relacionado aos seus problemas, e definitivamente não o ajuda. Aumente a troca ou instale mais RAM. Se nada mais, você certamente não quer que seu servidor ande por aí matando processos; quando o killer da OOM do kernel começa a procurar por vítimas, é ruim .

Dito isso, noto que você, por exemplo, não permita em ICMP ou DNS sobre UDP (ou TCP). Um host bem-comportado na Internet precisa aceitar pacotes ICMP e, se você estiver executando um servidor DNS, precisará abrir a comunicação via TCP e UDP para a porta 53 para que ele funcione.

Uma alteração mínima que deve aproximar você de uma configuração razoável sem afetar quais serviços estão disponíveis a terceiros pode ser simplesmente

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m state --state RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT

(Não testado, então a sintaxe da linha de comando pode estar um pouco fora, mas essa é a essência disso.)

Normalmente, por razões de desempenho, tais regras podem estar no topo da cadeia iptables em questão. Estes permitirão em qualquer resposta a qualquer saída que o servidor tenha iniciado sobre TCP ou UDP, bem como mensagens ICMP. Observe que o ICMP é crucial para um host bem-comportado na Internet; se você quiser bloquear, e. ping , você pode usar uma regra mais muito para bloquear solicitações de eco ICMP e nada mais, mas quando você tem algo tão conhecido como a porta 80 aberta que não compra muito em você prática e torna a resolução de problemas mais complicada.

As regras da cadeia de saída também são todas redundantes, pois não fazem nada que a política da cadeia não faça. Apenas iptables -F OUTPUT para removê-los; eles complicam a configuração e custam um pouco de desempenho para cada pacote de saída sem fornecer qualquer benefício. Eles também especificam a maioria das portas de origem privilegiadas, que quase garantidamente não correspondem ao que você deseja.

    
por 01.06.2013 / 22:56