Regras Iptables não são mais aceitas

4

Eu instalei o Ubuntu Server 64-bit 14.04 há uma semana. Ele funcionou bem por um a vários dias, depois do nada, o iptables ficou sem sentido (notei que o FTP e os outros estão inativos). Apenas portas 22, 25 e amp; 80 estão abertos. iptables -S parece bem, mas por algum motivo não é mais aceito. Flush & amp; todas as portas não estão abertas, apenas 22, 25 & amp; 80. network-manager não está instalado (verifiquei isso também). Eu não tenho outro firewall ... não entendi?

/etc/network/interfaces :

auto lo
iface lo inet loopback

auto em1
iface em1 inet static
        address XX.15.191.XXX
        netmask 255.255.255.240
        gateway XX.15.191.XXX
        dns-nameservers XX.105.28.XX

pre-up iptables-restore < /etc/iptables.rules
post-down iptables-restore > /etc/iptables.downrules

/ etc / hosts

127.0.0.1       localhost
127.0.1.1       MY-SERVER.ph.cox.net   MY-SERVER
XX.15.191.XXX   mysite.com

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

/etc/hostname :

MY-SERVER

/etc/resolv.conf (não definido seja meu, autoset se eu entendi correto):

nameserver XX.105.28.XX

/etc/iptables.rules

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [19969:30829963]# <--- not sure where this came from?
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --mask 255.255.255.255 --rsource
-A INPUT -m recent --update --seconds 90 --hitcount 4 --rttl --name SSH --mask 255.255.255.255 --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
#-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A INPUT -p tcp -d 0/0 -s 0/0 --dport 5900 -j ACCEPT
#-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A INPUT -p udp -m udp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A INPUT -p icmp -m limit --limit 10/sec -j ACCEPT
-A FORWARD -p icmp -m limit --limit 10/sec -j ACCEPT
-A INPUT -j DROP
-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
#-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT

Este é o único dmesg perceptível após a inicialização, mas não parece relacionado porque estou no IP4 e, além disso, funciona por 1 a 3 dias.

IPv6: ADDRCONF(NETDEV_UP): em1: link is not ready

dmesg | grep eth0 :

[    3.787227] e1000e 0000:00:19.0 eth0: registered PHC clock
[    3.787228] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) c8:60:00:24:ea:cc
[    3.787229] e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000 Network Connection
[    3.787281] e1000e 0000:00:19.0 eth0: MAC: 10, PHY: 11, PBA No: FFFFFF-0FF
[    5.219089] systemd-udevd[157]: renamed network interface eth0 to em1

sudo lsof -i -s tcp: listen (saída conforme solicitado)

sshd     960        root    3u  IPv4    564      0t0  TCP *:ssh (LISTEN)
sshd     960        root    4u  IPv6    566      0t0  TCP *:ssh (LISTEN)
mysqld  1011       mysql   12u  IPv4    602      0t0  TCP localhost:mysql (LISTEN)
exim4   2001 Debian-exim    3u  IPv4  11966      0t0  TCP localhost:smtp (LISTEN)
exim4   2001 Debian-exim    4u  IPv6  11967      0t0  TCP localhost:smtp (LISTEN)
exim4   2001 Debian-exim    5u  IPv4  11968      0t0  TCP mysite.com:smtp (LISTEN)
searchd 2025        root    7u  IPv4  14510      0t0  TCP *:9312 (LISTEN)
proftpd 2041     proftpd    2u  IPv6  11974      0t0  TCP *:ftp (LISTEN)
apache2 2103        root    4u  IPv6  11992      0t0  TCP *:http (LISTEN)
apache2 3882    www-data    4u  IPv6  11992      0t0  TCP *:http (LISTEN)
apache2 4230    www-data    4u  IPv6  11992      0t0  TCP *:http (LISTEN)
apache2 etc, etc...

sudo lsof -i -s tcp: listen (1 semana depois que o ftp funcionou bem, a porta foi subitamente bloqueada)

sshd     960        root    3u  IPv4    564      0t0  TCP *:ssh (LISTEN)
sshd     960        root    4u  IPv6    566      0t0  TCP *:ssh (LISTEN)
mysqld  1011       mysql   12u  IPv4    602      0t0  TCP localhost:mysql (LISTEN)
exim4   2001 Debian-exim    3u  IPv4  11966      0t0  TCP localhost:smtp (LISTEN)
exim4   2001 Debian-exim    4u  IPv6  11967      0t0  TCP localhost:smtp (LISTEN)
exim4   2001 Debian-exim    5u  IPv4  11968      0t0  TCP mysite.com:smtp (LISTEN)
searchd 2025        root    7u  IPv4  14510      0t0  TCP *:9312 (LISTEN)
apache2 2103        root    4u  IPv6  11992      0t0  TCP *:http (LISTEN)
apache2 4151    www-data    4u  IPv6  11992      0t0  TCP *:http (LISTEN)
apache2 4710    www-data    4u  IPv6  11992      0t0  TCP *:http (LISTEN)
apache2 etc, etc...

sudo nmap -O mysite.com (1 semana depois que o ftp funcionou bem, a porta foi subitamente bloqueada)

20/tcp   closed ftp-data
21/tcp   closed ftp
22/tcp   open   ssh
25/tcp   open   smtp
53/tcp   closed domain
80/tcp   open   http
143/tcp  closed imap
443/tcp  closed https
993/tcp  closed imaps
3306/tcp closed mysql
4444/tcp closed krb524
5900/tcp closed vnc

sudo iptables-save (saída conforme solicitado)

# Generated by iptables-save v1.4.21 on Tue May 27 20:39:05 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17351423:29122270850]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --mask 255.255.255.255 --rsource
-A INPUT -m recent --update --seconds 90 --hitcount 4 --rttl --name SSH --mask 255.255.255.255 --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A INPUT -p udp -m udp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A INPUT -p icmp -m limit --limit 10/sec -j ACCEPT
-A INPUT -j DROP
-A FORWARD -p icmp -m limit --limit 10/sec -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Tue May 27 20:39:05 2014

ifconfig (saída conforme solicitado)

em1       Link encap:Ethernet  HWaddr c8:60:00:24:ea:cc  
          inet addr:XX.15.191.XXX  Bcast:XX.15.191.XXX  Mask:255.255.255.240
          inet6 addr: fe80::ca60:ff:fe24:eacc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19212799 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24791186 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6488896548 (6.4 GB)  TX bytes:29719279878 (29.7 GB)
          Interrupt:20 Memory:f7d00000-f7d20000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4415657 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4415657 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:573695629 (573.6 MB)  TX bytes:573695629 (573.6 MB)
    
por TrailDEX 20.05.2014 / 08:05

1 resposta

3

Ok, acho que não podemos descobrir isso de uma só vez. Então eu vou editar minha resposta enquanto vamos. Os dados até agora não indicam nenhuma razão pela qual iptables não funcionaria. Olhando para as linhas (potencialmente) relevantes da saída lsof que pedi e você forneceu, você deve ver apenas as portas que você mencionou:

  

Selecione apenas portas como 22, 25 & amp; 80 estão abertas

aberto e outros fechados. No entanto, você deve ver aberto 21, 22, 80 e 9312. Não há serviços escutando nas outras portas (versão reduzida do sudo lsof -i -s tcp:listen output):

sshd     960        root    3u  IPv4    564      0t0  TCP *:ssh (LISTEN)
sshd     960        root    4u  IPv6    566      0t0  TCP *:ssh (LISTEN)
exim4   2001 Debian-exim    5u  IPv4  11968      0t0  TCP mysite.com:smtp (LISTEN)
searchd 2025        root    7u  IPv4  14510      0t0  TCP *:9312 (LISTEN)
proftpd 2041     proftpd    2u  IPv6  11974      0t0  TCP *:ftp (LISTEN)
apache2 2103        root    4u  IPv6  11992      0t0  TCP *:http (LISTEN)
apache2 ????    www-data    4u  IPv6  11992      0t0  TCP *:http (LISTEN)

Tudo bem, ter isso estabelecido (ou seja, eles estão abertos, mas nada está escutando). Devemos investigar como você está tentando determinar se a porta está aberta ou não. A maneira normal é fazer uma corrida nmap do mundo exterior. O Nmap também será capaz de distinguir - dependendo das circunstâncias - entre aberto e filtrado e fechado.

Uma coisa que me veio à mente é que, se você usar tcpwrappers, /etc/hosts.deny e /etc/hosts.allow também terão um papel sem iptables interferindo.

Simplificação possível

Além disso, suas regras podem ser simplificadas.

Substituir:

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

por:

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

, a menos que você pretenda usar o rastreamento de conexão na estrada.

Todas as regras OUTPUT ( filter ) podem ser removidas, pois não fazem nada desde que a política dessa cadeia esteja definida como ACCEPT .

Você provavelmente deseja adicionar uma regra para o DNS no UDP, já que o UDP é o padrão. Ficaria assim:

-A INPUT -p udp -m udp --dport 53 -j ACCEPT

Agora, todos os nomes de portas podem ser colocados em um formato mais legível, usando os nomes de /etc/services e, portanto,

-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT # <-- added this one
-A INPUT -p udp -m udp --dport 5900 -j ACCEPT

pode ser condensado até o mais de duas linhas:

-A INPUT -p tcp -m multiport --dports ftp-data,ftp,ssh,smtp,domain,www,imap2,https,imaps,mysql,4444,5900,9312
-A INPUT -p udp -m multiport --dports domain,5900

com ajuda do módulo multiport

Todas as regras em um formato adequado para iptables-restore se tornam:

*filter
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A INPUT -m recent --update --seconds 90 --hitcount 4 --rttl --name SSH -j DROP
-A INPUT -p tcp -m multiport --dports ftp-data,ftp,ssh,smtp,domain,www,imap2,https,imaps,mysql,4444,5900,9312
-A INPUT -p udp -m multiport --dports domain,5900
-A INPUT -p icmp -m limit --limit 10/sec -j ACCEPT
-A INPUT -j DROP
-A FORWARD -p icmp -m limit --limit 10/sec -j ACCEPT
COMMIT

Piping essas regras em uma invocação de iptables-restore --test irá mostrar-lhe quaisquer erros de sintaxe, a propósito. Isso geralmente é muito útil para todos os casos em que você digita suas regras em um formato adequado para iptables-restore ou iptables-apply .

Bônus: Variações

Você pode usar ipset(8) ( apt-get install ipset ) para manter a lista de portas também. Isso também pode ser usado para outras coisas, como bloqueio de áreas geográficas inteiras, se você tiver um conjunto de especificações líquidas (CIDR) para essas áreas. Veja isso .

É claro que você também pode combinar com conjuntos de IPs como combinações de endereço de origem e destino e endereço / porta. Para obter mais informações, consulte o manual ( man ipset ) e confira as descrições set module e SET (descendente do anterior) em man iptables-extensions .

Por último, mas não menos importante: se você tiver conectividade IPv6, talvez queira adicionar o prefixo -6 e -4 , respectivamente, antes das linhas nas quais as regras específicas do protocolo são fornecidas. Dessa forma, você pode usar um único arquivo para armazenar suas regras para ip6tables-restore e iptables-restore . Regras compartilhadas entre ambos devem não conter o prefixo.

Por exemplo, as regras condensadas no momento desta escrita podem ser usadas para IPv4 e IPv6. Normalmente, apenas endereços, máscaras de rede e essas coisas exigirão que você divida as regras entre IPv4 e IPv6. Além disso, os conjuntos de IPs podem ser IPv4 (padrão) ou IPv6 ( ipset create foo family inet6 ), o que significa que tais conjuntos, devido aos nomes diferentes, também exigirão regras de divisão.

Você também perguntou implicitamente:

:OUTPUT ACCEPT [19969:30829963]# <--- not sure where this came from?

os números entre parênteses são os contadores da cadeia. Ao usar iptables-restore (ou sua contraparte IPv6), elas são opcionais. Antes dos dois pontos é o número de pacotes, depois o número de bytes. Se você executar iptables-save com a opção -c , receberá os contadores correspondentes por regra.

    
por 0xC0000022L 28.05.2014 / 15:08