Как настроить Basic Auth Nginx и fal2bаn для доступа к MajorDoMo через интернет.
Если вам требуется дать доступ к MajorDoMo через интернет, то вы конечно понимаете, что надо защитить его от хакеров и от посторонних людей. В этой статье мы рассмотрим защиту из двух дополняющих друг друга программ Basic Auth Nginx и fal2bаn.
Даже если вы ещё не знаете что такое Basic Auth, вы наверняка уже с ней сталкивались, например, при входе в интерфейс настройки роутера. Это механизм авторизации по имени пользователя и паролю на уровне веб-сервера. Такая авторизация поддерживается и в Apache и в Nginx.
Разберемся сначала с Basic Auth Nginx, для определённого маршрута или для всего сайта.
Настройка Basic Auth в Nginx
Окно авторизации Basic Auth выглядит вот так:
Думаю теперь вы поняли о чём идёт речь. Такую авторизацию можно настроить для определённого URL, для всего сайта или для всех сайтов. Тут мы рассмотрим как полностью закрыть систему Линукс и MajorDoMo.
Сначала надо создать файл со списком пользователей и паролей. Для этого используется утилита htpasswd. Синтаксис у команды такой:
$ sudo htpasswd -c /путь/к/файлу имя_пользователя
Опция -c используется для создания нового файла, для редактирования уже существующих её использовать не надо. Например:
sudo htpasswd -c /etc/nginx/auth.basic admin
admin (это для примера создание пользователя admin)
Утилита два раза спросит пароль. Пароль вводится но не отображается. Это так должно быть для безопасности. После этого файл будет создан. ОБЯЗАТЕЛЬНО вводить логин и пароль как в MajorDoMo, чтоб там все работало под этим пользователем.
Если у вас несколько пользователей, то надо прописать для каждого пользователя, только без «-с». Например:
sudo htpasswd -c /etc/nginx/auth.basic user
После того, как файл будет создан можно переходить к настройке Nginx.
Для того чтобы защитить паролем весь сайт просто добавьте эти директиву в секцию http файла /etc/nginx/nginx.conf:
satisfy any;
allow 127.0.0.1;
allow 192.168.1.0/24; # это чтоб не спрашивал пароль во внутреней сети
deny all;
auth_basic "Restricted area";
auth_basic_user_file /etc/nginx/auth.basic;
*в данном примере:
satisfy — со значением any разрешает доступ, если его разрешит allow или auth_basic.
allow — разрешает доступ для определенного адреса или подсети.
deny — запрещает доступ.
auth_basic — включает аутентификацию.
Перезапустите Nginx, чтобы применить изменения:
sudo systemctl restart nginx
Как видите, авторизация по паролю nginx настраивется не так уж сложно.
Приступим к настройке fail2ban
Fail2ban отслеживает файлы журналов (например, /var/log/auth.log, /var/log/apache/access.log), временно или постоянно запрещая подозрительную активность IP-адреса путем обновления существующих правил брандмауэра. Fail2ban позволяет автоматически выполнить различные действия, такие как заблокировать IP, используя правила iptables, или просто отправить уведомление по электронной почте администратору сервера. По умолчанию Fail2ban поставляется с правилами фильтра под различные сервисы (sshd, apache, mysql proftpd, и т. д.), но конфигурация может быть легко расширена для мониторинга любой другой службы. Все фильтры и действия настраиваются в файлах конфигурации, таким образом Fail2ban является отличным гибким инструментом для предотвращения взлома вашего сервера.
Для начала надо обновить саму нашу систему Линукс командой:
sudo apt-get update
Потом инсталлируем саму программу:
sudo apt-get install fail2ban
Главный конфигурационный файл находится по адресу /etc/fail2ban/jail.conf, однако настоятельно не рекомендуется сразу вносить в него правки, сначала скопируем его под именем jail.local. Настройку продолжим непосредственно в этом файле, это предусмотрено разработчиками, все что вы сконфигурируете в jail.local будет автоматически перезаписывать настройки в jail.conf:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Первым делом в конфигурационный файл необходимо внести ваш IP адрес, чтобы правила Fail2ban на него не распространялись, иначе после запуска службы вы рискуете внести себя в бан и доступ к серверу будет утерян:
Sudo vim /etc/fail2ban/jail.local
Необходимо найти и раскоментировать строку #ignoreip, добавив через пробел свой внешний статический IP адрес. В результате у вас должно получиться следующее:
ignoreip = 127.0.0.1/8 ::1
Если требуется в исключения еще внести ваш компьютер, то надо писать так:
ignoreip = 127.0.0.1/8 ::1 192.168.*.*
где 192.168..** - Ваш IP адрес.
Здесь же, в секции [DEFAULT] можно задать значения findtime и maxretry, например:
bantime = 600
findtime = 3600
maxretry = 6
Параметры findtime и maxretry определяют условия, при которых будут блокироваться вредоносные пользователи. Maxretry определяет количество попыток входа, а findtime – интервал времени, в течение которого пользователь должен пройти аутентификацию. Если клиент превысил любой из этих показателей, он будет заблокирован. Bantime определяет длительность блокировки в секундах. Эти параметры в статье будут встречаться неоднократно. Если в настройке какого либо из сервисов вы их не зададите, они будут автоматически браться с секции [DEFAULT].
Не забывайте перезапускать Fail2ban после каждого редактирования конфигурационного файла.
Важно! Путь к файлу хранения логов (logpath) обязан быть указан правильно, иначе перезапуск Fail2ban завершится ошибкой. В случае отсутствия лог-файла по указанному пути, его можно создать командой touch, например:
Sudo touch /var/log/yourlog.log
Sudo chmod 755 /var/log/yourlog.log
Теперь мы можем перейти к редактированию общих правил защиты сервисов.
Защита NGINX
Фильтр аутентификации
Допустим, на ваших сайтах есть разделы требующие аутентификации. Выполнить базовую защиту этих разделов от подбора паролей так же поможет Fail2ban. По умолчанию, защита NGINX доступна из коробки, однако её необходимо активировать. Для этого, в конфигурационном файле /etc/fail2ban/jail.conf находим блок [nginx-http-auth], где изначально указан только logpath. Добавляем в него значения:
Sudo vim /etc/fail2ban/jail.local
Находим блок [nginx-http-auth] в этом файле и на выходе у нас должно получиться следующее:
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
bantime = 600
maxretry = 5
logpath = %(nginx_error_log)s
Также хочется заострить внимание, если вы используете программы написанные на башскрипт или Python и этими программами хотите записать или прочитать переменную MajorDoMo, то надо указывать ваш логин и пароль:
Для башскрипта, на примере команды curl, надо добавить -u user:12345 и получится примерно так:
s=$(curl -u user:12345 -s "http://localhost/object/?op=get&object= RaspberryPi = Temperature")
Для программы написанной на Python, вот пример:
a=requests.get('http://user:12345@localhost/objects/?op=get&object...')
Башкортостан, г. Салават, Россия