Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Instalar y configurar Fail2ban


Fail2ban ("si fallas te baneo") es una aplicación escrita en Python para la prevención de intrusos en un sistema, permite bloquear y avisar de las conexiones remotas que intentan ataques por fuerza bruta (Brutus, TCH-Hydra, Medusa, ncrack) o acceso no autorizados. Fail2ban no sólo sirve para detectar los típicos ataques de fuerza bruta a servicios tan populares como ssh (Secure Shell) o FTP, también admite reglas mediante expresiones regulares para detectar intrusiones y ataques en Apache (error_log y mod_security), MySQL, Bind (named).






Fail2Ban utiliza Python para revisar los logs de acceso y detectar los intentos de intrusión por fuerza bruta, creando reglas en el archivo de iptables para bloquear el acceso a ciertas IPs. En ocasiones, si miramos el log de intentos de acceso SSH o FTP, veremos que es inmenso, pudiéndose producir ataques incluso cada segundo si no tomamos las medidas adecuadas.

Su principal función es securizar un servidor del siguiente modo:

  1. Evitando accesos indeseados a nuestro equipo o servidor.
  2. Evitando ataques de fuerza bruta para que un tercero averigüe nuestra contraseña o tumbe el servidor.

Fail2ban viene preconfigurado de forma predeterminada para poder usarse en multitud de servicios como por ejemplo los siguientes:

  1. SSH
  2. Servidores web como por ejemplo lighttpd, nginx y Apache
  3. Servidores ftp como por ejemplo vsftpd, proftpd, pure-ftpd. wuftpd
  4. En servidores de email como por ejemplo Postfix, exim, squirrelmail, Courier, dovecot, sasl, etc.
  5. Servicios de proxy como Squid.
  6. Otros servicios como Asterisk, FreeSWITCH, Drupal, WordPress, etc.
  7. etc.
Fail2ban monitoriza y lee los logs del servidor en busca de patrones:

  • /var/log/auth.log
  • /var/log/secure
  • etc

Instalación

CentOS/Red Hat (hay que usar un repositorio EPEL o tipo atrpms, rpmfusion, rpmforge, para una versión actualizada)

sudo yum install epel-release
yum install fail2ban

sudo systemctl enable fail2ban 

Debian/Ubuntu:

apt-get update && apt-get -y upgrade
apt-get install fail2ban

Instalación manual desde las fuentes (código fuente)
cd /usr/src
wget https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.8.13
tar xvzf fail2ban-0.8.13.tar.gz
cd fail2ban-0.8.13
python setup.py install
cp /usr/src/fail2ban-0.8.13/files/redhat-initd /etc/init.d/fail2ban
chmod 755 /etc/init.d/fail2ban


Repositorio fail2ban

git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py install  

Arrancar el servicio:
service fail2ban start

Ten en cuenta que el script de inicio / servicio del sistema no se instala automáticamente. Para habilitar fail2ban como un servicio automático, simplemente copia el script para su distribución desde el directorio de archivos a /etc/init.d. Ejemplo (en un sistema basado en Debian):

cp files/debian-initd /etc/init.d/fail2ban

update-rc.d fail2ban defaults

service fail2ban start

Comprobar si está en ejecución:

fail2ban-client -V 

Para ver si está realmente funcionando y  ver las jaulas:
service fail2ban status
Fail2ban (pid 21740) is running...
Status
|- Number of jail:      1
`- Jail list:           proftpd-iptables
 Comprobar si responde:
 fail2ban-client ping
Server replied: pong

Nota: Desde v0.10, fail2ban admite la coincidencia de direcciones IPv6.

Estructura de Directorios Fail2ban


Fail2abn se instala en:

/etc/fail2ban
Archivo de configuración de jaulas  (la versión personalizable de jail.conf) 

/etc/fail2ban/jail.local

Filtros

/etc/fail2ban/filter.d/

La función de los filtros es definir las expresiones regulares para detectar autenticaciones erróneas o ataques a nuestro equipo o servicio.

Una vez definida una expresión regular se irá comprobando que esta expresión no aparezca en ninguno de los logs de autenticación de nuestros servicios. En el caso que la expresión regular aparezca en los logs se contabilizará un intento fallido de autenticación.

Si pretendemos usar los servicios estándares predeterminados de fail2ban no será necesario modificar ni crear ningún filtro. 

Acciones:

/etc/fail2ban/action.d/

En esta ruta se guardan la totalidad de scripts que definen diferentes tipos de acciones a aplicar cuando se detecta un intento de ataque, se arranca alguna de las jaulas, etc.

En principio no tendremos que modificar ni configurar parámetro de este apartado. Fail2ban ya trae predefinidas multitud de acciones. 

Integración con la API de AbuseIPDB



AbuseIPDB es un proyecto dedicado a ayudar a los administradores de sistemas y webmasters a verificar e informar las direcciones IP que están involucradas en actividades maliciosas como spam, intentos de pirateo, ataques DDoS, etc.

Proporcionan una API gratuita para informar sobre direcciones IP maliciosas detectadas en sus sistemas y para verificar las direcciones IP en busca de actividad maliciosa informada.

La capacidad de denunciar direcciones IP abusivas directamente a AbuseIPDB se agregó al repositorio principal de Fail2Ban en la v0.10.0 (enero de 2017)

En el fichero de configuración;
/etc/fail2ban/action.d/abuseipdb.conf

Debes añadir dos parámetros obligatorios:

  • API Key --> abuseipdb_apikey="XXX"
  • Categoría Abuso --> abuseipdb_category="XX" (ejemplo 18 (Brute Force Attacks) 22 (SSH)
Añadir en la jaula el action nuevo:

[ssh]
enabled = true
action = iptables[name=SSH, port=22, protocol=tcp]
abuseipdb[abuseipdb_apikey="XXX", abuseipdb_category="18,22"]

Ejemplo añadir reporte mod_security2 de Apache

[modsec]
enabled = true
filter = modsec
action = abuseipdb[abuseipdb_apikey=xxx, abuseipdb_category=15,21]
iptables-multiport[name=ModSec, port="http,https"]
logpath = /var/log/httpd/modsec_audit.log
bantime = 86400
maxretry = 3
/etc/fail2ban/filter.d/apache-modsecurity.conf

# Fail2Ban apache-modsec filter
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# apache-common.local
before = apache-common.conf

[Definition]


failregex = ^%(_apache_error_client)s(?: \[client [^\]]+\])? ModSecurity:\s+(?:\[(?:\w+ \"[^\"]*\"|[^\]]*)\]\s*)*Access denied with code [45]\d\d

ignoreregex =

# https://github.com/SpiderLabs/ModSecurity/wiki/ModSecurity-2-Data-Formats
# Author: Daniel Black
# Sergey G. Brester aka sebres (review, optimization)

Reiniciar para cargar la nueva configuración:

fail2ban-client reload 


Instrucciones completas

Ejemplo reportes automáticos:

 Fichero Configuración principal /etc/fail2ban/fail2ban.conf


[Definition]
# Option:  loglevel
# Notes.:  Set the log level output.
#          1 = ERROR
#          2 = WARN
#          3 = INFO
#          4 = DEBUG
# Values:  NUM  Default:  3
#
loglevel = 3
# Option:  logtarget
# Notes.:  Set the log target. This could be a file, SYSLOG, STDERR or STDOUT.
#          Only one log target can be specified.
#          If you change logtarget from the default value and you are
#          using logrotate -- also adjust or disable rotation in the
#          corresponding configuration file
#          (e.g. /etc/logrotate.d/fail2ban on Debian systems)
# Values:  STDOUT STDERR SYSLOG file  Default:  /var/log/fail2ban.log
#
logtarget = SYSLOG
# Option: socket
# Notes.: Set the socket file. This is used to communicate with the daemon. Do
#         not remove this file when Fail2ban runs. It will not be possible to
#         communicate with the server afterwards.
# Values: FILE  Default:  /var/run/fail2ban/fail2ban.sock
#
socket = /var/run/fail2ban/fail2ban.sock
# Option: pidfile
# Notes.: Set the PID file. This is used to store the process ID of the
#         fail2ban server.
# Values: FILE  Default:  /var/run/fail2ban/fail2ban.pid
#
pidfile = /var/run/fail2ban/fail2ban.pid


Fichero Configuración "Jaulas" (Jail) /etc/fail2ban/jail.conf

Se puede especificar parámetros como bantime en días (d) semanas (w)

Ejemplo:
bantime = 3d

  • years?, yea?, yy?
  • months?, mon?
  • weeks?, wee?, ww?
  • days?, da, dd?
  • hours?, hou?, hh?
  • minutes?, min?, mm?
  • seconds?, sec?, ss?

Fichero configuración (antes jail.conf)

/etc/fail2ban/jail.local 

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8 192.168.0.1/24
# "bantime" is the number of seconds that a host is banned.
# 1 hora
bantime  = 3600
# 10 minutos
#bantime  = 600
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
# "backend" specifies the backend used to get files modification.
# Available options are "pyinotify", "gamin", "polling" and "auto".
# This option can be overridden in each jail as well.
#
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
#              If pyinotify is not installed, Fail2ban will use auto.
# gamin:     requires Gamin (a file alteration monitor) to be installed.
#              If Gamin is not installed, Fail2ban will use auto.
# polling:   uses a polling algorithm which does not require external libraries.
# auto:      will try to use the following backends, in order:
#              pyinotify, gamin, polling.
backend = auto
# "usedns" specifies if jails should trust hostnames in logs,
#   warn when DNS lookups are performed, or ignore all hostnames in logs
#
# yes:   if a hostname is encountered, a DNS lookup will be performed.
# warn:  if a hostname is encountered, a DNS lookup will be performed,
#        but it will be logged as a warning.
# no:    if a hostname is encountered, will not be used for banning,
#        but it will be logged as info.
usedns = warn

# This jail corresponds to the standard configuration in Fail2ban 0.6.
# The mail-whois action send a notification e-mail with a whois request
# in the body.
[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com]
logpath  = /var/log/secure
maxretry = 5
[proftpd-iptables]
enabled  = true
filter   = proftpd
action   = iptables[name=ProFTPD, port=ftp, protocol=tcp]
           sendmail-whois[name=ProFTPD, dest=webmaster@elhacker.net]
logpath  = /var/log/proftpd/proftpd.log
maxretry = 6
Ejemplo de lo que buscará Fail2ban en la jaula de SSH
cat /var/log/secure | grep 'Failed password' | sort | uniq -c
Directivas
  • bantime = Número de segundos en el cual una dirección IP permanecerá prohibida (10 min por defecto).
  • findtime = Cantidad de tiempo entre intentos de inicio de sesión, antes de que se elimine el host. (predeterminado 10 min).
  • maxretry = Número de intentos que deben realizarse antes de que se aplique una prohibición. (por defecto 3 intentos).

El resto de parámetros de la sección los adaptaremos en función de nuestras necesidades. El significado de los parámetros que nos podemos encontrar dentro de una sección es el siguiente:


  • enabled = Con los valores true y false activamos y desactivamos la protección que ofrece fail2ban para un determinado servicio.
  • port = Definición de los puertos en que están trabajando los servicios que queremos proteger
  • filter = Se define el nombre del filtro a aplicar para detectar intentos de autenticación fallidos. Para ver la totalidad de filtros disponibles se puede visitar la ubicación /etc/fail2ban/filter.
  • logpath = Definición del log a monitorizar para detectar los intentos fallidos de autenticación.
  • maxretry =Número de intentos de autenticación máximos fallidos antes de aplicar una acción de bloqueo.
  • action =Para definir las acciones de bloqueo que se aplicarán en cada uno de los servicios que queremos proteger. La totalidad de acciones disponibles se hallan en la ubicación /etc/fail2ban/action.d
  • findtime = Definimos el tiempo ha transcurrir para que el contador de intentos fallidos de una determinada IP se resetee.
  • bantime = Definimos el tiempo en segundos que queremos bloquear una determinada IP. Normalmente un valor de 600 segundos es más que apropiado.

Nota: Si la sección de un servicio no dispone de los parámetros mencionados en la tabla, entonces toman se toman los parámetros por defecto configurados en la sección [DEFAULT].

A continuación, dentro de la sección [ACTIONS] localizamos y configuramos los siguientes parámetros del fichero de configuración:

Parámetro a configurar para recibir avisos por e-mail

  • destemail =Introducimos la dirección de email de gmail, hotmail, etc en la que queremos recibir los avisos.
  • sendername = En este apartado figurará el nombre de la persona o servicio que nos enviará el email. En mi caso dejo el valor por defecto que es:Fail2Ban
  • sender = En el apartado sender introducimos la dirección con la que fail2ban enviará los emails. Como vimos al inicio de este apartado en mi caso tengo que introducir: fail2ban@elhacker.net
  • mta =Tenemos que asegurar que este parámetro sea: sendmail
  • action = Dentro del archivo de configuración encontrarán varios valores para este campo. Para que se envíen las notificaciones podemos usar los siguientes valores: %(action_mw)s o %(action_mw)s

Una vez modificados la totalidad de parámetros guardamos los cambios y salimos del fichero. Para que los cambios se hagan efectivos ejecutamos el siguiente comando para reiniciar fail2ban.


También podemos usar (unir) fail2ban para banear ip's automáticamente usando la API v2 de CloudFlare. Encontrarás algunos manuales al respecto en inglés. Recuerda usar siempre la API v2, porque la API v1 no funcionará. Por lo que poco que he leído se pueden banear hasta 5.000 ip's (aunque el firewall son solo 20 reglas) usan IP Access Rules ya que el límite es mucho mayor

Filtros de las Jails (Jaulas, Cárcel) /etc/fail2ban/filter.d

Filtros para

  • 3proxy.conf
  • apache-auth.conf
  • apache-badbots.conf
  • apache-botsearch.conf
  • apache-common.conf
  • apache-fakegooglebot.conf
  • apache-modsecurity.conf
  • apache-nohome.conf
  • apache-noscript.conf
  • apache-overflows.conf
  • apache-pass.conf
  • apache-shellshock.conf
  • assp.conf
  • asterisk.conf
  • bitwarden.conf
  • botsearch-common.conf
  • centreon.conf
  • common.conf
  • counter-strike.conf
  • courier-auth.conf
  • courier-smtp.conf
  • cyrus-imap.conf
  • directadmin.conf
  • domino-smtp.conf
  • dovecot.conf
  • dropbear.conf
  • drupal-auth.conf
  • ejabberd-auth.conf
  • exim-common.conf
  • exim-spam.conf
  • exim.conf
  • freeswitch.conf
  • froxlor-auth.conf
  • gitlab.conf
  • grafana.conf
  • groupoffice.conf
  • gssftpd.conf
  • guacamole.conf
  • haproxy-http-auth.conf
  • horde.conf
  • kerio.conf
  • lighttpd-auth.conf
  • mongodb-auth.conf
  • monit.conf
  • murmur.conf
  • mysqld-auth.conf
  • nagios.conf
  • named-refused.conf
  • nginx-bad-request.conf
  • nginx-botsearch.conf
  • nginx-http-auth.conf
  • nginx-limit-req.conf
  • nsd.conf
  • openhab.conf
  • openwebmail.conf
  • oracleims.conf
  • pam-generic.conf
  • perdition.conf
  • php-url-fopen.conf
  • phpmyadmin-syslog.conf
  • portsentry.conf
  • postfix.conf
  • proftpd.conf
  • pure-ftpd.conf
  • qmail.conf
  • recidive.conf
  • roundcube-auth.conf
  • screensharingd.conf
  • selinux-common.conf
  • selinux-ssh.conf
  • sendmail-auth.conf
  • sendmail-reject.conf
  • sieve.conf
  • slapd.conf
  • softethervpn.conf
  • sogo-auth.conf
  • solid-pop3d.conf
  • squid.conf
  • squirrelmail.conf
  • sshd.conf
  • stunnel.conf
  • suhosin.conf
  • tine20.conf
  • traefik-auth.conf
  • uwimap-auth.conf
  • vsftpd.conf
  • webmin-auth.conf
  • wuftpd.conf
  • xinetd-fail.conf
  • znc-adminlog.conf
  • zoneminder.conf 

Acciones a tomar /etc/fail2ban/action.d


  • abuseipdb.conf
  • apf.conf
  • badips.conf
  • badips.py
  • blocklist_de.conf
  • bsd-ipfw.conf
  • cloudflare.conf
  • complain.conf
  • dshield.conf
  • dummy.conf
  • firewallcmd-allports.conf
  • firewallcmd-common.conf
  • firewallcmd-ipset.conf
  • firewallcmd-multiport.conf
  • firewallcmd-new.conf
  • firewallcmd-rich-logging.conf
  • firewallcmd-rich-rules.conf
  • helpers-common.conf
  • hostsdeny.conf
  • ipfilter.conf
  • ipfw.conf
  • iptables-allports.conf
  • iptables-common.conf
  • iptables-ipset-proto4.conf
  • iptables-ipset-proto6-allports.conf
  • iptables-ipset-proto6.conf
  • iptables-multiport-log.conf
  • iptables-multiport.conf
  • iptables-new.conf
  • iptables-xt_recent-echo.conf
  • iptables.conf
  • mail-buffered.conf
  • mail-whois-common.conf
  • mail-whois-lines.conf
  • mail-whois.conf
  • mail.conf
  • mynetwatchman.conf
  • netscaler.conf
  • nftables-allports.conf
  • nftables-multiport.conf
  • nftables.conf
  • nginx-block-map.conf
  • npf.conf
  • nsupdate.conf
  • osx-afctl.conf
  • osx-ipfw.conf
  • pf.conf
  • route.conf
  • sendmail-buffered.conf
  • sendmail-common.conf
  • sendmail-geoip-lines.conf
  • sendmail-whois-ipjailmatches.conf
  • sendmail-whois-ipmatches.conf
  • sendmail-whois-lines.conf
  • sendmail-whois-matches.conf
  • sendmail-whois.conf
  • sendmail.conf
  • shorewall-ipset-proto6.conf
  • shorewall.conf
  • smtp.py
  • symbiosis-blacklist-allports.conf
  • ufw.conf
  • xarf-login-attack.conf

Reportes syslog

May 28 12:09:34 ns2 fail2ban.jail : INFO Jail 'proftpd-iptables' stopped
May 28 12:09:35 ns2 fail2ban.server : INFO Exiting Fail2ban
May 28 12:09:36 ns2 fail2ban.server : INFO Changed logging target to SYSLOG for Fail2ban v0.8.10
May 28 12:09:36 ns2 fail2ban.jail : INFO Creating new jail 'proftpd-iptables'
May 28 12:09:36 ns2 fail2ban.jail : INFO Jail 'proftpd-iptables' uses pyinotify
May 28 12:09:36 ns2 fail2ban.jail : INFO Initiated 'pyinotify' backend
May 28 12:09:36 ns2 fail2ban.filter : INFO Added logfile = /var/log/auth.log
May 28 12:09:36 ns2 fail2ban.filter : INFO Set maxRetry = 6
May 28 12:09:36 ns2 fail2ban.filter : INFO Set findtime = 600
May 28 12:09:36 ns2 fail2ban.actions: INFO Set banTime = 3600
May 28 12:09:36 ns2 fail2ban.jail : INFO Jail 'proftpd-iptables' started

 

Ejemplos

Reporte ip baneada:
May 28 15:56:13 ns2 fail2ban.actions: WARNING [proftpd-iptables] Ban 195.70.62.71
May 28 16:56:14 ns2 fail2ban.actions: WARNING [proftpd-iptables] Unban 195.70.62.71

Ver Regla en iptables (action iptables)

iptables -L
o mejor:
service iptables status
Resultado:
fail2ban-ProFTPD tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21

Chain fail2ban-ProFTPD (1 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Ip baneada:
 
Chain fail2ban-ProFTPD (1 references)
num  target     prot opt source       destination
1    REJECT     all  --  195.70.62.71  0.0.0.0/0  reject-with icmp-port-unreachable 
 
Para borrar la última ip baneada:

# iptables -D fail2ban-ProFTPD 1

Para ver el estado:
fail2ban-client status proftpd-iptables
Status for the jail: proftpd-iptables
|- filter
|  |- File list:        /var/log/secure
|  |- Currently failed: 0
|  `- Total failed:     384
`- action
   |- Currently banned: 2
   |  `- IP list:       85.25.72.71 175.44.5.140
   `- Total banned:     33
Para ver el estado de todas las jaulas:

fail2ban-client status

Resultado:

Status

|- Number of jail:      13

`- Jail list:   apache-auth, apache-modsecurity, apache-noscript, dovecot, http-get-dos, pam-generic, postfix, postfix-rbl2, proftpd, proftpd-custom, sasl, sshd, webmin-auth

 

Para añadir manualmente una ip a una jaula:

 fail2ban-client -vvv set http-get-dos banip <IP>


 
Si aparecen errores con iptables en el log:


fail2ban.actions.action: ERROR iptables -N fail2ban-SSH


#012


iptables -A fail2ban-SSH -j RETURN


#012


iptables -I INPUT -p tcp --dport ssh -j fail2ban-SSH returned 300


Es debido a los permisos aplicados por SELinux

restorecon -R -v /sbin/


Reporte por e-mail (acción sendmail-whois.conf)

 Hi,

The IP 195.70.62.71 has just been banned by Fail2Ban after
6 attempts against ProFTPD.


Here are more information about 195.70.62.71:

[Querying whois.ripe.net]
[whois.ripe.net]
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.pdf

% Note: this output has been filtered.
%       To receive output for a database update, use the "-B" flag.

% Information related to '195.70.62.0 - 195.70.62.255'

% Abuse contact for '195.70.62.0 - 195.70.62.255' is 'net-admin@datanet.hu'

inetnum:        195.70.62.0 - 195.70.62.255
netname:        INTERWARE
descr:          InterWare Inc.
descr:          IPs for Server Hosting
country:        HU
admin-c:        IWNA1-RIPE
tech-c:         IWNA1-RIPE
remarks:        rev-srv:        ns1.interware.hu
remarks:        rev-srv:        ns2.interware.hu
status:         ASSIGNED PA
mnt-by:         AS8358-MNT
source:         RIPE # Filtered
remarks:        rev-srv attribute deprecated by RIPE NCC on 02/09/2009

role:           InterWare Network Administration
address:        InterWare Inc.
address:        Victor Hugo u. 18-22.
address:        H-1132 Budapest
address:        Hungary
phone:          +36 1 4525300
fax-no:         +36 1 4525301
admin-c:        ZR1-RIPE
admin-c:        AN845-RIPE
tech-c:         MK1117-RIPE
tech-c:         AN845-RIPE
tech-c:         ZR1-RIPE
nic-hdl:        IWNA1-RIPE
mnt-by:         AS8358-MNT
org:            ORG-IL7-RIPE
remarks:        ------------------------------
---------------
remarks:        Please send all abuse and spam complaints to:
remarks:        noc@interware.hu
remarks:        abuse@interware.hu
remarks:        ---------------------------------------------
source:         RIPE # Filtered

% Information related to '195.70.32.0/19AS5588'

route:          195.70.32.0/19
descr:          GTS Hungary Ltd.
descr:          HU
origin:         AS5588
mnt-by:         AS8358-MNT
source:         RIPE # Filtered

% Information related to '195.70.32.0/19AS8358'

route:          195.70.32.0/19
descr:          InterWare Inc.
descr:          HU
origin:         AS8358
mnt-by:         AS8358-MNT
source:         RIPE # Filtered

% This query was served by the RIPE Database Query Service version 1.73.1 (DBC-WHOIS3)

Regards,

Fail2Ban

1 comentarios :

Unknown dijo...

Alex para windows que? ajaj

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.