Mostrando las entradas con la etiqueta Hardening Linux. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Hardening Linux. Mostrar todas las entradas

jueves, 6 de diciembre de 2018

Hardening SSH en Debian 9

Hace algunos años realice una publicacion sobre Hardening Servidores en Debian, esta vez voy hablar sobre Hardening en SSH, que es endurecer las politicas de configuracion del SSH.

Todo esta configuracion la realizaremos en un Debian 9 (stretch) con la version del ssh 7.4



 Antes de empezar recordemos de realizar una copia de seguridad a el archivo de configuracion del ssh; el cual esta en la siguiente ruta:

#cd /etc/ssh/

y el archivo a modificar seria: sshd_config

Ahora si manos a la obra, asi que utilizando el editor de texto vim procedemos a editar el archivo antes mencionado; y modificamos los siguientes parametros:
  • Port 22 # Puerto por defecto del ssh, cambiarlo por otro puerto.
  • LoginGraceTime 30 # cantidad de segundos en que la pantalla de login estará disponible.
  • PermitRootLogin no # deshabilitar el acceso directo como root.
  • MaxStartups 3 # cantidad de conexiones simultanea.
  • MaxSessions 2  # Especifica el número máximo de sesiones abiertas permitidas por conexión de red. El valor predeterminado es 10.
  • AllowUsers [username] # limitar el acceso de usuarios, solo agregar los usuarios permitido para hacer conexion.
  • IgnoreRhosts yes # no permite que SSH confíe en un host basado solo en su IP.
  • HostbasedAuthentication no # es igual que la opcion anterior.
  • PermitEmptyPasswords no # evita que los usuarios inicien sesión en SSH con una contraseña vacía, si se establece como tal.
  • X11Forwarding no # detiene la posibilidad de que el servidor envíe comandos de vuelta al cliente.
  • MaxAuthTries 3 # desconecta la conexión SSH después de 3 intentos de autorización fallidos.
  • Ciphers aes128-ctr,aes192-ctr,aes256-ctr # desactivar los cifrados débiles.
  • UsePAM yes # deshabilita la autenticación de contraseña y difiere la autorización al PAM basado en clave.
  • ClientAliveInterval 300 # cierra la sesión de usuarios inactivos después de 3 minutos.
  • ClientAliveCountMax 0 # cuántas veces el servidor comprueba si la sesión está activa antes de soltar.
  • Banner none # agregar un banner de advertencia para cuando se conecten via ssh. 
  • AddressFamily inet # deshabilitar ipv6.
  • LogLevel VERBOSE # registra la huella digital del usuario al iniciar sesión.
  • AllowTcpForwarding no # reenvío de puertos a través de SSH (SSH tunneling)
  • Compression no # Especifica si la compresión está habilitada después de que el usuario se haya autenticado correctamente. 
  • TCPKeepAlive no # Especifica si el sistema debe enviar mensajes de keepalive de TCP al otro lado.
  • AllowAgentForwarding no # Especifica si se permite el reenvío ssh-agent.

Despues de modificar el archivo, ejecutamos el siguiente comando para validar si tenemos algun error en la configuracion:

#sshd -t

Si no muestra nada, es que todo esta OK y procedemos a reiniciar el servicio de ssh:
 
#/etc/init.d/ssh restart





Esto seria todo, algo sencillo de realizar. 
Si algun otro conoce algun parametro que pueda ser agregado o modificado en la configuracion, bienvenido sea. 

Referencias WEB:

https://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html

https://www.cyberciti.biz/tips/checking-openssh-sshd-configuration-syntax-errors.html

https://www.process.st/server-security/

https://www.ssh.com/ssh/sshd_config/


viernes, 10 de junio de 2011

Hardening Servidores en Debian


En este breve tutorial explicaremos los pasos para fortalecer la Seguridad en nuestros Servidores bajo el Sistema Operativo GNU/Linux Debian.


* Lo primero que debemos hacer es, crear los usuarios que tendrán acceso a los servidores:

#adduser usuario
 

Este proceso se debe realizar para todo los usuarios a crear, tener en cuenta que el comando adduser tiene otras opciones; el cual pueden consultarlas con un man adduser.

* Crear el grupo de administradores “wheel”

#addgroup --system wheel

luego agregamos los usuarios al grupo wheel:

#useradd -m -G wheel usuario
 

o podemos agregarlos manualmente por /etc/group; además debemos editar el id del grupo “wheel” el cual lo cambiaremos por 2000; el comando addgroup tiene muchas opciones, así que seria bueno revisar el man.


Lo que también podemos hacer para evitar que cualquier usuario no agregado al grupo wheel pueda hacer su (obtener privilegios de administrador); es editar el archivo /etc/pam.d/su y buscamos la siguiente linea:

# auth required pam_wheel.so <----- descomentamos esta linea.


* Configurar maximo retries, tiempo máximo de login y Habilitar opción para registrar logins fallidos

Comandos:
vi /etc/login.defs
---En el archivo login.defs se cambian los tiempos de las siguientes lineas:
---Maximos reintentos
---LOGIN_RETRIES 3

---TimeOut Login
---LOGIN_TIMEOUT 30

---Registra lo logins fallidos
---LOG_UNKFAIL_ENAB yes
 

* Bloquear las TTY para no acceder directamente como root

con el editor de texto vi, nos dirigimos a la siguiente ruta /etc/securetty y comentamos todas las consolas; el cual podemos hacer mediante la expresión regular: 1,$s/tty/#tty


* Configuración de SSH

primero que nada procedemos a instalar ssh, mediante aptitude:

#aptitude install ssh
luego de su instalación nos dirigimos al archivo de configuración /etc/ssh/sshd_config y modificamos los siguientes parámetros:

AddressFamily inet ----> deshabilitar ipv6


# Authentication:

LoginGraceTime 30 --->cantidad de segundos en que la pantalla de login estará disponible.

PermitRootLogin no ---> no permite el logueo como root.

StrictModes yes

MaxAuthTries 2 ----> cantidad de veces que podemos equivocarnos en ingresar el usuario y password.

MaxStartups 2 ----> cantidad de conexiones simultanea.

AllowUsers usuario ---> permite el acceso a ciertos usuarios.

AllowGroups wheel ---> permite el acceso solo al grupo wheel.
También podemos modificar el puerto, el cual viene por defecto el 22, y agregar el puerto 22365 <---- (puerto de ejemplo).
También podemos agregar un Banner al ssh, el cual esta en la misma configuración del ssh; solo buscar donde dice Banner y colocar la ruta donde esta el Banner.

NOTA: no es recomendable utilizar los 2 parametros (AllowUsers y AllowGroups)


* Instalar rcconf, para bajar servicios que no sean necesarios.

#aptitude install rcconf  
podemos bajar servicios que no utilicemos como ppp lpr portmap.

* Eliminar paquetes innecesarios para el rendimiento del equipo

#aptitude remove –-purge ppp wget eject lpr info ibritish ipchains nano mtools python tasksel procmail dhcp-client telnet ftp mtr-tiny

* Editar los Wrapper en los archivos /etc/hosts.allow y hosts.deny   

Editaremos primero el archivo hosts.allow y colocaremos algo como esto:

ALL: LOCAL

sshd: x.x.x.x  

esto es un ejemplo, ya seria cuestión de aceptar las IP, dominios a permitir el acceso en una red local o una red LAN.
 

Ahora editamos el hosts.deny y colocaríamos algo como esto:
 

sshd: ALL


* Instalación de Postfix como servidor de correo local

#aptitude install postfix

En plena instalación te solicitara el tipo de configuración, y se seleccionara Internet Site; luego nos dirigimos al archivo de configuración en /etc/postfix/main.cf y hacemos cambio de los parámetros que según sea necesario.

Seria bien importante ya que tenemos configurado el postfix, editar el archivo /etc/aliases y agregar la siguiente linea al final (si es que ya no la tiene)
 

root: miusuario@midominio.com

guardamos, salimos y le damos: newaliases


Para comprobar que nuestro Postfix esta enviando correo, podemos comprobar enviar un correo por la consola, ejecutando el siguiente comando:

echo "correo prueba" | mail -s "prueba" micorreo@dominio.com

Recordar que tienen que tener instalado el paquete: mailutils 


* Una aplicación bien interesante que nos mantiene el sistema limpio es “deborphan”

#aptitude install deborphan

podemos utilizar el deborphan en conjunto con aptitude como se muestra abajo en el ejemplo

ejemplo:

#aptitude purge `deborphan --libdevel` `deborphan --find-config` `deborphan --guess-all`


* Deshabilitando Ctrl-Alt-Del

Esto es muy importante, ya que cualquiera que tenga acceso a la consola puede ejecutar esta opción; bueno lo que haremos es deshabilitarla, nos dirigimos a la siguiente ruta:

#vi /etc/inittab  

y dejamos la siguiente linea comentada:

# What to do when CTRL-ALT-DEL is pressed.
# ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now <------ linea que se comenta.


Podemos agregar esta linea para dar un mensaje cuando utilicen la combinación de teclas Crtl – Alt -Del
ca:12345:ctrlaltdel:/usr/bin/logger -s -p auth.notice -t [INIT] "La combinacion de teclas CRTL ALT DEL esta desactivada"
 
Y reiniciamos el servicio:

#telinit q

* Usuarios con shell interactivos

durante el proceso de instalación se crean diferentes usuarios, el cual podemos verificarlos en /etc/passwd
Entonces observando el archivo, verificamos que existen muchos usuarios todos considerados del sistema y se denotan por tener un user id menor que 1000 y poseen la shell /bin/sh; entonces lo que haremos es evitar que hagan login ya que estos usuarios no serán utilizados de manera interactiva:

#chsh -s /bin/false daemon

y esto para todo los usuarios, claro esta que no sea root, ni la de los usuario. Podemos utilizar esta expresion regular del vi para cambiarlos todos de una vez:

:%s/\/bin\/sh/\/bin\/false/g


* Sincronizar la hora con NTP


En este paso lo que haremos es instalar el paquete de ntpdate.

#aptitude install ntpdate

Luego de haberse instalado, colocamos lo siguiente para sincronizar la hora:

#ntpdate -u ip-servidor-ntp

y nos arrojaría algo como esto:
17 May 07:44:57 ntpdate[13641]: step time server 192.168.0.21 offset 0.628878 sec

Ahora procedemos a instalar el paquete NTP:
#aptitude install ntp

ya instalado, nos dirigimos al archivo de configuración del ntp, que esta en la ruta: /etc/ntp.conf
y modificamos la linea que dice: Server osea la linea 16,
y agregamos la ip del servidor NTP, el cual debería de quedar así:

server 192.168.0.21

* Otras aplicaciones bien interesantes para detectar rootkit, es chkrootkit y rkhunter . La misma se encuentra en los repositorios de Debian, la manera de instalarla es:

# aptitude install chkrootkit
o
# aptitude install rkhunter

para ejecutarlo solo colocamos chkrootkit en la consola y listo, hace un chequeo general, dando resultados.


* Realizar auditoría y/o seguridad del servidor:

Existe una aplicación bien interesante llamada tiger; la cual se encuentra en los repositorios de Debian Squeeze; este aplicativo realiza auditoría del sistema y/o detecta intrusiones no autorizadas.

#aptitude install tiger

Ya instalado, ejecutamos el tiger como root; una opción para que nos muestre la información en html seria así;

#tiger -H -l /home/miusuario/log-tigers


* Proteger los scripts de inicio.
#chmod -R 700 /etc/init.d/* 

* Mensajes de inicio de sesión

Se recomienda editar los /etc/motd y /motd.tail ya que estos archivos muestran información del sistema, cada vez que un usuario establece comunicación con el equipo.

Comandos:
mv /etc/motd /etc/motd.original
touch /etc/motd
 
Nota: esto es una información bien general; pero nos sirve para establecer politicas de seguridad en un sistema GNU/Linux Debian; aunque no comente sobre IPTABLES;es importante también tenerlo instalado.
Y recordemos siempre crear una copia de seguridad de los archivos de configuración que se vayan a editar y así evitar una catástrofe.

Paginas web consultadas: