Professional Documents
Culture Documents
IT
Manual de referencia
Seguridad en servidores CentOS con Elastix + buenas
prcticas
V. 0.7
Firewall-Iptables
Iptables es el firewall que trae instalado nuestro CentOS , este es muy popular y
uno de los ms utilizados en distribuciones Linux por su robustez y estabilidad. Lo
ideal es que el firewall sea un componente independiente separado de los dems
servidores, pero si no tenemos dicho dispositivo, podemos aplicar estas reglas
directamente sobre nuestro servidor y as establecer polticas con los puertos de
red del mismo.
Lo que haremos por medio de esta herramienta ser habilitar o abrir solo los
puertos que estamos utilizando y cerrar todos los dems brindando as mayor
proteccin al servidor. Es importante el orden de ingreso de las reglas, ya que
iptables va macheando por estas desde la primera que se ingresa, hasta llegar a
la ltima, si no encuentra ninguna coincidencia, la ltima regla que escribiremos
ser cerrar todos los dems puertos, as que si no coincide con los especificados al
principio, no podr gestionar alguna conexin por dicho puerto.
En el ejemplo tomamos que la tarjeta de red por defecto es eth0
Aceptando el trfico SIP:
# iptables -A INPUT -p udp -m udp -i eth0 --dport 5060 -j ACCEPT
Aceptando el trfico IAX2:
# iptables -A INPUT -p udp -m udp -i eth0 --dport 4569 -j ACCEPT
Aceptando el trfico RTP (Suponiendo que no se ha alterado el archivo rtp.conf):
# iptables -A INPUT -p udp -m udp -i eth0 --dport 10000:20000 -j
ACCEPT
Aceptando trfico MGCP (solo aplicar si es que se va a usar. En la mayora de los
casos
no es necesario):
# iptables -A INPUT -p udp -m udp -i eth0 --dport 2727 -j ACCEPT
Aceptando el trfico de mensajera instantnea (si es que se va a acceder desde
fuera):
# iptables -A INPUT -p tcp -i eth0 --dport 9090 -j ACCEPT
Aceptando el trfico del servidor de correo y POP/IMAP:
# iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT
# iptables -A INPUT -p tcp -i eth0 --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp -i eth0 --dport 143 -j ACCEPT
Aceptando trfico Web (HTTP y HTTPS) para poder visitar la interfase administrativa
de Elastix:
0351 Grupo Consultora IT
Gral. Justo Jos de Urquiza 1456 (5000) Crdoba Argentina
+54 (351) 414 7444 | info@0351grupo.com | www.0351grupo.com
# Protocol 2,1
Protocol 2
reinicie el servicio sshd.
4. Usar un Puerto No-Estndar
Por defecto, ssh escucha las conexiones entrantes en el puerto 22. Para que un
hacker determine si ssh se est ejecutando en su mquina, lo ms probable es que
escanee el puerto 22. Un mtodo efectivo es ejecutar ssh en un puerto no-estndar.
Cualquier puerto sin usar funcionar, pero es preferible usar uno por encima del
1024.
Muchas personas escogen el 2222 como un puerto alternativo (porque es fcil de
recordar), de la misma forma que el 8080 es conocido, a menudo, como un puerto
HTTP alternativo. Por esta razn, probablemente esta no es la mejor opcin. De la
misma forma que cualquier hacker escanear el puerto 22, seguramente tambin
escanear el puerto 2222 solo como buena medida. Es mejor escoger cualquier
puerto alto al azar que no sea usado por ningn servicio conocido.
Para hacer los cambios, aada una lnea como esta a su fichero
/etc/ssh/sshd_config:
Fail2ban
Fail2Ban es un analizador de logs que busca intentos fallidos de registro y bloquea
las IPs de donde provienen estos intentos. Se distribuye bajo la licencia GNU y
tpicamente funciona en todos los sistemas que tengan interfaz con un sistema de
control de paquetes o un firewall local.
Fail2Ban tiene una gran configuracin pudiendo, adems, crear reglas para
programas propios o de terceros.
Instalacin y Configuracin
Debemos de Instalar python en nuestro servidor, para ello ejecutamos
[root@elastix]# yum install python*
Descargamos Fail2ban en la carpeta /usr/src desde su pagina en sourceforge
[root@elastix]# cd /usr/src
[root@elastix src]# wget
http://sourceforge.net/projects/fail2ban/files/fail2banstable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2/download
Descomprimimos e instalamos Fail2Ban
[root@elastix
[root@elastix
[root@elastix
[root@elastix
= true
= sshd
= iptables[name=SSH, port=22, protocol=tcp]
sendmail-whois[name=SSH, dest=miMail@mail.com,
sender=fail2ban@mail.com]
logpath = /var/log/secure #indicamos que log controlar
maxretry = 3 #le damos solo tres intentos
bantime = 36000 #tiempo de baneo expresado en segundos
Ahora podemos configurarlo para que lea los registros de Asterisk
cd /etc/fail2ban/filter.d
Creamos el archivo asterisk.conf
vim asterisk.conf
Copiamos estas lneas
# Fail2Ban configuration file
#
#
# $Revision: 250 $
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them
from
# common.local
#before = common.conf
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the
logfile. The
#
host must be matched by a group named "host". The tag
"<HOST>" can
#
be used for standard IP/hostname matching and is only an
alias for
#
(?:::f{4,6}:)?(?P<host>\S+)
0351 Grupo Consultora IT
Gral. Justo Jos de Urquiza 1456 (5000) Crdoba Argentina
+54 (351) 414 7444 | info@0351grupo.com | www.0351grupo.com
TEXT
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>' Wrong password
NOTICE.* .*: Registration from '.*' failed for '<HOST>' No matching peer found
NOTICE.* .*: Registration from '.*' failed for '<HOST>' Username/auth name mismatch
NOTICE.* <HOST> failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' (from <HOST>)
NOTICE.* .*: Host <HOST> failed MD5 authentication for
'.*' (.*)
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is
ignored.
# Values: TEXT
#
ignoreregex =
Con esto le decimos a fail2ban que tiene que controlar eventuales accesos
indeseados en el archivo de registro de Asterisk.
Ahora tenemos que modificar el archivo de configuracin de fail2ban
cd /etc/fail2ban
vim jail.conf
y aadimos al final del archivo de texto estas lneas
[asterisk-iptables]
enabled
filter
action
= true
= asterisk
= iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root@localhost,
sender=fail2ban@pbx.dyndns.org]
logpath = /var/log/asterisk/full
maxretry = 4
bantime = 18000
Para que funcione tenemos que chequear la configuracin del los archivos de
registro de Asterisk:
vim /etc/asterisk/logger.conf
y averiguar que la lnea messages tenga el parmetro que aparece en negrita
messages => notice,debug
"themes/" . $arrConf['mainTheme'];
"var/templates_c/";
"configs/";
"var/cache/";
true;
= true
= loginelastix
= iptables-allports[name=LoginElastix, protocol=all]
sendmail-whois[name=ElastixLogin, dest=root@localhost,
sender=fail2ban@pbx.dyndns.org]
logpath = /var/log/loginElastix.log
maxretry = 3
bantime = 18000
failregex
regex to match the password failures messages in the logfile. The
host must be matched by a group named "host". The tag "<HOST>" can
be used for standard IP/hostname matching and is only an alias for
(?:::f{4,6}:)?(?P<host>\S+)
TEXT
#[Wed, 07 Jul 2010 18:23:19 -0300] Notificacion 002: Password Incorrecto para
el Usuario: 'rerf' desde la ip '192.168.1.12'
failregex = Notificacion 002: Password Incorrecto para el Usuario: .* desde la
ip '<HOST>'
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Podemos probar loguearnos en el elastix para ver si el archivo php esta escribiendo
el loginElastix.log registrando la actividad del loguin. Si todo va bien reiniciamos
fail2ban y probamos:
Service fail2ban restart
Fuentes:
Comunicaciones Unificadas con Elastix, vol. 1 y 2 Edgar Landivar
Elastix a Ritmo de Merengue Alfio Muoz
wiki.centos.org/es/HowTos/Network/SecuringSSH
www.fail2ban.org
blogs.elastix.org/es/2010/01/14/instalacion-de-fail2ban/
www.voztovoice.org/?q=node/135