Како да го заштитите SSH со Fail2Ban на CentOS 7
Вовед
Додека поврзувањето со вашиот сервер преку SSH може да биде многу безбедно, самиот SSH демон е услуга што мора да биде изложена на Интернет за да функционира правилно. Ова доаѓа со одреден инхерентен ризик и нуди вектор на напад за потенцијалните напаѓачи.
Секоја услуга што е изложена на мрежата е потенцијална цел на овој начин. Ако обрнете внимание на дневниците на апликациите за овие услуги, често ќе видите повторени, систематски обиди за најавување кои претставуваат напади со брутална сила од страна на корисниците и ботови подеднакво.
Услугата наречена Fail2ban може да го ублажи овој проблем со создавање правила кои автоматски ја менуваат конфигурацијата на вашиот заштитен ѕид iptables врз основа на претходно дефиниран број на неуспешни обиди за најавување. Ова ќе му овозможи на вашиот сервер да одговори на обидите за нелегитимен пристап без ваша интервенција.
Во ова упатство, ќе покриеме како да инсталирате и користите Fail2ban на серверот CentOS 7.
Инсталирајте Fail2ban на CentOS 7
Додека Fail2ban не е достапен во официјалното складиште за пакети CentOS, тој е спакуван за проектот EPEL. EPEL, што значи Дополнителни пакети за Enterprise Linux, може да се инсталира со пакет за издавање што е достапен од CentOS:
- sudo yum install epel-release
Ќе ви биде побарано да продолжите - притиснете y, проследено со Enter:
yum promptTransaction Summary
============================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]: y
Сега треба да можеме да го инсталираме пакетот fail2ban
:
- sudo yum install fail2ban
Повторно, притиснете y и Enter кога ќе биде побарано да продолжите.
Откако ќе заврши инсталацијата, користете systemctl
за да ја овозможите услугата fail2ban
:
- sudo systemctl enable fail2ban
Конфигурирајте ги локалните поставки
Услугата Fail2ban ги чува своите конфигурациски датотеки во директориумот /etc/fail2ban
. Таму, можете да најдете датотека со стандардни вредности наречена jail.conf
. Бидејќи оваа датотека може да биде препишана со надградби на пакети, не треба да ја уредуваме на место. Наместо тоа, ќе напишеме нова датотека наречена jail.local
. Сите вредности дефинирани во jail.local
ќе ги надминат оние во jail.conf
.
jail.conf
содржи дел [DEFAULT]
, проследен со делови за поединечни услуги. jail.local
може да отфрли која било од овие вредности. Дополнително, датотеките во /etc/fail2ban/jail.d/
може да се користат за отфрлање на поставките во двете од овие датотеки. Датотеките се применуваат по следниот редослед:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
, по азбучен ред/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
, по азбучен ред
Секоја датотека може да содржи секција [DEFAULT]
, извршена прво, а може да содржи и делови за поединечни затвори. Последната поставена вредност за даден параметар има предност.
Да започнеме со пишување на многу едноставна верзија на jail.local
. Отворете нова датотека користејќи nano
(или вашиот уредник по избор):
- sudo nano /etc/fail2ban/jail.local
Залепете го следново:
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
Ова отфрла три поставки: поставува ново стандардно bantime
за сите услуги, осигурува дека користиме iptables
за конфигурација на заштитен ѕид и го овозможува sshd
затвор.
Излезете и зачувајте ја новата датотека (во nano
, притиснете Ctrl-X за да излезете, y за зачувување и Enter > за да го потврдите името на датотеката). Сега можеме да ја рестартираме услугата fail2ban
користејќи systemctl
:
- sudo systemctl restart fail2ban
Командата systemctl
треба да заврши без никаков излез. За да провериме дали услугата работи, можеме да користиме fail2ban-client
:
- sudo fail2ban-client status
OutputStatus
|- Number of jail: 1
`- Jail list: sshd
Можете исто така да добиете подетални информации за одреден затвор:
- sudo fail2ban-client status sshd
Истражете ги достапните поставки
Верзијата на jail.local
што ја дефиниравме погоре е добар почеток, но можеби ќе сакате да приспособите голем број други поставки. Отворете jail.conf
и ќе испитаме некои од стандардните поставки. Ако одлучите да промените некоја од овие вредности, запомнете дека тие треба да се копираат во соодветниот дел од jail.local
и да се прилагодат таму, наместо да се менуваат на место.
- sudo nano /etc/fail2ban/jail.conf
Стандардни поставки за сите затвори
Прво, скролувајте низ делот [DEFAULT]
.
ignoreip = 127.0.0.1/8
Можете да ги прилагодите изворните адреси кои Fail2ban ги игнорира со додавање вредност на параметарот ignoreip
. Во моментов, тој е конфигуриран да не забранува сообраќај што доаѓа од локалната машина. Може да вклучите дополнителни адреси за игнорирање со нивно додавање на крајот од параметарот, одделени со празно место.
bantime = 600
Параметарот bantime
ја поставува должината на времето кога клиентот ќе биде забранет кога не успеал правилно да се автентицира. Ова се мери во секунди. Стандардно, ова е поставено на 600 секунди или 10 минути.
findtime = 600
maxretry = 3
Следните два параметри на кои сакате да обрнете внимание се findtime
и maxretry
. Тие работат заедно за да ги утврдат условите под кои клиентот треба да биде забранет.
Променливата maxretry
го поставува бројот на обиди што клиентот треба да ги автентицира во временскиот прозорец дефиниран од findtime
, пред да биде забранет. Со стандардните поставки, Fail2ban ќе забрани клиент кој неуспешно се обидува да се најави 3 пати во рок од 10 минути.
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
Ако сакате да ги конфигурирате предупредувањата по е-пошта, можеби ќе треба да ги отфрлите поставките destemail
, име на испраќач
и mta
. Параметарот destemail
ја поставува адресата на е-пошта што треба да прима пораки за забрана. име на испраќач
ја поставува вредноста на полето „Од“ во е-поштата. Параметарот mta
конфигурира која услуга за пошта ќе се користи за испраќање пошта.
action = $(action_)s
Овој параметар го конфигурира дејството што го презема Fail2ban кога сака да воведе забрана. Вредноста action_
е дефинирана во датотеката кратко пред овој параметар. Стандардното дејство е едноставно да го конфигурирате заштитниот ѕид да го отфрли сообраќајот од домаќинот што навредува додека не истече времето за забрана.
Ако сакате да ги конфигурирате предупредувањата по е-пошта, можете да ја отфрлите оваа вредност од action_
на action_mw
. Ако сакате е-поштата да ги вклучува соодветните линии за дневник, можете да ја промените во action_mwl
. Ќе сакате да бидете сигурни дека ги имате конфигурирани соодветните поставки за пошта ако изберете да користите предупредувања по пошта.
Поставки за индивидуални затвори
По [DEFAULT]
, ќе наидеме на делови кои конфигурираат поединечни затвори за различни услуги. Тие обично вклучуваат порта
што треба да се забрани и logpath
за следење за обиди за злонамерен пристап. На пример, SSH затворот што веќе го овозможивме во jail.local
ги има следните поставки:
[sshd]
port = ssh
logpath = %(sshd_log)s
Во овој случај, ssh
е однапред дефинирана променлива за стандардната SSH порта, а %(sshd_log)s
користи вредност дефинирана на друго место во стандардната конфигурација на Fail2ban (ова помага да се задржи jail.conf
пренослив помеѓу различни оперативни системи).
Друга поставка со која може да се сретнете е филтерот
што ќе се користи за да се одлучи дали линијата во дневникот означува неуспешна автентикација.
Вредноста filter
всушност е референца за датотека лоцирана во директориумот /etc/fail2ban/filter.d
, со неговата екстензија .conf
отстранета . Оваа датотека содржи регуларни изрази кои одредуваат дали линијата во дневникот е лоша. Во ова упатство нема да ја опфатиме детално оваа датотека, бидејќи е прилично сложена и однапред дефинираните поставки добро се совпаѓаат со соодветните линии.
Сепак, можете да видите какви филтри се достапни ако погледнете во тој директориум:
- ls /etc/fail2ban/filter.d
Ако видите датотека што изгледа дека е поврзана со услугата што ја користите, треба да ја отворите со уредувач на текст. Повеќето датотеки се прилично добро коментирани и треба да можете да кажете од каква состојба е дизајнирана скриптата да се заштити. Повеќето од овие филтри имаат соодветни (оневозможени) делови во jail.conf
кои можеме да ги овозможиме во jail.local
ако сакате.
На пример, преправајте се дека опслужуваме веб-локација користејќи Nginx и сфатите дека дел од нашата страница заштитена со лозинка добива удари со обиди за најава. Можеме да му кажеме на Fail2ban да ја користи датотеката nginx-http-auth.conf
за да ја провери оваа состојба во датотеката /var/log/nginx/error.log
.
Ова е всушност веќе поставено во делот наречен [nginx-http-auth]
во нашата датотека /etc/fail2ban/jail.conf
. Ќе треба само да додадеме параметар овозможен
за затворот nginx-http-auth
во jail.local
:
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
И рестартирајте ја услугата fail2ban
:
- sudo systemctl restart fail2ban
Следете ги логовите на Fail2ban и конфигурацијата на заштитен ѕид
Важно е да знаете дека услугата како Fail2ban работи според намерата. Започнете со користење на systemctl
за да го проверите статусот на услугата:
- sudo systemctl status fail2ban
Ако се чини дека нешто не е во ред овде, можете да ги решите проблемите со проверка на дневниците за единицата fail2ban
од последното подигање:
- sudo journalctl -b -u fail2ban
Следно, користете го fail2ban-client
за да го побарате целокупниот статус на fail2ban-server
или кој било поединечен затвор:
- sudo fail2ban-client status
- sudo fail2ban-client status jail_name
Следете го дневникот на Fail2ban за евиденција за неодамнешните дејства (притиснете Ctrl-C за да излезете):
- sudo tail -F /var/log/fail2ban.log
Наведете ги тековните правила конфигурирани за iptables:
- sudo iptables -L
Прикажи ги правилата на iptables во формат што ги одразува командите потребни за да се овозможи секое правило:
- sudo iptables -S
Заклучок
Сега треба да можете да конфигурирате некои основни политики за забрана за вашите услуги. Fail2ban е многу лесен за поставување и е одличен начин за заштита на секаков вид услуга што користи автентикација.
Ако сакате да дознаете повеќе за тоа како функционира Fail2ban, можете да го проверите нашето упатство за тоа како функционираат правилата и датотеките на fail2ban.