Securizar Ubuntu Server
Ir a la navegación
Ir a la búsqueda
Securizar servidor con Ubuntu Server
El objetivo de esta nota es securizar un servidor con el sistema operativo Ubuntu Server.
Cambiar contraseña a usuario root
- Todos los comandos se ejecutarán como root, a menos que se especifique lo contrario.
sudo -i
- Establecer contraseña para root:
passwd root
Creación de nuevo usuario
- Crear un grupo para el usuario:
groupadd guzman
- Crear usuario para el usuario:
useradd -d /home/guzman -m -g guzman -s /bin/bash guzman
- Establecer contraseña para el usuario:
passwd guzman
- Establecer permisos al usuario:
usermod -a -G adm,cdrom,sudo,dip,lxd guzman
Borrar usuario por defecto
- Se borran usuarios por defecto que puedan suponer un riesgo de ataques de diccionario.
userdel -r ubuntu
Cambiar hostname del servidor
hostnamectl set-hostname culturetas.net
Actualizar OS
- Actualizar repositorios:
apt update
- Actualizar OS:
apt dist-upgrade
- Borrar paquetes sin uso:
apt autoremove
- Limpiar cachés:
apt autoclean
- Reiniciar VM:
reboot
Instalar fail2fan
- Instalar fail2fan para monitorizar logs y bloquear usuarios que intenten ataques de diccionario.
apt install fail2ban
Generar claves criptográficas
Generar clave
Características:
- Tipo: Curva Elíptica
- Curva: ed25519
- Rondas: 512
ssh-keygen -t ed25519 -a 512 -C culturetas.net -f culturetas.net.key
Desplegar clave en usuario root
mkdir ~/.ssh
cp culturetas.net.key culturetas.net.key.pub /root/.ssh/
cat culturetas.net.key.pub >> /root/.ssh/authorized_keys
chmod 700 /root/.ssh/
chmod 600 /root/.ssh/culturetas.net.key
chmod 644 /root/.ssh/culturetas.net.key.pub
chmod 600 /root/.ssh/authorized_keys
chown -R root:root /root/.ssh/
Desplegar clave en usuario guzman
mkdir /home/guzman/.ssh
cp culturetas.net.key culturetas.net.key.pub /home/guzman/.ssh/
cat culturetas.net.key.pub >> /home/guzman/.ssh/authorized_keys
chmod 700 /home/guzman/.ssh/
chmod 600 /home/guzman/.ssh/culturetas.net.key
chmod 644 /home/guzman/.ssh/culturetas.net.key.pub
chmod 600 /home/guzman/.ssh/authorized_keys
chown -R guzman:guzman /home/guzman/.ssh/
Crear grupo SSHallow
Este será el único grupo que puede conectar por SSH.
groupadd -r SSHallow
Añadir usuarios a grupo SSHallow
Realizar para todos los usuarios que van a conectar mediante SSH. Por ejemplo:
- root
- guzman
usermod -a -G SSHallow guzman
usermod -a -G SSHallow root
Comprobar que puedes acceder por SSH
- Desde otra terminal:
ssh -i ~/.ssh/culturetas.net.key guzman@culturetas.net
Configurar servidor SSH
- Backup fichero de configuració SSH:
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.$(date +%Y%m%d)
- Editar fichero de configuración SSH:
vi /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 10
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no
PermitEmptyPasswords no
AllowGroups SSHallow
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
TCPKeepAlive yes
# Timeout 300 seg * 12 = 1 hour
ClientAliveInterval 300
ClientAliveCountMax 12
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
- Desactivar acceso con contraseña:
Para desactivar el acceso con contraseña (sólo claves criptográficas) deberías bastar con la directiva: "PasswordAuthentication no". Sin embargo, puede hacer alguna algún fichero adicional que lo contradiga:
vi /etc/ssh/sshd_config.d/50-cloud-init.conf
#PasswordAuthentication yes
Reiniciar VM
reboot
Personalizar alias
- Manias mías
vi /root/.bashrc
[...]
# some more ls aliases
alias ll='ls -lh'
alias la='ls -A'
alias l='ls -CF'
[...]
vi /home/guzman/.bashrc
[...]
# some more ls aliases
alias ll='ls -lh'
alias la='ls -A'
alias l='ls -CF'
[...]
Configurar Firewall
- Añadir regla para SSH (22/tcp)
ufw allow 22/tcp
- Activar Firewall
ufw enable
- Comprobar reglas
ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 22/tcp (v6) ALLOW IN Anywhere (v6)
Configurar configuraciones automáticas
Vamos a configurar el servidor para que instale automáticamente actualizaciones del OS.
- Instalar
apt install unattended-upgrades
- Configuración
vi /etc/apt/apt.conf.d/10periodic
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Configurar sudo sin contraseña
vi /etc/sudoers.d/90-cloud-init-users
# User rules for guzman
guzman ALL=(ALL) NOPASSWD:ALL
Configurar mensaje de bienvenida
- Añadir mensaje personalizado:
vi /etc/update-motd.d/00-header
#printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"
printf "WELCOME TO WEB SERVER:\n"
printf " ██████╗██╗ ██╗██╗ ████████╗██╗ ██╗██████╗ ███████╗████████╗ █████╗ ███████╗\n"
printf "██╔════╝██║ ██║██║ ╚══██╔══╝██║ ██║██╔══██╗██╔════╝╚══██╔══╝██╔══██╗██╔════╝\n"
printf "██║ ██║ ██║██║ ██║ ██║ ██║██████╔╝█████╗ ██║ ███████║███████╗\n"
printf "██║ ██║ ██║██║ ██║ ██║ ██║██╔══██╗██╔══╝ ██║ ██╔══██║╚════██║\n"
printf "╚██████╗╚██████╔╝███████╗██║ ╚██████╔╝██║ ██║███████╗ ██║ ██║ ██║███████║\n"
printf " ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝\n"
printf " Get out of here bastad!!!\n"
Nota: puedes usar un generador de ASCI Art como Patorjk.
- Quitar mensajes innesarios:
vi /etc/update-motd.d/10-help-text
#printf "\n"
#printf " * Documentation: https://help.ubuntu.com\n"
#printf " * Management: https://landscape.canonical.com\n"
#printf " * Support: https://ubuntu.com/pro\n"
- Deshabilitar noticias
vi /etc/update-motd.d/50-motd-news
# Exit immediately, unless we're enabled
# This makes this script very easy to disable in /etc/default/motd-news configuration
[ "$ENABLED" = "0" ] || exit 0