Una de las desventajas de usar un VPS en vez de un hosting compartido es que tienes que preocuparte por la seguridad de la red. Como dejes puertos abiertos sin control te van a entrar hasta la cocina. Con todas las distribuciones de Linux viene iptables pero hay que decirlo todo, la sintaxis de iptables es un auténtico coñazo.

Por suerte hay alternativas. Hay varios asistentes de fácil configuración que se encargan de lidiar con las reglas y las excepciones del firewall por ti. Que yo conozca CSF y USW pero éste último tiene una configuración mas complicada.

Config Server Firewall

CSF además de gestionar un firewall en tu máquina es capaz de detectar ataques de fuerza bruta al login, intrusiones y ataques DDOS. Es compatible con muchas aplicaciones como servidores de correo, ftp, web, etc.. para reforzar su seguridad.

Instalación

Instalar CSF es muy fácil. Acuerdate de desinstalar cualquier otro firewall que pudiese estar funcionando antes.

Descárgate la ultima versión:

	wget http://configserver.com/free/csf.tgz

Descomprímelo y entra al directorio que se crea:

	tar -xvf csf.tgz
    cd csf

Lanza el instalador:

	sh install.sh

En el caso de que tuvieses que desinstalarlo estos son los pasos:

	cd /etc/csf
    sh uninstall.sh

Configuración

Toda la configuración de CSF se guarda en un solo archivo que puedes editar:

	nano /etc/csf/csf.conf

Cada vez que hagas un cambio tienes que reiniciar CSF para que regenere las reglas de iptables.

	csf -r

a) Abrir y cerrar puertos

Dependiendo que servicios vayas a instalar en tu máquina tendras que dejar abiertos unos puertos u otros. CSF, por defecto, crea una lista de puertos tanto de entrada como de salida que cubre un catalogo amplio.

	TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"

	TCP_OUT = "20,21,22,25,53,80,110,113,443"

	UDP_IN = "20,21,53"

	UDP_OUT = "20,21,53,113,123"

En la Wikipedia puedes consultar una lista muy completa de puertos por si tienes duda de cual corresponde a cada programa. Lo básico es que la máquina permita conectarse por SSH y que pueda responder al PING y a las peticiones DNS. Estos son los puertos que debes dejar abiertos:

	TCP_IN: 22,53
	TCP_OUT: 22,53,80,113,443
	UPD_IN: 53
	UPD_OUT: 53,113,123

Para un servidor web, sea Apache o Nginx necesitaras:

	TCP_IN: 80,443

Si quieres acceder por FTP (aunque mejor seria usar SFTP por seguridad) esta es la configuración:

	TCP_IN: 20,21
	TCP_OUT: 20,21
	UPD_IN: 20,21
	UPD_OUT:20,21

Las bases de datos MySQL usan el puerto 3306 pero solo hay que dejarlo abierto si vas a acceder desde otra máquina:

	TCP_IN: 3306
	TCP_OUT: 3306

Y para el servidor de correo:

	TCP_IN: 25,110,143,587,993,995
	TCP_OUT: 25,110

b) Más configuraciones de seguridad

Además de lo de los puertos en el fichero de configuración vienen explicadas en los comentarios todas las acciones que puede ejecutar CSF. Estas son las más básicas:

  • ICMP_IN permite activar y desactivar si queremos que el VPS responda a los PINGs.

  • ICMP_IN_LIMIT establece la cantidad de PINGs por segundo que permitirá.

  • DENY_IP_LIMIT establece el numero de IPs que mantendra en la lista de bloqueadas. Ojo con esto porque si la lista es muy larga el rendimiento bajará. Pon un límite normal.

  • DENY_TEMP_IP_LIMIT marca el tiempo que mantendra el bloqueo.

  • PACKET_FILTER rechaza los paquetes de datos no validos o no solicitados.

  • CONNLIMIT limita el numero de conexiones concurrentes en un puerto.

  • PORTFLOOD limita el numero de conexiones en un intervalo de tiempo a un puerto en concreto.

c) Guardar los cambios

Una vez hayas terminado la configuración guarda el archivo csf.conf y reinicia el servicio csf -r.

A pesar de esto el firewall no funcionará hasta que en el archivo cambies el valor de TESTING a 0. CSF tiene dos medidas de seguridad por si te equivocas: una es agregar tu IP al archivo csf.allow para que no se te apliquen las reglas del firewall y la otra es darte 5 minutos de gracia hasta que se activa la configuración.

Comprobación

El servidor ya está algo mas protegido que antes, solo queda comprobar si está funcionando bien. Puedes probar puerto a puerto haciendo telnet o usar un scanner online como este: http://www.portcheckers.com/port-scanner

Escaneo de puertos