|
Когда я пришёл в компанию сегодня утром, я чувствовал себя довольно медленно, когда вошёл на официальный сайт компании, вошёл на сервер, чтобы проверить статус доступа к официальному сайту: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ГОД ОСНОВАНО 59 CONNECTED 589 SYN_RECV 15 ПОТОК SYN на самом деле настолько высок, продолжайте отслеживать SYN, отправленный этими IP-адресами: [root@tweb ~]# netstat -an | grep SYN | awk '{печатать $5}' | awk -F: '{print $1}' | сортировать | uniq -c | сортировать -nr | Подробнее 570 x.x.x.x (IP не записан, это IP компании Shandong Zaozhuang Unicom), но этот IP отправил так много SYN-запросов, а конкурентность нашего веб-сервера не очень высокая, поэтому обычные пользовательские запросы не могут быть соответствующими, и страница не может быть открыта. Поскольку аппаратный файрвол управляется IT-отделом группы, у меня нет полномочий, поэтому я могу лишь частично предотвратить атаку на локальном сервере. Прежде всего, давайте поговорим о принципе атаки SYN: В протоколе TCP/IP протокол TCP обеспечивает надёжные сервисы соединения, используя трёхстороннее рукопожатие для установления соединения. Первое рукопожатие: при установлении соединения клиент отправляет син-пакет (syn=j) на сервер и входит в состояние SYN_SEND, ожидая подтверждения сервером. Второе рукопожатие: Когда сервер получает пакет SYN, он должен подтвердить SYN клиента (ack=j+1), а также отправить пакет SYN (syn=k), то есть пакет SYN+ACK, в этот момент сервер переходит в состояние SYN_RECV. Третье рукопожатие: клиент получает пакет SYN+ACK от сервера и отправляет подтверждающий пакет ACK (ack=k+1) на сервер. После трёх рукопожатий клиент и сервер начинают передавать данные.
Если пользователь инициирует запрос на соединение с сервером, чтобы пожать руку во второй раз и не отвечает серверу, сервер будет ждать подтверждения пользователя. Поэтому мы вносим следующие изменения непосредственно из SYN-соединения: Проверьте стандартную конфигурацию SYN в 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 — длина очереди SYN, и увеличение её длины позволяет поддерживать больше сетевых соединений, ожидающих подключения. tcp_syncookies — это переключатель для включения функции cookie SYN, которая может предотвратить частичные атаки SYN. tcp_synack_retries и tcp_syn_retries определяют количество повторных соединений для SYN и уменьшают параметры по умолчанию, чтобы максимально контролировать количество SYN-соединений. Ниже приведены параметры, которые я изменил, и которые можно корректировать в зависимости от реального положения моего сервера: [root@web ~]# больше /etc/rc.d/rc.local #!/bin/sh # Этот скрип{filter}t будет выполнен *после* всех остальных init scrip{filter}ts. # Если нет — можешь положить сюда свои собственные материалы для инициализации # хочу сделать полный стиль Sys V init. Нажмите на /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 Чтобы конфигурация вступила в силу сразу без перезагрузки сервера, её можно выполнить #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 Некоторые предпочитают использовать списки контроля доступа для предотвращения SYN-атак, что в определённой степени замедляет SYN-атаки: Атака син-флудом #iptables -A ВХОД -p tcp --syn -m предел --предел 1/s -j ПРИНЯТЬ --limit 1/s ограничивает количество син-параллелизма 1 раз в секунду Сканирование антипортов # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Пинг смерти # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT #>iptables-save >/etc/sysconfig/iptables Чтобы посмотреть, #iptables -L ACCEPT tcp — где угодно, где угодно, TCP-флаги: FIN,SYN,RST,ACK/SYN лимит: средний 1/сек вспышки 5 ACCEPT tcp — где угодно, где угодно, флаги tcp: FIN,SYN,RST,ACK/RST лимит: средний 1/сек вспышки 5 ACCEPT ICMP — где угодно, в любом месте, лимит эхозапроса ICMP: в среднем 1/сек вспышки 5 Проверьте соединение с синтезатором ещё раз: [root@web ~]# netstat -an | grep SYN | awk '{печатать $5}' | awk -F: '{print $1}' | сортировать | uniq -c | сортировать -nr | Подробнее 20 10.92.10.220 1 125.43.36.199 Очевидно, что количество SYN-соединений сократилось.
|