Тысячи Established Connections through firewall

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

vovansystems
Сообщения: 25

Тысячи Established Connections through firewall

Сообщение vovansystems »

Добрый день!

Уже некоторое время у меня на сервере (vds virtuozzo, debian 6) в munin наблюдается странная картина по установленным подключениям, а именно - сразу после загрузки сервера число установленных подключений начинает увеличиваться и когда достигает 10-18 тысяч, расти перестаёт и держиться на этом уровне.

Изображение
Изображение
Изображение

Сервер находится под довольно посредстенной нагрузкой (16 ядер почти незагружены, оперативки 30% свободно, load average 0.05) - около 10 requests/s (100 active connections) через nginx. На сервере работает и активно используется apache2+modphp, nginx, php5-fpm, mysql 5.5. Остановка всех этих сервисов не влияет на количество established подключений, которое показывает мунин..

Также на севере отрабаетывает скрипт ddos deflate раз в минуту с высоким приоритетом.

Есть мнение, что такое поведение связано с настройками iptables, где я пытался в своё время придумать некоторые подходы по предотвращению всяких пакостей (такое впечатление что connstate оставляет соединение установленным..)

Код: Выделить всё

netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      752/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1557/sendmail: MTA:
tcp        0      0 92.61.46.238:443        0.0.0.0:*               LISTEN      1973/nginx
tcp        0      0 127.0.0.1:9312          0.0.0.0:*               LISTEN      1632/searchd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      29959/mysqld
tcp        0      0 127.0.0.1:587           0.0.0.0:*               LISTEN      1557/sendmail: MTA:
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      1986/apache2
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1973/nginx
tcp        0      0 127.0.0.1:4949          0.0.0.0:*               LISTEN      1670/munin-node
tcp6       0      0 :::22                   :::*                    LISTEN      752/sshd


Код: Выделить всё

# BOR'BA S DDOS

iptables -N ssh_brute_check # Sozdaem cepochku dlya proverki popytok soedinenii na zaschischaemyi port
# Esli za poslednie 1 minut (60 sekund) s odnogo adresa bylo 2 ili bolee novyh soedinenii  blokiruem etot adres
iptables -A ssh_brute_check -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 2 -j DROP
# V protivnom sluchae  razreshaem, i pri etom zanosim v spisok
iptables -A ssh_brute_check -m recent --set -j ACCEPT
iptables -F INPUT # Ochischaem cepochku INPUT
iptables -I INPUT -p tcp --dport 22 -s MY_WHITE_IP -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Razreshaem pakety po ustanovlennym soedineniyam
# Vse popytki otkryt' novoe soedinenie po SSH napravlyaem na proverku
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_check
# Zdes' mojno razreshat' te porty, dlya kotoryh takaya proverka ne nujna. Naprimer, HTTP
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j ACCEPT
iptables -P INPUT ACCEPT

# ustanavlivaem maksimal'noe kolichestvo podklyuchenii s odnogo aipi.
# V brauzerah eta kolichestvo podklyuchenii k serveru ogranicheno 16 soedineniyami,
# no stoit uchityvat' teh, kto sidit za NAT, a takje chto pol'zovatel'
# mojet otkryt' 2 saita na raznyh aipishnikah odnogo i togo je servera.
# Dannyi parametr podbiraetsya optimal'no s pomosch'yu predyduschei komandy.
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 32 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# to je dlya DNS
iptables -A INPUT -p udp --dport 53 -m connlimit --connlimit-above 8 -j DROP
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# budet prepyatstvovat' spufingu ot nashego imeni.
# Ved' esli my poluchaem paket s ustanovlennymi flagami SYN i ACK
# (takoi kombinaciei flagov obladaet tol'ko otvet na SYN-paket) po esche ne otkrytomu soedineniyu,
# eto oznachaet, chto kto-to poslal drugomu hostu SYN-paket ot nashego imeni, i otvet prishel k nam.
# Konechno, zloumyshlenniku predstoit esche ugadat' nomer posledovatel'nosti.
# Soglasno privedennomu pravilu, nash host otvetit RST-paketom, posle polucheniya kotorogo
# atakuemyi host zakroet soedinenie.
iptables -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset

# Dlya zaschity ot SYN atak vklyuchaem SYN-cookies
sysctl -w net.ipv4.tcp_syncookies=1
# Uvelichivaem razmer ocheredi poluotkrytyh soedinenii (takje polezno pri SYN flude) (default 512)
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
# Proveryat' TCP-soedinenie kajduyu minutu. Esli na drugoi storone - legal'naya mashina,.
# ona srazu otvetit. Defoltovoe znachenie - 2 chasa.
sysctl -w net.ipv4.tcp_keepalive_time=60
# Povtorit' probu cherez desyat' sekund
sysctl -w net.ipv4.tcp_keepalive_intvl=10
# Kolichestvo proverok pered zakrytiem soedineniya
sysctl -w net.ipv4.tcp_keepalive_probes=5
# Fil'tr obratnogo puti, zaschita ot spufinga (podmeny adresov)
sysctl -w net.ipv4.conf.default.rp_filter=1
# Umen'shenie vremeni uderjaniya «poluotkrytyh» soedinenii
# Sdelaem tak, chtoby pereperedacha osuschestvlyalas' na 3 sekunde
# i  polnoe vremya hraneniya poluotkrytyh soedinenii v ocheredi sostavilo 9 sekund
sysctl -w net.ipv4.tcp_synack_retries=1
# Izmenyaem vremya ojidaniya priema FIN do polnogo zakrytiya soketa
sysctl -w net.ipv4.tcp_fin_timeout=10


ниже привожу листинг /proc/net/nf_conntrack где на самом деле 2 тысячи строк, смысл которых мне не совсем ясен.. как может быть tcp установленное соединение если оно UNREPLIED..

Код: Выделить всё

ipv4     2 tcp      6 431993 ESTABLISHED src=84.201.228.128 dst=MY_IP sport=26120 dport=80 src=MY_IP dst=84.201.228.128 sport=80 dport=26120 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 322977 ESTABLISHED src=MY_IP dst=178.125.68.245 sport=80 dport=13545 [UNREPLIED] src=178.125.68.245 dst=MY_IP sport=13545 dport=80 mark=0 secmark=0 use=2
ipv4     2 tcp      6 343356 ESTABLISHED src=MY_IP dst=178.126.176.17 sport=80 dport=12199 [UNREPLIED] src=178.126.176.17 dst=MY_IP sport=12199 dport=80 mark=0 secmark=0 use=2
ipv4     2 tcp      6 345647 ESTABLISHED src=MY_IP dst=178.122.3.136 sport=80 dport=52311 [UNREPLIED] src=178.122.3.136 dst=MY_IP sport=52311 dport=80 mark=0 secmark=0 use=2
ipv4     2 tcp      6 344923 ESTABLISHED src=MY_IP dst=178.125.41.162 sport=80 dport=1566 [UNREPLIED] src=178.125.41.162 dst=MY_IP sport=1566 dport=80 mark=0 secmark=0 use=2
ipv4     2 tcp      6 403753 ESTABLISHED src=MY_IP dst=178.127.66.88 sport=80 dport=1025 [UNREPLIED] src=178.127.66.88 dst=MY_IP sport=1025 dport=80 mark=0 secmark=0 use=2
ipv4     2 tcp      6 101 TIME_WAIT src=66.249.66.68 dst=MY_IP sport=41182 dport=80 src=MY_IP dst=66.249.66.68 sport=80 dport=41182 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 394024 ESTABLISHED src=MY_IP dst=158.169.9.14 sport=80 dport=62458 [UNREPLIED] src=158.169.9.14 dst=MY_IP sport=62458 dport=80 mark=0 secmark=0 use=2
ipv4     2 tcp      6 407597 ESTABLISHED src=MY_IP dst=178.127.239.16 sport=80 dport=51051 [UNREPLIED] src=178.127.239.16 dst=MY_IP sport=51051 dport=80 mark=0 secmark=0 use=2
ipv4     2 tcp      6 69 TIME_WAIT src=84.201.228.128 dst=MY_IP sport=26085 dport=80 src=MY_IP dst=84.201.228.128 sport=80 dport=26085 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 tcp      6 402593 ESTABLISHED src=MY_IP dst=65.52.1.12 sport=80 dport=1937 [UNREPLIED] src=65.52.1.12 dst=MY_IP sport=1937 dport=80 mark=0 secmark=0 use=2
Спасибо сказали:
vovansystems
Сообщения: 25

Re: Тысячи Established Connections through firewall

Сообщение vovansystems »

хахаха - ну конечно же :) убрал это и проблема решилась

Код: Выделить всё

iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j ACCEPT


но всё равно хотелось бы услышать пояснения по синтаксису /proc/net/nf_conntrack - что там что значит и как это правильно читать?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Тысячи Established Connections through firewall

Сообщение KiWi »

Спасибо сказали: