Mínima seguridad para nuestro vps

En estos días extraños de confinamiento parece que se ha multiplicado los
ataques en internet, en mi caso consiguieron entrar en mi vps y dejarlo
completamente inútil.

Aquí quedan los pasos que he recopilado para mantener el servidor con un mínimo
de seguridad.

ssh

Cambio de puerto

sudo vim /etc/ssh/sshd_config

- # Port 22
+ Port 3333 # El que tu quieras en verdad.

Reiniciamos servicio:

sudo /etc/init.d/ssh restart

Ahora para entrar de nuevo deberemos especificar el puerto.

ssh -p port user@server

Incluso añadirlo en el ~/.ssh/config para no tener que especificarlo todo el
rato.

Host server
    IdentityFile ~/.ssh/id_rsa                                          
    User ubuntu                                                         
    Hostname server.com                                            
    Port 1111

sshd_config

Configuración más que recomendada:

Si activamos estas reglas tener en cuenta que tenéis que tener configurado
previamente la llave ssh en tu ordenador y añadida al servidor.

PermitRootLogin no        # No se permite acceso a root desde ssh.
AllowUsers USER1 USER2    # Lista de usuarios que si pueden entrar.
PasswordAuthentication no # Solo permitimos entrar con clave ssh.

Cortafuegos

sudo ufw allow http
sudo ufw allow https
sudo ufw allow [SSH PORT]
sudo ufw disable && sudo ufw enable

Swap

Tener swap es fundamental para evitar fallos por falta de memoria.

Con esta formula creamos un fichero que nos servirá como swap en caso de que
nuestro servidor no la tenga habilitada.

fallocate -l 3G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

sudo vim /etc/fstab

/swapfile swap swap defaults 0 0

PostFix con SMTP.

Si teneis un servidor de correo contratado podeis configurar postfix para
que envie los correos desde él.

Si quereis utilizar un gmail tendreis que buscar como hacerlo.

Configuramos servidor de correo para poder recibir correos de aviso.

sudo apt.get install postfix

Seleccionamos "Internet site"

y ponemos el nombre del servidor smtp.

Configuración

sudo vim /etc/postfix/main.cf

modificamos:

myhostname = example.com
relayhost = [mail.isp.example]:587
# enable SASL authentication
smtp_sasl_auth_enable = yes
# disallow methods that allow anonymous authentication.
smtp_sasl_security_options = noanonymous
# where to find sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# Enable STARTTLS encryption
smtp_use_tls = yes
# where to find CA certificates
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Credenciales:

Añadimos nuestras credenciales de nuestro servidor smtp.

sudo vim /etc/postfix/sasl_passwd

[mail.isp.example]:587 username:password

sudo postmap /etc/postfix/sasl_passwd
sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo rm /etc/postfix/sasl_passwd

Reiniciamos postfix:

sudo service postfix restart

Enviar correo.

sudo apt-get install mpack
echo "Test" > /tmp/test.txt
mpack -s 'test' /tmp/test.txt tu@email.com

Referencias:

  • https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-18-04-es

fail2ban

sudo apt-get install fail2ban

Copiamos configuración por defecto a fichero personalizado.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Añadimos reglas:

sudo vim /etc/fail2ban/jail.local

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 1h

[wordpress]
enabled  = true
filter   = wordpress
logpath  = /var/log/nginx/*.log
port     = 80,443
bantime  = 1h

Creamos fichero /etc/fail2ban/filter.d/wordpress.conf y añadimos:

# Fail2Ban filter for WordPress
[Definition]
failregex =  - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] "POST /wp-login.php HTTP/1.1" 200
ignoreregex =

Reiniciamos:

sudo systemctl restart fail2ban

Ver estado:

$ sudo fail2ban-client status

Status
|- Number of jail:  3
`- Jail list:  ssh, sshd, wordpress

$ sudo fail2ban-client status ssh
Status for the jail: ssh
|- Filter
|  |- Currently failed: 3
|  |- Total failed: 11
|  `- File list:   /var/log/auth.log
`- Actions
   |- Currently banned: 5
   |- Total banned: 6
   `- Banned IP list:  104.248.176.46 106.12.125.140 163.172.166.223 37.187.181.182 51.68.89.100

Consultar logs de fail2ban

Número de veces que han sido bloqueada las IPs:

zgrep -h "Ban " /var/log/fail2ban.log* | awk '{print $NF}' | sort | uniq -c

Referencias:

  • https://raiolanetworks.es/blog/bloquear-ataques-dos-con-fail2ban-en-linux/
  • https://geekland.eu/como-consultar-logs-de-fail2ban/

Logcheck

sudo apt-get install logcheck

Configuración

sudo vim /etc/logcheck/logcheck.conf

Modificamos:

SENDMAILTO="edu@lesolivex.com"
MAILASATTACH=1

Configurando las reglas

sudo vim /etc/logcheck/ignore.d.server/edumag

Utilizamos expresiones regulares para indicar las lineas que no queremos mostrar.

*.from\ 251.red-79-157-159.dynamicip.rima-tde.net*

Probamos la salida:

sudo -u logcheck logcheck -o -t

Referencias:

http://somebooks.es/recibir-informes-sobre-sucesos-de-ubuntu-server-18-04-lts-con-logcheck/

Actualizaciones de seguridad automáticas

sudo dpkg-reconfigure --priority=low unattended-upgrades

Referencias:

https://help.ubuntu.com/community/AutomaticSecurityUpdates

Varios

Ver reglas del cortafuegos:

sudo iptables -L -n --line-numbers

Ver IPs bloqueadas:

sudo iptables -L -n --line-numbers | grep REJECT

Lynis

Lynis nos genera un informe muy completo sobre el estado de nuestro servidor y
nos da sugerencias.

sudo apt-get install lynis

sodo lynis audit system

chkrootkit

Permite localizar rootkits.

sudo apt-get install rootkits

sudo chkrootkit

Extras

Scripts

He realizado unos pequeños scripts para tener una visión del estado
del servidor de forma rapida.

https://github.com/edumag/magscripts/tree/master/servidor/ReportServer https://github.com/edumag/magscripts/tree/master/servidor/ReportServer

Los scripts están separados por temas así que es facil eliminar los que no te interesan o añadir otros.

Envío del informe.

sudo ./reportServer.sh > /tmp/report.txt && mpack -s repor /tmp/report.txt edu@lesolivex.com

Leave a Reply

Your email address will not be published. Required fields are marked *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.