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 ക്രമീകരണങ്ങളുണ്ട്, ഒരേ പോർട്ടിൽ രണ്ട് നിരക്ക് പരിമിതപ്പെടുത്തലുകൾ അടുക്കുന്നതിന് മുമ്പ് അവ പരിശോധിക്കേണ്ടതാണ്.