Prevenir un ataque por diccionario en SSH y Apache

Estoy realizando unas practicas en una “empresa” donde prácticamente no había nada, y cuando digo nada me refiero a que no había instalación de red, ni Wi-Fi, ni Switchs configurados… Nada. Había conexión a Internet y un cortafuegos con pfSense. Era un lugar donde realmente me siento  a gusto, así que enseguida me puse a trabajar para tener algo que administrar ya que soy administrador de sistemas.

A fecha de hoy tenemos configurados 3 Switchs, unos 8 puntos de acceso, un servidor (con DNS, Servidor Web, Radius (a medias…), etc), y un montón de cables repartidos por todo el edificio. Yo era muy feliz en ese entorno, hasta que me avisaron de que ya teníamos IP pública y que podíamos acceder desde “fuera”.

Soy un administrador de sistemas “nuevo” (por no decir novato), es decir, me estreno en este campo y aunque tenga ciertos conocimientos de sistemas operativos, tengo que admitir que me falta mucho conocimiento o más bien experiencia. Además tengo que admitir que soy un poco maniático por la seguridad informática, y hasta ahora, como que no había acceso desde fuera, no me había preocupado mucho.

securidad

El otro día, en mis horas de practicas, mirando una curiosidad de un gráfico del consumo de red de una VLAN en el pfSense me doy cuenta de que han “demasiados” logs, quiero decir, que habían rotado demasiado. Así que hago un cat del último y me doy cuenta de esto:

Extrañado me pregunto ¿Que carajos significa esto?, y hago un grep

Y… una imagen vale más que mil palabras:

ssh

Mirando los usuarios, me doy cuenta de que han probado con usuarios como “a“, “b“, “c“, “a1“, “user1” y digo esto tiene que ser un ataque de diccionario, otra explicación no tiene. Informo del asunto y cambio contraseñas por si las moscas (la contraseña que teníamos no era muy… “compleja”). Todo un fin de semana intentando acceder por SSH, lo más seguro es que fuera algún “netbot” de estos que corren por la red.

Al día siguiente, nos ponemos un poco más serios con el tema de seguridad y empezamos a establecer una política de seguridad (que en realidad aún está en proceso…). Aquí es cuando entra nuestro mejor amigo Fail2Ban, una aplicación que escanea los logs de nuestro sistema y rechaza las IP’s que muestren signos maliciosos como demasiados fracasos de contraseña, etc.

Instalación de Fail2Ban

La instalación es muy sencilla, ya que podemos encontrar este programa en los repositorios de Debian y de toda sus derivadas.

Configurando Fail2ban

Lo primero que vamos hacer es crear una copia de seguridad del fichero de configuración que viene por defecto, por si las moscas:

Ahora podemos modificar tranquilamente el fichero de configuración y lo adaptaremos a nuestras necesidades. Lo primero de todo, modificamos el parámetro background en true para que fail2band corra como un daemon más del sistema.

¿Donde guardaremos los logs generados por Fail2ban? Pues podemos utilizar syslog, o generar un nuevo log. Yo me decidí por la segunda opción.

Lo siguiente es configurar el máximo de intentos que vamos a permitir que una IP intente acceder antes de banear la IP. Por defecto viene 3 intentos, yo lo dejé por defecto, todos nos hemos equivocado dos veces al poner la contraseña.

Luego podemos configurar el tiempo que estará sin accedo dicha IP baneada. Por defecto vienen 600 segundos, que son 10 minutos. Yo he puesto 36000 que son 10 horas.

Existe un parámetro, que nos permite indicar que IP’s no debe prohibir NUNCA, aunque nos equivoquemos 100 veces seguidas. Ese parámetro es uno llamado ignoreip y se puede poner una red entera o IPs.

Hay dos parámetros muy interesantes y que se van a repetir unas cuantas veces. Son los parámetros cmdstart y cmdend, el primero es el comando que ejecutará cuando el servicio de fail2ban sea iniciado, y el segundo cuando el servicio de fail2ban se pare. Podemos ejecutar cualquier comando, yo he visto en un ejemplo que se enviaba un correo electrónico, y me pareció buena idea.

A partir de ahora empezaremos a configurar servicios y usaremos una métrica muy parecida al fichero de configuración de SMB, pondremos el nombre del servicio entre corchetes y debajo toda la configuración. Hasta la fecha, Fail2ban permite configurar FTP, HTTP, Kerberos, MailServices, MTA, SSH, VOIP y VPN.

Configuración para Apache

La configuración que he utilizado es la siguiente:

  • enabled: Activar Fail2ban para Apache
  • logfile: Indicamos el log del Apache
  • cmdstart: Comando que ejecutará cuando sea iniciado
  • cmdend: Comando que ejecutará cuando sea parado
  • fwban: Regla de IPTABLE que ejecutará para banear la IP
  • fwunban: Regla de IPTABLE que ejecutará cuando haya pasado el tiempo de prohibición
  • failregex: Palabras que buscará en el fichero de configuración.

Configuración para SSH

La configuración que he utilizado para SSH:

  • enabled: Activar Fail2ban para SSH
  • logfile: Indicamos el log del SSH
  • cmdstart: Comando que ejecutará cuando sea iniciado
  • cmdend: Comando que ejecutará cuando sea parado
  • fwban: Regla de IPTABLE que ejecutará para banear la IP
  • fwunban: Regla de IPTABLE que ejecutará cuando haya pasado el tiempo de prohibición
  • failregex: Palabras que buscará en el fichero de configuración.

¿Funciona?

Para comprobar que Fail2Ban funciona correctamente, desde una maquina me he intentado conectar con mi usuario, he fallado más de tres veces y a la cuarta vez no me dejaba loguear:

Ahora miramos el log de Fail2Ban:

Ahora, podemos estar más tranquilos, ya que Fail2ban se ocupará de banear todas esas IPs maliciosas que intentan acceder en nuestro sistema.

Fuentes: Fail2Ban, Fail2Ban_ES

El contenido de esta entrada está bajo licencia Creative Commons

Zagur

Técnico Superior de Administración de Sistemas. Estudiando actualmente Desarrollo de aplicaciones web. #GNU #Linux #CSS #HTML #Python #SoftwareLibre #OpenSource

Trackbacks/Pingbacks

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.