2 de mayo de 2015

Cuida tu server, para evitar ataques


Cuidar el Software Podemos ver todos los programas instalados usando:
# dpkg --list

Y obtener más información con:
# dpkg --info packageName

Por ultimo lo eliminamos si no es necesario.
# apt-get remove packageName

Tener todo el sofware actualizado:
# apt-get update && apt-get upgrade

Para actualiza de forma automática el sistema podemos usar "unattended-upgrades"
# apt-get install unattended-upgrades
Existen varios ficheros de configuración para indicar distintas acciones, por ejemplo para que el sistema te envíe un mail informando de un "Upgrade" editamos el parametro Unattended-Upgrade de:
# nano /etc/apt/apt.conf.d/50unattended-upgrades
Para poder activar este programa deberemos editar el fichero APT:
# nano /etc/apt/apt.conf.d/10periodic
APT::Periodic::Unattended-Upgrade "1";



Instalar Software que nos defienda
Bloquea las IPs con intentos de acceso fallidos
# apt-get install fail2ban
El fichero de configuración de Fail2Ban se encuentra en:
# nano /etc/fail2ban/fail2ban.conf
# nano /etc/fail2ban/jail.conf



Detecta rootkits y cambios del sistema
# apt-get install tripwire
Para recibir los reportes en por correo.
# nano /etc/tripwire/twpol.txt

MAIL_TO = "user@host";
Y Añadimos "emailto = $(MAIL_TO)" en cada política.


# twadmin --create-polfile /etc/tripwire/twpol.txt

# tripwire --init # tripwire --check




# apt-get install rkhunter unhide mailutils
# nano /etc/rkhunter.conf
SSH_CONFIG_DIR=/etc/ssh
MAIL-ON-WARNING="correo@mail"
DISABLE_TESTS=""

PKGMGR=DPKG
ALLOWHIDDENDIR="/dev/.udev"

ALLOWHIDDENFILE="/dev/.initramfs"
MAIL_CMD=sendmail -s "[rkhunter] Warnings found for ${HOST_NAME}" -A /var/log/rkhunter.log
# rkhunter --propupd
# rkhunter --check


Para no tener problemas de falsos positivos tras actualizar deberemos hacer:
# rkhunter --propupd
# tripwire --init --local-passphrase
Monitoriza los logs
# apt-get install logwatch
# nano /etc/logwatch/conf/logwatch.conf

Output = mail
Format = html
MailTo = you@mail
MailFrom = correo@mail.example
Detail = High


Detectar ataques a puestos UDP y TCP mediante: # apt-get install portsentry
Para configurar correctamente portsentry y que no nos bloque debemos añadir el puerto 22 a:
# nano /etc/portsentry/portsentry.conf
#FTP,SSH,Telnet,SMTP,DNS,Time,Whois,Mail,Http,POP3,SQL,NTP,IMAP,SMB,ModBus,SHELL,SMTP,SOCKS,OpenVPN,IPsec,Cpanel,MySQL,PostgreSQL,VNC,
TCP_PORTS="20,21,22,23,25,37,43,56,57,80,8080,8000,8443,443,110,118,123,143,445,502,514,587,1080,1194,1293,2082,2083,2095,2096,3306,5432,5500,5800,5900"
#WoL
UDP_PORTS="9,20,23,37,56,118,123,502,1194,1293,3306,5432"

ADVANCED_EXCLUDE_TCP="22,80,113,139"

Si tenemos Apache:
# apt-get install libapache2-modsecurity
# a2enmod security2# cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
# nano +7 /etc/apache2/conf-enabled/security.conf

SecRuleEngine On



# apt-get install libapache2-mod-spamhaus

# a2enmod spamhaus # a2enmod headers

# a2enconf security
# nano +26 /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
#ServerTokens OS ServerSignature Off
#ServerSignature On
Header set X-Content-Type-Options: "nosniff"

Header set X-Frame-Options: "sameorigin"

Siendo más estrictos
Usando IpTables podemos hacer más seguro nuestro server restringiendo los puestos que pueden recibir y enviar datos.

Borramos la configuración anterior
# iptables -F

Permitimos las conexiones existentes
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Permitimos la conexiones por el puerto 22
# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT

Permitimos las conexiones locales
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT

Cambiamos las políticas por defecto
# iptables -P FORWARD DROP
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP

!!Tened en cuenta que si queremos que se acceda a los puertos de PortEntry, hay que abrirlos
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT


Para tener conectividad hay que permitir el trafico DNS y la salida de trafico http/s
# iptables -A OUTPUT -p TCP --dport 53 -j ACCEPT
# iptables -A OUTPUT -p UDP --dport 53 -j ACCEPT

# iptables -A INPUT -p TCP --sport 53 -j ACCEPT # iptables -A INPUT -p UDP --sport 53 -j ACCEPT# iptables -A OUTPUT -p TCP --dport 80 -j ACCEPT
# iptables -A OUTPUT -p TCP --dport 443 -j ACCEPT

Mostramos el los logs las conexiones rechazadas
# iptables -A INPUT -j LOG --log-level debug --log-prefix "Drop INPUT:"
# iptables -A OUTPUT -j LOG --log-level debug --log-prefix "Drop OUTPUT: " --log-uid

Debemos denegar el acceso a "root", debe existir al menos otro usuario:
# nano +28 /etc/ssh/sshd_config
PermitRootLogin no
# useradd NuevoUsuario
# passwd NuevoUsuario
# mkdir /home/NuevoUsuario

Para poder evitar ataques de diccionario y fuerza bruta contra ssh, podemos configurarlo para que realice el login usando un certificado, para ello guardamos la clave publica del usuario en:
# nano /home/NuevoUsuario/.ssh/authorized_keys
# chmod 400 /home/NuevoUsuario/.ssh/authorized_keys
# chown NuevoUsuario:NuevoUsuario /home/NuevoUsuario -R
# nano /etc/ssh/sshd_config
PasswordAuthentication no
# service ssh restart



Referencias: https://openwebinars.net/10-minutos-para-securizar-tu-servidor/
https://www.digitalocean.com/community/tutorials/how-to-use-tripwire-to-detect-server-intrusions-on-an-ubuntu-vps

No hay comentarios:

Publicar un comentario