LINUX.ORG.RU

Помогите новичку с DDOS

 


0

3

Привет. Я ни разу не сисадмин, вообще не в теме по этой части. Досят сайт на VPS. Ложится база, разрастаются файлы биарных логов mysql, мускул сдыхает, таблицы MyIsam крашатся.

Сейчас в mysql.log тьма запросов, ежесекундно, если mysql запущен:

Access denied for user '*****'@'localhost' (using password: YES)

Что сделал:

  1. Сменил порт доступа к серверу.

  2. Сменил порт mysql, прописал в конфиге: skip-networking = on

  3. Поставил fail2ban, работает «тюрьма» sshd и mysql. Взял файл конфигурации стандартный и вот что я там поменял/вписал:

ignoreip = [мой ip] 127.0.0.0/8
  
[sshd]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/auth.log
findtime    = 3600
maxretry    = 1
bantime     = 432000
  
[mysqld-auth]
enabled = true
port     = 1821
maxretry = 1
filter   = mysqld-auth
logpath  = /var/log/mysql/error.log

sshd банит (уже под 600 ip), но mysqld-auth ничего не делает.

В логах fail2ban.log:

2021-06-22 12:10:14,504 fail2ban.filter         [10971]: WARNING Determined IP using DNS Lookup: localhost = ['127.0.0.1']
2021-06-22 12:10:14,504 fail2ban.filter         [10971]: INFO    [mysqld-auth] Ignore 127.0.0.1 by ip

В логах nginx или apache ничего критичного не нашел.

Помогите советом, куда дальше копать?

Подожди немного и всё. Твой недображелатель скоро успокоится.Оно же денег стоит. А пока всё правильно делаешь. Попутно найди хоть на время человека который админ и пусть недельку понаблюдает поднастроит и всё такое, только вот АККУРАТНО ибо если тебя мониторят то могут заслать казачка с шашкой, пустишь к себе он тебе твою впс затрёт и поминай как звали. Меня дудосили, но обычно это 1 ну может 2 дня и всё. Заодно у тебя будет база уже готовая говно IPшников. И в будущем мелкие дудосики будут отсекаться на раз два очень эффективно.

anonymous ()

Если у Вас VPS так «медленно» падает, то мощность ddos-a крайне низкая.

У многих нормальных хостеров защита от такой мощности ddos-a входит в стоимость.

Так что просто смените хостера.

suffix ()

Защита от DDoS на атакуемой машине - смех, да и только. Блокировка атакующих хостов через системный фаерволл не спасёт от забивания канала и захлёбывания всей VPS. Тут нужно к своему провайдеру обращаться за защитой от L3, и к CloudFlare от L7 атак.

Локально имеет смысл покрутить sysctl для оптимизации TCP стека и смягчения SYN-флуда.

Hg194 ()

У вас что, mysql торчит в инет? Скорее всего ведь к нему запросы идут через сайт, поэтому fail2ban на mysql бесполезен, все запросы с localhost, а его нельзя банить.

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

Я ни разу не сисадмин, вообще не в теме по этой части.

Но сайт вашей конторе же кто-то сделал, где он?

mky ★★★★★ ()

В логах nginx или apache ничего критичного не нашел.

Если, ЕСЛИ там действительно «ничего критичного», тогда смотри кто взаимодействует с mysql локально, кто пишет в сокет? Может быть это не сайт? Может быть это задача в кроне? Может быть это какое-то легальное приложение, которое долбится в базу, потому что на базу сменили пароль, но в его конфиге пароль не поменяли?

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

нет, это ддос

Итак, я подключил cloudflare, Under Attack Mode + несколько правил из мануалов из сети. Забанил несколько IP, которые генерировали много запросов.

Сейчас база тупо кладётся mysql. Я не знаю куда копать. Порт mysql изменил. Где и как искать причину?

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

fail2ban сейчас вообще ничего не собирает, я перезапускал его - нет ничего, никаких новых ip.

В логах mysql тоже пусто, кроме отладочной информации о процессах запуска и остановки базы. Никто больше не пытается ежесекундно доступ к базе получить.

Логи nginx, apache - они почти пустые.

VladimirIvanov ()
Ответ на: комментарий от mky

У вас что, mysql торчит в инет?

порт сменил, а потом и указал, что соединение только через сокет:

[client]
socket          = /var/run/mysqld/mysqld.sock

[mysqld]
socket          = /var/run/mysqld/mysqld.sock
skip-networking

Но сайт вашей конторе же кто-то сделал, где он? Я разработчик на php, сайт же вообще болванка на вордпресс. Понадобился просто кому-то.

VladimirIvanov ()
Ответ на: комментарий от anonymous
Ставлю аккаунт от лора на то, что тебя брутят через xmlrpc

Вы про файл xmlrpc.php, что входит в состав вордпресс? Его я отключил

не помогло.

Посмотри в логах и выбери решение по вкусу.

Nоварищи, скажите конкретно, куда смотреть, в какие логи? Все логи VPN, что я имею - почти пустые. Там нет никаких массивов данных. Заполняются только логи мускула такой портянкой:

2021-06-26T18:53:57.921356Z 0 [Note] [MY-010855] [Server] Recovering after a crash using binlog 2021-06-26T18:53:57.921944Z 0 [System] [MY-010229] [Server] Starting XA crash recovery… 2021-06-26T18:53:57.951917Z 0 [System] [MY-010232] [Server] XA crash recovery finished. 2021-06-26T18:53:57.991634Z 0 [Note] [MY-012487] [InnoDB] DDL log recovery : begin 2021-06-26T18:53:57.992712Z 0 [Note] [MY-012488] [InnoDB] DDL log recovery : end 2021-06-26T18:53:58.008338Z 0 [Note] [MY-011946] [InnoDB] Loading buffer pool(s) from /var/lib/mysql_idata/ib_buffer_pool 2021-06-26T18:53:58.059980Z 0 [Note] [MY-011946] [InnoDB] Buffer pool(s) load completed at 210626 21:53:58 2021-06-26T18:53:58.160279Z 0 [Note] [MY-010913] [Server] You have not provided a mandatory server-id. Servers in a replication topology must have unique server-ids. Please refer to the proper server start-up parameters documentation. 2021-06-26T18:53:58.162595Z 0 [Note] [MY-010182] [Server] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them. 2021-06-26T18:53:58.163128Z 0 [Note] [MY-010304] [Server] Skipping generation of SSL certificates as certificate files are present in data directory. 2021-06-26T18:53:58.164730Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. 2021-06-26T18:53:58.165278Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. 2021-06-26T18:53:58.165833Z 0 [Note] [MY-010308] [Server] Skipping generation of RSA key pair through –sha256_password_auto_generate_rsa_keys as key files are present in data directory. 2021-06-26T18:53:58.166353Z 0 [Note] [MY-010308] [Server] Skipping generation of RSA key pair through –caching_sha2_password_auto_generate_rsa_keys as key files are present in data directory. 2021-06-26T18:53:58.189925Z 0 [Note] [MY-011025] [Repl] Failed to start slave threads for channel ''. 2021-06-26T18:53:58.206125Z 0 [Note] [MY-011240] [Server] Plugin mysqlx reported: ‘Using SSL configuration from MySQL Server’ 2021-06-26T18:53:58.213777Z 5 [Note] [MY-010051] [Server] Event Scheduler: scheduler thread started with id 5 2021-06-26T18:53:58.214075Z 0 [Note] [MY-011243] [Server] Plugin mysqlx reported: ‘Using OpenSSL for TLS connections’ 2021-06-26T18:53:58.214317Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: ‘8.0.25’ socket: ‘/var/run/mysqld/mysqld.sock’ port: 0 MySQL Community Server - GPL.

А также лог /var/log/proftpd/proftpd.log через некоторые интервалы этим

имя сервера proftpd[19606] 
имя сервера: FTP session opened. 
имя сервера proftpd[19606] 
имя сервера: USER anonymous: no such user found from …. 
имя сервера proftpd[19606] ….: FTP session closed.
VladimirIvanov ()
Ответ на: комментарий от VladimirIvanov

Все логи VPN

Наверное, вы имели ввиду не vpn, а vds?

скажите конкретно, куда смотреть, в какие логи?

Если мускул жрет почти все ресурсы, то гуглите как включить подробное логирование запросов (queries log) или просто берете готовую тулзу типа mytop или что там у мускула нынче актуально https://www.digitalocean.com/community/tutorials/how-to-use-mytop-to-monitor-...

Смотрите, какие запросы тратят ресурсы => сообщаете разработчику или на лор в эту ветку.

anonymous ()
Ответ на: комментарий от VladimirIvanov

Но на будущее, смотреть сначала в логи веб-сервера nginx/apache. Раз сайт - простая (и наверное мало посещаемый вордпресс), подозрительные запросы будет видно невооруженным глазом. Но начни с просмотров запросов мускула.

anonymous ()
Ответ на: комментарий от VladimirIvanov

Сейчас в mysql.log тьма запросов
Сейчас база тупо кладётся mysql
какое отношение mysql запросы имеют к делу, не пойму.

Я даже не знаю, наверное никакого.

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

tfeartx ()
Ответ на: комментарий от Hg194

…и к CloudFlare от L7 атак

А если мы хотим быть «сами с усами», и не хотим раскрываться перед CF, как быть? Почему бы не поставить (как предложил leave) rate-ограничитель по IP в nginx? Или настроить какой-нибудь modsecurity на такое ограничение?

Не специалист, не спорю, просто спрашиваю.

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

Очень серьёзному дудосу на самом деле наплевать на то что у тебя с пекичем будет, он просто канал до него забьёт, даже у хостера и провайдера. Выживают только специальные дудос устойчивые сервисы типа CloudFlare, там и канал очень толстый и много всякого говна накручено чтобы работало всё.

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

Он у меня стырил идею. :D

Ну теперь поздно, надо было додумать свою мысль самому, сразу :)

@peregrine

Предположим что очень серьёзно дудосить не будут. Хотим защититься «в разумных пределах», от мамкиных хакиров.

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

Отдельная машина с обратным прокси. NGINX Reverse Proxy, настроить и погнали, пусть на нём будет и failtoban и напиливать чтобы он больше определённого числа запросов не пускал дальше, потому как упавший сервер/сервер торчащий СУБД в инет, хуже чем в пиковую нагрузку части пользователей (особенно ботов) отдать пустую страницу/заглушку. Будет мини CloudFlare зато свой. Правда мощности будут далеко не их.

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

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

А если тебя провайдер задудосит? Я просто такое уже делал в связке iptables с fail2ban. Для мамкохацкеров

-A INPUT -p tcp -m multiport --dports твои_порты_через_запятую -m recent --set --name dos-attack
-A INPUT -p tcp -m multiport --dports твои_порты_через_запятую -m recent --update --seconds 2 --hitcount 20 --name dos-attack -j DROP

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

А для нормального канал уже все.

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

А если тебя провайдер задудосит?

Мой, где у меня VPS? Такое бывает?? 8-)

–set –name dos-attack … –seconds 2 –hitcount 20 –name dos-attack -j DROP

Спасибо!

Но это защита на L4, а мы-то про L7 (ТС пишет что много запросов к базе; и ему CF рекомендуют). А в nginx можно именно по эндпоинтам всё ограничить, уже после установки TLS-связи. Это то что нужно.

@peregrine

NGINX Reverse Proxy

Ну да, всё уже до нас стырили придумали, и лив тоже об этом.

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

То есть на стороне хостера и провайдера, а не сам провайдер.

а мы-то про L7

Тогда я не советчик, это с программированием связано, наверное.

Ну да, всё уже до нас стырили придумали

Ага, и кто-то придумывает наши идеи раньше нас, что никогда не было такого?

Aeeioyqee ()

Оп там видимо умер, а зря, тред интересный, особенно перепись теоретиков про L7 и бан фаерволом/nginx по айпи.

Вордпресс с параметрами на рандом выборку постов (да или просто так иногда делает по 100-200+ запросов к бд на страницу) ложится на раз-два, а большой пул прокси стоит не так дорого. Конечно, рано или поздно вы перебаните их своим fail2ban или что там будете использовать, но вы так весь интернет забаните.

Хотелось бы услышать автора треда, че у него там по запросам к бд.

tfeartx ()
Ответ на: комментарий от slowpony

Ты почти прав, но не совсем. У него там вордпресс (о чем он написал где-то в комментах). Кто-то дергает по http вордпресс - вп дергает базу. Запросы к мускулу идут с локалхоста, что понятно. Но про ддос и закрытие мускула внутрь они советуют, ага :)

tfeartx ()
Ответ на: комментарий от Jopich1

перевесь хотя бы ssh/msql со стандартных портов …

вот про это и хотел написать.

У меня сейчас в логах mysql такое проскакивает:

2021-06-29T09:34:17.314058Z 464425 [Note] [MY-010926] [Server] Access denied for user 'fdvd'@'localhost' (using password: YES)

как???

У меня закрыт сетевой доступ:

[mysqld]
#bind-address =
skip-networking

PS сейчас подключил клоудфаре, вроде помогает от нагрузки.

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

И вот еще что нашел. Что это?

2021/06/29 19:10:00 [crit] 1352#1352: *316908 connect() to unix:/var/run/php-fpm.www-data.sock failed (2: No such file or directory) while connecting to upstream, client: 193.169.254.115, server: **********, request: "GET /phpmyadmin/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.www-data.sock:", host: "***********"
VladimirIvanov ()
Ответ на: комментарий от VladimirIvanov

как???

‘fdvd’@‘localhost’

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

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

поломали ваш водпрес

git status ничего не показывал, никаких изменений в кодовой базе. Сейчас запустил

find / -name "*.php" -mtime -20  -print

  • там все ок, только php файлы, модифицированные мной. Т.е. наличие чужеродного php-скрипта исключается.
VladimirIvanov ()
Ответ на: комментарий от VladimirIvanov

там все ок, только php файлы, модифицированные мной. Т.е. наличие чужеродного php-скрипта исключается.

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

Установлено ли что-то еще? PHPMyAdmin?

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

Говорит, что мускул жрет ресурсы, но квери лог дать не может

зачем квери лог? что мы там увидим? запросы к субд? что нам это даст?

я еще раз объясняю, логи аппача/nginx были полупустые. я не понимаю, как создается нагрузка на базу, какими методам? это не http запросы значит? а как тогда, у меня mysql отключен от сети.

всё…. пока тихо. mysql лог пустой. Rate Limiting от cloudflare спас от последних попыток.

VladimirIvanov ()