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

  • ajustar contraseña de root
  • actualización inicial de paquetes: apt-get update, apt-get upgrade
  • paso a aptitude: apt-get install aptitude
  • preparo terminal para soportar 256 colores: aptitude install ncurses-term
  • instalo VIM: aptitude install vim
  • configuración vim: vim /etc/vim/vimrc
  • configurar registro inverso IPv4 e IPv6
  • revisar configuración IPv6
  • ajuste del nombre del equipo: vim /etc/hostname (En el caso de un servidor VPS de OVH es posible que la alternativa necesaria sea configurar /etc/cloud/cloud.cfg)
  • 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
  • desactivación de validación con usuario y contraseña para SSH, sólo certificados
  • instalación fail2ban: aptitude install fail2ban (i afegir IPs a whitelist)
  • instalación firewall: aptitude install iptables-persistent
  • configuración firewall (ver anexo)
  • instalación SSMTP
  • instalación de logcheck: aptitude install logcheck logcheck-database (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 f2b > sudo tee /etc/iptables/rules.v4

sudo ip6tables-save | grep -v f2b > sudo tee /etc/iptables/rules.v6  

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]
:whitelist - [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
-A whitelist -s 2a03:1234::1/64 -j ACCEPT
COMMIT