sábado, 4 de abril de 2009

Material para charla Ssh, Flisol 2009 Corrientes

Bueno, inicié por fin la preparación de la charla sobre SSH que planeo dar en Flisol Ctes. 2009 (si es que todavía tengo lugar), la tardanza se debió a que estuve trabajando sobre un par de implementaciones a nivel provincial lo que me demandó considerable tiempo por la cantidad de servidores involucrados.

Transparencias:

"Infraestructura de comunicaciones segura con SSH"

Datos del Evento:

El evento se relizará en la ciudad de Corrientes el día 25 de Abril 2009 de 9:30hs a 20hs.

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

# listen on
#ListenAddress 0.0.0.0 -> ListenAddress 10.0.2.10

#Only accept SSH protocol 2 connections

Protocol 2,1 -> Protocol 2

#Disable root login

#PermitRootLogin yes -> PermitRootLogin no
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,

# only allow certain users (space delimited)
AllowUsers userName1 userName2 userName3

# Change Default port

Port 22 -> Port 2200




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

Fail2Ban: Preventing 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

Explicación http://en.wikipedia.org/wiki/Port_knocking

- Portknocking (Esdebian.org) MUY BUENO

- Tutorial muy poco técnico (pero en español)

- Configuración de Knockd y knocking desde Windows

- En SSH: "Add Port Knocking to SSH for Extra Security"


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:

dubchristian dijo...
Este comentario ha sido eliminado por el autor.
dubchristian dijo...

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 :-)