Како да се заштити серверот Nginx со Fail2Ban на Rocky Linux 9
Вовед
Кога поставувате веб-сервер, често има делови од страницата до кои сакате да го ограничите пристапот. Веб-апликациите често обезбедуваат свои методи за автентикација и авторизација, но самиот веб-сервер може да се користи за ограничување на пристапот доколку тие се несоодветни или недостапни. Сепак, автентикацијата на веб-серверот, исто така, претставува многу предвидлива површина на напад или вектор за напад преку која луѓето можат да се обидат да добијат пристап.
Секоја услуга што е изложена на мрежата е потенцијална цел на овој начин. Ако ги прегледате дневниците за кој било веб-сервер со широка трговија, често ќе видите повторени, систематски обиди за најавување кои претставуваат напади со брутална сила од страна на корисниците и ботови.
Распоредувањето на производството од големи размери за кои оваа одговорност е целосно неприфатлива, обично ќе имплементира VPN како што е WireGuard пред какви било приватни крајни точки, така што е невозможно директно да се поврзете на овие URL од надворешен интернет без дополнителна апстракција на софтвер или порти. Овие VPN решенија имаат широка доверба, но ќе додадат сложеност и можат да скршат некои автоматизации или други мали софтверски куки.
Пред или како додаток на целосното поставување на VPN, можете да имплементирате алатка наречена Fail2ban. Fail2ban може значително да ги ублажи нападите со брутална сила со создавање правила кои автоматски ја менуваат конфигурацијата на вашиот заштитен ѕид за да забранат одредени IP-адреси по одреден број неуспешни обиди за најавување. Ова ќе му овозможи на вашиот сервер да се зацврсти против овие обиди за пристап без ваша интервенција.
Во ова упатство, ќе научите како да инсталирате fail2ban
на серверот Rocky Linux 9 и да го конфигурирате да ги следи вашите логови на Nginx за обиди за упад.
Предуслови
- Пристап до средина на серверот Rocky Linux 9 со корисник кој не еroot со привилегии
sudo
со цел да се извршуваат административни задачи. За да научите како да креирате таков корисник, следете го упатството за почетно поставување на серверот Rocky Linux 9. - Nginx е инсталиран на вашиот систем, следејќи ги Чекорите 1 и 2 од ова упатство за тоа како да инсталирате Nginx на Rocky Linux 9.
- Nginx е инсталиран и конфигуриран со автентикација со лозинка по Како да поставите автентикација со лозинка со Nginx на Rocky Linux 9.
Чекор 1 - Инсталирање и конфигурирање на Fail2ban
Fail2ban не е достапен во стандардните софтверски складишта на Роки. Сепак, тој е достапен во складиштето EPEL или Подобрени пакети за Enterprise Linux, кое вообичаено се користи за пакети од трети страни на Red Hat и Rocky Linux. Ако веќе не сте го додале EPEL на изворите на вашиот системски пакет, можете да го додадете складиштето користејќи dnf
, како што би инсталирале кој било друг пакет:
- sudo dnf install epel-release -y
Управувачот со пакети dnf
сега ќе го проверува EPEL покрај вашите стандардни извори на пакети при инсталирање на нов софтвер. Продолжете да инсталирате Fail2ban:
- sudo dnf install fail2ban -y
Fail2ban автоматски ќе постави услуга во заднина откако ќе се инсталира. Сепак, тој е стандардно оневозможен, бидејќи некои од неговите стандардни поставки може да предизвикаат несакани ефекти. Можете да го потврдите ова со користење на командата systemctl
:
- systemctl status fail2ban.service
Output○ fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled
Active: inactive (dead)
Docs: man:fail2ban(1)
Може да го вклучите Fail2ban веднаш, но прво, ќе прегледате некои од неговите карактеристики.
Услугата fail2ban ги чува своите конфигурациски датотеки во директориумот /etc/fail2ban
. Постои датотека со стандардни поставки наречена jail.conf
. Одете во тој директориум и испечатете ги првите 20 линии од таа датотека користејќи head -20
:
- cd /etc/fail2ban
- head -20 jail.conf
Output#
# WARNING: heavily refactored in 0.9.0 release. Please review and
# customize settings for your setup.
#
# Changes: in most of the cases you should not modify this
# file, but provide customizations in jail.local file,
# or separate .conf files under jail.d/ directory, e.g.:
#
# HOW TO ACTIVATE JAILS:
#
# YOU SHOULD NOT MODIFY THIS FILE.
#
# It will probably be overwritten or improved in a distribution update.
#
# Provide customizations in a jail.local file or a jail.d/customisation.local.
# For example to change the default bantime for all jails and to enable the
# ssh-iptables jail the following (uncommented) would appear in the .local file.
# See man 5 jail.conf for details.
#
# [DEFAULT]
Како што ќе видите, првите неколку редови од оваа датотека се коментирани - тие започнуваат со знаци #
што укажуваат дека треба да се читаат како документација наместо како поставки. Како што исто така ќе видите, овие коментари ве упатуваат да не ја менувате оваа датотека директно. Наместо тоа, имате две опции: или креирајте индивидуални профили за Fail2ban во повеќе датотеки во директориумот jail.d/
или креирајте и соберете ги сите ваши локални поставки во jail.local
датотека. Датотеката jail.conf
периодично ќе се ажурира додека самиот Fail2ban се ажурира и ќе се користи како извор на стандардни поставки за кои не сте создале никакви отфрлања.
Во ова упатство, ќе креирате jail.local
. Можете да го направите тоа со копирање на jail.conf
:
- sudo cp jail.conf jail.local
Сега можете да започнете да правите промени во конфигурацијата. Стандардниот уредувач на текст што доаѓа со Rocky Linux 9 е vi
. vi
е исклучително моќен уредувач на текст, но може да биде донекаде тап за корисниците кои немаат искуство со него. Можеби ќе сакате да инсталирате уредник кој е попријатен за корисникот, како што е nano
за уредување на конфигурациските датотеки на вашиот сервер Rocky Linux 9:
- sudo dnf install nano -y
Сега можете да користите nano
за да ја уредите вашата конфигурациска датотека Nginx:
- sudo nano jail.local
Менување на стандардните
Ќе започнете со оценување на стандардните поставки во датотеката. Тие ќе се најдат во делот [DEFAULT]
во датотеката. Овие ставки ја поставуваат општата политика и може да се отфрлат врз основа на секоја апликација. Ако користите nano
, можете да пребарувате во датотеката со притискање на Ctrl+W
, внесување низа за пребарување, а потоа притискање на enter.
Една од првите ставки што треба да се погледне е списокот на клиенти кои не подлежат на политиките fail2ban
. Ова е поставено со директивата ignoreip
. Понекогаш е добра идеја да додадете своја сопствена IP адреса или мрежа на списокот со исклучоци за да избегнете да се заклучите. Ова е помалку проблем со најавувањата на веб-серверот отколку со SSH, бидејќи ако сте во можност да одржувате пристап до школка, секогаш можете да ја смените забраната. Можете да ја откоментирате оваа линија и да додадете дополнителни IP адреси или мрежи ограничени со празно место, на постојната листа:
[DEFAULT]
. . .
#ignoreip = 127.0.0.1/8 your_home_IP
Друга ставка што можеби ќе сакате да ја прилагодите е bantime
, која контролира колку секунди е забранет членот навредлив. Идеално е да го поставите ова на доволно долго време за да ги наруши злонамерните, автоматизирани напори, додека доволно кратко за да им овозможи на корисниците да ги поправат грешките. Стандардно, ова е поставено на 10 минути. Можете да ја зголемите или намалите оваа вредност:
[DEFAULT]
. . .
bantime = 10m
Следните две ставки го одредуваат опсегот на линиите за дневници што се користат за одредување на навредливиот клиент. findtime
одредува одредено време во секунди, а директивата maxretry
го означува бројот на обиди што треба да се толерираат во тоа време. Ако клиентот направи повеќе од обиди за maxretry
во временскиот период поставен од findtime
, тој ќе биде забранет:
[DEFAULT]
. . .
findtime = 10m
maxretry = 5
Параметарот action
го конфигурира дејството што го презема Fail2ban кога сака да воведе забрана. Вредноста action_
е дефинирана во датотеката кратко пред овој параметар. Стандардното дејство е да се ажурира конфигурацијата на вашиот заштитен ѕид за да се одбие сообраќајот од домаќинот што навредува додека не истече времето за забрана.
[DEFAULT]
. . .
action = $(action_)s
. . .
Стандардно се обезбедени други скрипти action_
кои можете да ги замените $ (action_)
со горе:
…
# ban & send an e-mail with whois report to the destemail.
action_mw = %(action_)s
%(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(action_)s
%(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
…
Во следниот чекор, ќе преминете на конфигурација специфична за Nginx.
Чекор 2 – Конфигурирање на Fail2Ban за следење на логовите на Nginx
Сега кога имате одредени општи поставки fail2ban
, можете да овозможите некои затвори специфични за Nginx кои ќе ги следат дневниците на вашиот веб-сервер за одредени шеми.
Секој затвор во конфигурациската датотека е означен со заглавие што го содржи името на затворот во квадратни загради - секој дел освен секцијата [DEFAULT]
означува конфигурација на одредена затвор. Стандардно, овозможен е само затворот [ssh]
.
За да овозможите следење на дневниците за обиди за најавување на Nginx, овозможете го затворот [nginx-http-auth]
. Додајте директива enabled=true
во овој дел:
…
[nginx-http-auth]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
. . .
Кога ќе завршите со измените, зачувајте ја и затворете ја датотеката. Ако користите nano
, притиснете Ctrl+X
, потоа кога ќе биде побарано, Y
и потоа Enter. Следно, ќе ја прегледате конфигурацијата на филтерот за nginx-http-auth
.
Чекор 3 - Преглед на филтри за затворите Nginx
Можеби сте забележале дека блокот [nginx-http-auth]
во jail.local
не содржи никакви правила специфични за Nginx. Овие правила не се автоматски хардкодирани во Fail2ban - всушност, заглавието [nginx-http-auth]
одговара директно на името на датотеката во директориумот на однапред спакувани филтри на Fail2ban filter.d
. Ако ја наведете содржината на овој директориум, можете да ги видите другите претходно спакувани филтри достапни, доколку некогаш треба да ги користите:
- ls /etc/fail2ban/filter.d
Output3proxy.conf freeswitch.conf proftpd.conf
apache-auth.conf froxlor-auth.conf pure-ftpd.conf
apache-badbots.conf gitlab.conf qmail.conf
apache-botsearch.conf grafana.conf recidive.conf
apache-common.conf groupoffice.conf roundcube-auth.conf
apache-fakegooglebot.conf gssftpd.conf scanlogd.conf
apache-modsecurity.conf guacamole.conf screensharingd.conf
apache-nohome.conf haproxy-http-auth.conf selinux-common.conf
apache-noscript.conf horde.conf selinux-ssh.conf
apache-overflows.conf ignorecommands sendmail-auth.conf
apache-pass.conf kerio.conf sendmail-reject.conf
apache-shellshock.conf lighttpd-auth.conf sieve.conf
assp.conf mongodb-auth.conf slapd.conf
asterisk.conf monit.conf softethervpn.conf
bitwarden.conf murmur.conf sogo-auth.conf
…
Засега, погледнете го nginx-http-auth.conf
:
- cat /etc/fail2ban/filter.d/nginx-http-auth.conf
Output# fail2ban filter configuration for nginx
[Definition]
failregex = ^ \[error\] \d+#\d+: \*\d+ user "(?:[^"]+|.*?)":? (?:password mismatch|was not found in "[^\"]*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(?:, referrer: "\S+")?\s*$
ignoreregex =
datepattern = {^LN-BEG}
…
Овие датотеки содржат регуларни изрази (обичен стенографија за парсирање на текст) кои одредуваат дали линијата во дневникот е неуспешен обид за автентикација. Тие можат да се менуваат директно по потреба.
Во следните чекори, ќе овозможите и тестирате Fail2ban.
Чекор 4 – Активирање на вашите затвори Nginx
Во овој момент, можете да ја овозможите вашата услуга Fail2ban, така што отсега натаму ќе работи автоматски. Прво, стартувајте systemctl enable
:
- sudo systemctl enable fail2ban
Потоа, стартувајте го рачно за прв пат со systemctl start
:
- sudo systemctl start fail2ban
Може да потврдите дека работи со status systemctl
:
- sudo systemctl status fail2ban
Output● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled
Active: active (running) since Wed 2022-09-14 20:48:40 UTC; 22h ago
Docs: man:fail2ban(1)
Main PID: 5962 (fail2ban-server)
Tasks: 7 (limit: 2327)
Memory: 12.6M
CPU: 195ms
CGroup: /system.slice/fail2ban.service
└─5962 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Забелешка: за да ги имплементирате сите идни промени во конфигурацијата, ќе треба да ја рестартирате услугата fail2ban
. Можете да го направите тоа со користење на sudo systemctl рестартирајте fail2ban
Добивање информации за овозможените затвори
Можете да ги видите сите ваши овозможени затвори со користење на командата fail2ban-client
:
- sudo fail2ban-client status
Треба да видите список на овозможени затвори:
OutputStatus
|- Number of jail: 2
`- Jail list: nginx-http-auth, sshd
Ако сакате да ги видите деталите за забраните што ги спроведува кој било затвор, повторно користете го fail2ban-client
:
- sudo fail2ban-client status nginx-http-auth
OutputStatus for the jail: nginx-http-auth
|- filter
| |- File list: /var/log/nginx/error.log
| |- Currently failed: 0
| `- Total failed: 0
`- action
|- Currently banned: 0
| `- IP list:
`- Total banned: 0
Во последниот чекор од ова упатство, намерно ќе тестирате да добиете забрана за да потврдите дека вашата конфигурација Fail2ban работи.
Чекор 5 – Тестирање на политиките за Fail2Ban
Важно е да ги тестирате вашите Fail2ban политики за да се осигурате дека тие го блокираат сообраќајот како што се очекуваше. За да го направите ова, одете до вашиот сервер во локален веб-прелистувач. На барањето за автентикација на Nginx, постојано внесувајте неточни ингеренции. По неколку обиди, серверот треба целосно да престане да одговара на вас, како да ви е прекината врската:
Ако го погледнете статусот на конфигурацијата nginx-http-auth
со fail2ban-client
, ќе видите дека вашата IP адреса е забранета од страницата:
- sudo fail2ban-client status nginx-http-auth
OutputStatus for the jail: nginx-http-auth
|- Filter
| |- Currently failed: 0
| |- Total failed: 5
| `- File list: /var/log/nginx/error.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 108.172.85.62
Кога сте задоволни дека вашите правила функционираат, можете рачно да ја одбраните вашата IP адреса со fail2ban-client
со внесување:
- sudo fail2ban-client set nginx-http-auth unbanip 108.172.85.62
Сега треба да можете повторно да се обидете со автентикација.
Заклучок
Fail2ban обезбедува голема флексибилност за конструирање политики што ќе одговараат на вашите специфични безбедносни потреби. Со разгледување на променливите и обрасците во датотеката /etc/fail2ban/jail.local
и датотеките од кои зависи во /etc/fail2ban/filter.d
и директориумите /etc/fail2ban/action.d
, можете да најдете многу парчиња за дотерување и менување како што се развиваат вашите потреби. Заштитата на вашиот сервер со fail2ban
може да ви обезбеди корисна основна линија за безбедност.
За да откриете повеќе начини за користење fail2ban
, проверете Како да го заштитите SSH со Fail2Ban на Rocky Linux 9.