Denyhosts बनाम विफलता 2ban बनाम iptables- जानवर सेना के लोगों को रोकने के लिए सबसे अच्छा तरीका है?


62

मैं एक LAMP सर्वर स्थापित कर रहा हूं और SSH / FTP / etc को रोकने की जरूरत है। ब्रूट-फोर्स लोगन सफल होने का प्रयास करता है। मैं दोनों denyhosts और fail2ban के लिए कई सिफारिशें देख चुका हूं, लेकिन दोनों की कुछ तुलनाएं। मैंने यह भी पढ़ा कि एक IPTables नियम समान फ़ंक्शन को भर सकता है।

मैं इनमें से किसी एक विधि को दूसरे पर क्यों चुनूंगा? सर्वरफ़ॉल्ट पर लोग इस समस्या को कैसे संभालते हैं?

जवाबों:


53

IIRC, DenyHosts केवल आपकी SSH सेवा देखेंगे। यदि आपको अन्य सेवाओं की सुरक्षा के लिए इसकी आवश्यकता है, तो Fail2ban निश्चित रूप से एक बेहतर विकल्प है। यह लगभग किसी भी सेवा को देखने के लिए कॉन्फ़िगर करने योग्य है यदि आप इसके कॉन्फ़िगरेशन को ट्वीक करने के लिए तैयार हैं, लेकिन यह आवश्यक नहीं होना चाहिए क्योंकि Fail2ban के नए संस्करणों में ऐसे नियम शामिल हैं जो कई लोकप्रिय सर्वर डेमन के लिए उपयुक्त हैं। एक साधारण iptables दर की सीमा पर fail2ban का उपयोग करने से एक निर्दिष्ट समय के लिए किसी हमलावर को पूरी तरह से अवरुद्ध करने का लाभ होता है, बजाय इसके कि वह आपके सर्वर को कितनी जल्दी ठीक कर सके। मैंने कई उत्पादन सर्वरों पर महान परिणामों के साथ विफलता 2ban का उपयोग किया है और जब से मैंने इसका उपयोग करना शुरू किया है, तब से उन सर्वरों में से एक को ब्रूट बल के हमले से भंग होते नहीं देखा है।


3
ध्यान दें कि DenyHosts अन्य सेवाओं को अवरुद्ध कर देगा - मुख्य अंतर यह है कि fail2ban iptables का उपयोग करता है जबकि DenyHosts hosts.deny का उपयोग करता है, कुछ सेवाएँ Apache जैसे होस्ट फ़ाइलों को नहीं देखती हैं।
jammypeach

मेज पर एक और विकल्प फेंकने के लिए, मैंने हाल ही में पता लगाया कि ufw फ़ायरवॉल विन्यासकर्ता आपको किसी भी टीसीपी या यूडीपी पोर्ट के लिए एक (अपुष्ट) दर सीमा लागू करने की अनुमति देता है। यदि आप पहले से ही यूएफडब्ल्यू का उपयोग कर रहे हैं, तो यह अतिरिक्त डेमॉन को कॉन्फ़िगर करने और चलाने के बजाय एक अच्छा विकल्प हो सकता है।
spiffytech

Bruteforce उल्लंघनों को रोकने के लिए पहली बात यह है कि यथोचित रूप से मजबूत पासवर्ड का उपयोग किया जाता है (या पासवर्ड को पूरी तरह अक्षम करना :)। दर-सीमित (अकेला) उसके लिए कमजोर है। मैंने विकल्पों की कोशिश नहीं की, लेकिन मैं स्वयं असफल 2 वेबन का उपयोग करता हूं और इसे पासवर्ड प्रोबिंग बॉट्स को बंद करने के लिए उपयोगी पाया।
पेट्र ग्लैडिख

मेरे अनुभव में, फेल 2 एबन को वास्तव में कुछ भी करने के लिए थोड़ा और काम करने की आवश्यकता है। इसके विपरीत, आप बहुत अधिक डेनिमहॉस्ट आरपीएम को स्थापित कर सकते हैं और अपने सर्वर की सुरक्षा के लिए इसे शुरू कर सकते हैं जब आप अधिक जटिल विकल्पों को काम करते हैं। मैं निश्चित रूप से मानता हूं कि असफल 2 '' बेहतर '' है, लेकिन आसान सुरक्षा के लिए, आप इनकार नहीं कर सकते।
राल्फ बोल्टन

21

जानवर सेना के लोगों को रोकने के लिए सबसे अच्छा तरीका है?

उन्हें पहली बार में अपनी मशीन के लिए मत जाओ! ब्रूट बल प्रयासों को रोकने के लिए बहुत सारे तरीके हैं इससे पहले कि वे आपके होस्ट पर जाएं, या एसएसएच स्तर पर भी।

कहा है कि, आपके ऑपरेटिंग सिस्टम को फेल 2ब्बन जैसी किसी चीज से बचाना एक बेहतरीन विचार है। Fail2ban DenyHosts से थोड़ा अलग है, हालांकि वे एक ही स्थान पर खेलते हैं। Fail2ban iptables का उपयोग करता है।

http://en.wikipedia.org/wiki/Fail2ban

Fail2ban DenyHosts के समान है ... लेकिन DenHHosts के विपरीत, जो SSH पर केंद्रित है, fail2ban किसी भी सेवा पर नजर रखने के लिए कॉन्फ़िगर किया जा सकता है, जो लॉग फाइल के लिए लॉगिन प्रयास लिखता है, और इसके बजाय /etc/hosts.den/ का उपयोग केवल IP पते / होस्ट को ब्लॉक करने के लिए किया जाता है , fail2ban Netfilter / iptables और TCP Wrappers /etc/hosts.deny का उपयोग कर सकते हैं।

कई महत्वपूर्ण सुरक्षा तकनीकें हैं जिनके बारे में आपको ब्रूट फोर्स लॉगिन को रोकने में मदद करने पर विचार करना चाहिए:

SSH:

  • रूट को लॉगिन करने की अनुमति न दें
  • Ssh पासवर्ड की अनुमति न दें (निजी कुंजी प्रमाणीकरण का उपयोग करें)
  • हर इंटरफ़ेस पर मत सुनो
  • SSH (उदाहरण के लिए eth1) के लिए एक नेटवर्क इंटरफ़ेस बनाएँ, जो आपके द्वारा अनुरोध किए गए इंटरफ़ेस से भिन्न है (जैसे eth0)
  • आम उपयोगकर्ता नाम का उपयोग न करें
  • अनुमति सूची का उपयोग करें, और केवल उन उपयोगकर्ताओं को अनुमति दें जिनके लिए एसएसएच एक्सेस की आवश्यकता है
  • यदि आपको इंटरनेट एक्सेस की आवश्यकता है ... आईपी के एक सीमित सेट तक पहुंच को प्रतिबंधित करें। एक स्थिर आईपी आदर्श है, हालांकि इसे xx0.0 / 16 तक लॉक करना 0.0.0.0/0 से बेहतर है
  • यदि संभव हो तो इंटरनेट एक्सेस के बिना कनेक्ट करने का एक तरीका ढूंढें, उस तरह से आप SSH के लिए सभी इंटरनेट ट्रैफ़िक से इनकार कर सकते हैं (जैसे AWS के साथ आप एक सीधा कनेक्शन प्राप्त कर सकते हैं जो इंटरनेट को बायपास करता है, इसे डायरेक्ट कनेक्ट कहा जाता है)
  • किसी भी क्रूर बल के हमलों को पकड़ने के लिए विफलता 2ban जैसे सॉफ़्टवेयर का उपयोग करें
  • सुनिश्चित करें कि OS हमेशा अद्यतित है, विशेष रूप से सुरक्षा और ssh संकुल में

आवेदन:

  • सुनिश्चित करें कि आपका आवेदन हमेशा अद्यतित है, विशेष रूप से सुरक्षा पैकेज में
  • अपना एप्लिकेशन 'व्यवस्थापक' पृष्ठ लॉक करें। ऊपर दी गई कई सलाह आपके आवेदन के व्यवस्थापक क्षेत्र पर भी लागू होती हैं।
  • पासवर्ड अपने व्यवस्थापक क्षेत्र को सुरक्षित रखें, वेब कंसोल के लिए htpasswd जैसा कुछ अंतर्निहित अंतर्निहित कमजोरियों को प्रोजेक्ट करेगा और प्रवेश के लिए एक अतिरिक्त अवरोध पैदा करेगा
  • फ़ाइल अनुमतियाँ लॉक करें। 'अपलोड फोल्डर' सभी प्रकार के गंदे सामान के प्रवेश बिंदु होने के लिए कुख्यात हैं।
  • अपने एप्लिकेशन को एक निजी नेटवर्क के पीछे रखने पर विचार करें, और केवल अपने फ्रंट-एंड लोड बैलेंसर और एक जंपबॉक्स को उजागर करें (यह VPC का उपयोग करके AWS में एक विशिष्ट सेटअप है)

1
क्या आप इस कथन पर विस्तार से बता सकते हैं कि "आपके मेजबान को, या यहाँ तक कि SSH स्तर पर भी ब्रूट बल के प्रयासों को रोकने के बहुत सारे तरीके हैं।" मुझे विशेष रूप से दिलचस्पी है अगर आपके पास होस्ट की गई मशीनों के लिए कोई सुझाव है जहां आपके पास बाहरी नेटवर्किंग पर नियंत्रण नहीं है। धन्यवाद!
केविन कीन

7

मैं समान आईपी पते (मुख्य रूप से SSH) से नए कनेक्शनों को रेट-लिमिट करने के लिए iptables नियमों का उपयोग करता हूं, लेकिन यह FTP के लिए भी ठीक काम करेगा। लाभ, जैसा कि मैं इसे देखता हूं, "fail2ban" और इस तरह के अन्य उपकरणों से अधिक यह है कि iptables मार्ग पूरी तरह से कर्नेल मोड में होता है और लॉग फाइल को पूंछ / पार्स करने के लिए किसी भी उपयोगकर्ता मोड टूल पर भरोसा नहीं करता है।

सैकड़ों विफल ssh लॉगिन

यदि आप ऐसा कर सकते हैं, तो स्रोत पते को सीमित करना जो प्रश्न में प्रोटोकल्स तक पहुंच सकते हैं, जाहिर है, साथ ही मदद भी करते हैं।

SSH के साथ, आपको वास्तव में प्रमाणपत्र प्रमाणीकरण का उपयोग करना चाहिए और वैसे भी पासवर्ड स्वीकार नहीं करना चाहिए।


@ mc0e - मैं पीछा नहीं कर रहा हूँ।
इवान एंडरसन

7

SSH (मैंने एक दशक या उससे बेहतर समय के लिए इसका इस्तेमाल किया है) के लिए सभी महान कार्य मूल रूप से iptables में हाल के पुस्तकालयों का उपयोग करना है (आपके डिस्ट्रो पर निर्भर करता है)।
मूल रूप से इसे iptables में निर्मित दस्‍तावेजों को पोर्ट नॉकिंग के रूप में उपयोग किया जा सकता है। यह आपको बहुत सारे सिरदर्द से बचाएगा। जब तक आप कनेक्ट कर सकते हैं तब तक (टेलनेट एक तरह से है। मैंने भी ssh क्लाइंट का उपयोग किया है और उन्हें पोर्ट पर इंगित किया है। कुछ भी जो निर्दिष्ट पोर्ट नंबर पर tcp कनेक्शन करेगा। मैं आपको पोटीन से देख रहा हूँ!)। ग्राहक ssh कनेक्शन आरंभ करके आप इसका उपयोग कर सकते हैं।

नीचे एक उदाहरण दिया गया है जिसमें आपके होस्ट के लिए iptables ओपन पोर्ट 22 होगा जब आप अपने होस्ट से सर्वर पर 4103 पोर्ट 4103 पर टेलनेट करेंगे। फिर आप sed ओपनिंग को बंद करने के लिए टेलनेट का उपयोग 4102 या 4104 पोर्ट के लिए कर सकते हैं। 4102 और 4104 दोनों का कारण 22 खोलने से एक साधारण टीसीपी स्कैन रखना है। 4103 पोर्ट करने के लिए केवल एक टीसीपी कनेक्ट (टेलनेट) आपको अंदर जाने देगा।

का आनंद लें!

ओह और मैं Fail2Ban का पक्ष लेता हूं। अधिक लचीलापन और मुझे यह पसंद है कि प्रतिबंध tcpwrappers के बजाय iptables में होता है।

SSH PORTKNOCKING

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP

6

Fail2ban और Denyhosts के बीच एक और अंतर यह है कि Denyhosts अन्य Denyhosts उपयोगकर्ताओं के साथ ब्लॉक सूची साझा कर सकता है। Fail2ban के साथ, आप केवल उन IP को ब्लॉक कर सकते हैं जिन्हें आपके सर्वर ने पहले देखा है - Denyhosts के साथ, एक क्रूर-बल प्रयास कभी भी आपके सर्वर को नहीं मिल सकता है, अगर किसी और ने इसे देखा है, और हमलावर से पहले ब्लॉक सूची आपके सर्वर पर डाउनलोड हो गई है आपके कंप्यूटर पर जाता है।

फिर भी एक और अंतर यह है कि Fail2ban iptables का उपयोग करता है, जबकि Denyhosts tcpwrappers का उपयोग करता है। दूसरों ने पहले इस अंतर का उल्लेख किया है, लेकिन ध्यान देने योग्य कुछ साइड नोट्स हैं।

iptables सीमित है कि आप कितने आईपी एड्रेस को कुशलता से ब्लॉक कर सकते हैं। शायद यही कारण है कि फेल 2बान में ब्लॉक सूचियों को साझा करने के लिए एक तंत्र नहीं है।

एक और प्रभाव यह है कि जब iptables को nftables से बदल दिया जाता है, तो Fail2ban शायद काम करना बंद कर देगा या फिर से लिखने की आवश्यकता होगी। Denyhosts संभवतः काम करना जारी रखेंगे।

तो, दोनों के फायदे और कमियां हैं। मुझे दोनों पसंद हैं; अपने लिए, मैं डेनिहोस्ट का उपयोग कर रहा हूं क्योंकि आमतौर पर मैं केवल एसएसएच की रक्षा करना चाहता हूं, और मुझे ब्लॉक सूची साझा करना पसंद है।


5

Fail2Ban के बारे में एक बात ध्यान रखें कि यह DenyHosts की तुलना में लगभग 10MB अधिक मेमोरी का उपयोग करता है। इसलिए यदि आप 128MB VPS पर हैं तो आप उस पर गौर करना चाहते हैं। इसके अलावा, आउट-ऑफ-द-बॉक्स फेल 2बान केवल एसएसएच पर सेटअप है, जिसका अर्थ है कि कॉन्फ़िगरेशन में कोई बदलाव नहीं होने के साथ - डेनिहोस्ट कम मेमोरी में एक ही काम करता है।


2
"Ulimit -s 256" को / etc / default / fail2ban पर जोड़ने का प्रयास करें। मेरे सिस्टम पर 10MB कम किया।
शाम

3

denyhosts ssh के लिए है। fail2ban अधिक व्यापक (HTTP, FTP, आदि) है। दोनों पर्दे के पीछे का उपयोग करते हैं।


"Denyhosts" और "fail2ban" दोनों अपने "अवरुद्ध" व्यवहार को पूरा करने के लिए iptables का उपयोग करते हैं, लेकिन वे iptables का उपयोग दर-सीमा तक नहीं करते हैं। वे लॉग को "उपयोगकर्ता भूमि" में पार्स करते हैं और लॉग प्रविष्टियों पर कार्य करते हैं।
इवान एंडरसन

10
@ इवान, डेनिहोस्ट आईपीपटल्स (डिफ़ॉल्ट रूप से) का उपयोग नहीं करते हैं। यह टीसीपी रैपर का उपयोग करता है और आपके /etc/hosts.deny को अपडेट करता है जब एक सिस्टम को प्रतिबंधित किया जाना है।
Zoredache

@Zoredache: मैं सही खड़ा हूँ। इससे पहले कि "denyhosts" का उपयोग करने के बाद, मैंने इस बारे में गलत धारणा बनाई कि यह अपनी "अवरुद्ध" कार्यक्षमता को कैसे लागू करता है। फिर भी, एक उपयोगकर्ता लॉग-पार्सिंग / प्रतिक्रिया उपकरण होने के नाते, मैं "denyhosting" के लिए सख्ती से iptables- आधारित समाधान का उपयोग करना पसंद करूंगा।
इवान एंडरसन

1

थकाऊ iptables या fail2ban config के साथ गड़बड़ करने के बजाय, खुले समुदाय ने आपके लिए सभी काम क्यों नहीं किए हैं, और इसके बजाय CSF / LFD का उपयोग करें? मैं अन्य सभी उल्लिखित विकल्पों के ऊपर इसकी अत्यधिक अनुशंसा कर सकता हूं। Http://configserver.com/cp/csf.html देखें कि यह आपके सर्वर के लिए क्या कर सकता है। CSF को एक कंट्रोल-पैनल की आवश्यकता नहीं है, यह एक सरल यूआई स्वयं प्रदान करता है, उन लोगों के लिए जो इसे शेल द्वारा नहीं करना चाहते हैं। और यह स्थिर विश्वसनीय गैर-निवासी पर्ल-स्क्रिप्टिंग का एक बहुत कुछ है।


8
यह एक विज्ञापन की तरह लग रहा है, और वास्तविक सवाल पर चमक रहा है।
ड्रू खोरी

खैर नहीं, मैं वास्तविक सवाल पर नहीं चमका। मैंने एक विकल्प दिया, जो आपको इस सवाल से खुद को परेशान करने से रोक सकता है। गंभीरता से, CSF / LFD केवल एक और फ़ायरवॉल नियंत्रण प्रणाली नहीं है, यह ठीक यहाँ से दूर के मुद्दों के प्रकार से बढ़ी है। कोई भी क्यों विकसित नहीं होना चाहेगा? यह आपको बहुत समय बचाता है, क्योंकि अन्य लोग इसे पहले ही हल कर चुके हैं। इसलिए CSF मौजूद है।
बेन

इसकी कीमत क्या है, क्योंकि कोई व्यक्ति जो मेरे समय की कमाई की क्षमता को महत्व देता है, अगर कीमत सही है, तो मुझे इस तरह की चीज के लिए "प्लग 'एन प्ले" समाधान करना होगा, भले ही इसकी कीमत कुछ डॉलर हो। इस तरह मुझे उस सामान के बारे में जानने में समय बर्बाद करने की ज़रूरत नहीं है जिसकी मुझे वास्तव में परवाह नहीं है, लेकिन संरक्षण होने के महत्व को पहचानें।
डेविड

1

fail2ban एक सफल ssh लॉगिन को पहचानने और विफलताओं की अपनी संख्या को रीसेट करने के लिए एक तंत्र नहीं है।

Sshd के लिए मानक फ़िल्टर (कम से कम मेरे डेबियन इंस्टॉल पर), प्रत्येक ssh कुंजी के लिए विफलता की गणना करता है जो क्लाइंट प्रस्तुत करता है जिसे सर्वर अस्वीकार करता है। कुछ उपयोगकर्ता हर लॉगिन पर कई चाबियां पेश करते हैं और नियमित रूप से लॉक आउट हो जाते हैं, बावजूद इसके लॉगइन सफल होने के बाद कुछ कुंजी एक बार गई थी।

उपरोक्त के परिणामस्वरूप, मैं वर्तमान में विफलता 2ban से दूर जाने के बारे में सोच रहा हूं। इस संबंध में, कम से कम, denyhosts बेहतर है। हालांकि, यह स्पष्ट रूप से अब एक अच्छा विकल्प नहीं है, और अब डेबियन के अधिक संस्करणों में समर्थित नहीं है ( https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for पर कुछ चर्चा) डेबियन / )

मैं यहाँ एक अच्छा समाधान नहीं है।


यदि आप LDAP प्रमाणीकरण का उपयोग करते हैं तो एक समान समस्या है। बहुत से सफल लॉगिन आपको लॉक होने का कारण बनेंगे
माइक

प्रस्तुत की जा रही सभी कुंजियों को रोकने के लिए, अपने उपयोगकर्ताओं को उनकी ~ / .ssh / config फ़ाइल में उपयोग की जाने वाली कुंजी को निर्दिष्ट करने का तरीका दिखाएं।
बिलथोर

0

वास्तव में, मुझे लगता है कि डेनिहोस्ट sshd सेवा के अलावा कई अन्य सेवाओं को रोकने में सक्षम है। इसकी कॉन्फ़िगर फ़ाइल में - /etc/denyhosts.confकोड की कुछ पंक्तियाँ हैं:

# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY
#
# man 5 hosts_access for details
#
# eg.   sshd: 127.0.0.1  # will block sshd logins from 127.0.0.1
#
# To block all services for the offending host:  
BLOCK_SERVICE = ALL
# To block only sshd:
# BLOCK_SERVICE  = sshd

इसलिए अगर हम BLOCK_SERVICEवैरिएबल सेट करते हैं तो हम ALLअपनी ssh सेवा को देख सकते हैं।


0

Denyhosts संस्करण 3.0: एक लॉग फ़ाइल में हर बार एक IP पता दिखाई देने पर, Denyhosts होस्टेस फ़ाइल खोलता है और पते से मिलान करने के लिए पूरी बात पढ़ता है। हर बार। स्मृति में कुछ भी नहीं छाया हुआ है। यदि आपके पास एक विशाल hosts.deny फ़ाइल है और कई जांच (कई लॉग फ़ाइल प्रविष्टियों) के अधीन हैं, तो Denyhosts एक CPU हॉग रीडिंग बन जाता है और दिखाई देने वाले प्रत्येक आईपी पते के लिए hosts.deny फ़ाइल को फिर से पढ़ता है। अच्छा नही।

यदि आप iptables समर्थन सक्षम करते हैं, तो Denyhosts अवरुद्ध IP पतों की विशाल, धीमी सूचियाँ बनाएगा। Denyhosts ipset या nftables का उपयोग कुशल IP मैप बनाने के लिए नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.