OpenVPN Access Server साठी Fail2ban फिल्टर: real_ip आणि jail
Access Server स्वतःचे लॉग स्वरूप लिहितो, त्यामुळे स्टॉक फिल्टर काहीच शोधत नाहीत. real_ip वर अँकर करा, पृष्ठभागानुसार jail वेगळे करा आणि पत्ता प्रॉक्सी नाही याची खात्री करा.
तुम्ही समुदाय पोस्टमधून एक 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 सेटिंग्ज आहेत जी एकाच पोर्टवर दोन दर मर्यादक रचण्यापूर्वी तपासण्यासारखी आहेत.