Mais e mais pessoas estão usando hosts VPS para construir sites, mas em comparação com hosts virtuais ou servidores gerenciados, os hosts VPS pessoais são basicamente não gerenciados. Ou seja, o provedor de hospedagem é responsável apenas pelo funcionamento da rede do host VPS. Você tem que descobrir isso sozinho. No passado, os hosts VPS usados ​​pelo Alibaba Cloud eram frequentemente atacados por CC e DDOS. Basicamente, cada vez que eram atacados, eles entravam no "buraco negro" do Alibaba Cloud.

Os hosts VPS do Alibaba Cloud para CC e DDOS geralmente não conseguem se defender contra muito tráfego. Uma vez que o tráfego de ataque aumenta, as rotas serão basicamente limpas. Se houver muitos ataques, haverá até um "buraco negro" por um ou vários dias. . Agora mudei meu site para o porteiro VPS CN2 clássico. Recebi lembretes de amigos entusiasmados de que o porteiro só trata CC e DDOS três vezes, bloqueará diretamente o VPS.

Esse ataque também me ensinou que ainda preciso ser cauteloso ao colocar meu site em um host VPS clássico. Não consegui abrir o site no início e fui lembrado por mensagens de muitos amigos que entrei imediatamente no backend do provedor de hospedagem para verificar. No gráfico de monitoramento, posso ver que o uso da CPU do VPS foi excedido. 100%, e a velocidade da largura de banda ultrapassou centenas de MB, aparentemente o VPS foi desconectado pelo provedor de hospedagem.

Este artigo irá compartilhar com amigos que usam hosts VPS para construir sites, os passos básicos para lidar com pequenos ataques CC e DDOS, que basicamente giram em torno do bloqueio de IPs maliciosos através de firewalls.

Ideias básicas para defesa de ataque de host VPS contra CC e DDOS - estratégia de bloqueio de firewall anti-varredura

Para mais segurança de sites e experiência na construção de sites, existem:

  1. Cinco dicas de segurança para usar um painel de controle VPS gratuito – não deixe que hackers aproveitem
  2. O processo de experiência de otimização php-fpm do Linux ocupa muita memória e não libera problemas de memória
  3. A resolução de nome de domínio DNS permite que o DNSSEC evite o sequestro de DNS - configurações de DNS do Google Cloud DNSSEC

PS: Atualizado em 6 de março de 2018, Se quiser impedir que IPs específicos acessem o site, você pode usar este método: Bloqueio de site e configurações de bloqueio de acesso IP para regiões e países específicos - código PHP/Nginx /Configurações do WordPress.

PS: Atualizado em 19 de março de 2020 , se o seu site foi invadido, você pode consultar os seguintes métodos para resolver o problema: Trojan de site e análise de solução de problemas de hacking de servidor - Host VPS e métodos de segurança aprimorados do servidor.

1. Faça sua lição de casa com antecedência ao lidar com CC e DDOS

Você pode avaliar rapidamente o ataque atual com os dois comandos a seguir: Digite o seguinte comando para visualizar o número de conexões para um único IP.

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

Classifique os IPs conectados pelo número de conexões e visualize o status da conexão TCP.

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

1.1  Combinação frequente de backup local e externo

O backup de sites é uma maneira infalível de lidar com ataques CC e DDOS. Independentemente do ataque, desde que os dados não sejam destruídos, podemos minimizar a perda. Para dados atualizados com frequência, é recomendado fazer backup uma vez por dia. Alguns provedores de hospedagem também fornecerão funções de backup de instantâneo, como Alibaba Cloud, Tencent Cloud e o instantâneo Linode introduzido anteriormente.

Além do backup local, é natural fazer backups externos. O backup externo pode ser combinado com armazenamento em nuvem ou disco em nuvem para salvar dados. O VPS Linux compartilhado anteriormente pode carregar automaticamente os dados do VPS para o disco de rede montando o Google Drive e o Dropbox, ou usar o armazenamento em nuvem ou gravação em nuvem do DigitalOcean Spaces. , Qiniu Cloud Storage, Baidu BOS e outros armazenamentos em nuvem profissionais.

1.2  Aprenda a verificar a carga do sistema Linux VPS

Uma vez que sofremos ataques CC e DDOS, geralmente podemos verificar através do painel de controle do provedor de hospedagem VPS. Podemos ver "anormalidades" óbvias em nossos dados de monitoramento. A imagem abaixo mostra 100% de IO, CPU, memória, etc. exibidos pelo monitoramento do host VPS quando fui atacado. (Clique para ampliar)

2.2  Use Fail2ban para bloquear IPs de ataque

fail2ban é um software de monitoramento desenvolvido em linguagem Python. Ele chama iptables para bloquear o IP de login correspondente, monitorando as informações de login do log do sistema para evitar acesso malicioso por um determinado IP. fail2ban lê o arquivo de log correspondente, Debian/Ubuntu:/var/log/auth.log, CentOS/Redhat:/var/log/secure. Instale o fail2ban:

apt-get install fail2ban

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

Após a conclusão da instalação, os principais arquivos de configuração estão no diretório /etc/fail2ban, que contém dois arquivos e dois diretórios:

fail2ban.conf: O arquivo de configuração define o nível de log, a localização do arquivo de log e o soquete registrado pelo fail2ban.

jail.conf define os serviços a serem monitorados e algumas estratégias utilizadas.

O início do jail.conf é o bloco de configuração global padrão [DEFAULT].

[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中替换成具体的设置值。

As outras funções de diretório do Fail2ban são descritas a seguir:

O diretório filter.d define regras para filtragem com base em arquivos de log, principalmente usando expressões regulares para combinar palavras-chave que causam erros.

O diretório action.d contém que tipo de ações devem ser tomadas contra o IP correspondente de acordo com as regras de filtragem.

Exemplo de ataque anti-CC Fail2ban:

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

Continue modificando jail.local e adicione o seguinte conteúdo:

[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

A configuração acima significa que se o mesmo IP atingir 60 solicitações em 60 segundos, seu IP será banido por 1 hora. Lembre-se de modificar o caminho de log do seu site. Use o seguinte comando para visualizar o status do fail2ban e exibir a lista de endereços IP banidos.

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

Depois de salvar o código acima, conceda permissão x (execução). Para perceber que o Shell Script é semelhante a um daemon em segundo plano, você precisa usar nohup:

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

>/dev/null 2>&1 significa redirecionar a saída de informações executando o shell script (vários ecos no shell script, usado para depuração) para /dev/null. O & no final representa a execução em segundo plano. Nesse caso, mesmo que você efetue logout, o Shell Script ainda será executado em segundo plano.

3. Resumo

Usei os dois scripts acima que detectam logs de sites em tempo real e adicionam automaticamente IPs anormais ao iptables para bloqueio. Os resultados são muito bons e suficientes para lidar com pequenos ataques de CC. Atualmente, o Fail2ban é usado para detectar logs de sites e bloquear IPs maliciosos. Cada um dos três scripts tem suas vantagens e você pode escolher de acordo com suas necessidades.

No entanto, se você encontrar um ataque DDOS maior, ainda precisará usar um serviço anti-ataque especializado. Por exemplo, o serviço anti-ataque Cloudflare é muito eficaz. Basicamente, todos na indústria de VPS o utilizam. Se o seu site foi atacado e ficou inacessível, você pode atualizar o Cloudflare para a versão paga, que fornecerá melhor proteção.

Deixe uma resposta