Сіз қауымдастық жазбасынан OpenVPN jail көшірдіңіз, fail2ban-ды қайта іске қостыңыз, бірақ ешбір мекенжай ешқашан бұғатталмайды. Себебі әрдайым дерлік журнал пішімінде: Access Server дайын сүзгі күтетін аутентификация сәтсіздігі жолдарын жазбайды. Сүзгіге тиюден бұрын жазбалардың бар-жоғын тексеріңіз, өйткені үлгі қызмет ешқашан жазбаған нәрсемен сәйкесе алмайды.

Бұл менің Access Server хостында ұстанатын жұмыс нұсқаулығым: жазба пішімін растау, бір бекітілген өрнек жазу, оны нақты журналда сынау, содан кейін jail-дарды шабуылға ұшыраған бет бойынша бөлу және бұғаттаудың firewall-ға жететінін тексеру.

Сәтсіздік жазбасының бар екенін растаңыз

Access Server өзінің құрылымдалған жолдарын /var/log/openvpnas.log ішіне жазады, ал клиент мекенжайы syslog жолының басында емес, тырнақшадағы real_ip өрісінде тұрады. Кез келген үлгі жазбас бұрын болғанын білетін сәтсіз кіруді іздеңіз:

grep -i 'LOG ERR' /var/log/openvpnas.log | tail -20

Егер ештеңе шықпаса, келесі күдікті журнал деңгейі. Access Server-де журнал дерекқорын жөндеу қосқышы /usr/local/openvpn_as/etc/as.conf ішінде бар (DEBUG_LOGDB=1), және оны өзгерткеннен кейін қызметті қайта іске қосу керек. Бұл қосқышты үлгіңіз дайын болғанда қайта түсірілетін диагностикалық параметр ретінде қараңыз, тұрақты конфигурация ретінде емес.

Файлда жүргенде қай беттер оған жазатынын байқаңыз. Клиент порталының, әкімшілік интерфейстің және туннель аутентификациясының сәтсіздіктері бір файлға әртүрлі маркерлермен түседі, және сол бөлшек кейінірек jail-дардың орналасуын анықтайды.

real_ip-ге бір сүзгіні бекітіңіз

Өрнекті тар ұстаңыз. IP мекенжайы бар кез келген жолды талап ететін сүзгі адамдарды қарапайым үзілістер үшін бұғаттайды, ал жүктелген серверде жалғыз симптом пайдаланушылардың ноутбукті жапқаны үшін құлыпталғанына шағымдануы. Қате жазбасын талап етіп, тырнақшадағы мекенжайды ұстаңыз:

# /etc/fail2ban/filter.d/openvpnaccess.local
[Definition]
failregex = ^ .*LOG ERR.*"real_ip": "<HOST>".*
ignoreregex =

Басындағы бос орын әшекей емес. Access Server жазбаларын шегіндіреді, және оған бекіту үлгінің сол файлға жазатын байланыссыз қызметтердің жолдарын да талап етуіне жол бермейді. Егер жазбаларыңыздың басында оның орнына уақыт белгісі болса, сол префиксті сәйкестендіріңіз, бірақ талап етпек болған әрбір жазбада шынымен бар нәрсеге бекітіңіз.

Бет бойынша дәлдік қажет болса, сол жолда бет маркерін (WEB_CLIENT, WEB_ADMIN немесе VPN) талап етіп, одан әрі тарылтыңыз. Үш үлгісі бар бір сүзгіні бір сөзбен ерекшеленетін үш сүзгіден тексеру оңайырақ.

jail-ды қоспас бұрын өрнекті сынаңыз

Өндірістік журналда іске қоспаған сүзгіні ешқашан қоспаңыз. Құжатталған тест сүзгіні екі рет өткізеді, бір рет жүктеу үшін, бір рет қолдану үшін, ал өткізіп алған жолдар туралы есеп оқуға тұрарлық бөлік:

fail2ban-regex --print-all-missed /var/log/openvpnas.log \
  /etc/fail2ban/filter.d/openvpnaccess.local \
  /etc/fail2ban/filter.d/openvpnaccess.local > missed.txt

Сәйкестік санын бірінші қадамда растаған сәтсіздіктермен салыстырыңыз. Нөл сәйкестік үлгінің қате екенін білдіреді; аутентификация сәтсіздігі болып табылмайтын жолдардағы сәйкестік оның тым кең екенін білдіреді. missed.txt файлын талап етпеуге шешім қабылдаған әрбір жолды түсіндіре алғанша оқыңыз.

Журнал үлкен болса, бұл тесті көшірмеде жасаңыз және Access Server-дің кез келген жаңартуынан кейін қайталаңыз. Журнал пішімі сіз сәйкестендіретін интерфейс, және ол тұрақты API емес.

jail-дарды бет бойынша бөліңіз, демон бойынша емес

Бір Access Server бірнеше аутентификация бетін ұсынады: 943/tcp портында клиенттік және әкімшілік веб-интерфейстер, ал көптеген орналастыруларда туннель 1194/udp немесе 443/tcp портында. Барлығын қамтитын бір jail туннельдегі болжау әрекеттеріне сіздің әкімшілік жолыңыз да болып табылатын мекенжайды бұғаттауға мүмкіндік береді және қай беттің шынымен шабуыл астында екенін жасырады. Әр бетке өз порты мен шектері бар жеке jail беріңіз:

# /etc/fail2ban/jail.d/openvpnaccess.local
[openvpnas-web-client]
enabled  = true
port     = 943
protocol = tcp
filter   = openvpnaccess
logpath  = /var/log/openvpnas.log
maxretry = 3
findtime = 10m
bantime  = 1h
[openvpnas-tunnel]
enabled  = true
port     = 443
protocol = udp
filter   = openvpnaccess
logpath  = /var/log/openvpnas.log
maxretry = 5
findtime = 10m
bantime  = 1h

Кішкентай санауыштармен және қысқа бұғаттаумен бастаңыз, бір апта нақты трафикті бақылағаннан кейін оларды көтеріңіз. Ортақ кеңсе мекенжайындағы жомарт шек бір NAT артындағы әрбір пайдаланушыны жазалайды, ал туннель бетіндегі агрессивті бұғаттау сақталған тіркелгі деректері түнде бітіп қалған заңды клиенттерді ажыратады.

Бұғаттауды, backend-ті және жанама зиянды тексеріңіз

Қайта іске қосқаннан кейін күй шығысы jail-дың бар екенін және санап жатқанын растайтын ең жылдам тәсіл:

fail2ban-client status
fail2ban-client status openvpnas-tunnel

Содан кейін бұғаттаудың сіз шынымен басқаратын firewall-ға жететінін растаңыз, өйткені ешкім орындамайтын backend үшін құрылған jail ештеңені қорғамайды. iptables әрекетімен мекенжайлар jail аты берілген тізбекте пайда болады (f2b-openvpnas-tunnel); nftables әрекетімен олар fail2ban-ның өз кестесіндегі жиынға түседі. Болжаудың орнына хостыңыз қолданатынын тексеріңіз.

Екі жанама тексеру бұғаттаудың өзінен маңыздырақ. Біріншіден, real_ip клиент мекенжайы екенін, жүктеме теңгерушісі немесе кері прокси еместігін растаңыз; прокси артында әрбір бұғаттау проксиге түседі және бүкіл қызметті өзімен бірге құлатады. Екіншіден, бұғаттауды алу рәсімін жазып қойыңыз, өйткені 02:00-де шектен асатын мекенжай әдетте кезекші инженердікі: fail2ban-client set openvpnas-tunnel unbanip 203.0.113.24.

Реттеу кезінде шекараны есте ұстаңыз. Fail2ban бір аутентификация бетіндегі жылдамдық шектегіші, қатынау бақылау қабаты емес. Ол MFA-ны, шот бойынша шектеулерді немесе әкімшілік интерфейсті ашық интернеттен тыс ұстауды алмастырмайды, және Access Server-дің өз autoban параметрлері бар, оларды бір портқа екі жылдамдық шектегішін қабаттастырмас бұрын тексерген жөн.

Қатысты мақалалар