nachopro yendo de la cama a la compu…

6May/100

¿Firewall o no?

Hace un buen tiempo estoy a cargo de unos servidores, por así decirlo, y tuve que poner manos a las obras en cuanto a la seguridad de los mismos.

Según un referente en la materia (?), Ángel Freire, y con quién coincido: Es mejor controlar qué servicios se brindan y dónde escuchan, que desconocerlos y a causa de eso cargar reglas mediante iptables a nuestro querido net filter.

Pero algo se escapa, qué pasa con los ataques por fuerza bruta a servicios vitales como SSH? Bien, a continuación mi solución.

Una vez que decidimos qué servicios brindaremos, tenemos que ver que escuchen donde realmente lo queremos.

~ # netstat -an | grep LISTEN
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:1978          0.0.0.0:*               LISTEN

Aquí vemos varios servicios, cada uno de ellos escuchando en distintas interfaces y no por casualidad. Las bases de datos (3306, MySQL y 1978, TokyoTyrant) escuchando en loopback, localhost o como le quieran decir ;) y por otro lado los servicios públicos (8000, 80, 25 y 22) escuchando tanto en loopback como el resto de las interfaces :)

Si tuviésemos todo a la bartola, necesitaríamos bloquear, por ejemplo, el acceso a MySQL y Tokyo con unas reglas de iptables. No es más lindo así?

Bien, es más lindo así :P ahora, qué pasa con el puerto 22 de SSH? Necesitamos que escuche en las interfaces externas, si no no tendría sentido que exista, pero al hacerlo está suceptible a los inescrupulosos intentos de cientos y miles de idiotas por hacerse del control de nuestros servidores.

Un buen día me harté de ver miles y miles de ráfagas de intentos de autenticación a mi SSH, gestionados por scripts, con usuarios básicos o clásicos de sistemas Unix.

¿La solución? Usar net filter (mediante reglas de iptables) cuando se lo necesita:

#!/bin/bash
# Borramos todas las reglas existentes
iptables -F

# Permitimos la comunicación desde nuestra casa
iptables -A INPUT  -i eth0 -s DNS_DE_MI_CASA -d IP_DE_MI_SERVIDOR -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -s IP_DE_MI_SERVIDOR -d DNS_DE_MI_CASA -p tcp --sport 22 -j ACCEPT

# Permitimos la comunidación desde nuestro trabajo
iptables -A INPUT  -i eth0 -s DNS_DE_MI_TRABAJO -d IP_DE_MI_SERVIDOR -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -s IP_DE_MI_SERVIDOR -d DNS_DE_MI_TRABAJO -p tcp --sport 22 -j ACCEPT

# Denegamos el resto de accesos
iptables -A INPUT  -i eth0 -s 0/0 -d IP_DE_MI_SERVIDOR -p tcp --dport 22 -j DROP

Con un script como ese, sólo permitimos que al puerto 22 lleguen peticiones de nuestros dominios dinámicos ;) Lo cual es muy cómodo, aunque en el caso de tener IPs dinámica, tendrán que ejecutar este script, sea mediante cron u otro método, para que las mismas sean actualizadas con las reglas de iptables.

En fin, hasta la próxima!

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment


Before you submit form:
Human test by Not Captcha

No trackbacks yet.

Pages

Categories

Blogroll

Archive

Meta