Fail2ban көмегімен SSH-ты құпиясөзді іріктеуден қорғау
Серверіңізді брутфорс сияқты шабуылдардан қорғау үшін құпиясөздің орнына кілт арқылы аутентификацияны баптап, пайдалану ұсынылады.
Қорғаудың тағы бір тәсілі — Fail2ban құралын пайдалану. Fail2ban сервердегі қызметтердің журналдарын талдайды және күдікті әрекетті анықтаған кезде ықтимал шабуылдаушылардың IP-мекенжайларын автоматты түрде бұғаттайды. Fail2ban-ды Apache, FTP, dovecot және басқа да көптеген қызметтерді қорғау үшін қолдануға болады.
Бұл мақалада SSH қызметін құпиясөзді іріктеу шабуылдарынан қорғауға арналған Fail2ban-ның базалық баптауын қарастырамыз.
Fail2ban-ды Ubuntu/Debian жүйесіне орнату үшін келесі командаларды орындаңыз:
sudo apt update sudo apt install fail2ban -y
CentOS жүйесіне орнату үшін:
sudo yum update && yum install epel-release sudo yum install fail2ban
Содан кейін Fail2ban-ды автожүктеуге қосыңыз:
sudo systemctl enable fail2ban
Ubuntu жүйесінде SSH қорғауы орнатудан кейін бірден іске қосылады. Әдепкі бойынша, егер 10 минут ішінде аутентификацияның 5 сәтсіз әрекеті жасалса, Fail2ban IP-мекенжайларды 10 минутқа бұғаттайды.
Құралдың осы және басқа да жұмыс параметрлерін оның конфигурациялық файлдарында баптауға болады.
Fail2ban конфигурациялық файлы
Fail2ban баптаулары /etc/fail2ban/jail.conf конфигурациялық файлында сақталады.
Баптаулар бөлімдерге бөлінген. [DEFAULT] бөлімінде барлық қызметтерге қолданылатын жалпы параметрлер көрсетілген. Нақты қызметтерге арналған арнайы баптаулар [sshd], [apache-auth], [vsftpd] сияқты тиісті бөлімдерде жазылады.
Параметрлерді тікелей jail.conf файлында өзгертпеу ұсынылады. Оның орнына сол каталогта jail.local файлын жасап, өзгерістерді соған енгізіңіз.
Бастапқы файлды көшіре аласыз:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Немесе жаңа бос файл жасай аласыз:
sudo touch /etc/fail2ban/jail.local
Содан кейін jail.local файлына тек өзгерткіңіз келетін баптауларды енгізіңіз. Қалған параметрлер мәндерін jail.conf файлынан мұраға алады.
SSH қорғауын баптау
jail.local файлын өңдеуге ашыңыз:
sudo nano /etc/fail2ban/jail.local
Төмендегі мысал файлға енгізуге болатын ықтимал баптауларды көрсетеді:
[DEFAULT]
ignoreip = 95.111.123.21
[sshd]
enabled = true
findtime = 120
maxretry = 3
bantime = 43200
Бұл баптаулардың мағынасы мынадай: егер ерекшеліктер тізіміне кірмейтін IP-мекенжайдан 2 минут ішінде аутентификацияның 3 сәтсіз әрекеті болса, Fail2ban бұл мекенжайды автоматты түрде 12 сағатқа бұғаттайды.
DEFAULT секциясы бұғаттау ұзақтығы (bantime), әрекеттердің ең көп саны (maxretry) және т.б. сияқты баптауларды ұсынады. Бұл нұсқаулықта баптаулардың көпшілігін SSH-қа арналған жеке секцияда сипаттаймыз, ал DEFAULT бөлімінде тек ignoreip параметрін қалдырамыз:
- ignoreip — сәтсіз кіру әрекеттері кезінде автоматты түрде бұғатталмайтын IP-мекенжайлардың "ақ тізімі". Мұнда серверге әдетте қосылатын өз IP-мекенжайыңызды (егер ол динамикалық емес, статикалық болса) қоса аласыз. Сондай-ақ бірнеше мекенжайды бос орын арқылы бөліп немесе ішкі желі маскаларын көрсетуге болады.
Егер ақ тізімді пайдалану қажет болмаса, жолдың басына # таңбасын қосып, оны жай ғана түсініктемеге айналдыра аласыз.
[sshd] бөлімінде Fail2ban-ның нақты қызметті — SSH-ты өңдеуіне арналған баптауларды көрсете аласыз. Жүйеге байланысты бөлім [sshd], [ssh] немесе [ssh-iptables] сияқты әртүрлі атауларға ие болуы мүмкін (мұны jail.conf файлынан тексеруге болады).
Есте сақтаңыз: егер конфигурация файлында қандай да бір параметр болмаса, Fail2ban әдепкі мәндерді пайдаланады. Сондықтан тек өзгерту қажет параметрлерді ғана көрсету керек.
Мұнда баптауға арналған параметрлерді келтіреміз:
- enabled — осы секцияның қосылуын немесе өшірілуін анықтайтын міндетті параметр. Қосу үшін бұл параметрдің мәні true болуы керек, ол әдепкі бойынша орнатылған. CentOS жүйесінде бұл параметр бастапқыда түсініктемеге айналдырылғанын ескеріңіз. Егер негізгі jail.conf файлының көшірмесін өңдеп жатсаңыз, секцияны қосу үшін осы параметрдің алдындағы # таңбасын алып тастағаныңызға көз жеткізіңіз;
- bantime — секундпен берілген бұғаттау ұзақтығы, яғни күдікті IP-мекенжай бұғатталатын кезең;
- maxretry — findtime кезеңі ішіндегі сәтсіз әрекеттер саны, одан кейін бұғаттау орындалады;
- findtime — бұғаттау орындалмас бұрын оқиға (бұл жағдайда — сәтсіз қосылу әрекеті) белгілі бір рет (maxretry) қайталануы тиіс секундпен берілген кезең.
Бұдан басқа, баптауға болатын басқа да параметрлер бар, мысалы:
- port — осы қызмет, мысалы, SSH пайдаланатын порт. Егер SSH стандартты емес портты (22 емес) пайдаланса, оны осы жерде көрсетіңіз. Стандартты порт пайдаланылған жағдайда бұл параметрді көрсету міндетті емес;
- logpath — Fail2ban талдайтын лог-файлдың жолы. Әдепкі бойынша бұл — SSH логтарының стандартты жолы;
- action — IP-мекенжайды бұғаттау кезінде орындалатын әрекет. Әдепкі бойынша бұл — iptables ережелері арқылы IP-мекенжайды бұғаттау.
Осы IP-мекенжай үшін барлық порттарды бұғаттау үшін мынаны пайдалануға болады: action = iptables-allports.
Егер серверіңізде firewalld немесе ufw бапталған болса, action: firewallcmd-ipset немесе ufw үшін тиісінше сәйкес мәндерді көрсетуіңіз керек.
Қолжетімді әрекеттердің толық тізімін /etc/fail2ban/action.d каталогынан табуға болады.
Енгізілген өзгерістерді сақтағаннан кейін Fail2ban-ды қайта іске қосыңыз:
sudo systemctl restart fail2ban.service
Тексеру
Fail2ban-ды баптағаннан кейін оның жұмысын тексеру ұсынылады. Нәтижелер көрнекірек болуы үшін тексеруді баптауларды сақтағаннан кейін бірден емес, біраз уақыт өткен соң жүргізген дұрыс.
Бұғатталған IP-мекенжайларды iptables ережелерінен көруге болады:
sudo iptables -L
Сондай-ақ Fail2ban жұмысының журналдарын көруге болады:
sudo tail /var/log/fail2ban.log
Қосымша ақпаратты Fail2ban интерфейсі арқылы алуға болады:
sudo fail2ban-client status sshd