Як я можу блокувати спроби злому, орієнтовані на phpMyAdmin?


35

Мій веб-сайт отримує тисячі звернень щодня із різних IP-адрес, які намагаються отримати доступ:

/php-myadmin/
/myadmin/
/mysql/

... і тисячі інших варіацій. Жоден із цих каталогів не існує, у мене навіть немає сервера phpmyadmin.

Я не думаю, що жодна з цих спроб була успішною, однак вони повинні брати участь у ресурсах сервера та витрачати пропускну здатність, тому я хотів би зупинити їх, якщо це можливо. Я заблокував кілька цих IP-адрес, але вони продовжують повертатися із новими IP-адресами, чи є спосіб я запобігти цьому більш назавжди?


8
Тисячі хітів на день - це нічого. Ви насправді відчуваєте труднощі у виконанні чи просто припускаєте? Кілька тисяч 404 в день - це насправді нічого .
MDMarra

Ні, у мене не виникають проблеми з продуктивністю. Але мене це дратує, і я задумався, чи можна щось зробити.
amba88

6
Будьте обережні з блокуванням на основі IP - багато IP-адрес закінчуються цивілізацією до законних користувачів. Також деякі законні користувачі можуть бути заражені частиною ботнету. Якщо ви робите будь-яке блокування на основі IP, переконайтеся, що термін його дії досить короткий.
Боб

Жодної згадки mod_securityв цій темі, тому перевірте це . Зауважте, що в коментарі нижче зазначається, що це насправді призвело б до більшої роботи сервера, звичайно. Тож, можливо mod_evasive, також було б добре реалізувати . fail2ban, але це перелічено нижче.
mbrownnyc

Відповіді:


42

Не хвилюйся з цього приводу. Обслуговування 404 - це невелика, крихітна, невелика кількість роботи, яку повинен виконати веб-сервер. Можливо, ви могли б обслуговувати десять 404 секунди за допомогою 486. Пропускна здатність на 404 є незначною; крихітний GET-запит та крихітна відповідь 404.

Серйозно; не хвилюйся з цього приводу. Це лише складова частина запуску сервера в Інтернеті.


14
Hell-Banning: Обслуговуйте звичайну сторінку (200 ОК) із неміцним виходом. Інструменти, якими користуються діти, повідомлять про знайдену сторінку, і їх потрібно буде вивчити вручну (фальшива сторінка для входу, безумовно, буде пристроєм для чорта) :)
arul

4
@arul - Деякі зловмисники можуть сприймати це як виклик і звертати додаткову увагу на ваш сервер не зважаючи. Чи послужить менша або інша 404 взагалі корисною тут? Наприклад, якщо хост, як правило, обслуговує 404 із підтримкою, чи повинен / міг би він натомість подавати звичайний 404 без вмісту для цих цільових URL-адрес?
Фрайхейт

1
Мета - змусити противника витратити додаткові ресурси (час) на аналіз результатів. Якщо ви отримаєте 404, ви знаєте, що атака не змогла спрацювати. Результат ОК змінної довжини [без подальшого дослідження] не відрізняється від очікуваних результатів. Вони виконують ці скани, тому що терпіння не є їхньою чеснотою, тому демотивуйте пекло з них, і вони зупиняться :)
arul

1
Щоб отримати бонусні бали, поверніть статичну сторінку, яка точно схожа на справжню сторінку phpmyadmin, але абсолютно не функціональна.
captncraig

1
Для отримання додаткових бонусних балів створіть затримку 0,5 - 1 секунда. Це суттєво не збільшить час для завантаження законними користувачами, але сповільнить сканування, яке роблять погані хлопці. (Вам просто потрібно переконатися, що ваш сервер має можливість утримувати з'єднання відкритими довше, ніж це потрібно, і все ще обробляти законні запити.)
Моше Кац

38

На жаль для Вас, так працює Інтернет. Просто ігноруйте це. Тисячі ботів / троянів сканують Інтернет. IP-джерело завжди буде випадковим. Немає ліків.

Нижче показано єдине 100% рішення щодо усунення трафіку: введіть тут опис зображення

Альтернатива:
- перейти з https / http з порту 80/443 на щось інше. Як правило, боти не шукають http-сервера на всіх інших портах 65k.
- використовувати VPN для підключення до сервера (я думаю, це неможливо, якщо ви розміщуєте загальнодоступний веб-сайт).


LOL +1 для діаграми :-) У мене ця набридлива проблема (як і у всіх нас) на статичному сайті, і це найкорисніша відповідь.
Дейв Еверітт

30

Що ви хочете, це Fail2ban (якщо припустити, що це машина Linux, ви не сказали ...)

Що таке Fail2ban?

Fail2ban буде аналізувати журнали системи, шукаючи конкретні регулярні вирази для блокування. Коли він знайде збіг (або кілька збігів з одного і того ж IP, залежно від того, як ви його налаштували), він блокується, як правило, через IPTables. Зазвичай це використовується для блокування невдалих спроб аутентифікації проти SSH або веб-серверів.

Ви налаштовуєте його забороняти протягом певного часу (може бути хвилин, може бути днів ... залежить від того, наскільки вони стійкі), після чого термін дії заборони закінчується, якщо вони не спробують ще раз.

Як це допомагає блокувати боти для сканування phpmyadmin?

Це так само легко можна використовувати для узгодження загальних ознак нападу, як, наприклад, спроба отримати доступ до неіснуючих папок phpmyadmin. Вам доведеться з’ясувати правильний регулярний вираз, щоб відповідати таким спробам, і переконатися, що ви не блокуєте законних користувачів.

Конфігурація, наведена в цьому дописі блогу, може працювати вербатієм або вимагати певного налаштування для вашої настройки.

Чому я повинен їх блокувати? Помилки 404 не коштують великих витрат

Блокування їх у iptables НЕ має певного використання - шанси є, якщо вони перевіряють наявність вразливості phpmyadmin, вони також можуть спробувати інші служби на предмет вразливості, поки не потраплять на щось, що працює. Якщо заборонити їх, через деякий час боти / сценарії відмовляться, і вони перейдуть до кращих цілей.

Навіть через сканування не коштують великих витрат (якщо вони фактично не виявляють вразливість), вони затоплюють ваші журнали, ускладнюючи перегляд успішних атак та проблем з веб-сервером.

Як йдеться в коментарі нижче, Fail2ban вимагає певних системних ресурсів. Але не дуже. Принаймні, я можу сказати, що у мене ніколи не було проблем з продуктивністю, які я міг би віднести до Fail2ban. Однак у мене виникли проблеми з продуктивністю від дуже агресивних сценаріїв, які намагалися грубими паролями або кидали тисячі спроб введення SQL та інших подвигів в секунду на мій сервер. Блокування їх на рівні брандмауера вимагає меншої кількості ресурсів, ніж блокування їх на рівні сервера / програми. Також можна розширити запуск спеціальних скриптів для заборони IP-адрес - тому замість заборони їх у IPtables, можливо, ви можете заборонити їх у апаратному брандмауері або надіслати електронною поштою комусь, якщо той самий чоловік намагається напасти на вас, щоб ви могли скаржитися. до свого провайдера або попросіть ваш центр обробки даних заблокувати їх на брандмауерах.

Будь-які інші поради?

ВДАЛО РЕКОМЕНДОВАНО, щоб ви додавали в білий список декілька IP-адрес, якими ви керуєте, щоб не випадково заблокувати себе.


6
це буде марною витратою ресурсу :) Я думаю, що ви будете використовувати більше циклів процесора на Fail2ban, ніж для простого обслуговування іноді 404 :)
Bartłomiej Zarzecki

4
@ BartłomiejZarzecki Для кращої безпеки завжди потрібно більше ресурсів
користувач11153

3
@ heinrich5991 блокується після перших спроб. Немає різниці в деяких скануваннях, але величезна різниця для сканів, які намагаються зробити кілька спроб на сервері.
Грант

2
Сподіваємось, Fail2ban (або подібне) буде більш ніж просто / phpmyadmin. Якщо припустити, що він має будь-який вид віддаленого доступу, блокування типу F2B (3 паролі, і ви ... пішли!) - це більше ніж 404 секунди.
WernerCD

3
Якщо ви робите щось подібне, переконайтеся, що встановити заборону відносно швидко (максимум кілька годин), або ви ризикуєте заблокувати законних користувачів, якщо атака надходить із динамічно призначеного IP-адреси.
Єнс Нойбауер

7

Що я роблю, - це введення невеликого сценарію у відповідний каталог, тому він запускається, якщо хтось звертається / phpmyadmin /. Цей сценарій не робить нічого іншого, крім виклику iptables (під Linux), який блокує IP-адресу, що отримує доступ до скрипту протягом 30 хвилин (після чого завдання Cron промиває ланцюжок iptables, до якого додається IP-адреса).

Перевага перед fail2ban полягає в тому, що ви не використовуєте жодних ресурсів для розбору системного журналу / журналу доступу. Недоліком, звичайно, є те, що ви не перевіряєте нічого іншого, крім доступу до цієї дуже конкретної адреси.

Чому я це роблю? Звичайно, обслуговування сервера 404 було б легко для сервера, але я не хочу, щоб вони ковзали, просто так. Я хочу витрачати час їх інструменту, чекаючи, коли сервер відповість, повторюючи, поки він нарешті не здасться. Крім того, якщо ви не заблокуєте їх, вони спробують багато різних URL-адрес, перш ніж нарешті перейти далі - іноді понад тисячу. Залежно від інструменту, це може бути "приємно" та місця для них на кілька годин, а це може просто не хвилюватись і забивати ваш сервер усіма ними протягом декількох хвилин.

Чому я не обслуговую дійсну сторінку? Їх інструмент може перестати сканувати вас та сповіщати завідувача, який його працює, - який повинен перевірити вручну. Повернення цього полягає в тому, що вони нададуть вашому серверу набагато уважніший погляд, ніж вони мали б, якби їх сканування не змусило вас з’явитись у їх результатах. Можливо, вони трохи поскакують, можливо, кілька сканувань портів, можливо, ви злите їх з розуму, і вони запускають DoS, щоб побачити, чи можуть вони щось зробити. Просто їх блокування - яке, з їх точки зору, змушує сервер вимкнути момент, коли вони отримують доступ до скрипту phpmyadmin - ефективно витрачати час свого інструменту, уникаючи при цьому небажаної уваги.

Якщо у вас є phpMyAdmin на сервері, ефективним рішенням може бути розміщення його в окремому каталозі та використання керування паролем вашого веб-сервера (.htpasswd для Apache) для блокування доступу до того, як що-небудь до нього досягне.


Здається, як хороший альтернативний варіант ... але чи не вимагає, щоб веб-сервер міг запускати скрипт із кореневими дозволами?
Грант

1
Налаштуйте псевдонім для таких інструментів, як phpMyAdmin. Проста зміна конфігураційного файлу, щоб змінити його на adminMyPhp або chrisPhpAdmin ... або щось, що не буде сценарієм.
WernerCD

Вибачте за пізню відповідь - це не обов'язково). Ви можете використовувати sudo (з файлом sudoers), щоб дозволити веб-серверу виконувати один добре відомий сценарій (і саме цей сценарій) з кореневими правами. Цей сценарій приймає (як параметр) IP, і ви перевіряєте його на регулярний вираз ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ), щоб переконатися, що він не вводить нічого дивного.
Ааа

1

FWIW ми обмежуємо доступ до / phpmyadmin / до білих списків IP-адрес.

Ми також використовуємо mod_evasive (на apache2) для стримування DOS / погано поводиться скриптованих атак.


1

прив’яжіть інструмент адміністру mysql до адреси машинної петлі 127.0.0.1

потім використовуйте ssh з переадресацією портів, щоб отримати доступ до зворотного кінця адміністратора.

додайте додатковий рівень безпеки, який може бути досить прозорим.


-4

Найкращий спосіб, який ми знайшли, - це захистити паролем папку, в якій знаходиться phpmyadmin. Також не використовуйте нічого, що стосується phpmyadmin, як назву папки: pma, phpmy тощо.


2
З питання: None of these directories exist, I don't even have phpmyadmin on my server.- Він не запитує, як посилити існуючі встановлення ... він запитує, що робити з речами, які не існують. Ви не можете перейменувати, PMAчи що у вас є, якщо його не існує.
WernerCD
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.