Initial Server Setup DirectAdmin


En Construcción...

Paso 1: Instalar SO Debian en un servidor dedicado

El primer paso de todos, es instalar el SO Debian, en el servidor dedicado con el particionado indicado en el paso número 3.

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

[root@srv01 ~]# sudo aptitude remove postfix

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 ~]# stat /boot/grub2/grub.cf

[root@srv01 ~]# cp /etc/grub.conf /etc/grub.conf.bak`date +%F`
 
[root@srv01 ~]# chown root:root /boot/grub2/grub.cfg
 
[root@srv01 ~]# chmod og-rwx /boot/grub2/grub.cfg

[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 180

PASS_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 ~]# echo "Locking down Cron"

[root@srv01 ~]# touch /etc/cron.allow
 
[root@srv01 ~]# chmod 600 /etc/cron.allow
 
[root@srv01 ~]# awk -F: '{print $1}' /etc/passwd | grep -v root > /etc/cron.deny

Kernel Network Security

Para ver los parámetros, tecleamos: 

[root@srv01 ~]# sysctl -a

Editamos el archivo sysctl.conf y ponemos los siguientes parámetros:
 
[root@srv01 ~]# vi /etc/sysctl.conf

# Protection against buffer overflow attacks
kernel.exec-shield=1
 
# Address space layout randomization (ASLR)
kernel.randomize_va_space=2
 
La aleatorización del diseño del espacio de direcciones (ASLR) es una técnica de mitigación de vulnerabilidades que organiza aleatoriamente el espacio de direcciones de las áreas de datos clave de un proceso. 
 
Razón fundamental: La ubicación aleatoria de regiones de memoria virtual dificultará la escritura de exploits de páginas de memoria, ya que la ubicación de la memoria cambiará constantemente.

# Habilitar reverse path filtering
net.ipv4.conf.all.rp_filter=1
 
# Deshabilitar la aceptación de paquetes enrutados de origen
net.ipv4.conf.all.accept_source_route=0
 
# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1

 # Make sure spoofed packets get logged
 net.ipv4.conf.all.log_martians = 1

[root@srv01 ~]# sysctl -p

Paso: Disable compilers

[root@srv01 ~]# chmod 700 /usr/bin/gcc

Paso: Secure php.ini files

disable_functions = show_source, system, shell_exec, passthru, exec, popen, proc_open

Paso: Shell or Bomb Protection

Tener un límite de nproc es importante. De hecho, 300 es el valor que la Universidad de Georgia, El departamento de Ciencias de la Computación utilizó para el límite de proceso de pregrado en sus servidores Linux en 2017.
 
Editamos el archivo:

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_SUSE_Linux_Enterprise_Server_11_v2.1.0_L1.audit:97beeb9f560ff1ae2626dbc9150abfaf

https://www.tenable.com/audits/items/CIS_Amazon_Linux_2_STIG_v1.0.0_L1.audit:b83c8d3f2cb95af01ce1386c0efd4690

https://wiki.debian.org/AppArmor/HowToUse

Comentarios

Entradas populares de este blog