Penapis Fail2ban untuk OpenVPN Access Server: real_ip dan jail
Access Server menulis format lognya sendiri, jadi penapis standard tidak menemui apa-apa. Anchor pada real_ip, pisahkan jail mengikut permukaan dan semak bahawa alamat itu bukan proksi.
Anda menyalin OpenVPN jail daripada catatan komuniti, memulakan semula fail2ban, dan tiada alamat pernah diharamkan. Puncanya hampir selalu format log: Access Server tidak menulis baris kegagalan pengesahan yang dijangka oleh penapis standard. Sebelum menyentuh penapis, sahkan rekod itu memang wujud, kerana corak tidak boleh memadankan apa yang tidak pernah direkodkan oleh perkhidmatan.
Ini runbook yang saya ikut pada hos Access Server: sahkan bentuk rekod, tulis satu ungkapan beranchor, ujinya pada log sebenar, kemudian pisahkan jail mengikut permukaan yang diserang dan sahkan bahawa sekatan sampai ke firewall.
Sahkan bahawa rekod kegagalan wujud
Access Server menulis baris berstrukturnya sendiri ke /var/log/openvpnas.log, dan alamat klien berada dalam medan real_ip di dalam tanda petik, bukan pada permulaan baris syslog. Cari log masuk gagal yang anda tahu berlaku sebelum menulis sebarang corak:
grep -i 'LOG ERR' /var/log/openvpnas.log | tail -20Jika tiada apa yang muncul, tahap log ialah suspek seterusnya. Access Server mempunyai suis nyahpepijat pangkalan data log dalam /usr/local/openvpn_as/etc/as.conf (DEBUG_LOGDB=1), dan perkhidmatan mesti dimulakan semula selepas ia diubah. Layan suis itu sebagai tetapan diagnostik yang perlu diturunkan semula apabila corak anda siap, bukan sebagai konfigurasi kekal.
Semasa anda dalam fail itu, perhatikan permukaan mana yang menulis ke dalamnya. Kegagalan portal klien, antara muka pentadbir dan pengesahan terowong mendarat dalam fail yang sama dengan penanda berbeza, dan butiran itu menentukan susun atur jail kemudian.
Anchor satu penapis pada real_ip
Kekalkan ungkapan itu sempit. Penapis yang menuntut setiap baris yang mengandungi alamat IP akan mengharamkan orang kerana pemutusan biasa, dan pada pelayan sibuk satu-satunya gejala ialah pengguna mengadu dikunci kerana menutup komputer riba. Tuntut rekod ralat itu dan tangkap alamat di dalam tanda petik:
# /etc/fail2ban/filter.d/openvpnaccess.local
[Definition]
failregex = ^ .*LOG ERR.*"real_ip": "<HOST>".*
ignoreregex =Ruang di hadapan bukan hiasan. Access Server menjorokkan rekodnya, dan beranchor padanya menghalang corak daripada turut menuntut baris yang ditulis oleh perkhidmatan tidak berkaitan ke dalam fail yang sama. Jika rekod anda sebaliknya membawa cap masa di hadapan, padankan awalan itu, tetapi beranchor pada sesuatu yang benar-benar ada dalam setiap rekod yang anda mahu tuntut.
Apabila anda perlukan ketepatan mengikut permukaan, sempitkan lagi dengan mewajibkan penanda permukaan (WEB_CLIENT, WEB_ADMIN atau VPN) pada baris yang sama. Satu penapis dengan tiga corak lebih mudah diaudit daripada tiga penapis yang berbeza satu perkataan.
Uji ungkapan sebelum mengaktifkan jail
Jangan sekali-kali mengaktifkan penapis yang belum anda jalankan pada log pengeluaran. Ujian berdokumen melepasi penapis dua kali, sekali untuk memuat dan sekali untuk menggunakan, dan laporan baris yang terlepas ialah bahagian yang wajar dibaca:
fail2ban-regex --print-all-missed /var/log/openvpnas.log \
/etc/fail2ban/filter.d/openvpnaccess.local \
/etc/fail2ban/filter.d/openvpnaccess.local > missed.txtBandingkan bilangan padanan dengan kegagalan yang anda sahkan pada langkah pertama. Sifar padanan bermakna corak itu salah; padanan pada baris yang bukan kegagalan pengesahan bermakna ia terlalu luas. Baca missed.txt sehingga anda boleh menjelaskan setiap baris yang anda pilih untuk tidak dituntut.
Lakukan ujian ini pada salinan jika log itu besar, dan ulangi selepas setiap peningkatan Access Server. Format log ialah antara muka yang anda padankan, dan ia bukan API yang stabil.
Pisahkan jail mengikut permukaan, bukan mengikut daemon
Satu Access Server menyediakan beberapa permukaan pengesahan: antara muka web klien dan pentadbir pada 943/tcp, dan terowong pada 1194/udp atau 443/tcp dalam kebanyakan penggunaan. Satu jail yang meliputi semuanya membolehkan cubaan meneka pada terowong menyekat alamat yang juga laluan pentadbir anda, dan ia menyembunyikan permukaan mana yang sebenarnya diserang. Beri setiap permukaan jail sendiri dengan port dan ambangnya sendiri:
# /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 = 1hMulakan dengan pembilang kecil dan sekatan singkat, kemudian naikkan apabila anda memerhati seminggu trafik sebenar. Ambang yang longgar pada alamat pejabat dikongsi menghukum setiap pengguna di belakang satu NAT, dan sekatan agresif pada permukaan terowong memutuskan klien sah yang kelayakan tersimpannya tamat tempoh semalaman.
Sahkan sekatan, backend dan kerosakan sampingan
Selepas dimulakan semula, output status ialah pengesahan terpantas bahawa jail itu wujud dan mengira:
fail2ban-client status
fail2ban-client status openvpnas-tunnelKemudian sahkan bahawa sekatan sampai ke firewall yang anda benar-benar jalankan, kerana jail yang dikonfigurasikan untuk backend yang tiada siapa menguatkuasakan tidak melindungi apa-apa. Dengan tindakan iptables alamat muncul dalam rantaian yang dinamakan sempena jail (f2b-openvpnas-tunnel); dengan tindakan nftables ia masuk ke dalam set dalam jadual fail2ban sendiri. Semak yang hos anda gunakan daripada menganggapnya.
Dua pemeriksaan sampingan lebih penting daripada sekatan itu sendiri. Pertama, sahkan bahawa real_ip ialah alamat klien dan bukan penyeimbang beban atau proksi songsang; di belakang proksi setiap sekatan jatuh pada proksi dan menarik seluruh perkhidmatan bersamanya. Kedua, tuliskan prosedur nyahsekat, kerana alamat yang melepasi ambang pada 02:00 biasanya milik jurutera bertugas: fail2ban-client set openvpnas-tunnel unbanip 203.0.113.24.
Ingat hadnya semasa menala. Fail2ban ialah pengehad kadar pada satu permukaan pengesahan, bukan lapisan kawalan akses. Ia tidak menggantikan MFA, sekatan setiap akaun atau menyimpan antara muka pentadbir di luar internet awam, dan Access Server mempunyai tetapan autoban sendiri yang wajar disemak sebelum anda menyusun dua pengehad kadar pada port yang sama.