martes, 12 de junio de 2012

Servicios IPv6 y firewalls

Hace tiempo las distintas distribuciones de Linux poseen soporte para IPv6, lo que incluye generar interfaces de red con direcciones IPv6 y servicios escuchando en dichas direcciones.

Por ejemplo, usando netstat podemos revisar los servicios TCP y UDP escuchando en IPv6:


$ sudo netstat -6nlptu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::139                  :::*                    LISTEN      1140/smbd       
tcp6       0      0 fe80::bc47:21ff:fe67:53 :::*                    LISTEN      1509/dnsmasq    
tcp6       0      0 :::22                   :::*                    LISTEN      1142/sshd       
tcp6       0      0 ::1:631                 :::*                    LISTEN      1219/cupsd      
tcp6       0      0 ::1:25                  :::*                    LISTEN      2275/exim4      
tcp6       0      0 :::445                  :::*                    LISTEN      1140/smbd       
tcp6       0      0 :::12865                :::*                    LISTEN      2305/netserver  
udp6       0      0 fe80::bc47:21ff:fe67:53 :::*                                1509/dnsmasq    
udp6       0      0 :::55594                :::*                                1188/avahi-daemon: 
udp6       0      0 :::5353                 :::*                                1188/avahi-daemon: 

Otra forma sería realizar un escaneo de puertos. Por ejemplo:

$ sudo nmap -6 -P0 ::1
Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-12 10:26 ART
Nmap scan report for ip6-localhost (::1)
Host is up (0.00026s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds


Esto puede resultar en un gran problema de seguridad si no fue tenido en cuenta al configurar los firewalls, sobre todo si hablamos de servidores conectados a internet.

Una forma de revisar si las reglas firewall para IPv6 están siendo cargadas es:

$ sudo chkconfig --list ip6tables

ip6tables       0:off   1:off   2:on    3:on    4:on    5:on    6:off


En este caso vemos que el servicio está activado. Si no fuera así, puede activarse con:

$ sudo chkconfig ip6tables on

El siguiente paso es revisar qué reglas de firewall hay configuradas para IPv6:

sudo ip6tables -n -L -v

Si las reglas cargadas son correctas y proveen una protección para el equipo, aquí terminó nuestro trabajo (aunque sería bueno reiniciar el servidor para asegurarnos que todo quedó correctamente configurado). Además, si el equipo es un servidor, y hay otros administradores, puede ser que haya reglas cargadas, sean correctas, pero hayan sido cargadas "a mano", y se pierdan al reiniciar el equipo.

Si no hay reglas cargadas, una forma rápida de realizar una configuración "de emergencia" para que el kernel ignore todos los paquetes IPv6 que lleguen es:

$ sudo ip6tables -P INPUT DROP
$ sudo ip6tables -P FORWARD DROP



Esta configuración eliminará todos los paquetes, inclusive las conexiones creadas localmente (lo que pude causar problemas... para realizar una correcta configuración, hay que aprender a usar iptables!) y los paquetes de respuesta de conexiones IPv6 creadas a otros equipos...

Estas modificaciones que introdujimos al firewall se perderán al reiniciar el equipo. Para guardarlas, de manera que se apliquen automáticamente al arrancar el equipo, debemos ejecutar:

$ sudo service ip6tables save
$ sudo service ip6tables restart

No hay comentarios: