LINUX.ORG.RU

принудительно убить соединения


0

0

короче такая проблема, есть у меня сервачок один. его начали ДДоСить. я написал скриптик который парсит вывод 

netstat -plan|grep FIN_WAIT2|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

и если больше 20 подключений то добавляет ИП в iptables -j DROP
но соединение все равно висит пока по таймауту не отвалится.
как этих надов принудительно убивать


вот в netstat -plan такая гадость:

tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      31219/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           134.158.91.185:4568         ESTABLISHED -
tcp        0      0 xxx.xxx.xxx.xxx:80           134.158.91.185:4312         ESTABLISHED 32207/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           189.145.213.120:2712        ESTABLISHED 31657/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           213.60.229.249:1156         FIN_WAIT2   -
tcp        0      1 xxx.xxx.xxx.xxx:80           65.167.193.138:20552        FIN_WAIT1   -
tcp        0      0 xxx.xxx.xxx.xxx:80           65.167.193.138:20040        FIN_WAIT2   -
tcp        0      1 xxx.xxx.xxx.xxx:80           65.167.193.138:20296        FIN_WAIT1   -
tcp        0      0 xxx.xxx.xxx.xxx:80           195.137.245.55:62959        ESTABLISHED 31752/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           195.137.245.55:63215        ESTABLISHED -
tcp        0      0 xxx.xxx.xxx.xxx:80           81.222.208.201:3171         FIN_WAIT2   -
tcp        0      0 xxx.xxx.xxx.xxx:80           134.158.91.185:4313         ESTABLISHED 32205/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           134.158.91.185:4569         ESTABLISHED -
tcp        0      0 xxx.xxx.xxx.xxx:80           189.145.213.120:2713        ESTABLISHED 31684/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           213.60.229.249:1157         FIN_WAIT2   -
tcp        0      1 xxx.xxx.xxx.xxx:80           65.167.193.138:20553        FIN_WAIT1   -
tcp        0      1 xxx.xxx.xxx.xxx:80           65.167.193.138:20297        FIN_WAIT1   -
tcp        0      0 xxx.xxx.xxx.xxx:80           195.137.245.55:62958        ESTABLISHED 31749/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           195.137.245.55:63214        ESTABLISHED -
tcp        0      0 xxx.xxx.xxx.xxx:80           134.158.91.185:4570         ESTABLISHED -
tcp        0      0 xxx.xxx.xxx.xxx:80           134.158.91.185:4314         ESTABLISHED 32204/httpd
tcp        0      0 xxx.xxx.xxx.xxx:80           213.60.229.249:1158         FIN_WAIT2   -
tcp        0      1 xxx.xxx.xxx.xxx:80           65.167.193.138:20554        FIN_WAIT1   -
tcp        0      0 xxx.xxx.xxx.xxx:80           65.167.193.138:20042        FIN_WAIT2   -
tcp        0      1 xxx.xxx.xxx.xxx:80           65.167.193.138:20298        FIN_WAIT1   -

ты можешь кильнуть эти процессы: tcp 0 0 xxx.xxx.xxx.xxx:80 189.145.213.120:2713 ESTABLISHED 31684/httpd

Например здесь пид 31684, вот и кильни его

ansky ★★★★★
()

Это просто не нужно, висящее соединение никаких ресурсов не жрёт, можешь смело на них забить, сами отвалятся по таймауту. Хотя конечно раздражает, если правила в файрвол добавляешь ручками.

Teak ★★★★★
()
Ответ на: комментарий от Teak

Дело в том что на каждое такое соединение запускается апач и он уже ресурсы жрет. И увеличивается время загрузки стрвницы для норматьных пользователей. В httpd.conf поставил keepalivetimeout 3, maxclients 800 - стало полегче. Видно нужно как то убивать httpd запученные для каждого соединения.

P.S. apache 1.3.37

И еще в WHM (панель управления хостинга такая если кто не знал :) в apache status показывает такое:


1-0	20822	0/4/4	R 	0.63	159	1	0.0	0.00	0.00 	?	?	..reading..
2-0	20823	0/4/4	R 	0.00	159	1	0.0	0.00	0.00 	?	?	..reading..
3-0	20824	0/4/4	R 	0.00	157	1	0.0	0.00	0.00 	?	?	..reading..
4-0	20825	0/4/4	R 	0.00	157	1	0.0	0.00	0.00 	?	?	..reading..
5-0	20828	0/4/4	R 	0.00	261	1	0.0	0.03	0.03 	?	?	..reading..
6-0	20829	0/4/4	R 	0.00	155	591	0.0	0.01	0.01 	?	?	..reading..
7-0	20830	0/4/4	R 	0.72	154	1	0.0	0.01	0.01 	?	?	..reading..
8-0	20831	0/4/4	R 	0.00	153	1	0.0	0.02	0.02 	?	?	..reading..
9-0	20832	0/4/4	R 	0.03	200	0	0.0	0.00	0.00 	?	?	..reading..
10-0	20833	0/6/6	R 	0.11	149	1	0.0	0.01	0.01 	?	?	..reading..
11-0	20834	0/13/13	R 	0.45	151	1	0.0	0.04	0.04 	?	?	..reading..
12-0	20846	0/13/13	R 	0.01	148	1	0.0	0.09	0.09 	?	?	..reading..
13-0	20847	0/4/4	R 	0.23	152	1	0.0	0.01	0.01 	?	?	..reading..
14-0	20848	0/15/15	R 	1.18	105	1	0.0	0.11	0.11 	?	?	..reading..
15-0	20849	0/4/4	R 	0.01	147	1	0.0	0.02	0.02 	?	?	..reading..
16-0	20850	0/4/4	R 	0.43	147	1	0.0	0.00	0.00 	?	?	..reading..
17-0	20851	0/6/6	R 	0.00	263	0	0.0	0.00	0.00 	?	?	..reading..
18-0	20852	0/11/11	R 	0.45	158	1	0.0	0.12	0.12 	?	?	..reading..
19-0	20853	0/12/12	R 	0.01	156	1	0.0	0.02	0.02 	?	?	..reading..
20-0	20897	0/4/4	R 	1.40	124	48	0.0	0.000	0.000 	?	?	..reading..
21-0	20917	0/3/3	R 	0.24	155	1	0.0	0.01	0.01 	?	?	..reading..
22-0	21267	0/2/2	R 	0.04	150	1	0.0	0.00	0.00 	?	?	..reading..
23-0	21270	0/2/2	R 	0.00	150	1	0.0	0.01	0.01 	?	?	..reading..
24-0	22599	0/1/1	R 	0.00	148	1	0.0	0.000	0.000 	?	?	..reading..

ref
() автор топика
Ответ на: комментарий от ansky

>ты можешь кильнуть эти процессы: tcp 0 0 xxx.xxx.xxx.xxx:80 189.145.213.120:2713 ESTABLISHED 31684/httpd

>Например здесь пид 31684, вот и кильни его

так он показывается для ESTABLISHED соединения а надо для FIN_WAIT

Если кто подскажет решение проблемы даже денех дам =) Ну просто ооочень надо.

ref
() автор топика
Ответ на: комментарий от ref

Ну-ну. Смотришь сервер с порванным соединением в netstat - раз. Смотришь child pid для соединения с этим IP в /server-status - два. Сколько денег-то? :)

Teak ★★★★★
()
Ответ на: комментарий от Teak

Ну вот, так я и знал, что денег не будет. :)

Teak ★★★★★
()
Ответ на: комментарий от Teak

ну как я понимаю любое нормальное соединение проходит через стадию "..reading..". если убивать все cild pidы то будут дропаться соединения нормальных юзеров. Из нетстата я сделал сортировку по одновременных соединениям с одного ип но там нет pida. а в /server-status не показывает ИП.

50$ через e-gold.com, webmoney etc.

если есть желание заработать то велкам ту быдлоася: 10316

ref
() автор топика

1) средствами iptables пробуй ограничивать подключения с одного ip на 80 порт. 2) точно не помню, но по-моему, у апача такой mod был.

anonymous
()
Ответ на: комментарий от ref

Давай деньги!

Когда тср-соединение находится в состоянии FIN_WAIT, апач уже не работает. Нетстат это прекрасно показывает. Состояние FIN_WAIT обслуживается ядром. Убивать надо именно ESTABLISHED соединения с тем IP-адресом, который ты блокируешь. Но у тебя на картинке судя по всему вообще нет установленных соединений с блокируемым адресом и убивать нечего.

Состояние FIN_WAIT вообще-то безобидно и ресурсов почти не отъедает, но если тебя оно беспокоит, то можно сгенерить нужные пакетики с флагами FIN, ACK. Дело то ведь в том, что ты файрволлом прикрылся, поэтому такие пакетики от противной стороны до тебя не доходят (хотя если это нормальная ДДОС атака, то нужных пакетиков ты все равно не дождешься). Если же приходят, то прикрывайся таким правилом, которое пропускает пакеты с флагами FIN.

ansky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.