SYN_RECV - это состояние tcp-соединения во время three-handshake, означающее что сервер принял пакет с установленным флагом SYN (запрос на соединение), отправил SYN/SYN-ACK клиенту и ожидает от клиента пакет с флагом ACK.
Поскольку ACK от клиента (в нашем случае, от атакующего хоста) не приходит, то соединение висит до момента, пока оно не будет убито по таймауту. Пока такое соединение существует в системе - оно потребляет ресурсы, что может создать прецедент для замедления работы системы.
Таким образом, чтобы таких соединений не создавалось нужно отсеивать из них неугодные до того, как система выделит для них ресурсы. В Вашем случае, нужно фильтровать все входящие пакеты с установленным флагом SYN и дропать те из них, которые нас не устраивают. Легитимный пользователь не будет создавать по десятку соединений каждую секунду, а атакующий - будет.
Соответственно, Вам нужно выяснить закономерность (периодичность, количество запросов и т. п.), позволяющую отличить легитимный хост от атакующего конкретно в Вашем случае, и в соответствии с ней создать правила.
Если говорить обобщенно, то в Вашем случае, я думаю, проблему можно решить с помощью модуля recent в iptables. Уверен, его функционала Вам будет достаточно. Сможете обойтись несколькими правилами. Алгоритм следует применить примерно такой:
1. Сначала разрешаете входящий tcp-трафик по соединениям в состояниях ESTABLISHED и RELATED (модуль conntrack).
iptables -I INPUT 1 -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -m recent --name webtraffic --update --seconds 5 --hitcount 16 -j DROP
iptables -A INPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -j ACCEPT
net.ipv4.tcp_max_syn_backlog = 262144
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20
mail# nslookup
> server f.root-servers.net
Default server: f.root-servers.net
Address: 192.5.5.241#53
Default server: f.root-servers.net
Address: 2001:500:2f::f#53
> set q=ns
> ru.
Server: f.root-servers.net
Address: 192.5.5.241#53
Non-authoritative answer:
*** Can't find ru.: No answer
Authoritative answers can be found from:
ru nameserver = e.dns.ripn.net.
ru nameserver = a.dns.ripn.net.
ru nameserver = d.dns.ripn.net.
ru nameserver = b.dns.ripn.net.
ru nameserver = f.dns.ripn.net.
a.dns.ripn.net internet address = 193.232.128.6
b.dns.ripn.net internet address = 194.85.252.62
d.dns.ripn.net internet address = 194.190.124.17
e.dns.ripn.net internet address = 193.232.142.17
f.dns.ripn.net internet address = 193.232.156.17
a.dns.ripn.net has AAAA address 2001:678:17:0:193:232:128:6
b.dns.ripn.net has AAAA address 2001:678:16:0:194:85:252:62
d.dns.ripn.net has AAAA address 2001:678:18:0:194:190:124:17
e.dns.ripn.net has AAAA address 2001:678:15:0:193:232:142:17
f.dns.ripn.net has AAAA address 2001:678:14:0:193:232:156:17
mail# host -v -t ns ru. f.root-servers.net
Trying "ru"
Using domain server:
Name: f.root-servers.net
Address: 192.5.5.241#53
Aliases:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 435
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 5, ADDITIONAL: 10
;; QUESTION SECTION:
;ru. IN NS
;; AUTHORITY SECTION:
ru. 172800 IN NS f.dns.ripn.net.
ru. 172800 IN NS a.dns.ripn.net.
ru. 172800 IN NS e.dns.ripn.net.
ru. 172800 IN NS d.dns.ripn.net.
ru. 172800 IN NS b.dns.ripn.net.
;; ADDITIONAL SECTION:
a.dns.ripn.net. 172800 IN A 193.232.128.6
b.dns.ripn.net. 172800 IN A 194.85.252.62
d.dns.ripn.net. 172800 IN A 194.190.124.17
e.dns.ripn.net. 172800 IN A 193.232.142.17
f.dns.ripn.net. 172800 IN A 193.232.156.17
a.dns.ripn.net. 172800 IN AAAA 2001:678:17:0:193:232:128:6
b.dns.ripn.net. 172800 IN AAAA 2001:678:16:0:194:85:252:62
d.dns.ripn.net. 172800 IN AAAA 2001:678:18:0:194:190:124:17
e.dns.ripn.net. 172800 IN AAAA 2001:678:15:0:193:232:142:17
f.dns.ripn.net. 172800 IN AAAA 2001:678:14:0:193:232:156:17
Received 332 bytes from 192.5.5.241#53 in 64 ms
mail#