Та нэг нийгэмлэгийн нийтлэлээс OpenVPN jail хуулж, fail2ban-ыг дахин эхлүүлсэн ч ямар ч хаяг хэзээ ч блоклогддоггүй. Шалтгаан нь бараг үргэлж лог формат: Access Server стандарт шүүлтүүр хүлээдэг баталгаажуулалтын алдааны мөрүүдийг бичдэггүй. Шүүлтүүрт хүрэхээс өмнө бүртгэлүүд ер нь байгаа эсэхийг баталгаажуулаарай, учир нь загвар нь үйлчилгээ хэзээ ч бүртгээгүй зүйлтэй тохирч чадахгүй.

Энэ бол Access Server хостоос би дагадаг ажлын заавар: бүртгэлийн хэлбэрийг баталгаажуул, нэг бэхэлсэн илэрхийлэл бич, түүнийг бодит лог дээр турш, дараа нь jail-уудыг халдлагад өртсөн гадаргуугаар нь хувааж, блоклоол галт хана хүрч байгааг шалга.

Алдааны бүртгэл байгаа эсэхийг баталгаажуул

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

Дараа нь блоклоо таны үнэхээр ажиллуулдаг галт хана хүрч байгааг баталгаажуул, учир нь хэн ч хэрэгжүүлдэггүй 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 тохиргоотой бөгөөд нэг порт дээр хоёр хурдны хязгаарлагч овоолохын өмнө шалгах нь зүйтэй.

Холбоотой нийтлэлүүд