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


Вовед

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

Поставувањето fail2ban може да помогне да се олесни овој проблем. Кога корисниците постојано не успеваат да се автентицираат на услугата (или се впуштаат во друга сомнителна активност), fail2ban може да издаде привремени забрани за навредливата IP адреса со динамичка модификација на политиката за заштитниот ѕид што работи. Секој fail2ban \jail“ работи со проверка на дневниците напишани од услуга за шеми што укажуваат на неуспешни обиди. Поставувањето fail2ban за следење на дневниците на Apache е лесно со користење на вклучените филтри за конфигурација .

Во ова упатство, ќе покажеме како да инсталирате fail2ban и да го конфигурирате да ги следи вашите дневници на Apache за обиди за упад. Ќе користиме сервер Ubuntu 14.04.

Предуслови

Пред да започнете, треба да имате поставено Ubuntu 14.04 сервер со не-root сметка. Оваа сметка треба да биде конфигурирана со привилегии sudo за да се издаваат административни команди. За да научите како да поставите корисник со привилегии sudo, следете го нашиот првичен водич за поставување сервер за Ubuntu 14.04.

Инсталирање на Apache и конфигурирање на автентикација со лозинка

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

Ажурирајте го индексот на локалниот пакет и инсталирајте со внесување:

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

Услугата fail2ban е корисна за заштита на влезните точки за најавување. За да може ова да биде корисно за инсталација на Apache, автентикацијата на лозинката мора да се имплементира за барем подмножество од содржината на серверот. Можете да го следите ова упатство за да ја конфигурирате заштитата со лозинка за вашиот Apache-сервер.

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

Штом вашиот Apache-сервер работи и е овозможена автентикација на лозинка, можете да продолжите и да инсталирате fail2ban (вклучуваме повторно преземање на друго складиште во случај ако веќе сте го поставиле Apache во претходните чекори):

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

Ова ќе го инсталира софтверот. Стандардно, fail2ban е конфигуриран да забранува само неуспешни обиди за најавување SSH. Треба да овозможиме некои правила што ќе го конфигурираат да ги проверува нашите дневници на Apache за шеми што укажуваат на злонамерна активност.

Прилагодување на општите поставки во Fail2Ban

За да започнеме, треба да ја приспособиме конфигурациската датотека што ја користи fail2ban за да одреди кои дневници на апликации да се следат и какви дејства да се преземат кога ќе се најдат навредливи записи. Доставената датотека /etc/fail2ban/jail.conf е главниот обезбеден ресурс за ова.

За да направиме модификации, треба да ја копираме оваа датотека на /etc/fail2ban/jail.local. Ова ќе спречи нашите промени да бидат препишани ако ажурирањето на пакетот обезбеди нова стандардна датотека:

  1. sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Отворете ја новокопираната датотека за да можеме да го поставиме нашето следење на дневникот на Apache:

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

Менување на стандардните

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

Една од првите ставки што треба да се погледне е списокот на клиенти кои не подлежат на политиките fail2ban. Ова е поставено со директивата ignoreip. Понекогаш е добра идеја да додадете своја сопствена IP адреса или мрежа на списокот со исклучоци за да избегнете да се заклучите. Ова е помалку проблем со најавувањата на веб-серверот, иако ако можете да одржите пристап до школка, бидејќи секогаш можете рачно да ја смените забраната. Можете да додадете дополнителни IP адреси или мрежи ограничени со празно место, на постојната листа:

[DEFAULT]

. . .
ignoreip = 127.0.0.1/8 your_home_IP

Друга ставка што можеби ќе сакате да ја приспособите е bantime, која контролира колку секунди е забранет член кој навредува. Идеално е да го поставите ова на доволно долго време за да ги наруши напорите на злонамерниот актер, додека доволно кратко за да им овозможи на легитимните корисници да ги поправат грешките. Стандардно, ова е поставено на 600 секунди (10 минути). Зголемете ја или намалете ја оваа вредност како што ви одговара:

[DEFAULT]

. . .
bantime = 3600

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

[DEFAULT]

. . .
findtime = 3600   # These lines combine to ban clients that fail
maxretry = 6      # to authenticate 6 times within a half hour.

Поставување известувања по пошта (опционално)

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

Откако ќе го поставите вашиот MTA, ќе мора да приспособите некои дополнителни поставки во делот [DEFAULT] во датотеката /etc/fail2ban/jail.local. Започнете со поставување на директивата mta. Ако поставите Postfix, како што покажува горното упатство, сменете ја оваа вредност во \mail:

[DEFAULT]

. . .
mta = mail

Треба да ја изберете адресата на е-пошта на која ќе се испраќаат известувања. Изменете ја директивата destemail со оваа вредност. Директивата име на испраќач може да се користи за менување на полето „Испраќач“ во е-пораките за известување:

[DEFAULT]

. . .
destemail = youraccount@email.com
sendername = Fail2BanAlerts

Во fail2ban идиом, „акција“ е процедурата што се следи кога клиентот не успева да се автентицира премногу пати. Стандардното дејство (наречено action_) е едноставно да се забрани IP адресата од портата за која станува збор. Меѓутоа, има уште две претходно направени дејства што може да се користат ако имате поставено пошта.

Можете да го користите дејството action_mw за да го забраните клиентот и да испратите известување преку е-пошта до вашата конфигурирана сметка со извештај \whois за навредливата адреса. Можете исто така да го користите action_mwl акција, која го прави истото, но ги вклучува и навредливите линии за дневник што ја активираа забраната:

[DEFAULT]

. . .
action = %(action_mwl)s

Конфигурирање на Fail2Ban за следење на дневниците на Apache

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

Секој затвор во конфигурациската датотека е означен со заглавие што го содржи името на затворот во квадратни загради (секој дел освен делот [DEFAULT] означува одредена конфигурација на затворот). Стандардно, овозможен е само затворот [ssh].

За да овозможиме следење на дневници за обиди за најава на Apache, ќе го овозможиме затворот [apache]. Уредете ја директивата овозможена во овој дел, така што ќе гласи \true:

[apache]

enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6
. . .

Ако вашиот Apache-сервер пишува на стандардната локација на дневникот (/var/log/apache/error.log), затворот е веќе конфигуриран да бара на вистинското место. Ако се најавувате на друга локација, изменете ја logpath по потреба. Исто така, слободно приспособете ја директивата maxretry или додадете вредност findtime за овој затвор доколку сакате да поставите различни ограничувања за овој конкретен затвор:

[apache]

enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache/custom_log_location.log
maxretry = 3
findtime = 600
. . .

Горенаведениот затвор ќе се погрижи за забрана на основните неуспеси во автентикацијата. Исто така, постојат некои други претходно конфигурирани затвори кои вреди да се овозможат (затворот [apache-multiport] е наследен затвор што не е потребен).

Затворот [apache-noscript] се користи за забрана на клиенти кои бараат скрипти на веб-локацијата за извршување и експлоатација. Ако не користите PHP или кој било друг јазик во врска со вашиот веб-сервер, можете да овозможите овој затвор да ги забрани оние што бараат овие видови ресурси:

[apache-noscript]

enabled  = true
. . .

Затворот [apache-overflows] се користи за блокирање клиенти кои се обидуваат да побараат невообичаено долги и сомнителни URL-адреси. Овие често се знаци на обиди за експлоатација на Apache со обид да се активира прелевање на баферот. Можете да го овозможите овој затвор ако сакате да ги спречите овие типови на напади:

[apache-overflows]

enabled  = true
. . .

Некои дополнителни проверки може да се направат со копирање и залепување на записот [apache-overflows] и малку менување. На пример, можете да го копирате и залепите тој дел и да го измените името и филтерот на затворот во apache-badbots за да запрете некои познати шеми на барања за злонамерни ботови:

[apache-overflows]

enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2

[apache-badbots]

enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache*/*error.log
maxretry = 2

Ако не користите Apache за да обезбедите пристап до веб-содржини во домашните директориуми на корисниците, можете повторно да копирате и залепите и да ги промените имињата на затворот и филтрите во apache-nohome:

[apache-overflows]

enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2

[apache-badbots]

enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache*/*error.log
maxretry = 2

[apache-nohome]

enabled  = true
port     = http,https
filter   = apache-nohome
logpath  = /var/log/apache*/*error.log
maxretry = 2

И на крај, ако користите Apache со PHP, можеби ќе сакате да го овозможите затворот [php-url-fopen], кој ги блокира обидите да се користи одредено однесување на PHP за злонамерни цели. Веројатно ќе треба да ја промените директивата logpath за да ја посочите точната локација на дневникот за пристап (на Ubuntu, стандардната локација е /var/log/apache2/access.log). Можете да користите шема слична на онаа што одговара на дневникот за грешки во другите затвори:

[php-url-fopen]

enabled = true
port    = http,https
filter  = php-url-fopen
logpath = /var/log/apache*/*access.log

Кога ќе завршите со измените што ви се потребни, зачувајте ја и затворете ја датотеката.

Спроведување на вашите Apache затвори

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

  1. sudo service fail2ban restart

Услугата треба да се рестартира, имплементирајќи ги различните политики за забрана што сте ги конфигурирале.

Добивање информации за овозможени затвори

Можете да ги видите сите ваши овозможени затвори со користење на командата fail2ban-client:

  1. sudo fail2ban-client status

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

Output
Status |- Number of jail: 7 `- Jail list: php-url-fopen, apache-overflows, apache-noscript, ssh, apache-badbots, apache-nohome, apache

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

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-apache -N fail2ban-apache-badbots -N fail2ban-apache-nohome -N fail2ban-apache-noscript -N fail2ban-apache-overflows -N fail2ban-php-url-fopen -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-nohome -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-badbots -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-php-url-fopen -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-noscript -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A fail2ban-apache -j RETURN -A fail2ban-apache-badbots -j RETURN -A fail2ban-apache-nohome -j RETURN -A fail2ban-apache-noscript -j RETURN -A fail2ban-apache-overflows -j RETURN -A fail2ban-php-url-fopen -j RETURN -A fail2ban-ssh -j RETURN

Ако сакате да ги видите деталите за забраните што ги спроведува кој било затвор, веројатно е полесно да го користите fail2ban-client повторно:

  1. sudo fail2ban-client status apache
Output
Status for the jail: apache |- filter | |- File list: /var/log/apache2/error.log | |- Currently failed: 0 | `- Total failed: 0 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0

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

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

Ако го погледнете статусот со командата fail2ban-client, ќе видите дека вашата IP адреса е забранета од страницата:

  1. sudo fail2ban-client status apache
Output
Status for the jail: apache |- filter | |- File list: /var/log/apache2/error.log | |- Currently failed: 0 | `- Total failed: 12 `- action |- Currently banned: 1 | `- IP list: 111.111.111.111 `- Total banned: 1

Кога сте задоволни дека вашите правила функционираат, можете рачно да ја одбраните вашата IP адреса со fail2ban-client со внесување:

  1. sudo fail2ban-client set apache unbanip 111.111.111.111

Сега треба да можете повторно да се обидете со автентикација.

Заклучок

Поставувањето fail2ban за заштита на вашиот Apache-сервер е прилично едноставно во наједноставен случај. Сепак, fail2ban обезбедува голема флексибилност за конструирање политики што ќе одговараат на вашите специфични безбедносни потреби. Со разгледување на променливите и обрасците во датотеката /etc/fail2ban/jail.local и датотеките од кои зависи во /etc/fail2ban/filter.d и директориумите /etc/fail2ban/action.d, можете да најдете многу парчиња за дотерување и менување како што се развиваат вашите потреби. Учењето на основите за тоа како да го заштитите вашиот сервер со fail2ban може да ви обезбеди голема безбедност со минимален напор.

За да дознаете повеќе за fail2ban, погледнете некои од овие врски:

  • Како функционира Fail2Ban за да ги заштити услугите на серверот Linux
  • Како да се заштити SSH со Fail2Ban на Ubuntu 14.04
  • Како да се заштити серверот Nginx со Fail2Ban на Ubuntu 14.04