banaction = firewallcmd-ipset
IP с которого выполняю DDoS на свой сервер был в списке забаненных ipset, но никакой реакции за этим не следовало, пришлось вернуть:
banaction = iptables-multiport
Почему с firewallcmd-ipset могло не получиться? Оно выдаёт ещё какую-то ошибку при выполнении команды systemctl status filrewalld:
2021-02-03 10:28:09 ERROR: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.2 (nf_tables):
line 4: RULE_REPLACE failed (No such file or directory): rule in chain INPUT
line 4: RULE_REPLACE failed (No such file or directory): rule in chain OUTPUT
2021-02-03 10:28:09 ERROR: COMMAND_FAILED: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.2 (nf_tables):
line 4: RULE_REPLACE failed (No such file or directory): rule in chain INPUT
line 4: RULE_REPLACE failed (No such file or directory): rule in chain OUTPUT
Однажды у меня сервер совсем перестал отвечать, пришлось выполнить iptables -F, оно начало работать, решил удалить firewalld и ipset на всякий случай (чёрная полоса началась в жизни), но теперь при перезагрузке сервер не отвечает на запросы до выполнения iptables -F. С чем это может быть связано? По ssh отвечает, а вот по http до выполнения iptables -F выдаёт ERR_TUNNEL_CONNECTION_FAILED.
Какие знаете методики защиты от DDoS, статьи, есть годные книги? Ещё для защиты от DDoS скопировал данные настройки (которые не особо понимаю):
### ADDITIONAL ANTIDDOS
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syncookies=1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 5
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
### SYSCTL -W
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.tcp_max_orphans=65536
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=5
net.core.netdev_max_backlog=1000
net.core.somaxconn=15000
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_no_metrics_save=1
Итог: баню с помощью связки limit_req от nginx + fail2ban без ipset, после каждой перезагрузки сервера почему-то надо делать iptables -F.
Как человек, повидавший несколько ддосов, могу с уверенностью сказать, что твоя защита - полная херня. Против хорошого ддоса никакой файрвол/fail2ban не спасёт. Потому что они физически весь интернет-канал забивают настолько, что даже по ssh хрен подключишься. Буквально вот неделю назад прилетела атака, за день на сайт поступило 100 миллионов запросов и 380 гигабайт трафика. А теперь давай элементарно посчитаем - допустим в идеальном случае твой файрвол блочит 99% запросов, пропущенный миллион запросов положит твой сервак на обе лопатки. Твои действия? Я уже не говорю о том, что за 400 гигов трафика тебя запросто могут пидорнуть с хостинга. Так как, опять же, физически запрос доходит до сервера.
Нормальная (не понарошная) защита от дудоса делается так:
Внешний файрвол (AWS WAF или CloudFlare WAF) --> балансировщик нагрузки --> внутренняя сеть --> автомасштабируемая группа серверов
Автомасштабируемая, чтобы в момент атаки 2 сервера превращались в 10 или 20 серверов и гасили всю нагрузку, пропущенную файрволом. Естественно, вся эта красота стоит не 3 копейки, хостинг будет обходится в $100-300/месяц, но оно того стоит. Ну или как минимум нужно купить файрвол на cloudflare за $20/месяц.
Мануалы:
https://www.cloudflare.com/learning/ddos/http-flood-ddos-attack/
https://docs.aws.amazon.com/waf/latest/developerguide/classic-tutorials-ddos-cross-service.html
https://d1.awsstatic.com/whitepapers/Security/DDoS_White_Paper.pdf
Тред можно закрывать.
> теперь при перезагрузке сервер не отвечает на запросы до выполнения iptables -F
справился с помощью удаления iptables-persistent.
>>1295
>Против хорошого ддоса никакой файрвол/fail2ban не спасёт.
Мне нужно хотя бы на этом уровне защититься. Cloudflare пробовал бесплатный, там просит капчу вводить, а толку, вот купит кто-то ввод капчи или что-то типа того, а файрволл ничего не блочит. Бота вполне могут работать с javascript.
> А теперь давай элементарно посчитаем - допустим в идеальном случае твой файрвол блочит 99% запросов, пропущенный миллион запросов положит твой сервак на обе лопатки. Твои действия?
Доступ по инвайтам.
Объяснил уже, что без въёбывания денег в инфраструктуру, отбиться от ддоса анрил. Это тупо игра кошельков, защита iptables - это по-детски наивно. Атакущий положит сайт и не заметит что там был файрволл. Я всё это уже пробовал, IRL это помогает чуть менее, чем никак.
>Cloudflare пробовал бесплатный
Бесплатный и платный cloudflare - две большие разницы. Платный умеет сжимать картинки/скрипты/стили, блочить плохих ботов и более-менее защищает от дудоса. Но главное, что ЭТО ЧУЖОЙ СЕРВЕР, хуй с ним, пускай его атакуют. Когда же атакуют твой сервер, ты тратишь ценные ресурсы проца/сети на то, чтобы отбиваться. Это две большие разницы. Сама нахуй идея банить по access логам - адски тупая. Мало того, что access логи растут невъебенно, так ещё у самого iptables есть ограничение на количество правил. То есть если добавить скажем 1000 правил, то сам iptables начнёт тормозить. Он на это толком не рассчитан.
Короче, you're doing it wrong. Cloudflare пока самая норм защита.
>Мало того, что access логи растут невъебенно, так ещё у самого iptables есть ограничение на количество правил. То есть если добавить скажем 1000 правил, то сам iptables начнёт тормозить.
Так рассказывал, что хотел попробовать через ipset (утверждают, что в этом плане лучше), но почему-то не получилось, ipset содержит в своём списке IP DoS'ера, но ему почему-то не запрещается доступ.
>Бесплатный и платный cloudflare - две большие разницы.
В любом случае бесплатный создаёт дополнительные неудобства (требует ввод капчи, работающий javascript).
> Сама нахуй идея банить по access логам - адски тупая.
У меня есть идея через php скрипт банить, записывая кол-во запросов в БД. limit_req умеет считать кол-во запросов в секунду, а когда пытался лимитировать кол-во запросов в минуту получилось как-то неправильно, похоже не так понимаю принцип работы.
>access логам - адски тупая
Банится по error.log, там же запись возникает, что превышен лимит запросов.
Ладно, может cloudflare имеет смысл, если DDoS'ер не умеет вводить капчу и в javascript. И тут снова же можно сделать так, чтобы переход в режим Under Attack! осуществлялся через какой-нибудь скрипт, который оценивает кол-во запросов.
Ты какой-то твердолобый, ему твердишь одно, а он по прежнему гнёт свою линию. Ну да бог тебе судья.
>В любом случае бесплатный создаёт дополнительные неудобства
Какие неудобства, Карл. Cloudflare примерно 10% трафика пропускает мимо себя. То есть из 100 миллионов запросов тебя накроет только 10 миллионов. Тебе от этого легче станет? Какая разница, у тебя и так и сяк сервак сдохнет.
>У меня есть идея через php скрипт банить
АХАХАХА. Наивное сука дитё. Какие php-скрипты, у тебя сервер в дауне будет валяться...
Ладно, короче отчаливаю из этого треда, бестолку чего-то доказывать. Советую просто заказать ддос на свой сайт, стоит недорого, баксов $30 и вживую проверить все свои теории.
>Какие неудобства, Карл.
Я не знаю, может cloudflare снижает скорость ответа. Ещё раз напоминаю про требование вводить капчу и обязательно иметь включённый javascript.
> То есть из 100 миллионов запросов тебя накроет только 10 миллионов.
Мне бы разобраться с простыми DDoS'ами.
>АХАХАХА. Наивное сука дитё. Какие php-скрипты, у тебя сервер в дауне будет валяться...
Такими, что через php можно контролировать кол-во запросов в минуту/час, реагировать на ситуацию, автоматически банить в случае чрезмерной нагрузки все иностранные IP.
>Советую просто заказать ддос на свой сайт, стоит недорого, баксов $30 и вживую проверить все свои теории.
Сколько стоит ввод капчи? Почему-то никто этим не занимается.
Ты упускаешь, что тот же php является слабым местом любого ресурса, достаточно заказать слабый DDoS на php-скрипт, а потом придётся покупать платный AntiDDos, хотя достаточно было контролировать эту ситуацию.
У меня кстати ClouFlare вырубал API и RSS, потому что и там требуется javascript с вводом капчи... RSS-агрегатор не умеет в подобное, а любые запросы к API нужно тогда делать с учётом ограничений ClouFlare.
>Такими, что через php можно контролировать кол-во запросов
Это всё фантазии. Мне прилетал дудос и всё обращения были на страницу контакта. Я правлю конфиги nginx, все запросы на страницу контакта блочу. Всё через Cloudflare проксируется. Стоит галка "under attack" естественно. Так вот, они даже через cloudflare, даже с галкой "under attack", даже будучи заблоченными самим nginx'ом, они всё равно сервак валят.
Вот как это было:
https://www.youtube.com/watch?v=oPh7xZlQpAc
Давнишнее видео, обрати внимание, там везде стоит "access forbidden by rule". И всё равно интернет-канал забит на 100%, при попытке открыть сайт - сервер не найден. Он ушел в даун на несколько дней. А ты говоришь про какие-то php скрипты...
>Давнишнее видео, обрати внимание, там везде стоит "access forbidden by rule".
Так подожди, нужно же ещё с помощью fail2ban IP банить. Я пробовал тупо limit_req устанавливать, так nginx то всё равно отвечает отдавая страницу с ошибкой. Мне не нравится, что этот fail2ban проверяет логи с некоторой периодичностью и нельзя сразу при limit_req в бан отправить, тогда было бы производительнее.