Как настроить VPS

fail2ban настройка

fail2ban настройка

fail2ban настройка

Как установить на сервер fail2ban и правильно настроить. Есть два очевидных варианта установки и последующей настройки fail2ban:

1. Через ssh подключение к серверу, и далее использовать терминал:
— обновите пакеты:

sudo apt update && sudo apt upgrade -y

— установить fail2Ban:

sudo apt install fail2ban -y

— запустить и включить автозапуск:

sudo systemctl enable --now fail2ban

— проверить статус:

sudo systemctl status fail2ban

Если вы зашли под root то можно и без sudo указывать выше озвученные команды. Далее я не буду указывать в коде sudo

2. Через панель управления сервером Fastpanel, как её установить и пользоваться читайте в моих статьях. Так вот чтобы через Fastpanel установить fail2ban достаточно зайти сюда и нажать установить:

Fail2ban

Следующий шаг — это настройка fail2ban

1. Создание конфигурационного файла.
По умолчанию, конфигурация хранится в /etc/fail2ban/jail.conf, но редактировать этот файл не рекомендуется. Вместо этого давайте создадим копию и с ней будем работать:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Затем откроем редактор и внесём необходимые данные в созданный выше файл:

nano /etc/fail2ban/jail.local

Какие параметры указать? Сразу после установки и запуска fail2ban работает. По умолчанию идёт защита ssh доступа к серверу и единственное чтобы я изменил это время блокировки, у меня по умолчанию было 10m (10 минут) — этого мало для тех ботов, что штурмуют ваш сервер в надежде взломать его)
2. Основные команды для fail2ban на первое время я приведу ниже. На самом деле вариантов настройки фильтров очень много. Я приведу необходимый минимум на мой взгляд. Здесь нам всё же потребуется терминал. Так как я часто работают из под Windows, то меня вполне устраивает приложение Windows Power Shell. И так вы зашли на сервер под root, напомню как выглядит команда в терминале (в моём случаи повторюсь это Windows Power Shell ):

ssh root@141.15.52.170

и далее пароль.

Напомню, что в терминале можно вставлять ранее скопированные данные нажатием правой кнопки мыши и не забудьте, что при вставлении пароля в терминале он не отображается, то есть скопировали пароль, нажали правую кнопку мышки, далее enter и если данные правильные то вы зашли на сервер)

И так вы на сервере. Как проверить работу fail2ban?
Вот команда, чтобы увидеть кто ломится на ваш сервер через ssh:

fail2ban-client status sshd

Примерно такой результат вы должны увидеть, если всё правильно ранее настроили:

fail2ban настройка

Стоит сказать, что пока ваш сайт не стал немного популярным, или не просуществовал пару лет в сети, или же конкуренты не стали пакостить — боты вряд ли пойдут дальше того чтобы пытаться зайти на сервер через ssh)

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

2025/03/15 16:30:10 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /file.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:10 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-includes/Text/Diff/Engine/wp-login.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:11 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-admin/user/chosen.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:11 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-content/uploads/wp-conflg.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:11 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /ok.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:11 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-includes/IXR/alfa-rex.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:12 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-admin/autoload_classmap.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:12 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-includes/sodium_compat/src/index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:12 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-includes/block-patterns/about.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:12 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /wp-includes/css/alfa-rex.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"
2025/03/15 16:30:13 [error] 36391#36391: *27064 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 40.84.25.160, server: ysushi.ru, request: "GET /images/stories/admin-post.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/ysushi.ru.sock:", host: "www.ysushi.ru"

В коде выше я изменил настоящий url сайта)

Что мы видим в логах которые я выложил выше?
С одного ip идут постоянные запросы к сайту! Делают это боты, идёт поиск уязвимости сайта. Как нам сможет помочь fail2ban?

Вот решение) добавить фильтр для блокировки подозрительных запросов. Для этого надо создать следующий файл на сервере:

/etc/fail2ban/filter.d/nginx-wordpress.conf:

с вот таким содержанием:

[Definition]
failregex = ^.*"(GET|POST) /wp-admin/.* HTTP.*$
            ^.*"(GET|POST) /wp-content/.* HTTP.*$
            ^.*"(GET|POST) /wp-includes/.* HTTP.*$
ignoreregex =

потом добавить в /etc/fail2ban/jail.local эти строки, чтобы отредактировать файл jail.local надо выполнить эту команду:

nano /etc/fail2ban/jail.local

и прописать вот эти строки:

[nginx-wordpress]
enabled = true
port = http,https
filter = nginx-wordpress
logpath = /var/log/nginx/access.log
maxretry = 3
bantime = 86400

чтобы сохранить нажмите CTRL + O далее Enter и выйти из редактора nano нажимаете CTRL + X (одновременное нажатие клавиш на клавиатуре CTRL и Х)

где,

port — это порты с которыми будет работать фильтр, для сайта достаточно указанных ниже:

port = http,https

filter — это название фильтра:

filter = nginx-wordpress

logpath — это путь в вашим логам. Важно указать правильный путь к логам, а то нечего анализировать будет)

logpath = /var/log/nginx/access.log

maxretry – это количество попыток перед блокировкой

maxretry = 3

bantime – это время блокировки IP, в примере ниже означает 24 часа:

bantime = 86400

Помните, что после каждого внесения изменений в fail2ban требуется перезагрузка. Вот команда чтобы перезагрузить fail2ban

systemctl restart fail2ban

Добавление небольшое, чтобы не разбираться в огромном (относительно конечно) по содержанию файле /etc/fail2ban/jail.local который по умолчанию имеет много разной информации — можно всё что есть в файле /etc/fail2ban/jail.local — удалить и вставить вот этот небольшой фрагмент настроек:

[DEFAULT]
bantime     = 600
banaction   = iptables-ipset-proto6

[sshd]
enabled     = true
maxretry    = 6

Как это сделать? Повторюсь значит:
1. Заходите на сервер под root

ssh root@162.12.98.90 

указываете пароль
2. Далее заходите в режим редактирования файла /etc/fail2ban/jail.local с настройками fail2ban:

nano /etc/fail2ban/jail.local

3. удаляете всё что там есть и вставляете это вот:

[DEFAULT]
bantime     = 600
banaction   = iptables-ipset-proto6

[sshd]
enabled     = true
maxretry    = 6

Повторил просто чтобы было понятнее)

Вот так должно получится:

Fail2ban

Чтобы сохранить нажимаете в английской раскладке клавиатуры CTRL + O (плюс нажимать не надо), далее Enter и CTRL + X (это выход из редактора обратно в терминал)

Разбор указанных мною настроек:

[DEFAULT] – секция с общими параметрами по умолчанию для всех служб.

bantime = 600 – IP-адрес нарушителя будет заблокирован на 600 секунд (10 минут).

banaction = iptables-ipset-proto6 – действие при блокировке: использование iptables с поддержкой ipset для IPv6.

[sshd] – секция для защиты SSH:

enabled = true – включает защиту для SSH.

maxretry = 6 – если с одного IP-адреса будет 6 неудачных попыток входа, Fail2Ban заблокирует этот IP.

proto6 в iptables-ipset-proto6 указывает, что правило применяется к IPv6-адресам.

Сканирование и попытки зайти на сервер со стороны ботов идут постоянно и такая защита не будет лишней это точно! Для тех кто ничего не понял из того что я написал, есть другой более простой вариант) Хостинг Beget по умолчанию при создании VPS включает fail2ban и настраивает. Посмотреть тарифы на VPS на хостинге Beget

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *