Запустив я якось KSystemLog для перегляду журналу авторизації і помітив таку картину
Тобто як тільки я включаю прокидання 80-го порта на роутері для веб-сервера як через деякий час отримую брутфорс по ssh з намаганням підбору пароля root. Зрозуміло що це робить не людина, а скрипт і буде робити безкінечно (тому що пароль рут в мене досить надійний).
Але залишити ситуацію так просто не можна і необхідно знайти тимчасове рішення ...
Із журнала видно що після 3 невдалих спроб linux блокує на декілька секунд спроби авторизації.
Хотілось би блокувати на більший проміжок часу.
В результаті швидкого пошуку в інтернет був знайдений пакет який прекрасно виконує цю функцію - fail2ban для Ubuntu.
Встановлюю
sudo aptitude install fail2ban
Дивлюсь журнал авторизації знову...
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
#ignoreip = 127.0.0.1
bantime = 600
maxretry = 3
Дивлюсь знову журнал авторизації через KSystemLog і бачу що все працює так як слід. Після 2 спроб спроби логіна від поточного ІР припиняються. Але ж у тих не одна ІР-адреса, а цілий список, тому цілкому можливо що через 1 добу буде повторна спроба підбору з поточної ІР-адреси.
На сьогодні цього вистачить (бо ж дуже спати хочеться), а зробити все правильно доведеться вже завтра...
UPD:
Настало "завтра"...
Розумію що все що було зроблено - це мінімальні "ліниві" дії, які необхідні щоб зменшити ймовірність підбору пароля. Потрібно розібратися в проблемі детальніше і вирішити її.
І дійсно правильніше і навіть швидше - це правильно сконфігурувати ssh. Саме цим і займемося далі...
1) Відкриваю файл конфігурації
sudo vim /etc/ssh/sshd_config
2) Змінюю параметр ListenAddress (за замовчуванням він закоментований)
вказавши, в якості адреси для прослуховування локальну адресу
ListenAddress 127.0.0.1
Таким чином буде заборонено доступ по ssh ззовні (якщо мені він знадобиться я знаю де його знову включити)
3) Змінюю також параметр PermitRootLogin на no
PermitRootLogin no
Таким чином забороняю користувачу root підключатись по ssh (в логах чітко видно що брутфорс був через користувача root).
В мене встановлено і налаштовано sudo. І всі налаштування відповідно я роблю через цю команду.
І навіть якщо буде включений попередній пункт цього списку, тобто я дозволю підключатися ззовні до сервера, то "хакерам" вже доведеться як мінімум поправити імя користувача (жертви) в своїх скриптах (якщо звісно ж вони його дізнаються :) , для того щоб він працював і надалі).
4) Можна також змінити порт (параметр Port за замовчуванням 22-ий) на якийсь, більший за 1024 щоб уникнути конфліктів з іншими сервісами.
Я цього робити не буду.
5) Рестартую службу ssh
sudo service ssh restart
Насолоджуюсь "тишею" в журналі авторизації ... :)
Тобто як тільки я включаю прокидання 80-го порта на роутері для веб-сервера як через деякий час отримую брутфорс по ssh з намаганням підбору пароля root. Зрозуміло що це робить не людина, а скрипт і буде робити безкінечно (тому що пароль рут в мене досить надійний).
Але залишити ситуацію так просто не можна і необхідно знайти тимчасове рішення ...
Із журнала видно що після 3 невдалих спроб linux блокує на декілька секунд спроби авторизації.
Хотілось би блокувати на більший проміжок часу.
В результаті швидкого пошуку в інтернет був знайдений пакет який прекрасно виконує цю функцію - fail2ban для Ubuntu.
Встановлюю
sudo aptitude install fail2ban
Дивлюсь журнал авторизації знову...
... і бачу що тепер допускається 6 спроб для авторизації.
А це значить що необхідно налаштувати даний пакет.
В папці
/etc/fail2ban
є тільки файл jail.conf
Його редагувати я не буду, а створю його копію з назвою jail.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Відкриваю його в текстовому редакторі.
Я для цього використовую консольний текстовий редактор vim. Кому цікаво що це за редактор - раджу спочатку ознайомитись з моєю статтею про мінімальні команди для нього.
sudo vim /etc/fail2ban/jail.local
Редагувати буду секцію [ssh]
[ssh]
#якщо за 1 годину
findtime = 3600enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
#буде виконано 2 невдалих спроби залогінитись (за замовчуванням 6)
maxretry = 2
# то забанить цей IP на 24 години
bantime = 86400
Також знайшов в Інтернет інфу що якщо в секції [DEFAULT] файла jail.local я не змінював параметр ignoreip, то необхідно закоментувати рядок з цим параметром в файлі /etc/fail2ban/jail.conf
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
#ignoreip = 127.0.0.1
bantime = 600
maxretry = 3
Рестартую службу
sudo service fail2ban restart Дивлюсь знову журнал авторизації через KSystemLog і бачу що все працює так як слід. Після 2 спроб спроби логіна від поточного ІР припиняються. Але ж у тих не одна ІР-адреса, а цілий список, тому цілкому можливо що через 1 добу буде повторна спроба підбору з поточної ІР-адреси.
На сьогодні цього вистачить (бо ж дуже спати хочеться), а зробити все правильно доведеться вже завтра...
UPD:
Настало "завтра"...
Розумію що все що було зроблено - це мінімальні "ліниві" дії, які необхідні щоб зменшити ймовірність підбору пароля. Потрібно розібратися в проблемі детальніше і вирішити її.
І дійсно правильніше і навіть швидше - це правильно сконфігурувати ssh. Саме цим і займемося далі...
1) Відкриваю файл конфігурації
sudo vim /etc/ssh/sshd_config
2) Змінюю параметр ListenAddress (за замовчуванням він закоментований)
вказавши, в якості адреси для прослуховування локальну адресу
ListenAddress 127.0.0.1
Таким чином буде заборонено доступ по ssh ззовні (якщо мені він знадобиться я знаю де його знову включити)
3) Змінюю також параметр PermitRootLogin на no
PermitRootLogin no
Таким чином забороняю користувачу root підключатись по ssh (в логах чітко видно що брутфорс був через користувача root).
В мене встановлено і налаштовано sudo. І всі налаштування відповідно я роблю через цю команду.
І навіть якщо буде включений попередній пункт цього списку, тобто я дозволю підключатися ззовні до сервера, то "хакерам" вже доведеться як мінімум поправити імя користувача (жертви) в своїх скриптах (якщо звісно ж вони його дізнаються :) , для того щоб він працював і надалі).
4) Можна також змінити порт (параметр Port за замовчуванням 22-ий) на якийсь, більший за 1024 щоб уникнути конфліктів з іншими сервісами.
Я цього робити не буду.
5) Рестартую службу ssh
sudo service ssh restart
Насолоджуюсь "тишею" в журналі авторизації ... :)
Немає коментарів:
Дописати коментар