Una lista de los pasos que hago tras la instalación base de un servidor Linux, sea en local (raramente) o remoto (habitualmente). Esta lista es una generalización: no todos los pasos se aplican a todos los servidores y hay servidores que requieren otros pasos. Pero me sirve como guia de trabajo.
Aunque se trata de un post de 2016 lo sigo revisando y actualizando de vez en cuando. Última actualización: 26/3/2019
Lamento el poco detalle, es una lista de uso interno pero pese a ello he pensado que puede ser util en cierta medida y por eso lo publico.
Checklist de instalación
revisión fecha/hora/timezone: dpkg-reconfigure tzdata
actualización inicial de paquetes: apt update
, apt upgrade
instalación de vim: apt install vim
configuración vim: vim /etc/vim/vimrc
ajuste del nombre del equipo: vim /etc/hostname
configuración apt: vim /etc/apt/sources.list
revisión del kernel instalado e instalación del kernel del paquete oficial de Debian
instalación generador de entropia: apt install haveged
securización SSH con ssh-audit
desactivación de validación con usuario y contraseña para SSH, sólo certificados
instalación fail2ban: apt install fail2ban
instalación firewall: apt install iptables-persistent
configuración firewall (ver anexo)
instalación msmtp-mta: apt install msmtp-mta
instalación de logcheck, revisar fichero de configuración principal
instalación de cron-apt (ver anexo)
instalación y configuración de actualizaciones de seguridad automáticas (ver anexo)
Anexo: cortafuegos
Utilizo netfilter-persistence
para la gestión de la configuración del cortafuegos. Ya que también utilizo fail2ban
para guardar los cambios hago una pequeña variación para eliminar las reglas de fail2ban
que son dinàmicas.
sudo iptables-save | grep -v fail2ban | sudo tee /etc/iptables/rules.v4
sudo ip6tables-save | grep -v fail2ban | sudo tee /etc/iptables/rules.v4
La configuración inicial de base es la siguiente:
/etc/iptables/rules.v4
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:connection-tracking - [0:0]
:whitelist - [0:0]
-A INPUT -i lo -m comment --comment "permeto trafic loopback" -j ACCEPT
-A INPUT -j connection-tracking
-A INPUT -j whitelist
-A INPUT -p tcp -m tcp --dport 22 -m comment --comment "servei SSH" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m comment --comment "servei HTTP" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m comment --comment "servei HTTPS" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 113 -m comment --comment "Reject incoming AUTH/ident requests with RST" -j REJECT --reject-with tcp-reset
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 5/sec -m comment --comment "limitador de ping per DoS" -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m comment --comment "limitador de ping per DoS" -j DROP
-A connection-tracking -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A connection-tracking -m conntrack --ctstate INVALID -j DROP
-A connection-tracking -m conntrack --ctstate NEW -j RETURN
-A connection-tracking -j LOG --log-prefix "CONNSTATE BARF: " --log-level 2
-A connection-tracking -j DROP
-A whitelist -s 1.2.3.0/24 -j ACCEPT
-A whitelist -s 5.6.7.8/32 -j ACCEPT
COMMIT
/etc/iptables/rules.v6
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:connection-tracking - [0:0]
-A INPUT -i lo -m comment --comment "permeto trafic loopback" -j ACCEPT
-A INPUT -p ipv6-icmp -m comment --comment "permeto trafic ICMPv6" -j ACCEPT
-A INPUT -j connection-tracking
-A INPUT -p tcp -m tcp --dport 80 -m comment --comment "servei HTTP" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m comment --comment "servei HTTPS" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 113 -m comment --comment "Reject incoming AUTH/ident requests with RST" -j REJECT --reject-with tcp-reset
-A connection-tracking -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A connection-tracking -m conntrack --ctstate INVALID -j DROP
-A connection-tracking -m conntrack --ctstate NEW -j RETURN
-A connection-tracking -j LOG --log-prefix "CONNSTATE BARF: " --log-level 2
-A connection-tracking -j DROP
COMMIT
Anexo: cron-apt
Añadir algunas opciones al fichero de configuración principal: /etc/cron-apt/config
MAILTO ="sargue@gmail.com"
MAILON ="upgrade"
SYSLOGON ="error"
Anexo: actualizaciones automáticas
Opcionalmente configurar el servicio de actualizaciones de seguridad automáticas de Debian.
Algunas de las opciones de configuración interesantes.
// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent , make sure that you
// have a working mail setup on your system . A package that provides
// 'mailx' must be installed . E .g . "user@example.com"
Unattended -Upgrade ::Mail "webmaster@sargue.net" ;
Unattended -Upgrade ::Sender "vps42@mg.sargue.net" ;
// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt -get autoremove )
Unattended -Upgrade ::Remove -Unused -Dependencies "true" ;
// Automatically reboot *WITHOUT CONFIRMATION * if
// the file /var /run /reboot -required is found after the upgrade
Unattended -Upgrade ::Automatic -Reboot "true" ;
// Automatically reboot even if there are users currently logged in .
Unattended -Upgrade ::Automatic -Reboot -WithUsers "true" ;