Когато сме монтирали сървър с Linux и искаме да го управляваме от интернет чрез SSH дистанционно управление, може да се случи да започнем да получаваме атаки с цел да влезем в системата и да можем да я контролираме за нейните цели. Тези атаки обикновено се извършват от компютърни програми (ботове), които дълго време се опитват да получат достъп до системата, използвайки груба сила.
В предишни публикации говорих за това как да конфигурирам SSH услугата, но някои усъвършенствани ботове не влизат в услугата, но могат да убият SSH услугата на сървъра, като деактивират отдалечения достъп.
Пълно ръководство за SSH (Secure Shell)
Можем да го избегнем, като използваме fail2ban инструмент, е много практичен и предлага голяма граница на безопасност. Да обясня малко как работи. Той е в състояние да създава iptables преди неуспешен опит за влизане повече от 5 пъти подред, като отхвърля всякакъв вид връзка, след като бъде забранен.
Инсталирайте Fail2ban
Инсталацията може да се извърши директно от apt. Първо актуализираме системата и след това инсталираме Fail2ban.
apt-get update && apt-get -y ъпгрейд
apt-get install fail2banТова не само инсталира програмата, но и я оставя да работи и да започне със системата.
Конфигуриране на Fail2ban
Услугата Fail2ban има своите настройки в директорията / etc / fail2ban. Имате някои предварително конфигурирани опции в jail.conf, най -доброто в този случай е да копирате файла и да не правите промените директно в него, при актуализиране на fail2ban тези файлове се презаписват и можете да загубите всички направени преди това промени.
В този случай копираме файла и го кръщаваме jail.local, за да може да го намери.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localСлед като бъде копиран, можем да го отворим и да видим как работи.
vim /etc/fail2ban/jail.localВътре във файла имаме няколко параметъра, които можем да коригираме. Всеки параметър, който е под маркера [DEFAULT], ще бъде приложен към всички услуги, активирани от Fail2ban като SSH, NGINX, APACHE, ще го наречем глобален, след което ще имаме конкретни секции за всяка услуга.
Ще започнем с добавяне на параметри към глобалния раздел.
ignoreip = 127.0.0.1Ние добавяме нашия localhost по този начин, той ще игнорира целия локален трафик, можем да добавим допълнителни адреси, разделящи ги с интервал.
време на бантинг = 600Времето за изпълнение е периодът от време, през който клиентът ще бъде забранен, след като бъде блокиран. Единицата е за секунди 600 секунди ще бъде 10 минути е стойността по подразбиране.
findtime = 600 maxretry = 3След това имаме време за намиране и макс. Те са отговорни за установяването на условия за клиент да бъде забранен по подразбиране, може да се прочете, че всеки потребител с повече от 3 неуспешни опита за по -малко от 10 минути ще бъде забранен.
destemail = root @ localhost sendername = Fail2Ban mta = sendmailАко искаме да създаваме сигнали за забранени потребители, тези 3 параметъра са необходими, ще определим дестинацията, до която да изпратим имейла с предупреждение, кой ще отговаря за изпращането му, и накрая mta, за да определим каква имейл услуга ще използваме .
действие = $ (действие_) sТук ще определим какви действия да предприемете, когато се изисква забрана. Стойността action_ е действието по подразбиране се основава на отхвърляне на всеки трафик на клиент до изтичане на времето за забрана.
Ако искаме да изпратим сигнал по пощата, трябва да променим стойността на action_mw, но ако искаме също така да прикачи редове от дневника в тялото на пощата, ще използваме action_mwl. Трябва да сме сигурни, че настройките за поща са правилни, преди да промените тази стойност.
Настройки по услуга
След като глобалните конфигурации бъдат завършени, ще добавим параметрите, които ще се прилагат изключително към
SSH услуга, не забравяме да добавим опциите под маркера [SSH].
активиран = вярноПо подразбиране услугата SSH е активирана, но можем да я променим, ако е необходимо в тази опция.
Целият този раздел може да работи със стойностите, които ще опиша по -късно, но можете да промените, за да го адаптирате към вашите нужди или да ги оставите всички по подразбиране.
Друга от конфигурациите са филтрите, които показват дали влизането е било правилно или не и могат да бъдат добавени за други услуги, например имаме сървър с nginx и част от страницата е защитена с парола, но клиент атакува с груба сила , можем да спрем това, като добавим следното под маркера [nginx-http-auth].
[nginx-http-auth] активиран = истински филтър = nginx-http-auth порт = http, https logpath = /var/log/nginx/error.logСега, ако потребителят има повече от 3 неуспешни опита за влизане, той се отразява в регистрационните файлове и fail2ban ще действа и ще блокира целия потребителски трафик.
Тестова среда
След като разбрахме основите, ще направим малка тестова среда, където ще защитим SSH и Nginx чрез Fail2ban, като създадем политика за забрана, която ще ни уведомява за IP, който е забранен.
Първо ще инсталираме Nginx, ако не е инсталиран
apt-get инсталирайте nginxще инсталираме пощенска услуга за известия, тя може да бъде sendmail
apt-get install sendmailнакрая искаме нашите iptables да бъдат постоянни след зареждане, можем или да създадем скрипт rc.0, или да инсталираме пакета iptables-persistent.
apt-get install iptables-persistentТой ще бъде инсталиран.
Създаване на нашата защитна стена
След като инсталираме горното, трябва да внедрим защитна стена, така че да може да блокира трафика. Ще създам основна защитна стена в по -късни публикации. Ще говоря повече за iptables.
Ще разрешим установени връзки, сървърния трафик като актуализации и трафик, предназначен за SSH и Nginx портове. Целият оставащ трафик ще бъде отказан.
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate УСТАНОВЕН, СВЪРЗАН -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -j DROPМожем да видим промените с:
iptables -SТой трябва да даде подобен резултат.
-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 СВЪРЗАНИ, УСТАНОВЕНИ -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 ВРЪЩАНЕ
Регулиране на настройките на Fail2ban
Сега трябва да конфигурираме файла jail.local при наше удобство.
vi /etc/fail2ban/jail.localМожем да удължим времето за забрана на потребителя за поне 30 минути, не забравяйте да зададете стойността в секунди.
време на бантинг = 1800Трябва да конфигурираме имейл, който получава всички сигнали за забрана на fail2ban, нека да потърсим стойността на имейла във файла и да поставим имейла.
destemail = [email protected]Можем да променим подателя, който ще изпраща предупреждението, което обикновено поставям с името fail2ban, за да можем по -добре да филтрираме между всички регистрационни файлове.
След като трябва да променим стойността на действието, имаме 2 възможности:
- action_mw: изпраща сигнал с доклад, подобен на командата whois на забранения клиент.
- action_mwl: изпратете много по -подробно предупреждение, като включите дневник в тялото на съобщението.
В това ще използваме втория вариант:
действие =% (action_mwl) sСлед това ще отидем в секцията [SSH] и можем да редактираме максималния брой опити преди забраната, ще я оставим на 5:
maxretry = 5Ако имаме SSH услуга на порт, различен от 22, което е силно препоръчително, трябва да споменем неговия порт.
порт = 45024След това ще потърсим маркера [nginx-http-auth], ще го оставим такъв, какъвто е.
[nginx-http-auth] enabled = trueСвършихме и можем да запишем и затворим файла.
Рестартиране на услугата Fail2ban
За да бъдат приложени всички промени, препоръчвам да спрете услугата.
услуга fail2ban стопСлед това можем да ги стартираме отново
услуга fail2ban стартТова ще отнеме известно време, след около 5 минути отново можем да видим нашите правила
iptables -S
-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 СВЪРЗАН, УСТАНОВЕН -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 ВРЪЩАНЕ -A fail2ban -ssh -j ВРЪЩАНЕВиждаме как fail2ban е добавил нови правила, може да варира в зависимост от конфигурацията, която сте дефинирали в /etc/fail2ban/jail.local.
ИзводиИнсталирахме fail2ban и конфигурирахме да работи със SSH и NGINX в случай на APACHE трябва да сменим етикетите и директорията на регистрационните файлове, но това е много подобно на nginx. Ние сме конфигурирали само основите, можете да създавате филтри и много по -разширени правила, препоръчвам да прочетете малко тяхната страница с хора, конфигурационните файлове са добре коментирани, препоръчвам малко по малко да откриете всичките му функции.
Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка