Transparencias:
"Infraestructura de comunicaciones segura con SSH"
Datos del Evento:
En la Facultad de Ciencias Exactas y Naturales y Agrimensura - Universidad Nacional del Nordeste Avenida Libertad 5460.
Para participar debes inscribirte aquí.
Rfeferencias del Ponente:
http://www.linkedin.com/in/dardovaldez
Resumen de temas de la charla:
- Introducción a SSH,
- Tunning inicial,
- Acceso no interactivo desde Win (putty con certificados)
- Bloquear brute forcing: Fail2ban, Denyhosts, Iptables
- Portknocking
- Creación de certificados y copia entre los hosts de la red de administración,
- Ejemplos de usos prácticos (scripts, comandos remotos, etc.),
- Preguntas y Final.
Y en stand-by se guarda un par de comentarios sobre segurización en capa 2/3 por si alguien pregunta sobre segurización externa a la herramienta.
Introducción a SSH:
http://es.wikipedia.org/wiki/Secure_Shell
Tunning inicial
- Restricción a IPs preestablecidas únicamente,
- Cambio de puerto por defecto,
- Impedir login de root,
- Login solo vía certificados, y
- Bloqueo de login interactivo
Extraído de "Hardening Linux Web Servers":
Edit /etc/ssh/sshd_config in your favorite editor and change the following lines.
# ListenAddress defines the IP address ssh will
#ListenAddress 0.0.0.0 -> ListenAddress 10.0.2.10
#Only accept SSH protocol 2 connections
#Disable root login
PermitRootLogin no
# Disable password authentication(you will have to use public/private keys)
#PasswordAuthentication yes -->
PasswordAuthentication no
#Disable allowing all system accounts to ssh in,
AllowUsers userName1 userName2 userName3
# Change Default port
After making the changes, restart the SSH server for the changes to take affect.
- "Seguridad para SSH – Cambio del puerto de conexión por defecto"
El cambio de puerto del servidor SSH es util cuando se publica el servicio hacia redes inseguras como Internet o cuando el puerto/servicio es accesible desde una y/o varias redes internas. Tiene poca utilidad si solo se usa SSH dentro de una red de administración a la cual solo tienen acceso unas pocas IPs autorizadas y puede originar complicaciones con herramientas de administración que utilizan SSH en el puerto 22 (Nagios, etc.).
- "Asegurar SSH – Crear usuario en grupo wheel y restringir acceso root"
- Impedir login interactivo
How to disable certain user remote ssh login?
Edit /etc/ssh/sshd_config:
AllowGroups sshers
Now create the group sshers and add only the users that you want to allow to ssh into your box.
Acceso no interactivo desde Win (putty con certificados)
- Login con Putty desde Windows (basado en certificados, incluye screenshots en el paso a paso): "Key-Based SSH Logins With PuTTY" y "Configure Putty To Support Password-less SSH Login"
Prenting Brute Force SSH
Preventing SSH Dictionary Attacks With DenyHosts
Iptables
Another approach that is more generic (can be used with any port/service) is to use the IPT_RECENT module that comes with netfilter:
For example I have the following lines in my iptables config:
iptables -N SSH_CHECK
# here come checks for integrity, portscans(psd) etc
# here allow related traffic
iptables -A INPUT -p tcp --dport 22 -m state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
# here you log it
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j LOG --log-prefix "SSH Flood: " --log-level info -xaeth
# dropping
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
which basically kick-bans the source IP for 60 seconds if more than 4 connections are attempted in a 60 second limit. I've found this to be 100% effective.
Personally i think the iptables way is the most optimal way to go, even you understand the OSI layers you will agree with me, with iptables the packet will be dropped at layer 4, but with denyhosts it will traverse the path up to layer 7 before a decision can be made.
Portknocking
Knockd
"knockd reads all knock/event sets from a configuration file. Each knock/event begins with a title marker, in the form [name], where name is the name of the event that will appear in the log. A special marker, [options], is used to define global options.
Example #1:
This example uses two knocks. The first will allow the knocker to access port 22 (SSH), and the second will close the port when the knocker is complete. As you can see, this could be useful if you run a very restrictive (DENY policy) firewall and would like to access it discreetly.
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 10
tcpflags = syn
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
- Portknocking (Esdebian.org) MUY BUENO
- Configuración de Knockd y knocking desde Windows
Creación de certificados y copia entre los hosts de la red de administración,
- "HOWTO: Conectarse via SSH sin password"
Ejemplos de usos prácticos (scripts, comandos remotos, etc.)
Ir a la charla...
Cualquier comentario, corrección y sugerencia serán bienvenidos.
Editado 4-4-09:
- Más seriedad.
- Referencias del ponente.
Editado 14-4-09:
- Denyhosts, alternativa a fail2ban.
- Método optimo de filtrado en prevención de brute forcing.
Editado 25-4-09
- Corregidos un par de errores ortográficos.
- Corregido el apartado de portknocking (había un comando de bloqueo solamente)
2 comentarios:
Hola Participe en la flisol, Hable despues de Voz (Joomla).
Me intereso mucho tu charla, Lastima que no la pude escuchar entera :-(.
Puse un link en la pagina de la Flisol para que todos podamos ver este material.
Eso es todo. Espero no tenerle tanto miedo al SSH y aplicarlo en la empresa que laburo.
Pd: Che no se puede editar hay que borrar y volver a escribir :-)
Publicar un comentario