Защита от атак SYN-флуд (полуоткрытое TCP/IP соединение)

Вчера на одном из своих серверов обнаружил SYN-флуд по 443 порту. Обнаружил в начале tcpdump-ом, потом подтвердил наличие SYN-флуда - через подсчет числа «полуоткрытых» TCP-соединений. В обычной ситуации их не должно быть совсем (или очень небольшое количество: максимум 1-3).

netstat -na | grep ":443\ " | grep SYN_RECV netstat -na | grep ":80\ " | grep SYN_RECV

Один из распространенных способов не только «забить» канал связи, но и ввести сетевой стек операционной системы в такое состояние, когда он уже не сможет принимать новые запросы на подключение. Основан на попытке инициализации большого числа одновременных TCP-соединений через посылку SYN-пакета с несуществующим обратным адресом. После нескольких попыток отослать ответный ACK-пакет на недоступный адрес большинство операционок ставят неустановленное соединение в очередь. И только после n-ой попытки закрывают соединение. Так как поток ACK-пакетов очень велик, вскоре очередь оказывается заполненной, и ядро дает отказ на попытки открыть новое соединение. Наиболее умные DoS-боты еще и анализируют систему перед началом атаки, чтобы слать запросы только на открытые жизненно важные порты.

Идентифицировать такую атаку просто, достаточно попробовать подключиться к одному из сервисов. Защитные мероприятия обычно включают в себя:

Увеличение очереди «полуоткрытых» TCP-соединений:

# sysctl -w net.ipv4.tcp_max_syn_backlog=1024

Уменьшение времени удержания «полуоткрытых» соединений:

# sysctl -w net.ipv4.tcp_synack_retries=1
а если быть точнее, я пока поставил 0
# sysctl -w net.ipv4.tcp_synack_retries=0

Включение механизма TCP syncookies:

# sysctl -w net.ipv4.tcp_syncookies=1




Вы только посетили наш сайт, КОММЕНТИРОВАНИЕ будет доступно через несколько минут.
возможно у Вас отключен javascript, если включен - просто обновите страницу