Deshabilitar IGMP snooping

En un servidor que tengo he visto que UFW bloquea tráfico multicast generado en mi máquina. Los logs son así:

Aug 30 13:27:28 server kernel: [88169.475551] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:10:bf:48:7e:e3:4a:08:00 SRC=0.0.0.0 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2

Esto se evita poniendo deshabilitando lo siguiente:

echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping

Para que sea permanente el cambio, debemos instalar aptitude install sysfsutils y añadir la siguiente línea al archivo /etc/sysfs.conf:

devices/virtual/net/br0/bridge/multicast_snooping = 0

Fuentes: http://sha.ddih.org/2011/08/18/the-case-of-the-mystery-igmp-query-request

http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge#Snooping

http://unix.stackexchange.com/questions/25382/make-changes-to-sys-persistent-between-boots

Limitar el número de conexiones por IP

Ofrezco un servicio en uno de mis servidores al que conectan clientes. Estos clientes son programados por sus dueños y no todos realizan una única conexión, como debería ser. Un día me encontré con un mismo cliente que estaba conectado con 10 clientes, cosa innecesaria.

Para evitar este problema, he limitado a 2 conexiones (dar una de margen, por si acaso) al puerto del servicio en cuestión:

iptables -I INPUT -p tcp --syn --dport 12345 -m connlimit --connlimit-above 2 -j REJECT

Fuente: http://romanr.info/iptables/connlimit/

Si usamos UFW podemos editar el archivo /etc/ufw/before.rules y añadir la siguiente entrada antes de COMMIT:

-A ufw-before-input -p tcp --syn --dport 12345 -m connlimit ! --connlimit-above 2 -j ACCEPT

Fuente: http://florent.clairambault.fr/limiting-number-of-connections-per-ip-with-ufw

UFW: log fuera de syslog

UFW por defecto loguea en el archivo syslog. Para hacer que loguee en otro archivo que queramos en lugar de syslog, crearemos el archivo /etc/rsyslog.d/20-ufw.conf y dentro escribiremos lo siguiente:

# Log kernel generated UFW log messages to file
:msg,contains,"[UFW " /var/log/ufw.log

# Uncomment the following to stop logging anything that matches the last rule.
# Doing this will stop logging kernel generated UFW log messages to the file
# normally containing kern.* messages (eg, /var/log/kern.log)
& ~

Si queremos que los logs roten para que no ocupen tanto, crearemos el archivo /etc/logrotate.d/ufw con el siguiente contenido:

/var/log/ufw.log
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog reload > /dev/null
endscript
}

Fuente: http://vincom2.wordpress.com/2010/04/07/logging-ufw-to-a-seperate-logfile/

Configurar un firewall de manera simple con ufw

He encontrado este programa para gestionar el firewall y me ha parecido muy bueno. Este es ufw.

Para instalarlo (está en Squeeze y Sid), aptitude install ufw.
Para ponerlo en funcionamiento a través de SSH, haremos lo siguiente:

ufw default deny
ufw logging on
ufw allow ssh/tcp
ufw enable

Si no lo hacemos por SSH y no queremos abrir ese puerto, omitiremos la línea ufw allow ssh/tcp

Para abrir rangos de puertos:

ufw allow proto tcp to any port 1000:2000

Para permitir un rango de IPs:

ufw allow from 1.2.0.0/16 to any port 1234

Bloquear una IP a un determinado puerto:

ufw insert 1 deny from 1.2.3.4 to any port 1234

El insert 1 es para que la regla DENY vaya antes que la que permite la conexión al puerto 1234.

Hay ejemplos en español en la Wikipedia: http://es.wikipedia.org/wiki/Uncomplicated_Firewall
O en inglés: https://help.ubuntu.com/community/UFW