Как да защитите вашия Linux сървър с fail2ban

С fail2ban вашият Linux компютър автоматично блокира IP адреси, които имат твърде много неуспешни връзки. Това е саморегулираща се сигурност! Ще ви покажем как да го използвате.

Сигурност Сигурност Сигурност

херцогинята на Уиндзор, Уолис Симпсън, веднъж прочуто казано: „Никога не можеш да бъдеш твърде богат или твърде слаб“. Актуализирахме това за нашия модерен, взаимосвързан свят: Никога не можете да бъдете твърде внимателни или твърде сигурни.

Ако вашият компютър приема входящи заявки за връзка, като напр Сигурна обвивка (SSH) или действа като уеб или имейл сървър, трябва да го защитите от атаки с груба сила и отгатване на пароли.

За да направите това, ще трябва да наблюдавате заявките за връзка, които не успяват да влязат в акаунт. Ако многократно не успеят да се удостоверят в рамките на кратък период от време, трябва да им бъде забранено да правят допълнителни опити.

Единственият начин, по който това може да се постигне на практика, е автоматизирането на целия процес. С малко проста конфигурация, fail2ban ще управлява наблюдение, забрана и дебаниране за теб.

fail2ban се интегрира с защитната стена на Linux iptables. Той налага забраните на подозрителни IP адреси, като добавя правила към защитната стена. За да запазим това обяснение без претрупване, ние използваме iptables с празен набор от правила.

Разбира се, ако сте загрижени за сигурността, вероятно имате защитна стена, конфигурирана с добре попълнен набор от правила. само fail2ban добавя и премахва свои собствени правила— вашите редовни функции на защитната стена ще останат недокоснати.

Можем да видим нашия празен набор от правила, използвайки тази команда:

sudo iptables -L

Инсталиране на fail2ban

Инсталирането на fail2ban е лесно за всички дистрибуции, които използвахме, за да изследваме тази статия. В Ubuntu 20.04 командата е както следва:

sudo apt-get install fail2ban

Във Fedora 32 въведете:

sudo dnf install fail2ban

На Manjaro 20.0.1 използвахме pacman:

sudo pacman -Sy fail2ban

Конфигуриране на fail2ban

Инсталацията на fail2ban съдържа конфигурационен файл по подразбиране, наречен jail.conf. Този файл се презаписва, когато fail2ban бъде надстроен, така че ще загубим промените си, ако направим персонализиране на този файл.

  Как да почистите и ускорите Arch Linux

Вместо това ще копираме файла jail.conf в такъв, наречен jail.local. Като поставим промените в конфигурацията си в jail.local, те ще се запазят при надстройките. И двата файла се четат автоматично от fail2ban.

Ето как да копирате файла:

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

Сега отворете файла в любимия си редактор. Ще използваме gedit:

sudo gedit /etc/fail2ban/jail.local

Ще търсим два раздела във файла: [DEFAULT] и [sshd]. Внимавайте обаче да намерите действителните секции. Тези етикети също се появяват близо до горната част в раздел, който ги описва, но това не е това, което искаме.

Ще намерите [DEFAULT] раздел някъде около ред 40. Това е дълъг раздел с много коментари и обяснения.

Превъртете надолу до около ред 90 и ще намерите следните четири настройки, за които трябва да знаете:

ignoreip: Бял списък с IP адреси, които никога няма да бъдат забранени. Те имат постоянна карта „Безплатно излизане от затвора“. В IP адрес на локален хост (127.0.0.1) е в списъка по подразбиране, заедно с неговия IPv6 еквивалент (::1). Ако има други IP адреси, за които знаете, че никога не трябва да бъдат забранени, добавете ги към този списък и оставете интервал между всеки от тях.
bantime: Продължителността, за която даден IP адрес е забранен („m“ означава минути). Ако въведете стойност без „m“ или „h“ (за часове), тя ще се третира като секунди. Стойност от -1 ще забрани за постоянно IP адрес. Бъдете много внимателни да не се заключите за постоянно.
findtime: Времето, в рамките на което твърде много неуспешни опити за свързване ще доведат до забрана на IP адрес.
maxretry: Стойността за „твърде много неуспешни опити“.

Ако връзка от същия IP адрес направи неуспешни опити за свързване с maxretry в рамките на периода на намиране, те са забранени за времето на забрана. Единствените изключения са IP адресите в списъка за игнориране.

fail2ban поставя IP адресите в затвора за определен период от време. fail2ban поддържа много различни затвори и всеки от тях представлява задържане на настройките, приложими към един тип връзка. Това ви позволява да имате различни настройки за различни типове връзка. Или можете да имате fail2ban монитор само за избран набор от типове връзки.

  Как да архивирам настройките на Wine в Linux

Може би сте се досетили от [DEFAULT] име на раздел, но настройките, които разгледахме, са по подразбиране. Сега нека да разгледаме настройките за SSH затвора.

Конфигуриране на затвор

Jails ви позволяват да премествате типове връзки в и извън наблюдението на fail2ban. Ако настройките по подразбиране не съвпадат с тези, които искате да се приложат към затвора, можете да зададете конкретни стойности за време на забрана, време за намиране и максимален опит.

Превъртете надолу до около ред 280 и ще видите [sshd] раздел.

Тук можете да зададете стойности за затвора за SSH връзка. За да включим този затвор в наблюдението и забраняването, трябва да напишем следния ред:

enabled = true

Пишем и този ред:

maxretry = 3

Настройката по подразбиране беше пет, но искаме да бъдем по-предпазливи с SSH връзките. Намаляхме го до три и след това запазихме и затворихме файла.

Добавихме този затвор към наблюдението на fail2ban и отменихме една от настройките по подразбиране. Затворът може да използва комбинация от настройки по подразбиране и специфични за затвора.

Активиране на fail2ban

Досега инсталирахме fail2ban и го конфигурирахме. Сега трябва да го активираме да работи като услуга за автоматично стартиране. След това трябва да го тестваме, за да се уверим, че работи според очакванията.

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

sudo systemctl enable fail2ban

Ние също го използваме за стартиране на услугата:

sudo systemctl start fail2ban

Можем да проверим състоянието на услугата и чрез systemctl:

sudo systemctl status fail2ban.service

Всичко изглежда добре – имаме зелена светлина, така че всичко е наред.

Нека видим дали fail2ban е съгласен:

sudo fail2ban-client status

Това отразява това, което сме настроили. Активирахме един-единствен затвор с име [sshd]. Ако включим името на затвора с предишната ни команда, можем да го разгледаме по-задълбочено:

sudo fail2ban-client status sshd

Това изброява броя на неуспехите и забранените IP адреси. Разбира се, цялата статистика в момента е нула.

Тестване на нашия затвор

На друг компютър ще направим заявка за SSH връзка към нашата тестова машина и нарочно ще въведем погрешно паролата. Получавате три опита да получите паролата правилно при всеки опит за свързване.

  Как да стартирате Skyrim на Linux с Wine

Стойността на maxretry ще се задейства след три неуспешни опита за свързване, а не три неуспешни опита за парола. Така че трябва да въведем неправилна парола три пъти, за да не успеем при опит за свързване.

След това ще направим нов опит за свързване и ще въведете паролата неправилно още три пъти. Първият неправилен опит за парола от третата заявка за свързване трябва да задейства fail2ban.

След първата неправилна парола при третата заявка за свързване, не получаваме отговор от отдалечената машина. Не получаваме никакво обяснение; просто получаваме студено рамо.

Трябва да натиснете Ctrl+C, за да се върнете към командния ред. Ако опитаме още веднъж, ще получим различен отговор:

ssh [email protected]

Преди това съобщението за грешка беше „Разрешението е отказано“. Този път връзката е категорично отказана. Ние сме персони нон грата. Забранени сме.

Нека разгледаме детайлите на [sshd] отново затвор:

sudo fail2ban-client status sshd

Имаше три грешки и един IP адрес (192.168.4.25) беше забранен.

Както споменахме по-рано, fail2ban налага забрани чрез добавяне на правила към набора от правила на защитната стена. Нека да разгледаме отново набора от правила (преди беше празен):

sudo iptables -L

Към политиката INPUT е добавено правило, изпращащо SSH трафик към веригата f2b-sshd. Правилото във веригата f2b-sshd отхвърля SSH връзки от 192.168.4.25. Не променихме настройката по подразбиране за bantime, така че след 10 минути този IP адрес ще бъде отменен и може да прави нови заявки за връзка.

Ако зададете по-дълга продължителност на забрана (като няколко часа), но искате да позволите на IP адрес да направи друга заявка за връзка по-рано, можете да го освободите по-рано.

Пишем следното, за да направим това:

sudo fail2ban-client set sshd unbanip 192.168.5.25

На нашия отдалечен компютър, ако направим друга заявка за SSH връзка и въведете правилната парола, ще ни бъде позволено да се свържем:

ssh [email protected]

Прост и ефективен

Обикновено по-простото е по-добро, а fail2ban е елегантно решение на сложен проблем. Отнема много малко конфигурация и не налага почти никакви оперативни разходи – за вас или вашия компютър.