Сиз жамаат жазуусунан 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 жөндөөлөрү бар, аларды бир портко эки ылдамдык чектегичин катмарлардан мурун текшерүү пайдалуу.

Тектеш макалалар