SSH पर ब्रूट-फ़ोर्स हमले परेशान कर रहे हैं, इसलिए...
नमस्ते, मैं अक्षम हूँ।
Gitea को होस्ट करने वाले /var/log/auth.log को tail -f से देखते हुए, मुझे कुछ संदिग्ध प्रयास दिखे।
उदाहरण के लिए, ऐसा कुछ:
2024-12-07T16:57:39.486624+00:00 hostname sshd[392231]: Received disconnect from WireGuardSrvIP port 42552:11: Bye Bye [preauth]
VPN सर्वर की ओर से SSH लॉगिन के प्रयास हो रहे हैं। ऐसा इसलिए हो रहा है क्योंकि मैं इस Gitea सर्वर के लिए Nginx के साथ Stream प्रॉक्सी का उपयोग कर रहा हूँ।
stream {
server {
listen 2222;
proxy_pass GiteaSrvIP:2222;
proxy_timeout 1m;
proxy_connect_timeout 1s;
}
}
इस तरह, पोर्ट 2222 पर प्राप्त IP GiteaSrvIP पर अग्रेषित किए जाते हैं, लेकिन ईमानदारी से कहूँ तो मुझे अभी भी समझ नहीं आया है कि लॉग में एक अलग पोर्ट 42552 क्यों दिखाया जा रहा है, और इस आंतरिक IP से इतने सारे लॉगिन प्रयास आना अजीब लगता है।
तंत्र के अनुसार, मैं Gitea में SSH प्रोटोकॉल के साथ पुश करना चाहता हूँ, लेकिन Stream के माध्यम से प्रॉक्सी करते समय, IP:port पर प्रॉक्सी करना आवश्यक है, और मुझे लगता है कि यह इसलिए हो रहा है क्योंकि पोर्ट 2222 पर सभी SSH प्रयास GiteaSrvIP पर अग्रेषित किए जा रहे हैं।
मैं खुद भी इसे समझाते हुए उलझ गया हूँ, इसलिए...
बदमाश: मैं git.domain.tld के पोर्ट 2222 पर ssh करूँगा!
WireGuardSrv: अरे, तुम पोर्ट 2222 पर लॉगिन करने की कोशिश कर रहे हो?
WireGuardSrv: ठीक है, तो पोर्ट 2222 के सभी अनुरोध GiteaSrv पर अग्रेषित किए जाएँगे!
GiteaSrv: नहीं, मुझे तो केवल WireGuardSrv का IP दिख रहा है, और बहुत सारे SSH लॉगिन प्रयास आ रहे हैं...
मुझे WireGuardSrvIP से SSH प्रयासों की कल्पना केवल इसी तरह के प्रवाह में हो सकती है...।
लेकिन रहस्य यह है कि जब मैंने केवल पोर्ट 2222 पर प्राप्त करने और पोर्ट 2222 पर अग्रेषित करने के लिए सेट किया है, तो यह port 42552 कैसे बन गया, मुझे नहीं पता। अगर कोई वैश्विक IP से इस पोर्ट पर SSH करने की कोशिश कर रहा है, जो केवल VPN पर मौजूद IP पते के साथ है, तो भी मैं इसे समझ सकता हूँ, लेकिन...।
बेशक, मैंने SSH लॉगिन के लिए root लॉगिन को अक्षम कर दिया है और केवल सार्वजनिक कुंजी प्रमाणीकरण का उपयोग करता हूँ, इसलिए यदि इसे तोड़ दिया जाता है, तो मुझे यह जानने में दिलचस्पी होगी कि यह कैसे किया गया।
उपाय के तौर पर
यदि गंदा auth.log रहता है, तो लॉग फ़ाइल को देखना मुश्किल होगा, और सबसे बढ़कर, लॉग फ़ाइल बहुत बड़ी हो सकती है, इसलिए मैं इसे पहले ही ब्लॉक करना चाहता हूँ।
ऐसा इसलिए है क्योंकि मैं fail2ban के साथ SSH के कई लॉगिन प्रयासों को ब्लॉक कर रहा हूँ, लेकिन इससे Wireguard के माध्यम से GiteaSrvIP के लिए SSH भी अन्य लॉग के साथ मिलकर ब्लॉक हो जाएगा।
इसलिए, मैं इसे auth.log में लिखे जाने से पहले रोकना चाहता हूँ।
FreeBSD (WireGuard सर्वर) की ओर
pf की डिफ़ॉल्ट ब्लॉक नीति सेटिंग के रूप में drop का उपयोग करें।
PF: रनटाइम विकल्प
तो, डिफ़ॉल्ट नीति के रूप में Drop करें।
set block-policy drop
इससे, यदि FreeBSD की ब्लॉक नीति में कोई पैकेट फंसता है, तो उसे सीधे छोड़ दिया जाएगा।
Debian (WireGuard क्लाइंट और Gitea सर्वर) की ओर
सबसे पहले, Gitea के HTTP सर्वर और SSH के पोर्ट 22 और 2222 पर WireGuardSrvIP से आने वाले अन्य पोर्ट नंबरों से किसी भी तरह का एक्सेस आना ही अजीब है।
विशेष रूप से, पोर्ट 2222 से ऊपर के पोर्ट, जैसे 3000, डिफ़ॉल्ट स्थानीय HTTP पोर्ट के रूप में कार्य करते हैं, इसलिए इन्हें भी वास्तव में नहीं खोलना चाहिए, लेकिन मैं Gitea को पोर्ट 80 पर भी सुनना नहीं चाहता, इसलिए मैंने इसे परीक्षण अवधि के लिए पोर्ट 3000 पर खोला है।
और क्योंकि मैंने बहुत कुछ कहा है, मैंने ufw के साथ पोर्ट को इस प्रकार प्रतिबंधित किया है:
ufw deny proto tcp from WireGuardSrvIP to any port 2223:65535
ufw reload
चूंकि मैं इसे एक प्लेफुल VPS सर्वर के रूप में उपयोग करना चाहता हूँ, मैंने अस्थायी रूप से 2223:65535 की सीमा को अस्वीकार कर दिया है, और 3000/tcp को स्पष्ट रूप से खोला है।
अजीब SSH प्रयास लॉग आना बंद हो गए
इसके कारण, मुझे नहीं पता कि यह FreeBSD की ओर से ब्लॉक नीति के प्रभावी होने के कारण हुआ या ufw के साथ स्पष्ट रूप से deny करने के कारण, क्योंकि मैंने दोनों एक साथ किए थे, लेकिन auth.log में आने वाले राक्षसी लॉगिन प्रयास अब बंद हो गए हैं।
शायद, चूंकि FreeBSD की ओर से पहले से ही कुछ हद तक फ़ायरवॉल सेट था, मुझे लगता है कि ब्लॉक किए गए पैकेट REJECT के बजाय drop कर दिए गए, जिससे सभी पैकेट FreeBSD स्तर पर ही छोड़ दिए गए। मैं ऐसी उम्मीद करता हूँ।
fail2ban सेटिंग्स को फिर से कॉन्फ़िगर करना
तो, मैंने /etc/fail2ban/jail.conf को संपादित किया और
निगरानी के लिए डिफ़ॉल्ट सेटिंग्स में बहिष्कृत IP सेट किए।
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 WireGuardSrvIP
उसके बाद, मैंने sshd की सेटिंग्स को बदल दिया।
[sshd]
enabled = true
port = all
logpath = /var/log/auth.log
bantime = 10w
findtime = 1d
maxretry = 2
मैंने WireGuardSrv की तुलना में अधिक सख्त सेटिंग्स का प्रयास किया।
परिवर्तन का कारण नीचे दिया गया है:
port = all
maxretry = 2
WireGuardSrv में पोर्ट को स्पष्ट रूप से केवल ssh के रूप में सेट किया गया है, इसलिए यह केवल SSH के लिए उपयोग किए जाने वाले पोर्ट पर है, लेकिन यह सभी पोर्ट पर SSH प्रयासों की निगरानी करता है।
पुनः प्रयास के संबंध में भी, यह अधिकतम 2 बार तक सख्त है।
मैंने इसे इसलिए बदला क्योंकि मैं उत्सुक था कि यह कितनी बार पकड़ेगा, और यदि यह बहुत बार पकड़ेगा, तो मैं WireGuardSrv पर भी इसी स्तर की सेटिंग्स लागू करूँगा।
तो फिर।
मैं परिणामों का इंतजार कर रहा हूँ।