Si queremos bloquear los nodos TOR para evitar que se conecten desde dicha red que en muchos casos se suele usar para atacar dado el grado de anonimato que proporciona, podemos usar el siguiente script:
#!/bin/bash# Block Tor Exit nodesIPTABLES_TARGET="DROP"IPTABLES_CHAINNAME="TOR"if!iptables-LTOR-n>/dev/null2>&1;theniptables-NTOR>/dev/null2>&1iptables-IINPUT1-ptcp-jTORficd/tmp/echo-e"\n\tGetting TOR node list from dan.me.uk\n"wget-q-O-"https://www.dan.me.uk/torlist/"-USXTorBlocker/1.0>/tmp/full.torwget-q-O-"https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1"-USXTorBlocker/1.0--no-check-certificate>>/tmp/full.torsed-i's|^#.*$||g'/tmp/full.torCMD=$(cat/tmp/full.tor|sort|uniq|grep-o'[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')iptables-FTORforIPin$CMD;doletCOUNT=COUNT+1iptables-ATOR-s$IP-jDROPdoneiptables-ATOR-jRETURN
luego solo tenemos que poner un crontab para que se actualice periódicamente:
PortSentry
Una cosa que queremos es bloquear los posibles escaneos de red y de paso dar información no veraz para confundir a nuestros atacantes, para ello disponemos del paquete PortSentry.
Lo primero que tenemos que hacer es configurar nuestra ip o rango de trabajo en el fichero que sirve para ignorar los escaneos no sea que nos quedemos fuera.
Al arrancar el servicio, el contenido del archivo se añadirá al archivo /etc/portsentry/portsentry.ignore.
Utilizamos portsentry en modo avanzado para los protocolos TCP y UDP. Para ello, debe modificar
Por defecto PortSentry esta en modo detección solo pero a nosotros nos interesa que detecte y bloque los escaneos
Optamos por un bloqueo de personas maliciosas a través de iptables. Por lo tanto comentaremos en todas las líneas del archivo de configuración que comienzan con KILL_ROUTE excepto la de iptables
Por defecto PortSentry mete también los escaneos dentro del /etc/hosts.deny, gracias a la siguiente linea si no queremos que esto pase podemos comentarla.
Fail2ban
Otra cosa que no queremos es que la gente se ponga a dar martillazos contra nuestras puertas para intentar entrar para ello disponemos de la herramienta Fail2Ban.
La instalación predeterminada de Fail2ban viene con dos archivos de configuración, /etc/fail2ban/jail.conf y /etc/fail2ban/jail.d/defaults-debian.conf. No se recomienda modificar estos archivos, ya que pueden sobrescribirse cuando se actualiza el paquete.
Fail2ban lee los archivos de configuración en el siguiente orden. Cada archivo .local anula la configuración del archivo .conf:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
Copiamos la configuración por defecto que luego modificaremos, podríamos hacernos nosotros la configuración totalmente a mano.
Podemos cambiar la cantidad de intentos, el tiempo de baneo o el tiempo que hay entre los máximos intentos.
Si queremos estar atentos a las ips bloqueadas en todo momento podemos configurar un email para que nos notifique el sistema
Por defecto fail2ban tiene un montón de jaulas que podemos activar, por defecto en debian viene activada la del ssh por lo que no es necesario volver a activar, pero si queremos activar cualquier otra solo tenemos que añadir en su bloque de configuración enable=true
# "bantime" is the number of seconds that a host is banned.
bantime = 10m
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 10m
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = root@localhost
# Sender email address used solely for some actions
sender = root@<fq-hostname>
# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = sendmail
[apache-badbots]
# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.
enabled = true
port = http,https
logpath = %(apache_access_log)s
bantime = 48h
maxretry = 1