Jump to content
Калькуляторы

Не открывается сайт, ddos ят походу. Что лучше сделать?

Заметил что сайт стал медленно открываться, а иногда и вовсе не открывается. Сайт-визитка,чисто html файл, весит 42кб, умеет отправлять письма из php скрипта, есть несколько картинок на нем и ссылка на гугл карты.
На сервере смотрю в логи http, есть запросы но их не так много 20-30 запросов (GET|POST) в сек.

Просмотрел число ТCP сокетов/соединений на 80 порт #netstat -anp а там интересно - висит порядка 750 соединений/попыток соединений. TCP cоединения в состоянии SYN_RECV,TIME_WAIT,ESTABLISHED,FIN_WAIT1,FIN_WAIT2,CLOSE_WAIT,LAST_ACK и другие возможно

Добавил ручками в iptables IP с которых шли попытки соединений SYN_RECV, но это не сильно помогло, список пополнился новыми

Судя по tcpdump на 80 порт прилетает где то 1000-1200 пакетов в секунду. и руками задолбаешься добавлять IP

 

 

На сервер с сайтом заходит канал 1гбит/с от провайдера, входящего трафика (с учетом ddos запросов) на сервер с сайтом 15 Мбит/с.
Cайт в виртуалке OpenVZ под apache

 

Что нужно настроить на сервере, чтобы помогло?

Что покрутить в ядре?

 

Существуют списки IP для нечисти и пушистых? хотябы пользователей в РФ допустить только

 

Про конторы которые занимаются защитой сайтов от типа ddos  знаю

 

Share this post


Link to post
Share on other sites

table inet dev {
				set blackhole {
                  	type ipv4_addr
                	flags dynamic,timeout
        		}

        		set v6.blackhole {
                	type ipv6_addr
                	flags dynamic,timeout
        		}
				chain input {
                type filter hook input priority filter; policy accept;
                ip saddr @blackhole counter drop 
				ip6 saddr @v6.blackhole counter drop
				iif != "lo" ct state new tcp dport 80 meter acct80 size 65535 { ip saddr limit rate over 10/second } add @blackhole { ip saddr timeout 1m }
				iif != "lo" ct state new tcp dport 80 meter 6acct80 size 65535 { ip6 saddr limit rate over 10/second } add @v6.blackhole { ip saddr timeout 1m }
				}
}

и потом: nft list set inet dev blackhole

Думаю подойдет.

Edited by h3ll1

Share this post


Link to post
Share on other sites

Может логи посмотреть куда они там у вас долбятся ? А то может они спам через вас шлют или сломали вас давно и дальще сканят...

 

Share this post


Link to post
Share on other sites

В 03.06.2022 в 17:46, QWE сказал:

Судя по tcpdump на 80 порт прилетает где то 1000-1200 пакетов в секунду. и руками задолбаешься добавлять IP

Это смешная нагрузка даже для пентиум 3, если вы сами не можете адекватно настроить хостенг - зовите спецов.

Share this post


Link to post
Share on other sites

В 04.06.2022 в 00:59, st_re сказал:

Может логи посмотреть куда они там у вас долбятся ? А то может они спам через вас шлют или сломали вас давно и дальще сканят...

 

долбятся на 80 порт и tcp коннекты только по этому порту.

 

В 03.06.2022 в 23:05, h3ll1 сказал:
table inet dev {
				set blackhole {
                  	type ipv4_addr
                	flags dynamic,timeout
        		}

        		set v6.blackhole {
                	type ipv6_addr
                	flags dynamic,timeout
        		}
				chain input {
                type filter hook input priority filter; policy accept;
                ip saddr @blackhole counter drop 
				ip6 saddr @v6.blackhole counter drop
				iif != "lo" ct state new tcp dport 80 meter acct80 size 65535 { ip saddr limit rate over 10/second } add @blackhole { ip saddr timeout 1m }
				iif != "lo" ct state new tcp dport 80 meter 6acct80 size 65535 { ip6 saddr limit rate over 10/second } add @v6.blackhole { ip saddr timeout 1m }
				}
}

и потом: nft list set inet dev blackhole

Думаю подойдет.

 

это конфиг для какой железки/ОСи ?

 

В 04.06.2022 в 01:03, Ivan_83 сказал:

Это смешная нагрузка даже для пентиум 3, если вы сами не можете адекватно настроить хостенг - зовите спецов.

Нагрузка может быть и смешная, но карусель из количества IP неясного размера.  Напишите в личку если готовы решить задачу.

За ночь зафильтровали 13250 IP которые долбятся на 80 порт, в фильтр попали IP операторов (билайн,yota  LTE интернет) за которыми сидят и абоненты и ддосеры.

Share this post


Link to post
Share on other sites

В 04.06.2022 в 12:02, QWE сказал:

долбятся на 80 порт и tcp коннекты только по этому порту.

ммм... ну да.. на 80 порту, я так предполагаю живет какоето приложениее.. ну как вариант апач или там нгинкс.. может быть еще чтото. вам это лучше знать что, мне отсюда не видать.. оно наверное пишет логи ? в жтих лога, наверное, чтото есть, что они запрашивают от вашего сервера ? судя по

Цитата

YN_RECV,TIME_WAIT,ESTABLISHED,FIN_WAIT1,FIN_WAIT2,CLOSE_WAIT,LAST_ACK 

с приложением они соеденились и возможно чтото там запросили... 

 

нет ? а то изчуать нагрузку на веб по нетстату это, как бы, странно.

 

Share this post


Link to post
Share on other sites

В 04.06.2022 в 21:28, st_re сказал:

ммм... ну да.. на 80 порту, я так предполагаю живет какоето приложениее.. ну как вариант апач или там нгинкс.. может быть еще чтото. вам это лучше знать что, мне отсюда не видать.. оно наверное пишет логи ? в жтих лога, наверное, чтото есть, что они запрашивают от вашего сервера ? судя по

с приложением они соеденились и возможно чтото там запросили... 

 

нет ? а то изчуать нагрузку на веб по нетстату это, как бы, странно.

 

почему странно, до процесса http или nginx http запросы могут не долететь, по причине не создания tcp соединения/сокета пакетами уровня tcp, которые создают tcp сокет.

на порту 80 живет apache.

вот часть его лога

# tail -f access_log
212.119.32.4 - - [04/Jun/2022:22:07:43 +0300] "GET / HTTP/1.1" 200 42380
8.20.126.101 - - [04/Jun/2022:22:07:43 +0300] "GET / HTTP/1.1" 200 42380
123.57.7.119 - - [04/Jun/2022:22:07:43 +0300] "GET / HTTP/1.1" 200 42380
189.214.7.5 - - [04/Jun/2022:22:07:44 +0300] "GET / HTTP/1.1" 200 42380
37.120.152.196 - - [04/Jun/2022:22:07:44 +0300] "GET / HTTP/1.1" 200 42380
146.75.179.30 - - [04/Jun/2022:22:07:44 +0300] "GET / HTTP/1.1" 200 42380
45.137.106.102 - - [04/Jun/2022:22:07:45 +0300] "GET / HTTP/1.1" 200 42380
20.218.72.124 - - [04/Jun/2022:22:07:45 +0300] "POST / HTTP/1.1" 200 42380
104.244.73.93 - - [04/Jun/2022:22:07:46 +0300] "POST / HTTP/1.1" 200 42380
146.75.179.30 - - [04/Jun/2022:22:07:46 +0300] "GET / HTTP/1.1" 200 42380
179.1.73.102 - - [04/Jun/2022:22:07:48 +0300] "GET / HTTP/1.1" 200 42380
45.79.249.71 - - [04/Jun/2022:22:07:48 +0300] "GET / HTTP/1.1" 200 42380
37.120.152.196 - - [04/Jun/2022:22:07:50 +0300] "GET / HTTP/1.1" 200 42380
89.232.118.229 - - [04/Jun/2022:22:07:50 +0300] "GET / HTTP/1.1" 200 42380
207.154.222.200 - - [04/Jun/2022:22:07:50 +0300] "POST / HTTP/1.1" 200 42380
89.232.118.229 - - [04/Jun/2022:22:07:51 +0300] "GET / HTTP/1.1" 200 42380
45.137.106.15 - - [04/Jun/2022:22:07:51 +0300] "GET / HTTP/1.1" 200 42380
189.214.7.5 - - [04/Jun/2022:22:07:51 +0300] "GET / HTTP/1.1" 200 42380
189.214.7.5 - - [04/Jun/2022:22:07:52 +0300] "GET / HTTP/1.1" 200 42380
103.148.39.38 - - [04/Jun/2022:22:07:53 +0300] "POST / HTTP/1.1" 200 42380
45.116.157.236 - - [04/Jun/2022:22:07:50 +0300] "POST / HTTP/1.1" 200 42380
217.219.76.40 - - [04/Jun/2022:22:07:53 +0300] "GET / HTTP/1.1" 200 42380
45.137.106.102 - - [04/Jun/2022:22:07:53 +0300] "GET / HTTP/1.1" 200 42380
181.10.160.156 - - [04/Jun/2022:22:07:53 +0300] "POST / HTTP/1.1" 200 42380
190.104.1.20 - - [04/Jun/2022:22:07:53 +0300] "POST / HTTP/1.1" 200 42380
185.204.197.169 - - [04/Jun/2022:22:07:54 +0300] "GET / HTTP/1.1" 200 42380
13.71.117.139 - - [04/Jun/2022:22:07:54 +0300] "GET / HTTP/1.1" 200 42380
69.165.73.111 - - [04/Jun/2022:22:07:55 +0300] "GET / HTTP/1.1" 200 42380
178.20.55.16 - - [04/Jun/2022:22:07:55 +0300] "GET / HTTP/1.1" 200 42380
45.137.106.102 - - [04/Jun/2022:22:07:55 +0300] "GET / HTTP/1.1" 200 42380
52.59.26.88 - - [04/Jun/2022:22:07:55 +0300] "GET / HTTP/1.1" 200 42380
162.247.74.27 - - [04/Jun/2022:22:07:55 +0300] "GET / HTTP/1.1" 200 42380
94.75.76.3 - - [04/Jun/2022:22:07:56 +0300] "GET / HTTP/1.1" 200 42380
216.155.89.66 - - [04/Jun/2022:22:07:56 +0300] "POST / HTTP/1.1" 200 42380
173.212.237.200 - - [04/Jun/2022:22:07:56 +0300] "GET / HTTP/1.1" 200 42380
94.240.188.72 - - [04/Jun/2022:22:07:57 +0300] "GET / HTTP/1.1" 200 42380
103.107.199.109 - - [04/Jun/2022:22:07:57 +0300] "GET / HTTP/1.1" 200 42380
13.71.117.139 - - [04/Jun/2022:22:07:57 +0300] "GET / HTTP/1.1" 200 42380
2.188.164.194 - - [04/Jun/2022:22:07:57 +0300] "POST / HTTP/1.1" 200 42380
212.119.32.4 - - [04/Jun/2022:22:07:57 +0300] "GET / HTTP/1.1" 200 42380
3.87.6.19 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
45.137.106.102 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
217.138.192.77 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
104.238.150.129 - - [04/Jun/2022:22:07:56 +0300] "POST / HTTP/1.1" 200 42380
218.1.142.163 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
45.79.249.71 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
128.90.147.10 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
8.43.225.74 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
146.75.179.30 - - [04/Jun/2022:22:07:58 +0300] "GET / HTTP/1.1" 200 42380
8.20.126.101 - - [04/Jun/2022:22:07:59 +0300] "GET / HTTP/1.1" 200 42380
94.240.188.72 - - [04/Jun/2022:22:07:59 +0300] "GET / HTTP/1.1" 200 42380
3.87.6.19 - - [04/Jun/2022:22:07:59 +0300] "GET / HTTP/1.1" 200 42380
178.175.141.251 - - [04/Jun/2022:22:07:59 +0300] "GET / HTTP/1.1" 200 42380
120.34.241.152 - - [04/Jun/2022:22:07:57 +0300] "POST / HTTP/1.1" 200 42380
219.100.37.234 - - [04/Jun/2022:22:08:00 +0300] "GET / HTTP/1.1" 200 42380
35.203.252.99 - - [04/Jun/2022:22:08:00 +0300] "GET / HTTP/1.1" 200 42380
123.25.15.209 - - [04/Jun/2022:22:08:00 +0300] "POST / HTTP/1.1" 200 42380
103.42.180.250 - - [04/Jun/2022:22:08:00 +0300] "POST / HTTP/1.1" 200 42380
62.80.165.207 - - [04/Jun/2022:22:08:01 +0300] "GET / HTTP/1.1" 200 42380
62.80.165.207 - - [04/Jun/2022:22:08:01 +0300] "GET / HTTP/1.1" 200 42380
62.80.165.207 - - [04/Jun/2022:22:08:01 +0300] "GET / HTTP/1.1" 200 42380
37.120.152.196 - - [04/Jun/2022:22:08:01 +0300] "GET / HTTP/1.1" 200 42380
109.238.225.94 - - [04/Jun/2022:22:08:01 +0300] "GET / HTTP/1.1" 200 42380
94.240.188.72 - - [04/Jun/2022:22:08:02 +0300] "GET / HTTP/1.1" 200 42380
178.20.55.16 - - [04/Jun/2022:22:08:02 +0300] "GET / HTTP/1.1" 200 42380
125.26.4.219 - - [04/Jun/2022:22:08:01 +0300] "POST / HTTP/1.1" 200 42380
45.137.106.102 - - [04/Jun/2022:22:08:02 +0300] "GET / HTTP/1.1" 200 42380
45.177.111.117 - - [04/Jun/2022:22:08:02 +0300] "POST / HTTP/1.1" 200 42380
181.169.91.199 - - [04/Jun/2022:22:08:02 +0300] "POST / HTTP/1.1" 200 42380
3.87.6.19 - - [04/Jun/2022:22:08:02 +0300] "GET / HTTP/1.1" 200 42380
146.75.179.30 - - [04/Jun/2022:22:08:03 +0300] "GET / HTTP/1.1" 200 42380
13.71.117.139 - - [04/Jun/2022:22:08:05 +0300] "GET / HTTP/1.1" 200 42380
77.236.238.33 - - [04/Jun/2022:22:08:06 +0300] "POST / HTTP/1.1" 200 42380
218.235.250.203 - - [04/Jun/2022:22:08:06 +0300] "GET / HTTP/1.1" 200 42380
45.137.106.102 - - [04/Jun/2022:22:08:06 +0300] "GET / HTTP/1.1" 200 42380
104.28.237.18 - - [04/Jun/2022:22:08:06 +0300] "GET / HTTP/1.1" 200 42380
3.87.6.19 - - [04/Jun/2022:22:08:06 +0300] "GET / HTTP/1.1" 200 42380
37.120.152.196 - - [04/Jun/2022:22:08:07 +0300] "GET / HTTP/1.1" 200 42380
117.70.41.245 - - [04/Jun/2022:22:08:04 +0300] "POST / HTTP/1.1" 200 42380
146.75.179.30 - - [04/Jun/2022:22:08:07 +0300] "GET / HTTP/1.1" 200 42380

 

#netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c

     21 ESTABLISHED
     23 FIN_WAIT1
     17 FIN_WAIT2
      4 LAST_ACK
      4 LISTEN
     29 SYN_RECV
    228 TIME_WAIT

 

Share this post


Link to post
Share on other sites

а "GET /" там что ? php ?

 

а по нетстату, ну да, люди чутка ходят.. ничего из разряда "много" тут и рядом не валялось. SYN_RECV 29, ну да апач не самый быстрый (совсем не быстрый) обработчик соеденений, не успевает немного всех обработать (причем среди не успевают будут и посетители и ддосеры). в куске вашего лога насчиталось 8 разпросов в сек максимум.. накрыть это сверху нгинксом (или лучше, конечно, пересадить пхп, еслу у вас оно, на php-fpm но придётся конвертировать .htaccess в реврайны от nginx, проще сам апач перевесить на 127.0.0.1, а нгикс на его место. если у вас там не чтото самописное, то поискать инстуркции у авторов движка, там обычно бывают примеры.)

в нгинксе запретить POST (не ГЕТ) на / вобще нафиг, а гет закешировать. и забыть про мамкиных ддосеров. ну можно еще там же рейтлимитом на ИП пройтись.

 

ну или боритесь фаерволом, но по Netstat вы явно не отличите посетителей от ддосеров. тогда уже по логу, найти ТОП посетителей, у которых нет других запросов (у вас же там врядли сайт без картинок/стилей/итд и состоит из одной / страницы), а также всех кто делает чтото кроме ГЕТ на / (если конечно там нет такого по логике сайта, но обычно не бывает), и всех скопом и зафильтровать.

 

а, и еще, в лог добавить добавить заголовок Host.. там бывает всякое, всех кроме своих -> в сад.

 

  17 CLOSING
2974 ESTABLISHED
  42 FIN_WAIT_1
  11 FIN_WAIT_2
  20 LAST_ACK
  25 LISTEN
   7 SYN_RCVD
 941 TIME_WAIT

(тут правда FreeBSD, немного по другому называются статусы) сервер вообще курит-курит-курит со своими ~300 запросов в сек..

Share this post


Link to post
Share on other sites

On 6/4/2022 at 12:02 PM, QWE said:

это конфиг для какой железки/ОСи ?

Linux 5.x>nftables

nft -v
echo > nft.cfg "table inet dev {
				set blackhole {
                  	type ipv4_addr
                	flags dynamic,timeout
        		}

        		set v6.blackhole {
                	type ipv6_addr
                	flags dynamic,timeout
        		}
				chain input {
                type filter hook input priority filter; policy accept;
                ip saddr @blackhole counter drop 
				ip6 saddr @v6.blackhole counter drop
				iif != "lo" ct state new tcp dport 80 meter acct80 size 65535 { ip saddr limit rate over 10/second } add @blackhole { ip saddr timeout 1m }
				iif != "lo" ct state new tcp dport 80 meter 6acct80 size 65535 { ip6 saddr limit rate over 10/second } add @v6.blackhole { ip saddr timeout 1m }
				}
}" 
&& nft -f nft.cfg && nft list ruleset

 

Share this post


Link to post
Share on other sites

В 04.06.2022 в 09:02, QWE сказал:

Нагрузка может быть и смешная, но карусель из количества IP неясного размера.  Напишите в личку если готовы решить задачу.

За ночь зафильтровали 13250 IP которые долбятся на 80 порт, в фильтр попали IP операторов (билайн,yota  LTE интернет) за которыми сидят и абоненты и ддосеры.

Вы хотя бы тюнинги Сысоева от 2007 года сделайте. Потом синкуки включить.

И прекращайте смешить, у меня торрент клиент больше сетевых совокуплений делает и вообще никак систему не грузит. Хотя какой там торрент, даже браузер за сутки сильно больше совокупляется.

 

https://forum.nag.ru/index.php?/forum/78-vakansii/page/7/

вот тут можете попросить платной помощи.

Share this post


Link to post
Share on other sites

В 04.06.2022 в 23:54, Ivan_83 сказал:

И прекращайте смешить, у меня торрент клиент больше сетевых совокуплений делает и вообще никак систему не грузит. Хотя какой там торрент, даже браузер за сутки сильно больше совокупляется.

 

Я говорил что сайт не открывается, а не apache грузит систему. Сейчас загрузка CPU у "контейнера" с apache не более 1%.  Зафильтрованно 17200 IP.

У "контейнера" настроены ограничения ресурсов для процессов.

Share this post


Link to post
Share on other sites

В 05.06.2022 в 12:58, QWE сказал:

index.html размером 42380 байт

если сайт статика, то апач снести и забыть про него, поставить нгинкс. и somaxcon со стандартных, скорее всего, 128 поднять до, к примеру, 16к.

и включить в nginx gzip.. (и я бы глянул, если после включения гзипа гг ддосеры всёравно получают 42к страничку, то написал бы ченить вида

if ($http_accept_encoding !~ 'gzip' ) {

return 200;

)

чтобы канал за зря не грузили.

Share this post


Link to post
Share on other sites

В 07.06.2022 в 03:28, st_re сказал:

поставить нгинкс

почему не lighttpd? он статику один раз сожмёт и будет отдавать готовое не грузя зря cpu и канал, а gzip модуль nginx не помню чтобы сохранял сжатое

Share this post


Link to post
Share on other sites

В 07.06.2022 в 14:23, yandrey сказал:

почему не lighttpd? он статику один раз сожмёт и будет отдавать готовое не грузя зря cpu и канал, а gzip модуль nginx не помню чтобы сохранял сжатое

lighttpd умеет php скрипты выполнять?

Share this post


Link to post
Share on other sites

В 07.06.2022 в 14:23, yandrey сказал:

почему не lighttpd? он статику один раз сожмёт и будет отдавать готовое не грузя зря cpu и канал, а gzip модуль nginx не помню чтобы сохранял сжатое

ну это кому что больше нравится.. :) в нгинксе можно тоже пожатое заранее отдать. но жать самому. gzip_static модуль штатный

Share this post


Link to post
Share on other sites

В 07.06.2022 в 19:43, QWE сказал:

lighttpd умеет php скрипты выполнять?

умеет, есть несколько *cgi модулей, даже самостоятельно запускать что угодно

Share this post


Link to post
Share on other sites

В 06.06.2022 в 20:28, st_re сказал:

скорее всего, 128 поднять до, к примеру, 16к.

128 мало, а 16к - перебор.

Учитывая что оно fifo то может получится что пока до последнего дойдёт очередь обработки он уже по таймауту уйдёт.

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

 

 

В 07.06.2022 в 11:23, yandrey сказал:

почему не lighttpd? он статику один раз сожмёт и будет отдавать готовое не грузя зря cpu и канал, а gzip модуль nginx не помню чтобы сохранял сжатое

Там любого функционала хватает, нужно только документацию прочитать и иногда фантазию проявить.

Слабо представляю зачем нужно что то кроме nginx, разве что совсем узкоспецифичные задачи.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.