|
Cuando llegué a la empresa esta mañana, me sentí bastante lento al iniciar sesión en la web oficial de la empresa, iniciar sesión en el servidor para comprobar el estado de acceso de la web oficial: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn ESTABLECIDO EN 172 59 CONECTADOS 589 SYN_RECV 15 STREAM El SYN es en realidad tan alto, sigue rastreando el SYN enviado por esas IPs: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{imprimir $1}' | Ordenar | uniq -c | ordenar -nr | más 570 x.x.x.x (La IP no está escrita, es una IP de Shandong Zaozhuang Unicom), pero esta IP ha enviado tantas conexiones de petición SYN, y la concurrencia de nuestro servidor web no es muy alta, por lo que las solicitudes normales de los usuarios no pueden corresponderse y la página no puede abrirse. Como el firewall de hardware está gestionado por el departamento de TI del grupo, no tengo autoridad, así que solo puedo tomar algunas medidas en el servidor local para mitigar parcialmente el ataque SYN. En primer lugar, hablemos del principio de ataque de SYN: En el protocolo TCP/IP, el protocolo TCP proporciona servicios de conexión fiables mediante un handshake de tres vías para establecer una conexión. Primer apretón de manos: Al establecer una conexión, el cliente envía un paquete syn (syn=j) al servidor y entra en el estado SYN_SEND, esperando a que el servidor lo confirme. El segundo handshake: Cuando el servidor recibe el paquete SYN, debe confirmar el SYN del cliente (ack=j+1) y también enviar un paquete SYN (syn=k), es decir, paquete SYN+ACK, momento en el que el servidor entra en el estado SYN_RECV. Tercer apretón de manos: El cliente recibe el paquete SYN+ACK del servidor y envía el paquete de confirmación ACK (ack=k+1) al servidor. Tras tres apretones de mano, el cliente y el servidor comienzan a transmitir datos.
Si el usuario inicia una solicitud de conexión con el servidor solo para estrechar la mano por segunda vez y no responde al servidor, este seguirá esperando la confirmación del usuario. Así que realizamos los siguientes cambios directamente desde la conexión SYN: Comprueba la configuración predeterminada de SYN en 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 es la longitud de la cola SYN, y aumentar la longitud de la cola SYN puede acomodar más conexiones de red esperando a ser conectadas. tcp_syncookies es un interruptor para activar la función de cookies SYN, que puede prevenir ataques parciales de SYN. tcp_synack_retries y tcp_syn_retries definen el número de conexiones de reintento para el SYN y reducen los parámetros por defecto para controlar el número de conexiones SYN tanto como sea posible. Los siguientes son los parámetros que he modificado, que pueden modificarse según la situación real de mi servidor: [root@web ~]# más /etc/rc.d/rc.local #!/bin/sh # Este scrip{filter}t se ejecutará *después* de todos los demás scrip{filter}ts de init. # Puedes poner tus propias inicializaciones aquí si no lo haces # quiero hacer todo el estilo Sys V de iniciación. táctil /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 la configuración entre en vigor inmediatamente sin reiniciar el servidor, se puede realizar #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 Algunas personas prefieren usar listas de control de acceso para prevenir ataques SYN, lo que ralentiza los ataques SYN hasta cierto punto: Ataque de inundación syn #iptables -A ENTRADA -p tcp --syn -m límite --límite 1/s -j ACEPTAR --límite 1/s limita el número de concurrencias sinéticas a 1 vez por segundo Escaneo antipuerto # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -límite --límite 1/s -j ACEPTAR Ping de muerte # iptables -A FORWARD -p icmp --icmp-tipo echo-request -m límite --límite 1/s -j ACEPTAR #>iptables-save >/etc/sysconfig/iptables Para ver, #iptables -L ACEPTAR tcp -- en cualquier lugar y en cualquier lugar banderas de tcp: FIN, SYN, RST, ACK/SYN límite: ráfaga media de 1/seg 5 ACEPTAR tcp -- en cualquier lugar y en cualquier lugar banderas de tcp: FIN, SYN, RST, ACK/RST límite: ráfaga media de 1/s 5 ACCEPT icmp -- en cualquier lugar del límite de petición de eco ICMP: ráfaga media de 1/seg 5 Revisa de nuevo la conexión syn: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{imprimir $1}' | Ordenar | uniq -c | ordenar -nr | más 20 10.92.10.220 1 125.43.36.199 Obviamente, el número de conexiones SYN ha disminuido.
|