Preparar servidor VPS Debian 13

debian13
Table of Contents

Post instalación de servidor linux debian 13, y configuración de seguridad.

$ fastfetch
        _,met$$$$$gg.          debian@vps-58a7ea55
     ,g$$$$$$$$$$$$$$$P.       -------------------
   ,g$$P""       """Y$$.".     OS: Debian GNU/Linux 13 (trixie) x86_64
  ,$$P'              `$$$.     Host: OpenStack Nova (19.3.2)
',$$P       ,ggs.     `$$b:    Kernel: Linux 6.12.57+deb13-cloud-amd64
`d$$'     ,$P"'   .    $$$     Uptime: 55 mins
 $$P      d$'     ,    $$P     Packages: 417 (dpkg)
 $$:      $$.   -    ,d$$'     Shell: bash 5.2.37
 $$;      Y$b._   _,d$P'       Terminal: /dev/pts/1
 Y$$.    ."Y$$$$P"'          CPU: 4 x Intel Core (Haswell, no TSX) (4) @ 2.39 GHz
 `$$b      "-.__               GPU: Cirrus Logic GD 5446
  `Y$$b                        Memory: 409.91 MiB / 7.58 GiB (5%)
   `Y$$.                       Swap: Disabled
     `$$b.                     Disk (/): 1.59 GiB / 73.62 GiB (2%) - ext4
       `Y$$b.                  Local IP (ens3): **.**.***.*/32
         `"Y$b._               Locale: es_ES.UTF-8
             `""""

Actualizar

sudo apt update && sudo apt upgrade

Instalar locales

sudo dpkg-reconfigure locales
sudo apt-get install locales-all

rsyslog

sudo apt-get install --reinstall rsyslog

ssh

Cambio de puerto

sudo vim /etc/ssh/sshd_config

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

Reiniciamos servicio:

sudo systemctl restart sshd

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

Llave ssh

Copiar llave publica al servidor para poder entrar sin contraseña.

ssh-copy-id -i ~/.ssh/LLAVE USUARIO@SERVIDOR

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.

Servidor de correo

sudo apt install postfix

Seleccionamos "Internet site"

y ponemos el nombre del servidor smtp.

Configuración de postfix

Configuramos servidor de correo para poder recibir correos de aviso.

/etc/postfix/main.cf

Modificamos configuración para que no acepte correo del exterior.

inet_interfaces = loopback-only

/etc/aliases

mailer-daemon: postmaster
postmaster: root
root: TU_EMAIL
logcheck: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root

Activamos los nuevos alias y reiniciamos servidor postfix.

sudo newaliases
sudo systemctl restart postfix

Enviar correo.

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

logcheck

sudo apt install logcheck

Configuración de logcheck

sudo vim /etc/logcheck/logcheck.conf

Modificamos:

SENDMAILTO="TU_EMAIL"
MAILASATTACH=1

Editamos el fichero /etc/logcheck/ignore.d.server/custom

Aunque se puede poner el nombre que se quiera.

.*.from\ 251.red-79-157-159.dynamicip.rima-tde.net*
.*Synchronized\ to\ time\ server*
.*.\[UFW\ BLOCK\]*
.*filtering\ via\ arp/ip/ip6tables\ is\ no\ longer\ available*
.*Initializing\ XFRM\ netlink\ socket*
.*Netfilter\ messages\ via\ NETLINK*
.*ctnetlink\ v0.93:\ registering\ with\ nfnetlink.*
.*systemd-udevd*
.*networkd-dispatcher*
.*systemd-networkd*
.*IPv6:*
.*Link\ UP*
.*entered\ promiscuous\ mode*
.*entered\ blocking\ state*
.*can\ be\ used\ to\ set\ a\ preferred\ IP\ address*
.*Network\ configuration\ changed*
.*docker0*
.*eth0*
.*snapd*
.*containerd*
.*ovpn-server.*peer\ info*
.*ovpn-server.*VERIFY\ OK*
.*ovpn-server.*Initial\ packet*
.*ovpn-server.*Connection\ Initiated*
.*ovpn-server.*Control\ Channel*

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

Evitamos que nos avise ya que se trata de nuestros clientes de nextcloud intentando conectar cuando esta el ordenador de casa apagado.

.*.Synchronized\ to\ time\ server*.ntp.ubuntu.com*

Servidor actualizando la hora del sistema.

.*.\[UFW\ BLOCK\]*

Ips bloqueadas, son demasiadas.

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

Cortafuegos

sudo apt install ufw

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

Status

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
22/tcp (v6)                ALLOW       Anywhere (v6)

Ver reglas del cortafuegos:

sudo iptables -L -n --line-numbers

Ver IPs bloqueadas:

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

fail2ban

Evitar accesos no autorizados al servidor.

sudo apt-get install fail2ban

Copiamos configuración por defecto a fichero personalizado.

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

Editar configuración:

sudo vim /etc/fail2ban/jail.local

Podemos añadir una lista de IPs para que sean ignoradas:

ignoreip = 127.0.0.1/8 ::1

Añadimos reglas para los wordpress:

[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

Desde systemd:

sudo systemctl status fail2ban

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:

Varios

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 install chkrootkit

sudo chkrootkit

Clamav

sudo apt install clamav clamav-daemon clamav-freshclam clamdscan

Actualizar base d datos de virus.

sudo freshclam

Evitar que arranque al inicio.

sudo systemctl disable clamav-freshclam.service

Scripts

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

Instalar

git clone https://github.com/edumag/magscripts

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

Instalar dependencias:

sudo apt-get install chkrootkit clamscan docker

Ejecutar

cd magscripts/servidor
sudo ./magReportServer

Envío del informe.

sudo ./magReportServer > /tmp/report.txt && mpack -s repor /tmp/report.txt  TU_EMAIL
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.

LesOlivex