LINUX.ORG.RU
ФорумAdmin

apache2, говносоединения из китая (CLOSE_WAIT,TIME_WAIT)


0

0

регулярно на апач начинают сыпаться запросы из китая (почему-то всегда именно оттуда), некорректно закрывающие(?) TCP-соединение и подвешивающие апач (то есть он продолжает конечно работать, но апачей становится не 20-30 а около 150 и они все начинают тормозить и тупить).

вопрос - как с этим эффективно бороться?

выглядит вот так:
web:~# netstat -nap | grep :80 |sort -k 5
tcp6 0 0 :::80 :::* LISTEN 5745/apache2
TIME_WAIT -
tcp6 1 11521 80.251.112.62:80 220.191.111.178:58346 LAST_ACK -
tcp6 1 10081 80.251.112.62:80 220.191.111.178:58355 LAST_ACK -
tcp6 1 12961 80.251.112.62:80 220.191.111.178:58373 LAST_ACK -
tcp6 1 15841 80.251.112.62:80 220.191.111.178:58379 LAST_ACK -
tcp6 1 10081 80.251.112.62:80 220.191.111.178:58381 LAST_ACK -
tcp6 1 12961 80.251.112.62:80 220.191.111.178:58383 LAST_ACK -
tcp6 1 12961 80.251.112.62:80 220.191.111.178:58402 LAST_ACK -
tcp6 1 8641 80.251.112.62:80 220.191.111.178:58417 LAST_ACK -
tcp6 1 10081 80.251.112.62:80 220.191.111.178:58419 LAST_ACK -
tcp6 1 12961 80.251.112.62:80 220.191.111.178:58437 LAST_ACK -
tcp6 1 11521 80.251.112.62:80 220.191.111.178:58446 LAST_ACK -
tcp6 1 8641 80.251.112.62:80 220.191.111.178:58447 LAST_ACK -
tcp6 1 12960 80.251.112.62:80 220.191.111.178:58459 CLOSE_WAIT 18920/apache2
tcp6 1 20161 80.251.112.62:80 220.191.111.178:58470 LAST_ACK -
tcp6 1 11520 80.251.112.62:80 220.191.111.178:58473 CLOSE_WAIT 19451/apache2
tcp6 1 12960 80.251.112.62:80 220.191.111.178:58481 CLOSE_WAIT 19670/apache2
tcp6 1 11521 80.251.112.62:80 220.191.111.178:58491 LAST_ACK -
tcp6 0 10081 80.251.112.62:80 220.191.111.178:58496 FIN_WAIT1 -
tcp6 1 8640 80.251.112.62:80 220.191.111.178:58498 CLOSE_WAIT 19538/apache2
tcp6 1 10081 80.251.112.62:80 220.191.111.178:58503 LAST_ACK -
tcp6 1 11520 80.251.112.62:80 220.191.111.178:58504 CLOSE_WAIT 19201/apache2
tcp6 1 11521 80.251.112.62:80 220.191.111.178:58505 LAST_ACK -
tcp6 0 20160 80.251.112.62:80 220.191.111.178:58509 ESTABLISHED 18930/apache2
tcp6 1 12960 80.251.112.62:80 220.191.111.178:58512 CLOSE_WAIT 18258/apache2
tcp6 1 8640 80.251.112.62:80 220.191.111.178:58519 CLOSE_WAIT 19245/apache2
tcp6 1 11520 80.251.112.62:80 220.191.111.178:58520 CLOSE_WAIT 19692/apache2
tcp6 0 12960 80.251.112.62:80 220.191.111.178:58529 ESTABLISHED 18624/apache2
tcp6 1 11520 80.251.112.62:80 220.191.111.178:58530 CLOSE_WAIT 19182/apache2
tcp6 1 11520 80.251.112.62:80 220.191.111.178:58531 CLOSE_WAIT 18432/apache2
tcp6 1 12960 80.251.112.62:80 220.191.111.178:58537 CLOSE_WAIT 19723/apache2
tcp6 1 8640 80.251.112.62:80 220.191.111.178:58538 CLOSE_WAIT 18630/apache2
tcp6 1 12960 80.251.112.62:80 220.191.111.178:58541 CLOSE_WAIT 19249/apache2
tcp6 1 10080 80.251.112.62:80 220.191.111.178:58551 CLOSE_WAIT 19736/apache2
tcp6 1 10080 80.251.112.62:80 220.191.111.178:58552 CLOSE_WAIT 19742/apache2
tcp6 1 12960 80.251.112.62:80 220.191.111.178:58554 CLOSE_WAIT 19199/apache2
tcp6 1 12960 80.251.112.62:80 220.191.111.178:58556 CLOSE_WAIT 18821/apache2
tcp6 1 8640 80.251.112.62:80 220.191.111.178:58561 CLOSE_WAIT 19747/apache2

★★★

Привет.

Попробуй тупо заблокировать на время эти ip или всю подсеть.

CLOSE_WAIT и TIME_WAIT - это нормально. При чём CLOSE_WAIT это больше твоя проблема и скорее всего из-за общей перегруженности сервера возникает. А вот LAST_ACK, возможно, и говорит о корявых соединениях с плохим закрытием. Хотя, если этого всего очень много, то это просто DOS/DDOS.

Один ip или много? Как много запросов в единицу времени?

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

как много запросов - как-то несчитал, но судя по всему это просто какой-то долбанутый кравлер. но может такая хрень висеть час-другой и обычно это от одного до трёх разных IP-адресов из китая.

CLOSE_WAIT на другие IP не появляется. сервер свободен полностью.

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

обычно спасаюсь как раз с помощью iptables на конкретный IP, но это какое-то извращение.

vahvarh ★★★
() автор топика

уменьши таймауты, поставь nginx фронтендом и будет тебе счастье. Ну а чтобы блочить юзай ipset.

true_admin ★★★★★
()

я просто ограничил кол-во соединений per ip при помощи iptables -m connlimit

Chain i_limits (2 references)
 pkts bytes target     prot opt in     out     source               destination 
   37  1892 DROP       tcp  --  any    any     anywhere             anywhere            tcp dpt:smtp flags:SYN,RST,ACK/SYN #conn/32 > 1
  514 23376 DROP       tcp  --  any    any     anywhere             anywhere            tcp dpt:www flags:SYN,RST,ACK/SYN #conn/24 > 20
 4008  203K DROP       tcp  --  any    any     anywhere             anywhere            tcp dpt:8000 flags:SYN,RST,ACK/SYN #conn/32 > 3

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

вообще советую собрать апач с многопоточностью или использовать другой сервер nginx /lighttpd. форк процесса для каждого соединения для вебсервера - самое неэффективное решение. имхо

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

>+-100 коннектов из китая не будет парить
+1
И не стоит так заморачиваться, если у вас не PII 128Mb RAM

markevichus ★★★
()

эффективнее всего - поставить nginx фронтендом к апачу. обработка тупых соединений, отдача статики и прочего контента медленным клиентам полностью будет перенесена на плечи nginx, а он с таким на ура справляется. проверено в боевых условиях :)

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