Како да се заштити SSH со Fail2Ban на Ubuntu 14.04


Вовед

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

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

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

Во ова упатство, ќе покриеме како да инсталирате и користите fail2ban на серверот Ubuntu 14.04.

Инсталирајте Fail2Ban на Ubuntu 14.04

Процесот на инсталација за оваа алатка е едноставен бидејќи тимот за пакување на Ubuntu одржува пакет во стандардните складишта.

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

  1. sudo apt-get update
  2. sudo apt-get install fail2ban

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

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

Услугата fail2ban ги чува своите конфигурациски датотеки во директориумот /etc/fail2ban. Постои датотека со стандардни поставки наречена jail.conf.

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

Иако треба да вклучиме само отстапувања од стандардното во датотеката jail.local, полесно е да се создаде датотека jail.local врз основа на постоечкиот затвор. conf датотека. Така, ќе ја копираме таа датотека, со содржината коментирана, како основа за датотеката jail.local. Можете да го направите ова со пишување:

  1. awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Откако датотеката ќе се копира, можеме да ја отвориме оригиналната датотека jail.conf за да видиме како работите се стандардно поставени

  1. sudo nano /etc/fail2ban/jail.conf

Во оваа датотека, има неколку поставки што можеби ќе сакате да ги приспособите. Поставките лоцирани во секцијата [DEFAULT] ќе се применат на сите услуги овозможени за fail2ban кои не се отфрлени во делот на сопствената услуга.

[DEFAULT]
. . .
ignoreip = 127.0.0.1/8
. . .

Поставката ignoreip ги конфигурира изворните адреси кои fail2ban ги игнорира. Стандардно, тој е конфигуриран да не забранува сообраќај што доаѓа од локалната машина. Може да додадете дополнителни адреси за игнорирање со додавање на дел [DEFAULT] со поставка ignoreip под него во датотеката jail.local. Можете да додадете дополнителни адреси со нивно додавање на крајот од директивата, одделени со празно место.

[DEFAULT]
. . .
bantime = 600
. . .

Параметарот bantime го поставува времето во кое клиентот ќе биде забранет кога не успеал правилно да се автентицира. Ова се мери во секунди. Стандардно, ова е поставено на 600 секунди или 10 минути.

[DEFAULT]
. . .
findtime = 600
maxretry = 3
. . .

Следните два параметри на кои сакате да обрнете внимание се findtime и maxretry. Тие работат заедно за да ги утврдат условите под кои е утврдено дека клиентот е нелегитимен корисник кој треба да биде забранет.

Променливата maxretry го поставува бројот на обиди што клиентот треба да ги автентицира во временскиот прозорец дефиниран од findtime, пред да биде забранет. Со стандардните поставки, услугата fail2ban ќе забрани клиент кој неуспешно се обидува да се најави 3 пати во рок од 10 минути.

[DEFAULT]
. . .
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
. . .

Ќе сакате да ги оцените поставките destemail, Sendername и mta доколку сакате да ги конфигурирате предупредувањата за е-пошта. Параметарот destemail ја поставува адресата на е-пошта што треба да прима пораки за забрана. име на испраќач ја поставува вредноста на полето \Од во е-поштата. Параметарот mta конфигурира која услуга за пошта ќе се користи за испраќање пошта. Повторно, додајте ги на Датотеката jail.local, под заглавието [DEFAULT] и поставете ги на соодветните вредности доколку сакате да ги приспособите.

[DEFAULT]
. . .
action = $(action_)s
. . .

Овој параметар го конфигурира дејството што го презема fail2ban кога сака да воведе забрана. Вредноста action_ е дефинирана во датотеката кратко пред овој параметар. Стандардното дејство е едноставно да го конфигурирате заштитниот ѕид да го отфрли сообраќајот од домаќинот што навредува додека не истече времето за забрана.

Ако сакате да ги конфигурирате предупредувањата по е-пошта, додајте или откоментирајте ја ставката action во датотеката jail.local и променете ја нејзината вредност од action_ во action_mw. Ако сакате е-поштата да ги вклучува соодветните линии за дневник, можете да ја промените во action_mwl. Погрижете се да ги конфигурирате соодветните поставки за пошта ако изберете да користите предупредувања по пошта.

Индивидуални поставки за затвор

Конечно, доаѓаме до делот од конфигурациската датотека што се занимава со поединечни услуги. Тие се наведени со заглавијата на секциите, како [ssh].

Секој од овие делови може да се овозможи со откоментирање на заглавјето во jail.local и менување на линијата овозможено да биде \true”:

[jail_to_enable]
. . .
enabled = true
. . .

Стандардно, услугата SSH е овозможена и сите други се оневозможени.

Овие делови работат со користење на вредностите поставени во делот [DEFAULT] како основа и менувајќи ги по потреба. Ако сакате да отфрлите било која вредност, можете да го направите тоа со додавање на делот на соодветната услуга во jail.local и менување на нејзините вредности.

Некои други поставки што се поставени овде се филтерот што ќе се користи за да се одлучи дали линијата во дневникот означува неуспешна автентикација и logpath што му кажува на fail2ban каде се дневниците за таа конкретна услуга се наоѓа.

Вредноста 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. Треба само да го откоментираме делот во датотеката jail.local и да го превртиме параметарот овозможен за да ја заштитиме нашата услуга:

. . .
[nginx-http-auth]

enabled = true
. . .

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

Составување на сето тоа заедно

Сега кога ја разбирате основната идеја зад fail2ban, ајде да поминеме низ основното поставување.

Ќе конфигурираме политика за автоматска забрана за SSH и Nginx, исто како што опишавме погоре. Сакаме fail2ban да ни испрати е-пошта кога IP е забранета.

Прво, да го инсталираме целиот релевантен софтвер.

Ако веќе го немате, ќе ви треба nginx, бидејќи ние ќе ги следиме неговите дневници и ќе ви треба Sendmail за да ни испраќате известувања по пошта. Ќе земеме и iptables-persistent за да му дозволиме на серверот автоматски да ги поставува нашите правила за заштитен ѕид при подигнување. Овие можат да се добијат од стандардните складишта на Ubuntu:

  1. sudo apt-get update
  2. sudo apt-get install nginx sendmail iptables-persistent

Запрете ја услугата fail2ban за момент за да можеме да воспоставиме основен заштитен ѕид без правилата што ги додава:

  1. sudo service fail2ban stop

Воспоставете основен заштитен ѕид

Кога тоа ќе заврши, треба да имплементираме стандарден заштитен ѕид. Можете да научите како да конфигурирате заштитен ѕид iptables на Ubuntu 14.04 овде. Ние само ќе создадеме основен заштитен ѕид за овој водич.

Ќе му кажеме да дозволи воспоставени врски, сообраќај генериран од самиот сервер, сообраќај наменет за нашите SSH и портите на веб-серверот. Ќе го отфрлиме целиот друг сообраќај. Можеме да го поставиме овој основен заштитен ѕид со пишување:

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  3. sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  4. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
  5. sudo iptables -A INPUT -j DROP

Овие команди ќе ја имплементираат горната политика. Можеме да ги видиме нашите тековни правила за заштитен ѕид со пишување:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP

Можете да ги зачувате заштитните ѕидови за да преживеат рестартирање со внесување:

  1. sudo dpkg-reconfigure iptables-persistent

Потоа, можете да го рестартирате fail2ban за да ги имплементирате правилата за завиткување:

  1. sudo service fail2ban start

Можеме да ги видиме нашите тековни правила за заштитен ѕид со пишување:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-ssh -j RETURN

Ја имаме нашата стандардна политика за секој наш синџир, а потоа и петте основни правила што ги воспоставивме. Во црвено, ја имаме и стандардната структура поставена од fail2ban бидејќи таа веќе стандардно имплементира политики за забрана на SSH. Овие може или не може да се појават на почетокот, бидејќи понекогаш fail2ban не ја додава структурата додека не се имплементира првата забрана.

Прилагодување на конфигурацијата Fail2ban

Сега, треба да го конфигурираме fail2ban користејќи ги поставките што ги сакаме. Отворете ја датотеката jail.local:

  1. sudo nano /etc/fail2ban/jail.local

Овде можеме да поставиме построго време за забрана. Најдете и откоментирајте го насловот [DEFAULT]. Под стандардниот наслов, сменете ја поставката bantime така што нашата услуга ги забранува клиентите на половина час:

[DEFAULT]
. . .
bantime = 1800
. . .

Исто така, треба да ги конфигурираме нашите информации за е-пошта за предупредување. Прво, пронајдете го параметарот destemail, кој исто така треба да биде под насловот [DEFAULT]. Внесете ја адресата на е-пошта што сакате да ја користите за да ги соберете овие пораки:

[DEFAULT]
. . .
destemail = admin@example.com
. . .

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

Поместувајќи се надолу, треба да го прилагодиме параметарот action на едно од дејствата што ни испраќаат е-пошта. Изборот е помеѓу action_mw кој ја воведува забраната и потоа ни испраќа е-пошта извештај \whois за домаќинот што навредува, или action_mwl кој го прави горенаведеното, но и испраќа е-пошта на релевантните линии на дневници.

Ќе избереме action_mwl затоа што линиите за евиденција ќе ни помогнат да ги решиме проблемите и да собереме повеќе информации доколку има проблеми:

[DEFAULT]
. . .
action = %(action_mwl)s
. . .

Преминувајќи во нашиот дел за SSH, ако сакаме да го прилагодиме бројот на неуспешни обиди што треба да се дозволат пред да се воспостави забрана, можете да го уредите записот maxretry. Ако користите порта различна од \22, ќе сакате соодветно да го прилагодите параметарот port. Како што рековме претходно, оваа услуга е веќе овозможена, така што нема потреба да менуваме тоа.

Следно, побарајте го делот nginx-http-auth. Откажете го заглавието и променете го параметарот овозможен за да чита \true.

. . .
[nginx-http-auth]

enabled = true
. . .

Ова треба да биде сè што треба да го направите овој дел, освен ако вашиот веб-сервер работи на нестандардни порти или ако сте ја преместиле стандардната патека за евиденција на грешки.

Рестартирање на услугата Fail2ban

Кога ќе завршите, зачувајте ја и затворете ја датотеката.

Сега, стартувајте или рестартирајте ја вашата fail2ban услуга. Понекогаш, подобро е целосно да ја исклучите услугата и потоа да ја стартувате повторно:

  1. sudo service fail2ban stop

Сега можеме да го рестартираме со пишување:

  1. sudo service fail2ban start

Можеби ќе бидат потребни неколку моменти за да се пополнат сите ваши правила за заштитен ѕид. Понекогаш, правилата не се додаваат додека не се воведе првата забрана од тој тип. Сепак, по некое време, можете да ги проверите новите правила со внесување:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN

Линиите во црвено се оние што ги создадоа нашите политики на fail2ban. Во моментов, тие само го насочуваат сообраќајот кон нови, речиси празни синџири и потоа дозволуваат сообраќајот да тече веднаш назад во синџирот ВЛЕЗ.

Сепак, овие нови синџири се местото каде што ќе се додадат правилата за забрана.

Тестирање на политиките за забрана

Од друг сервер, со кој нема да треба да се најавите на вашиот fail2ban сервер, можеме да ги тестираме правилата со тоа што ќе го забраниме нашиот втор сервер.

Откако ќе се најавите на вториот сервер, обидете се да внесете SSH во серверот fail2ban. Може да се обидете да се поврзете користејќи непостоечко име, на пример:

  1. ssh blah@fail2ban_server_IP

Внесете случајни знаци во барањето за лозинка. Повторете го ова неколку пати. Во одреден момент, серверот fail2ban ќе престане да реагира со пораката Дозволата е одбиена. Ова сигнализира дека вашиот втор сервер е забранет од серверот fail2ban.

На вашиот fail2ban сервер, можете да го видите новото правило со повторно проверка на нашите iptables:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -j RETURN

Како што можете да видите во означената линија, имаме ново правило во нашата конфигурација кое го отфрла сообраќајот кон SSH-портата што доаѓа од IP адресата на нашиот втор сервер. Требаше да добиете и е-пошта за забраната на сметката што ја конфигуриравте.

Заклучок

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

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

За информации за тоа како да користите fail2ban за заштита на други услуги, обидете се со овие врски:

  • Како да се заштити серверот Nginx со Fail2Ban на Ubuntu 14.04
  • Како да се заштити серверот на Apache со Fail2Ban на Ubuntu 14.04