Cada vez más personas utilizan hosts VPS para crear sitios web, pero en comparación con los hosts virtuales o servidores administrados, los hosts VPS personales son básicamente no administrados, es decir, el proveedor del host solo es responsable de la fluidez de la red del host VPS. Tienes que resolverlo por tu cuenta. En el pasado, los hosts VPS utilizados por Alibaba Cloud a menudo eran atacados por CC y DDOS. Básicamente, cada vez que eran atacados, entraban en el "agujero negro" de Alibaba Cloud.

Los hosts VPS de Alibaba Cloud para CC y DDOS generalmente no pueden defenderse de demasiado tráfico. Una vez que aumenta el tráfico de ataques, las rutas básicamente se despejan. Si hay demasiados ataques, incluso habrá un "agujero negro" durante uno o varios días. . Ahora he movido mi sitio web al portero CN2 VPS clásico. He recibido recordatorios de amigos entusiastas de que el portero solo trata CC y DDOS tres veces, y bloqueará directamente el VPS.

Este ataque también me enseñó que aún debo tener cuidado al colocar mi sitio web en un servidor VPS clásico. No pude abrir el sitio al principio, y luego los mensajes de muchos amigos me recordaron que inmediatamente inicié sesión en el backend del proveedor de alojamiento para verificar. En el gráfico de monitoreo, puedo ver que el uso de CPU del VPS excedió. 100% y la velocidad del ancho de banda superó los cientos de MB, aparentemente el proveedor de alojamiento desconectó el VPS.

Este artículo compartirá con amigos que usan servidores VPS para crear sitios web, los pasos básicos para lidiar con pequeños ataques CC y DDOS, que básicamente giran en torno al bloqueo de IP maliciosas a través de firewalls.

Ideas básicas para la defensa contra ataques de host VPS contra CC y DDOS: estrategia de bloqueo de firewall anti-escaneo

Para obtener más seguridad del sitio web y experiencia en la construcción de sitios web, existen:

  1. Cinco consejos de seguridad para usar un panel de control VPS gratuito: no dejes que los piratas informáticos se aprovechen
  2. Experiencia de optimización de php-fpm de Linux: el proceso php-fpm ocupa mucha memoria y no libera problemas de memoria
  3. La resolución de nombres de dominio DNS permite que DNSSEC evite el secuestro de DNS: configuración de DNS de Google Cloud DNSSEC

PD: Actualizado el 6 de marzo de 2018, Si desea evitar que IP específicas accedan al sitio web, puede utilizar este método: Bloqueo de sitios web y configuración de bloqueo de acceso IP para regiones y países específicos: código PHP/Nginx / Configuración de WordPress.

PD: Actualizado el 19 de marzo de 2020 , si su sitio web ha sido pirateado, puede consultar los siguientes métodos para resolver el problema: Troyanos de sitios web y análisis de solución de problemas de piratería de servidores: métodos de seguridad del servidor y host VPS.

1. Haga su tarea con anticipación cuando trabaje con CC y DDOS

Puede juzgar rápidamente el ataque actual con los siguientes dos comandos: Ingrese el siguiente comando para ver la cantidad de conexiones para una sola IP.

netstat -nat|grep -i '80'|wc -l

Ordene las IP conectadas por la cantidad de conexiones y vea el estado de la conexión TCP.

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

1.1  Copia de seguridad frecuente: combinación de copia de seguridad local y externa

La copia de seguridad del sitio web es una forma segura de hacer frente a los ataques CC y DDOS. Independientemente del ataque, siempre que los datos no se destruyan, podemos minimizar la pérdida. Para los datos que se actualizan con frecuencia, se recomienda realizar una copia de seguridad una vez al día. Algunos proveedores de alojamiento también proporcionarán funciones de copia de seguridad de instantáneas, como Alibaba Cloud, Tencent Cloud y la instantánea Linode presentada anteriormente.

Además de la copia de seguridad local, es natural realizar copias de seguridad externas. La copia de seguridad externa se puede combinar con el almacenamiento en la nube o el disco en la nube para guardar datos. El VPS de Linux compartido anteriormente puede cargar automáticamente los datos en el VPS al disco de red montando Google Drive y Dropbox, o usar el almacenamiento en la nube o la captura en la nube de DigitalOcean Spaces. , Qiniu Cloud Storage, Baidu BOS y otros almacenamientos en la nube profesionales.

1.2  Aprenda a verificar la carga del sistema VPS Linux

Una vez que sufrimos ataques CC y DDOS, generalmente podemos verificarlo a través del panel de control del proveedor de alojamiento VPS. Podemos ver "anomalías" obvias en nuestros datos de monitoreo. La siguiente imagen muestra el IO, CPU, memoria, etc. mostrados por el monitoreo del host VPS cuando fui atacado, mostrando una ocupación del 100%. (Click para agrandar)

2.2  Utilice Fail2ban para bloquear las IP atacantes

fail2ban es un software de monitoreo desarrollado en lenguaje Python. Llama a iptables para bloquear la IP de inicio de sesión correspondiente monitoreando la información de inicio de sesión del registro del sistema para evitar el acceso malicioso por parte de una determinada IP. fail2ban lee el archivo de registro correspondiente, Debian/Ubuntu:/var/log/auth.log, CentOS/Redhat:/var/log/secure. Instalar fail2ban:

apt-get install fail2ban

#CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
#安装fial2ban
yum -y install fail2ban

Una vez completada la instalación, los archivos de configuración principales se encuentran en el directorio /etc/fail2ban, que contiene dos archivos y dos directorios:

fail2ban.conf: el archivo de configuración define el nivel de registro, la ubicación del archivo de registro y el socket registrado por fail2ban.

jail.conf define los servicios que se van a monitorear y algunas estrategias utilizadas.

El comienzo de jail.conf es el bloque de configuración global predeterminado [DEFAULT]. La configuración predeterminada se describe a continuación:

[DEFAULT]
#忽略哪些IP,可以是具体IP、CIDR类型的地址,多个IP用空格分开
ignoreip = 127.0.0.1

#设置IP被锁住的时间,单位为秒
bantime  = 600

#检测时间,在此时间内超过规定的次数会激活fail2ban
findtime  = 600

#尝试的次数
maxretry = 3

#日志检测机器,有"gamin", "polling" and "auto"三种模式。
backend = polling

#发送报警邮件的地址
destemail = root@localhost #默认的动作执行行为,在action.d目录下有各种行为策略,默认是iptables-#multiport
banaction = iptables-multiport

#0.8.1版本后fail2ban默认用sendmail MTA
mta = sendmail

#默认使用tcp协议
protocol = tcp

#定义了各种行动的参数
#banaction参数在action.d目录下具体定义,name port protocol 也可以自己定义
#只禁止IP
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
#即禁止IP又发送email
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
              %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s]
#禁止IP、发送email、报告有关日志			  
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
               %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]

#如果没有定义行为,则默认的行为为action,可选择action_,action_mw, action_mwl 等		
action = %(action_)s

默认配置文件含有此模块
#定义子模块名
[ssh]
#是否激活
enabled = true
#定义port,可以是数字端口号表示,也可以是字符串表示
port= ssh
#过滤规则,在filter.d目录下定义
filter	= sshd
#检测日志的路径
logpath  = /var/log/auth.log
#尝试的次数,覆盖了全局配置的
maxretry = 6
#banaction 在action.d目录下定义,此参数值会替换action中选用的默认行为中定义的banaction参数
banaction = iptables-allports
#注意 port protocol banaction 可以不用分开定义,直接使用action定义也可以,例如:
#action   = iptables[name=SSH, port=ssh, protocol=tcp]
#在子模块中定义的port protocol banaction 都会在action_ action_mw, action_mwl中替换成具体的设置值。

Las otras funciones del directorio de Fail2ban se describen a continuación:

El directorio filter.d define reglas de filtrado basadas en archivos de registro, utilizando principalmente expresiones regulares para hacer coincidir palabras clave que causan errores.

El directorio action.d contiene qué tipo de acciones se deben tomar contra la IP correspondiente de acuerdo con las reglas de filtrado.

Ejemplo de ataque Fail2ban anti-CC:

#需要先新建一个nginx日志匹配规则
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =

Continúe modificando jail.local y agregue el siguiente contenido:

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 60
findtime = 60
bantime = 3600
logpath = /data/wwwlogs/wzfou.com_nginx.log

La configuración anterior significa que si la misma IP alcanza 60 solicitudes en 60 segundos, su IP será prohibida durante 1 hora. Recuerde modificar la ruta de registro de su sitio web. Utilice el siguiente comando para ver el estado de fail2ban y mostrar la lista de direcciones IP prohibidas.

/usr/local/python/bin/fail2ban-client status ssh-iptables

Después de guardar el código anterior, otorgue permiso x (ejecución). Para darte cuenta de que el Shell Script es similar a un demonio en segundo plano, necesitas usar nohup:

nohup 该shell script的位置 >/dev/null 2>&1 &

>/dev/null 2>&1 significa redirigir la salida de información ejecutando el script de shell (varios ecos en el script de shell, utilizados para depurar) a /dev/null. El & al final representa la ejecución en segundo plano. En este caso, incluso si cierra sesión, el Shell Script se seguirá ejecutando en segundo plano.

3. Resumen

He utilizado los dos scripts anteriores para detectar registros de sitios web en tiempo real y agregar automáticamente IP anormales a iptables para bloquear. Los resultados son muy buenos y pueden hacer frente a pequeños ataques CC. Actualmente, Fail2ban se utiliza para detectar registros de sitios web y bloquear direcciones IP maliciosas. Cada uno de los tres scripts tiene sus propias ventajas y puedes elegir según tus propias necesidades.

Sin embargo, si se encuentra con un ataque DDOS más grande, aún debe utilizar un servicio antiataque especializado. Por ejemplo, el servicio antiataque Cloudflare es muy eficaz. Básicamente, todos en la industria de VPS lo usan. Si su sitio web ha sido atacado y se vuelve inaccesible, puede actualizar Cloudflare a la versión paga, que brindará una mejor protección.

Deja una respuesta