Cualquiera que tenga una ip en internet está expuesto a ataques, algo muy común es ver este tipo de entradas en los logs de apache.
client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
Alguién o algo está intentando encontrar una vulnerabilidad en tu equipo.
Para solucionarlo basta con instalar fail2ban y habilitar los filtros y configuración jail:
1- Instalamos fail2ban si no lo hemos instalado todavía:
sudo apt-get install fail2ban
2- Creamos el filtro apache-scan.conf:
# Fail2Ban configuration file # # Author: Andreas Florath # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>\S+) # Values: TEXT # failregex = [[]client <HOST>[]] File does not exist: /var/www/2phpmyadmin [[]client <HOST>[]] File does not exist: /var/www/admin [[]client <HOST>[]] File does not exist: /var/www/administrator [[]client <HOST>[]] File does not exist: /var/www/database [[]client <HOST>[]] File does not exist: /var/www/db [[]client <HOST>[]] File does not exist: /var/www/dbadmin [[]client <HOST>[]] File does not exist: /var/www/images [[]client <HOST>[]] File does not exist: /var/www/myadmin [[]client <HOST>[]] File does not exist: /var/www/MyAdmin [[]client <HOST>[]] File does not exist: /var/www/mysql [[]client <HOST>[]] File does not exist: /var/www/mysqladmin [[]client <HOST>[]] File does not exist: /var/www/mysql-admin [[]client <HOST>[]] File does not exist: /var/www/mysqlmanager [[]client <HOST>[]] File does not exist: /var/www/phpmy [[]client <HOST>[]] File does not exist: /var/www/phpmyadmin [[]client <HOST>[]] File does not exist: /var/www/php-myadmin [[]client <HOST>[]] File does not exist: /var/www/phpmy-admin [[]client <HOST>[]] File does not exist: /var/www/phpmyAdmin [[]client <HOST>[]] File does not exist: /var/www/phpMyadmin [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin [[]client <HOST>[]] File does not exist: /var/www/phpmyadmin2 [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.5.1-all-languages [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.6-all-languages [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.7.1-all-languages [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.7.1-all-languages-utf-8-only [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.8.1-all-languages [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.8.1-all-languages-utf-8-only [[]client <HOST>[]] File does not exist: /var/www/phppma [[]client <HOST>[]] File does not exist: /var/www/pma [[]client <HOST>[]] File does not exist: /var/www/PMA [[]client <HOST>[]] File does not exist: /var/www/program [[]client <HOST>[]] File does not exist: /var/www/qql [[]client <HOST>[]] File does not exist: /var/www/sql [[]client <HOST>[]] File does not exist: /var/www/sqlmanager [[]client <HOST>[]] File does not exist: /var/www/sqlweb [[]client <HOST>[]] File does not exist: /var/www/webadmin [[]client <HOST>[]] File does not exist: /var/www/webdb [[]client <HOST>[]] File does not exist: /var/www/websql [[]client <HOST>[]] File does not exist: /var/www/e107_files [[]client <HOST>[]] File does not exist: /var/www/db [[]client <HOST>[]] File does not exist: /var/www/e107 [[]client <HOST>[]] File does not exist: /var/www/site [[]client <HOST>[]] File does not exist: /var/www/web [[]client <HOST>[]] File does not exist: /var/www/forum # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
3- Creamos el filtro apache-w00t.conf:
vi /etc/fail2ban/filter.d/apache-w00t.conf
# Fail2Ban configuration file # # Author: Andreas Florath # [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. The # host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&lt;host&gt;&amp;quot; can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P&lt;host&gt;\S+) # Values: TEXT # failregex = [[]client []] client sent HTTP/1\.1 request without hostname \(see RFC2616 section 14\.23\): \/w00tw00t.at.ISC.SANS.DFind:\) # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
4. Añadimos estas lineas a jail.local o jail.conf en su defecto.
vi /etc/fail2ban/jail.local
# # You might want to incrase the bantime # bantime = 133201 # # Add the following # [apache-w00t] enabled = true port = http,https filter = apache-w00t logpath = /var/log/apache*/*error.log maxretry = 1 [apache-scan] enabled = true port = http,https filter = apache-scan logpath = /var/log/apache*/*error.log maxretry = 1
5. Por último reiniciamos fail2ban
service fail2ban restart
NOTA IMPORTANTE: Habilitar fail2ban sólo reduce la posibilidad del ataque. Si hay aplicaciones obsoletas o problemáticas en tu equipo probablemente consigan hackearlo!
Holas , excelente post añadiré estos filtros en cuanto pueda a mi fail2ban .
Podrías hacer un post que enseñé como hacer un filtro para phpmyadmin , pues he intentado crear , copiando y pegando , una jail para esto y no me ha salido bien . Resulta que el al reiniciar el fail2ban para activar el filtro me dice fail , lo he probado con 2 filtros diferentes .
Si pregunto alguna barbaridad que conste que soy ultranovato en esto .
[apache-phpmyadmin]
enabled = true
port = http,https
filter = apache-phpmyadmin
logpath = /var/log/apache*/*error.log
maxretry = 3
# Fail2Ban configuration file
#
# Bans bots scanning for non-existing phpMyAdmin installations on your webhost.
#
# Author: Gina Haeussge
#
[Definition]
docroot = /var/www
badadmin = PMA|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2
# Option: failregex
# Notes.: Regexp to match often probed and not available phpmyadmin paths.
# Values: TEXT
#
failregex = [[]client []] File does not exist: %(docroot)s/(?:%(badadmin)s)
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
y este otro
[apache-myadmin]
enabled = true
port = http,https
filter = apache-myadmin
banaction = iptables-allports
action = %(action_mwl)s
logpath = /var/log/apache*/*error.log
maxretry = 2
[Definition]
failregex = ^[[]client []] File does not exist: *myadmin* *\s*$
^[[]client []] File does not exist: *MyAdmin* *\s*$
^[[]client []] File does not exist: *mysqlmanager* *\s*$
^[[]client []] File does not exist: *setup.php* *\s*$
^[[]client []] File does not exist: *mysql* *\s*$
^[[]client []] File does not exist: *phpmanager* *\s*$
^[[]client []] File does not exist: *phpadmin* *\s*$
^[[]client []] File does not exist: *sqlmanager* *\s*$
^[[]client []] File does not exist: *sqlweb* *\s*$
^[[]client []] File does not exist: *webdb* *\s*
ignoreregex =
No se si es por tener un script con las reglas de iptables ya predefinidas que hay alguna incompatibilidad , aunque me parece que no tendría que haberla en un principio .
Perdón por el ladrillo .
Gracias .
Que buena idea @babyadmin ! Pero ten en cuenta que lo que estás haciendo es un ban para los bots que intentan detectar dónde está tu instalación de phpmyadmin, no un bloqueo de fuerza bruta.
Para crear un filtro de fail2ban que bloquee los ataques bruteforce de phpmyadmin lo primero que necesitamos es un log con los intentos fallidos de entrada. Esto no lo hace phpmyadmin por defecto, pero puedes usar apache para registrar estos intentos fallidos. Como es un poco extenso, he creado este post donde explico cómo hacerlo: http://hackeandoelgenoma.com/?p=1196
Por otro lado, si lo que quieres es bloquear a los bots que intentan rastrear tu instalación phpmyadmin, entonces, vas por el camino correcto, pero sin conocer el error exacto que te está dando es un poco difícil, así a primera vista creo que te falta lo siguiente en el filtro:
[INCLUDES]
# Read common prefixes. If any customizations available — read them from
# common.local
before = common.conf
He creado otro post donde te explico paso a paso cómo hacerlo: http://hackeandoelgenoma.com/?p=1192
Mil gracias por responder y por los dos post que has creado , me interesan las dos maneras de proteger phpmyadmin.
Ya averigué por que me daba fail el programa , resulta que en la carpeta filter.d escribía el archivo como apache-phpmyadmin.con en lugar de apache-phpmyadmin.conf , es decir era error tipográfico.
Con esto solucionado continué configurando el fail2ban con la ayuda de tus nuevos posts .
El de «bloquear a los bots que intentan rastrear tu instalación phpmyadmin» no he comprobado si me funciona o no , aunque en principio parece que si pero el de «crear un filtro de fail2ban que bloquee los ataques bruteforce de phpmyadmin» pues no me salen errores pero no banea y el archivo /var/log/apache2/phpmyadmin_access.log está vacío.
Se me escapan muchas cosas (LogFormat/CustomLog, apache_note,mod_php, mod_fcgi) asin que seguiré estudiando el tema .