|
ХакерЭто желанная и многообещающая карьера. Я ценю хороших хакеров и ненавижу плохих хакеров. Так называемый плохой хакер — это тот, кто заставляет кого-то с другой стороны работать сверхурочно. Атаки SYN Flood — типичные атаки типа отказа в обслуживании. Так называемая атака отказа в обслуживании направлена на косвенное достижение цели атаки, делая жертву неспособным обеспечить качественный сервис. Хакеры любят играть в это, чтобы показать свою уровню, способности и смелость, заставляя соперника работать сверхурочно, но на самом деле это ничто. 1: Что такое атака SYN Flood? Атаки SYN Flood используют трёхсторонний процесс рукопожатия в протоколе TCP в IPv4. Этот протокол предусматривает, что если один конец хочет инициировать TCP-соединение с другим, он должен сначала отправить TCP SYN (синхронизировать) пакет другой стороне, после чего другая сторона отправляет обратно пакет TCP SYN + ACK после получения, а затем инициатор отправляет обратно пакет TCP ACK (ACKnowledge Character), чтобы три рукопожатия заканчивались. В приведённом выше процессе есть несколько важных понятий: Очередь не связана: В трёхстороннем протоколе рукопожатия сервер поддерживает неподключённую очередь, которая открывает запись для каждого SYN-пакета клиента (syn=j), указывающую на получение SYN-пакета сервером и отправляя подтверждение клиенту, ожидая подтверждения от клиента. Соединение, идентифицируемое этими записями, находится в состоянии Syn_RECV на сервере, и когда сервер получает пакет подтверждения от клиента, запись удаляется, и сервер входит в состояние УСТАНОВЛЕННО. Другими словами, когда TCP-сервер получает пакет запроса TCP SYN, перед отправкой пакета TCP SYN+ACK обратно клиенту TCP, TCP-сервер должен сначала выделить область данных для обслуживания TCP-соединения, сформированного этой рукой. Обычно состояние соединения, когда получен пакет SYN, но пакет ACK ещё не полученПолуоткрытое соединение(Полуоткрытое соединение)。 Параметр бэклога: Указывает максимальное количество несвязанных очередей. Количество повторных передач SYN-ACK: После того как сервер отправляет пакет SYN-ACK, если пакет подтверждения клиента не получен, сервер выполняет первую повторную передачу, ждёт определённое время и не получает пакет подтверждения клиента, а также выполняет вторую повторную передачу; если количество повторных передач превышает максимальное количество повторных передач, указанное системой, система удаляет информацию о соединении из очереди полуподключения. Обратите внимание, что время ожидания для каждого повторного прохода не обязательно одинаковые. Полусвязное время выживания: Относится к максимальному времени существования записи в очереди полусоединения, то есть максимального времени с момента получения SYN-пакета сервисом до момента подтверждения недействительности, а временное значение — сумма максимального времени ожидания для всех пакетов запросов на повторную передачу. Иногда мы также называем полусвязанное время выживания SYN_RECV временем выживания. В самой распространённой SYN-флуд-атаке злоумышленник отправляет большое количество TCP-пакетов SYN жертве за короткое время, в результате чего атакующий становится TCP-клиентом, а жертвой — TCP-сервер. Согласно описанию выше, жертва назначала бы каждому пакету TCP SYN определённую зону, при условии, что пакеты SYN имели разные исходные адреса (что было бы легко подделать злоумышленниками). Это создаёт большую нагрузку на систему TCP-сервера и в конечном итоге приведёт к тому, что система перестанет работать должным образом. 2. Принцип cookie SYN Одним из способов эффективного предотвращения атак SYN Flood являются SYN-куки. SYN Cookie Причина D. Изобретён Дж. Бернстейном и Эриком Шенком. Файлы cookie SYN — это модификация серверного протокола TCP с тремя позициями рукопожатия для предотвращения атак SYN Flood.Её принцип таков:Когда TCP-сервер получает пакет TCP SYN и возвращает пакет TCP SYN+ACK, он не выделяет выделенную область данных, а вычисляет значение cookie на основе этого SYN-пакета. Когда получается пакет ACK TCP, сервер проверяет легитимность пакета ACK на основе этого значения cookie. Если это законно, выделенная область передачи данных выделяется для обработки будущих TCP-соединений. Давайте поговорим о том, как настроить параметры ядра для реализации SYN-cookie в Linux и FreeBSD В-третьих: настройки Linux Если конфигурация сервера неудачная, количество сокетов TCP TIME_WAIT достигает 20 000 или 30 000, и сервер легко может быть затянут до смерти. Изменяя параметры ядра Linux, можно уменьшить количество сокетов TIME_WAIT на сервере. TIME_WAIT можно просмотреть с помощью следующей команды: - 以下是代码片段:
- netstat -an | grep "TIME_WAIT" | wc -l
Копирование кодаНа Linux, например, CentOS, это можно добиться, изменив файл /etc/sysctl.conf. Добавьте следующие строки: - 以下是代码片段:
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_tw_recycle = 1
- net.ipv4.ip_local_port_range = 1024 65000
- net.ipv4.tcp_max_syn_backlog = 8192
- net.ipv4.tcp_max_tw_buckets = 5000
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
Копирование кодаИллюстрировать: net.ipv4.tcp_syncookies = 1 означает, что активированы SYN-файлы cookie, что является BOOLEAN. Когда SYN ждёт переполнения очереди, включите cookie для обработки этой задачи, что может предотвратить небольшое количество SYN-атак, и по умолчанию оно равно 0, то есть она закрыта. net.ipv4.tcp_tw_reuse = 1 означает, что повторное использование включено, что является булевым уровнем. Позволяет повторно использовать сокеты TIME-WAIT для новых TCP-соединений с указанием 0, что означает закрытие; net.ipv4.tcp_tw_recycle = 1 означает возможность быстрой переработки сокетов TIME-WAIT в TCP-соединениях, что является булевым показателем, а по умолчанию — 0, то есть он закрыт. net.ipv4.tcp_fin_timeout = 30 означает, что если сокет закрыт локальным запросом, этот параметр определяет, как долго он будет находиться в состоянии FIN-WAIT-2. Единица — секунды. net.ipv4.tcp_keepalive_time = 1200 показывает, как часто TCP отправляет сообщения keepalive при использовании keepalive. По умолчанию — 2 часа, теперь изменено на 20 минут. Единица — секунды. net.ipv4.ip_local_port_range = 1024 65000 указывает диапазон портов, используемых для выходных соединений. Стандартный корпус небольшой: 32768 до 61000, изменен на 1024 на 65000. net.ipv4.tcp_max_syn_backlog = 8192 указывает на длину очереди SYN, которая по умолчанию составляет 1024, а длина увеличенной очереди — 8192, чтобы обеспечить больше сетевых соединений, ожидающих подключения. net.ipv4.tcp_max_tw_buckets = 5000 указывает на максимальное количество сокетов, которые система поддерживает одновременно TIME_WAIT, и если это число превышается, TIME_WAIT сокеты немедленно очищаются и будет напечатано предупреждающее сообщение. По умолчанию 180000, изменено на 5000. Для серверов, таких как Apache и Nginx, параметры в предыдущих строках могут TIME_WAIT уменьшить количество сокетов, но для Squid эффект не очень. Этот параметр управляет максимальным количеством TIME_WAIT сокетов, чтобы предотвратить вытягивание сервера Squid с большим количеством TIME_WAIT сокетов. net.ipv4.tcp_synack_retries и net.ipv4.tcp_syn_retries определяют количество повторений SYN. Выполните следующую команду, чтобы конфигурация вступила в силу: Если вы не хотите менять /etc/sysctl.conf, вы также можете использовать команду для этого: - 以下是代码片段:
- /sbin/sysctl -w key=value
Копирование кодаВ-четвёртых, настройте под FreeBSD Личная точка зрения Яю: защита от SYN в FreeBSD может отличаться от Linux, параметры настройки не совпадают, а соответствующая конфигурация и понимание могут быть некорректными :) В TCP-ссылке есть одинMSL (максимальный срок службы сегмента)КонцепцияМаксимальное время генерацииЗначение MSL в общих реализациях занимает 30 секунд, а некоторые реализации занимают 2 минуты. «Пассивное отключение» в машине состояний TCP: с CLOSE_WAIT по LAST_ACK действует следующее правило: когда TCP выполняет активное отключение и отправляет последний ACK, соединение должно оставаться в состоянии TIME_WAIT вдвое дольше, чем MSL. Это позволяет TCP снова отправить последний ACK на случай потери (второй end тайм-аут и переотправляет последний FIN). Существование этого правила приводит к тому, что канал (адрес клиента, адрес порта и сервера, порт) по этому адресу не может использоваться в течение этого времени 2*MSL. Например, если мы закроем ссылку после её создания и быстро перезапустим ссылку, то порт станет недоступен. TIME_WAIT время — 2*MSL. Так что вы можете сократить TIME_WAIT время, настроив net.inet.tcp.msl. Для веб-сервера это значение можно настроить до 7500 или 2000 (доступ к вебу, страница не может быть прошетана дольше 4~15 секунд, можно отказаться от -_-) Ссылка на параметры: - 以下是引用片段:
- net.inet.tcp.syncookies=1
- 防止DOS攻击
- net.inet.tcp.msl=7500
- 防止DOS攻击,默认为30000
- net.inet.tcp.blackhole=2
- 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
- net.inet.udp.blackhole=1
- 接收到一个已经关闭的端口发来的所有UDP包直接drop
Копирование кодаВ FreeBSD yayu не увидел команды вроде "/sbin/sysctl -p", которая могла бы сделать содержимое /etc/sysctl.conf эффективным, поэтому он просто использовал команду: - 以下是代码片段:
- sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Копирование кода
|