Checklist de instalación de servidor Debian

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.

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

  • actualización inicial de paquetes: apt-get update, apt-get upgrade
  • paso a aptitude: apt-get install aptitude
  • 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: aptitude 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: aptitude install fail2ban
  • instalación firewall: aptitude install iptables-persistent
  • configuración firewall (ver anexo)
  • instalación SSMTP
  • instalación de logcheck, revisar fichero de configuración principal
  • instalación de cron-apt, añadir opciones MAILTO y MAILON al fichero de configuración principal
  • instalación y configuración de actualizaciones de seguridad automáticas

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