Initial Server Setup DirectAdmin
En Construcción...
Paso 1: Instalar SO Debian en un servidor dedicado
Paso 2: Conexión SSH
Una vez hemos instalado el SO en el servidor, accedemos a través del protocolo SSH.
Para ello:
ssh root@ipv4 -p22
Paso 3: Modificar fstab
[root@srv01 ~]# cp -p /etc/fstab /etc/fstab.bak`date +%F`
[root@srv01 ~]# sudo vi /etc/fstab/
Quedando así el fstab:
/dev/sda1 /boot ext4 defaults,ro,noatime,nosuid,noexec,nodev 1 2
/dev/mapper/VG_OS/lv_root / ext4 defaults,noatime,usrquota,grpquota,errors=remount-ro 1 1
/dev/mapper/_VG_OS/lv_swap swap swap sw 0 0
[root@srv01 ~]# sudo reboot
Paso 4: Cerrar puertos abiertos (de más)
Ejecutamos netstat -pta y detenemos todos aquellos servicios que no sean ssh. Eliminamos apache2 y postfix.
Paso 5: Borrado de paquetes
[root@srv01 ~]# dpkg -l | grep ^ii > lista_paqs
[root@srv01 ~]# alias k='aptitude purge'
La lista de paquetes eliminados, es:
apache2 apache2-data apache2-mpm-prefork apache2-utils apache2 apache2-data apache2-mpm-prefork apache2-utils apache2-bin apache2-doc bind9 bind9-host bind9utils postfix bsd-mailx bsdmainutils man-db cifs-utils cpio ed expat fetchmail finger fontconfig-config fontconfig ftp info install-info isc-dhcp-client isc-dhcp-common ldap-utils lynx lynx-cur m4 make makedev man-db manpages memtester mime-support mlocate net-tools odbcinst odbcinst1debian2:amd64 unixodbc patch postfix python quota samba samba-common samba-common-bin samba-dsdb-modules samba-libs:amd64 python-samba sasl2-bin sharutils wide-dhcpv6-client snmp syslinux tcpdump tcsh telnet tdb-tools tofrodos traceroute xinetd
Y para eliminar varios paquetes que empiezan por el mismo nombre, como las fuentes, unas cuantas tuberías y listo.
[root@srv01 ~]# dpkg -l fonts* | grep ^ii | awk '{print $2}' | xargs aptitude purge -y
[root@srv01 ~]# dpkg -l ttf* | grep ^ii | awk '{print $2}' | xargs aptitude purge -y
[root@srv01 ~]# dpkg -l gcc* | grep ^ii | awk '{print $2}' | xargs aptitude purge -y
Paso 6: Creación y configuración de un usuario
[root@srv01 ~]# adduser srv01
[root@srv01 ~]# aptitude install sudo
[root@srv01 ~]# chmod -R 700 /home/srv01
Paso 7: Deshabilitar servicios y demonios no utilizados
[root@srv01 ~]# sudo systemctl list-unit-files --type=service
[root@srv01 ~]# sudo systemctl list-dependencies
Deshabilitar Apache2
[root@srv01 ~]# sudo systemctl status apache2
[root@srv01 ~]# sudo systemctl disable apache2
[root@srv01 ~]# sudo aptitude remove apache2
Deshabilitar Postfix
[root@srv01 ~]# sudo systemctl status postfix
[root@srv01 ~]# sudo systemctl disable apache2
Deshabilitar AppArmor
[root@srv01 ~]# sudo systemctl status apparmor.service
[root@srv01 ~]# sudo systemctl stop apparmor.service
[root@srv01 ~]# sudo systemctl disable apparmor.service
[root@srv01 ~]# sudo systemctl mask apparmor.service
[root@srv01 ~]# sudo mkdir -p /etc/default/grub.d
[root@srv01 ~]# sudo echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=0"' \
[root@srv01 ~]# sudo tee /etc/default/grub.d/apparmor.cfg
[root@srv01 ~]# sudo update-grub
[root@srv01 ~]# sudo reboot
Deshabilitar wp_supplicant
[root@srv01 ~]# sudo systemctl status wpa_supplicant.service
[root@srv01 ~]# sudo systemctl stop wpa_supplicant.service
[root@srv01 ~]# sudo systemctl disable wpa_supplicant.service
[root@srv01 ~]# sudo systemctl mask wpa_supplicant.service
Chequeamos el servicio, por si aún, estuviera corriendo:
[root@srv01 ~]# sudo ps auxwww | grep wpa
Paso 7: BIOS y seguridad del cargador de arranque
[root@srv01 ~]# echo "# Require the root pw when booting into single user mode" >> /etc/inittab
[root@srv01 ~]# echo "~~:S:wait:/sbin/sulogin" >> /etc/inittab
[root@srv01 ~]# echo "Don't allow any nut to kill the server"
[root@srv01 ~]# perl -npe 's/ca::ctrlaltdel:\/sbin\/shutdown/#ca::ctrlaltdel:\/sbin\/shutdown/' -i /etc/inittab
Paso 8: Deshabilitar el almacenamiento masivo
[root@srv01 ~]# echo "Disabling USB Mass Storage"
[root@srv01 ~]# echo "blacklist usb-storage" > /etc/modprobe.d/blacklist-usbstorage
Paso: Deshabilitar SELinux
Paso 9: Restringir root
[root@srv01 ~]# echo "tty1" > /etc/securetty
[root@srv01 ~]# chmod 700 /root
Paso: Usar contraseñas seguras
Es importante, tener copia de seguridad de los siguientes ficheros, ya que podemos fastidiar el login:
[root@srv01 ~]# sudo cd /etc/
[root@srv01 ~]# sudo cp -p /etc/login.defs /etc/login.defs.bak`date +%F`
[root@srv01 ~]# sudo vi /etc/login.defs
PASS_MAX_DAYS 180PASS_MIN_DAYS 1
ENCRYPT_METHOD SHA512
[root@srv01 ~]# sudo aptitude install libpam-cracklib
[root@srv01 ~]# sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak`date +%F`
[root@srv01 ~]# sudo cd /etc/pam.d
[root@srv01 ~]# sudo vi /etc/pam.d/common-password
[root@srv01 ~]# password requisite pam_cracklib.so try_first_pass retry=3 minlen=14 dcredit=-2 ucredit=-2 ocredit=-2 lcredit=-2
Paso: Umask restrictions
[root@srv01 ~]# perl -npe 's/umask\s+0\d2/umask 077/g' -i /etc/bashrc
[root@srv01 ~]# perl -npe 's/umask\s+0\d2/umask 077/g' -i /etc/csh.cshrc
Paso: PAM modifications
[root@srv01 ~]# touch /var/log/tallylog
[root@srv01 ~]# cat << 'EOF' > /etc/pam.d/common-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
auth required pam_faillock.so deny=3 onerr=fail unlock_time=60
account required pam_unix.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so
account required pam_faillock.so per_user
password requisite pam_cracklib.so try_first_pass retry=3 minlen=14 lcredit=-2 ucredit=-2 dcredit=-2 ocredit=-2
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=10
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
EOF
El archivo /var/log/tallylog es un registro binario que contiene registros de inicio de sesión fallidos para pam. Puedes ver los intentos fallidos ejecutando el comando pam_faillock sin ninguna opción, y desbloquear las cuentas de usuario antes usando pam_faillock --reset --user username
Paso: Reaping idle users
Paso: Restricting cron
[root@srv01 ~]# touch /etc/cron.allow
Kernel Network Security
kernel.randomize_va_space=2
net.ipv4.conf.all.accept_source_route=0
Paso: Disable compilers
Paso: Secure php.ini files
Paso: Shell or Bomb Protection
vi /etc/security/limits.conf
srv01 hard nproc 300
Paso: Hardening SSH
Creamos el siguiente script llamado secure-ssh.sh
#!/bin/bash
/bin/sed -i "s/#Port 22/Port 2220/g" /etc/ssh/sshd_config
/bin/sed -i "s/#Protocol 2/Protocol 2/g" /etc/ssh/sshd_config
/bin/sed -i "s/#UseDNS yes/UseDNS no/g" /etc/ssh/sshd_config
#service sshd restart
A partir de ahora, accederemos a ssh, por el puerto 2220.
Recursos web:
https://www.tenable.com/audits/items/CIS_Amazon_Linux_2_STIG_v1.0.0_L1.audit:b83c8d3f2cb95af01ce1386c0efd4690
https://wiki.debian.org/AppArmor/HowToUse
Comentarios
Publicar un comentario