Како да го заштитите SSH со Fail2Ban на CentOS 7


Вовед

Додека поврзувањето со вашиот сервер преку SSH може да биде многу безбедно, самиот SSH демон е услуга што мора да биде изложена на Интернет за да функционира правилно. Ова доаѓа со одреден инхерентен ризик и нуди вектор на напад за потенцијалните напаѓачи.

Секоја услуга што е изложена на мрежата е потенцијална цел на овој начин. Ако обрнете внимание на дневниците на апликациите за овие услуги, често ќе видите повторени, систематски обиди за најавување кои претставуваат напади со брутална сила од страна на корисниците и ботови подеднакво.

Услугата наречена Fail2ban може да го ублажи овој проблем со создавање правила кои автоматски ја менуваат конфигурацијата на вашиот заштитен ѕид iptables врз основа на претходно дефиниран број на неуспешни обиди за најавување. Ова ќе му овозможи на вашиот сервер да одговори на обидите за нелегитимен пристап без ваша интервенција.

Во ова упатство, ќе покриеме како да инсталирате и користите Fail2ban на серверот CentOS 7.

Инсталирајте Fail2ban на CentOS 7

Додека Fail2ban не е достапен во официјалното складиште за пакети CentOS, тој е спакуван за проектот EPEL. EPEL, што значи Дополнителни пакети за Enterprise Linux, може да се инсталира со пакет за издавање што е достапен од CentOS:

  1. sudo yum install epel-release

Ќе ви биде побарано да продолжите - притиснете y, проследено со Enter:

yum prompt
Transaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y

Сега треба да можеме да го инсталираме пакетот fail2ban:

  1. sudo yum install fail2ban

Повторно, притиснете y и Enter кога ќе биде побарано да продолжите.

Откако ќе заврши инсталацијата, користете systemctl за да ја овозможите услугата fail2ban:

  1. sudo systemctl enable fail2ban

Конфигурирајте ги локалните поставки

Услугата Fail2ban ги чува своите конфигурациски датотеки во директориумот /etc/fail2ban. Таму, можете да најдете датотека со стандардни вредности наречена jail.conf. Бидејќи оваа датотека може да биде препишана со надградби на пакети, не треба да ја уредуваме на место. Наместо тоа, ќе напишеме нова датотека наречена jail.local. Сите вредности дефинирани во jail.local ќе ги надминат оние во jail.conf.

jail.conf содржи дел [DEFAULT], проследен со делови за поединечни услуги. jail.local може да отфрли која било од овие вредности. Дополнително, датотеките во /etc/fail2ban/jail.d/ може да се користат за отфрлање на поставките во двете од овие датотеки. Датотеките се применуваат по следниот редослед:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, по азбучен ред
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, по азбучен ред

Секоја датотека може да содржи секција [DEFAULT], извршена прво, а може да содржи и делови за поединечни затвори. Последната поставена вредност за даден параметар има предност.

Да започнеме со пишување на многу едноставна верзија на jail.local. Отворете нова датотека користејќи nano (или вашиот уредник по избор):

  1. 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:

  1. sudo systemctl restart fail2ban

Командата systemctl треба да заврши без никаков излез. За да провериме дали услугата работи, можеме да користиме fail2ban-client:

  1. sudo fail2ban-client status
Output
Status |- Number of jail: 1 `- Jail list: sshd

Можете исто така да добиете подетални информации за одреден затвор:

  1. sudo fail2ban-client status sshd

Истражете ги достапните поставки

Верзијата на jail.local што ја дефиниравме погоре е добар почеток, но можеби ќе сакате да приспособите голем број други поставки. Отворете jail.conf и ќе испитаме некои од стандардните поставки. Ако одлучите да промените некоја од овие вредности, запомнете дека тие треба да се копираат во соодветниот дел од jail.local и да се прилагодат таму, наместо да се менуваат на место.

  1. 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 отстранета . Оваа датотека содржи регуларни изрази кои одредуваат дали линијата во дневникот е лоша. Во ова упатство нема да ја опфатиме детално оваа датотека, бидејќи е прилично сложена и однапред дефинираните поставки добро се совпаѓаат со соодветните линии.

Сепак, можете да видите какви филтри се достапни ако погледнете во тој директориум:

  1. 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:

  1. sudo systemctl restart fail2ban

Следете ги логовите на Fail2ban и конфигурацијата на заштитен ѕид

Важно е да знаете дека услугата како Fail2ban работи според намерата. Започнете со користење на systemctl за да го проверите статусот на услугата:

  1. sudo systemctl status fail2ban

Ако се чини дека нешто не е во ред овде, можете да ги решите проблемите со проверка на дневниците за единицата fail2ban од последното подигање:

  1. sudo journalctl -b -u fail2ban

Следно, користете го fail2ban-client за да го побарате целокупниот статус на fail2ban-server или кој било поединечен затвор:

  1. sudo fail2ban-client status
  2. sudo fail2ban-client status jail_name

Следете го дневникот на Fail2ban за евиденција за неодамнешните дејства (притиснете Ctrl-C за да излезете):

  1. sudo tail -F /var/log/fail2ban.log

Наведете ги тековните правила конфигурирани за iptables:

  1. sudo iptables -L

Прикажи ги правилата на iptables во формат што ги одразува командите потребни за да се овозможи секое правило:

  1. sudo iptables -S

Заклучок

Сега треба да можете да конфигурирате некои основни политики за забрана за вашите услуги. Fail2ban е многу лесен за поставување и е одличен начин за заштита на секаков вид услуга што користи автентикација.

Ако сакате да дознаете повеќе за тоа како функционира Fail2ban, можете да го проверите нашето упатство за тоа како функционираат правилата и датотеките на fail2ban.