|
Quando cheguei à empresa esta manhã, me senti bastante lento ao fazer login no site oficial da empresa, acessar o servidor para verificar o status de acesso do site oficial: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 FUNDADOS 59 CONECTADOS 589 SYN_RECV 15 STREAM O SYN é realmente tão alto, continue rastreando o SYN enviado por esses IPs: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{imprimir $1}' | Ordenar | uniq -c | ordenar -nr | Mais 570 x.x.x.x (O IP não é escrito, é um IP da Shandong Zaozhuang Unicom), mas esse IP enviou tantas conexões de requisição SYN, e a concorrência do nosso servidor web não é muito alta, então as solicitações normais dos usuários não podem ser correspondidas, nem a página pode ser aberta. Como o firewall de hardware é gerenciado pelo departamento de TI do grupo, não tenho autoridade, então só posso tomar algumas medidas no servidor local para mitigar parcialmente o ataque SYN. Primeiramente, vamos falar sobre o princípio de ataque do SYN: No protocolo TCP/IP, o protocolo TCP fornece serviços de conexão confiáveis usando um handshake de três vias para estabelecer uma conexão. Primeiro aperto de mão: Ao estabelecer uma conexão, o cliente envia um pacote syn (syn=j) para o servidor e entra no estado SYN_SEND, aguardando a confirmação do servidor. O segundo aperto de mão: Quando o servidor recebe o pacote SYN, ele deve confirmar o SYN do cliente (ack=j+1) e também enviar um pacote SYN (syn=k), ou seja, pacote SYN+ACK, momento em que o servidor entra no estado SYN_RECV. Terceiro handshake: O cliente recebe o pacote SYN+ACK do servidor e envia o pacote de confirmação ACK (ack=k+1) para o servidor. Após três apertos de mão, o cliente e o servidor começam a transmitir dados.
Se o usuário iniciar uma solicitação de conexão com o servidor apenas para apertar a mão pela segunda vez e não responder ao servidor, o servidor continuará aguardando a confirmação do usuário. Portanto, fazemos as seguintes alterações diretamente da conexão SYN: Verifique a configuração padrão do SYN no Linux: [root@web ~]# sysctl -a | GREP _syn net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 5 net.ipv4.tcp_syn_retries = 5 tcp_max_syn_backlog é o comprimento da fila SYN, e aumentar o comprimento da fila SYN pode acomodar mais conexões de rede esperando para serem conectadas. tcp_syncookies é um interruptor para ativar a função de cookies SYN, que pode prevenir ataques parciais SYN. tcp_synack_retries e tcp_syn_retries definem o número de conexões de retentativa para o SYN e reduzem os parâmetros padrão para controlar o número de conexões SYN o máximo possível. A seguir estão os parâmetros que modifiquei, que podem ser modificados de acordo com a situação real do meu servidor: [root@web ~]# mais /etc/rc.d/rc.local #!/lixo/sh # Este scrip{filter}t será executado *depois* de todos os outros scrip{filter}ts de init. # Você pode colocar suas próprias coisas de inicialização aqui se não colocar # quero fazer o estilo completo de init estilo Sys V. touch /var/lock/subsys/local ulimit -HSn 65535 /usr/local/apache2/bin/apachectl start ##### sysCTL -w net.ipv4.tcp_max_syn_backlog=2048 sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.tcp_synack_retries=3 sysctl -w net.ipv4.tcp_syn_retries=3 Para que a configuração entre em vigor imediatamente sem reiniciar o servidor, ela pode ser realizada #sysctl -w net.ipv4.tcp_max_syn_backlog=2048 #sysctl -w net.ipv4.tcp_syncookies=1 #sysctl -w net.ipv4.tcp_synack_retries=3 #sysctl -w net.ipv4.tcp_syn_retries=3 Algumas pessoas gostam de usar listas de controle de acesso para prevenir ataques SYN, o que retarda os ataques SYN até certo ponto: Ataque de inundação syn #iptables -A ENTRADA -p tcp --syn -m limite --limite 1/s -j ACEITAR --limite 1/s limita o número de concorrências syn a 1 vez por segundo Varredura anti-porta # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -limite --limite 1/s -j ACEITAR Sinal da morte # iptables -A FORWARD -p icmp --tipo icmp-tipo echo-request -m limite --limite 1/s -j ACEITAR #>iptables-save >/etc/sysconfig/iptables Para ver, #iptables -L ACEITAR tcp -- em qualquer lugar, qualquer lugar flags de tcp: FIN, SYN, RST, ACK/SYN limite: média de 1/segundo rajada 5 ACCEPT tcp -- em qualquer lugar, qualquer lugar flags de tcp: FIN, SYN, RST, ACK/RST limite: média de 1/segundo rajada 5 ACEITAR icmp -- em qualquer lugar, em qualquer lugar limite de requisição de eco ICMP: média de 1/segundo rajada 5 Verifique a conexão syn novamente: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{imprimir $1}' | Ordenar | uniq -c | ordenar -nr | Mais 20 10.92.10.220 1 125.43.36.199 Obviamente, o número de conexões SYN diminuiu.
|