लिनक्स सर्वरों को सुरक्षित करना: iptables बनाम विफल 2ban


10

मैं लिनक्स सर्वर सुरक्षा के बारे में समुदाय के मस्तिष्क को चुनना चाहता हूं, विशेष रूप से जानवर बल के हमलों के बारे में और कस्टम iptables बनाम विफलता 2ban का उपयोग करना ।

वहाँ कुछ इसी तरह के सवाल हैं, लेकिन उनमें से कोई भी विषय को मेरी संतुष्टि के लिए संबोधित नहीं करता है। संक्षेप में, मैं ब्रूट-फोर्स हमलों से इंटरनेट पर उजागर होने वाले लिनक्स सर्वर (सामान्य सेवाओं, ssh, वेब, मेल) को चलाने के लिए सबसे अच्छा समाधान निर्धारित करने का प्रयास कर रहा हूं।

मेरे पास सर्वर सुरक्षा पर एक सभ्य हैंडल है, यानी रूट या पासवर्ड लॉगिन की अनुमति न देकर ssh को लॉक करना, डिफ़ॉल्ट पोर्ट को बदलना, सॉफ्टवेयर सुनिश्चित करना, लॉग फाइलों की जांच करना, केवल कुछ मेजबानों को सर्वर तक पहुंचने और सुरक्षा का उपयोग करने की अनुमति देना सामान्य सुरक्षा अनुपालन के लिए लिनिस ( https://cisofy.com/lynis/ ) जैसे उपकरण का ऑडिट करना, इसलिए यह सवाल जरूरी नहीं है कि हालांकि इनपुट और सलाह का हमेशा स्वागत है

मेरा प्रश्न यह है कि मुझे कौन से समाधान का उपयोग करना चाहिए (असफल 2 आईएनबी या आईपैबल्स), और मुझे इसे कैसे कॉन्फ़िगर करना चाहिए, या क्या मुझे जानवर-बल के हमलों के खिलाफ सुरक्षित करने के लिए दोनों के संयोजन का उपयोग करना चाहिए?

विषय के बारे में एक दिलचस्प प्रतिक्रिया है ( Denyhosts बनाम fail2ban बनाम iptables- ब्रेट फोर्स लोगो को रोकने का सबसे अच्छा तरीका? )। मेरे लिए व्यक्तिगत रूप से सबसे दिलचस्प जवाब ( https://serverfault.com/a/128964 ) था, और कि कर्नेल में iptables रूटिंग विफल 2ban के विपरीत होती है जो लॉग फ़ाइलों को पार्स करने के लिए उपयोगकर्ता मोड टूल का उपयोग करता है। Fail2ban निश्चित रूप से iptables का उपयोग करता है, लेकिन इसे अभी भी लॉग फाइल को पार्स करना है और जब तक यह एक क्रिया नहीं करता है तब तक एक पैटर्न से मेल खाता है।

क्या यह समझ में आता है कि IPtables का उपयोग करें और एक अवधि के लिए IP से अनुरोध छोड़ने के लिए रेट-लिमिटिंग ( https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/ ) का उपयोग करें। उस समय के लिए जो किसी प्रोटोकॉल से जुड़ने का प्रयास कर रहा था, इसकी परवाह किए बिना एक विशिष्ट अवधि के दौरान कई कनेक्शन प्रयास करता है? यदि हां, तो यहाँ उन पैकेटों के लिए ड्रॉप बनाम रिजेक्ट का उपयोग करने के बारे में कुछ दिलचस्प विचार हैं ( http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject ), उस पर कोई विचार?

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

यहां लक्ष्य दैनिक लॉगवॉच रिपोर्ट को खोलना है और सर्वर से जुड़े असफल कनेक्शन के पृष्ठों को स्क्रॉल करना नहीं है।

समय लेने के लिए शुक्रिया।


जवाबों:


21

क्या मुझे विफल 2 बटन या iptables का उपयोग करना चाहिए?

आप फ़ायरवॉल समाधान के अलावा fail2ban का उपयोग करते हैं, उन मौजूदा फ़ायरवॉल नियमों को ऑन-डिमांड बढ़ाने के लिए, नियमों के साथ उन मौजूदा फ़ायरवॉल सिस्टमों के विशिष्ट आईपी-पते को ब्लॉक करने के लिए जो अन्यथा सार्वजनिक सेवाओं पर अवांछनीय कार्य करते हैं। वे एक-दूसरे के साथ मिलकर काम करते हैं।

सरलीकृत: एक फ़ायरवॉल केवल नेटवर्क कनेक्शन और पैकेट देखता है और उसमें कुछ पैटर्न बना सकता है, लेकिन इसमें दुर्भावनापूर्ण, विकृत और अवांछनीय अनुरोधों से वांछित और वैध अनुरोधों को अलग करने के लिए आवेदन स्तर की जानकारी नहीं है। उदाहरण के लिए, आपका फ़ायरवॉल HTTP API अनुरोधों के एक समूह और ब्रूट फ़ोर्स पासवर्ड के कारण कई गलत लॉगिन प्रयासों के बीच अंतर को आपके वर्डप्रेस व्यवस्थापक पृष्ठ पर अनुमान लगाने के कारण नहीं बता सकता है, फ़ायरवॉल के लिए वे दोनों केवल 80 या 443 पोर्ट के लिए टीसीपी कनेक्शन हैं।

Fail2ban कुछ हद तक अप्रत्यक्ष रूप से आपके फ़ायरवॉल के लिए आवेदन स्तर की जानकारी प्रदान करने के लिए एक सामान्य और एक्स्टेंसिबल दृष्टिकोण है।
बार-बार आवेदन इस तरह के रूप में दुर्भावनापूर्ण, विकृत और अवांछनीय अनुरोधों को पंजीकृत करेंगे और लॉग करेंगे, लेकिन शायद ही कभी उनके पास आगे के दुरुपयोग को रोकने की मूल क्षमता होगी। हालांकि यह थोड़ा कम हो जाता है Fail2ban फिर उन लॉग दुर्भावनापूर्ण घटनाओं पर कार्रवाई कर सकता है और नुकसान को सीमित कर सकता है और आगे के दुरुपयोग से इनकार करने के लिए आमतौर पर अपने फ़ायरवॉल को गतिशील रूप से पुन: कॉन्फ़िगर करके दुर्व्यवहार को रोक सकता है। दूसरे शब्दों में, Fail2ban आपके मौजूदा अनुप्रयोगों को देता है, उन्हें संशोधित किए बिना, दुरुपयोग को रोकने का साधन।

आवेदन स्तर की अंतर्दृष्टि के साथ फायरवॉल प्रदान करने के लिए एक अलग विधि एक घुसपैठ का पता लगाने / रोकथाम प्रणाली के माध्यम से होगी


उदाहरण के लिए एक वेबसर्वर एक आम सार्वजनिक सेवा है और आपके फ़ायरवॉल टीसीपी पोर्ट में 80 और 443 बड़े पैमाने पर इंटरनेट के लिए खुले हैं।
सामान्यतया आपके पास HTTP / HTTPS पोर्ट पर कोई रेट-लिमिटिंग नहीं होती है क्योंकि कई वैध उपयोगकर्ताओं के पास एक ही मूल हो सकता है जब वे NAT गेटवे या वेब प्रॉक्सी के पीछे होते हैं।

जब आप अपने वेबसर्वर के प्रति अवांछनीय और / या दुर्भावनापूर्ण कार्यों का पता लगाते हैं, तो आप ऐसे अपराधी को अवरुद्ध करने के लिए विफल (2) का उपयोग करते हैं (या तो उन्हें पूरी तरह से अवरुद्ध करते हैं या केवल पोर्ट 80 और 443 तक उनकी पहुंच को लॉक करके)।

पर दूसरी ओर SSH का उपयोग एक सार्वजनिक सेवा नहीं है, लेकिन अगर आप एक स्थिति केवल सफेद सूचीबद्ध आईपी-पता श्रेणी के लिए अपने फ़ायरवॉल में SSH उपयोग को सीमित करने के लिए नहीं कर रहे हैं, दर-सीमित इनकमिंग कनेक्शन एक ही रास्ता है धीमा जानवर -फोर्स अटैक। लेकिन आपका फ़ायरवॉल अभी भी 5 बार सफलतापूर्वक लॉग इन करने वाले उपयोगकर्ता बॉब के बीच अंतर नहीं कर सकता है क्योंकि वह एक चलायमान प्लेबुक चला रहा है और 5 बॉट द्वारा रूट के रूप में लॉग इन करने के असफल प्रयास हैं।


यह वह अंतर्दृष्टि है जिसकी मुझे तलाश थी, यह मेरे लिए एकदम सही समझ में आता है, समय निकालने के लिए धन्यवाद।
किंगमिलो

2
हालांकि अनुप्रयोग फ़ायरवॉल (अनुप्रयोग गेटवे के रूप में भी जाना जाता है) जो गहरे पैकेट निरीक्षण कर सकते हैं।
गार्डेनहेड

@gardenhead ने सहमति व्यक्त की, और +1; की वजह से iptablesओ पी मैं ने उल्लेख किया कर्नेल में लिनक्स packetfilter निर्माण पर मुख्य रूप से ध्यान केंद्रित किया गया था। मेरे "राय" में आवेदन फायरवॉल उन पैकेटों का निरीक्षण नहीं करते हैं जो वे आवेदन प्रोटोकॉल के बारे में जानते हैं और पूर्ण अनुरोध का निरीक्षण करना चाहिए। वेब में आप फिर अपाचे के mod_security, F5 और Bluecoat उपकरणों और यहां तक ​​कि "विनम्र" रिवर्स प्रॉक्सी जैसे उत्पादों के साथ व्यवहार करते हैं
HBruijn

@Hruijn तुम सही हो - मैंने पैकेट शब्द का दुरुपयोग किया। मुझे इस बात का विवरण नहीं है कि आवेदन गेटवे कैसे बनाए जाते हैं, लेकिन मुझे लगता है कि वे निरीक्षण + अग्रेषण से पहले एक पूर्ण आवेदन-लेयर संदेश को एक साथ रखने के लिए पर्याप्त पैकेट प्राप्त करने की प्रतीक्षा करेंगे।
बागीचा १

1
Protip: ssh के लिए iptables हाल के मॉड्यूल का उपयोग करें , भले ही आप अन्य सेवाओं के लिए fail2ban का उपयोग करें। दिलचस्प विफलता मोड हो सकते हैं जहां नियमों को ठीक से साफ नहीं किया जाता है, और इससे प्रभावित होने वाले लॉगिन वास्तव में कष्टप्रद होंगे (और समस्या को डीबग करना भी कठिन बनाते हैं)। साथ हाल ही में , वास्तविक नियम परिवर्तन की जरूरत नहीं है, तो आप उपयोग कर सकते वापस पाने का एक अच्छा मौका है।
साइमन रिक्टर

8

क्या मुझे विफल 2 बटन या iptables का उपयोग करना चाहिए?

यह कुछ हद तक पूछने के लिए समान है "क्या मुझे सीटबेल्ट या कार का उपयोग करना चाहिए?"।

सबसे पहले, याद रखें कि असफल 2 चैनल वास्तव में केवल एक उपकरण है जो पाठ फ़ाइलों में आवर्ती प्रविष्टियों का स्वचालित रूप से पता लगाता है और जब वे निर्दिष्ट सीमा को पूरा करते हैं तो कुछ कमांड निष्पादित करते हैं।

हम अक्सर मेजबान को अवरुद्ध करने के लिए इसका उपयोग करते हैं जो कुछ नीतियों का उल्लंघन करते हैं जैसा कि आवर्ती लॉग प्रविष्टियों से पता चलता है जो एक नीति उल्लंघन का संकेत देते हैं, लेकिन यह केवल एक चीज नहीं है जिसके लिए आप इसका उपयोग कर सकते हैं।

आप कर सकते हैं जोड़ने के लिए fail2ban का उपयोग करें (और निकालने के लिए) की मांग पर नियम iptables। आप हाथ से iptables नियम भी जोड़ या हटा सकते हैं, या आप अनुक्रिया में पूरी तरह से अलग कुछ करने के लिए fail2ban का उपयोग कर सकते हैं। आप इसे कैसे कॉन्फ़िगर करते हैं, इसके बारे में सब कुछ है।

चाहे आप fail2ban चल रहे हों या नहीं, आपके पास सामान्य फ़ायरवॉल होना चाहिए। इस तरह के फ़ायरवॉल, उदाहरण के लिए, आने वाले (आने वाले या बाहर जाने वाले) ट्रैफ़िक को ब्लॉक करने के लिए होंगे, जो आप जानते हैं कि कभी भी वैध नहीं होगा। उदाहरण के लिए, क्या उस डेटाबेस सर्वर को वास्तव में पूरे इंटरनेट से पोर्ट 25 पर आने वाले कनेक्शन से निपटने की आवश्यकता है?

उसके ऊपर, कुछ समय के लिए आपत्तिजनक IP (ओं) को काटकर, नीति उल्लंघन का जवाब देने में विफल 2ban प्रति सेकंड आपके सर्वर को सुरक्षित करने के लिए बहुत कुछ नहीं करेगा (एक अच्छा फायदा केवल आपके फ़ायरवॉल को एक बार प्राप्त करने की आवश्यकता है) लेकिन यह होगा आपके सिस्टम पर शोर स्तर पर कटौती, सहित, लेकिन सिस्टम लॉग में सीमित नहीं है। ऐसा करने का सरल तरीका है कि कुछ समय के लिए पैकेट को गिराने के लिए कर्नेल को कॉन्फ़िगर करने के लिए विफल 2 आईबेट रन iptables होना चाहिए। यदि आप केवल मेजबान फ़ायरवॉल के बजाय अपने परिधि फ़ायरवॉल को फिर से कॉन्फ़िगर कर सकते हैं, तो केवल इतना बेहतर है।

दूसरे शब्दों में, इस हद तक कि वे आसानी से पहली जगह में अलग हो सकते हैं, आप दोनों चाहते हैं।

क्या यह ओवरकिल हो सकता है यदि मैं प्राप्त करने की कोशिश कर रहा हूं, तो सर्वर से एक आईपी को 'ब्लॉक' करना है अगर वे समय की कुल्हाड़ी से अधिक किसी भी सेवा / प्रोटोकॉल पर 2 असफल एक्सेस प्रयास करते हैं?

यही कारण है कि उपयोग मामला विफलता 2ban को हल करने के लिए डिज़ाइन किया गया है। अपने इच्छित उद्देश्य के लिए एक उपकरण का उपयोग करना लगभग कभी भी ओवरकिल नहीं है।

यहां लक्ष्य दैनिक लॉगवॉच रिपोर्ट को खोलना है और सर्वर से जुड़े असफल कनेक्शन के पृष्ठों को स्क्रॉल करना नहीं है।

एक तरफ, सीधे आपके प्रश्न से संबंधित नहीं: जब भी आप समीक्षा के लिए लॉग फ़िल्टर कर रहे हों, तो विचार करें कि आप किसी विशेष प्रविष्टि के बारे में क्या करेंगे। यदि आप सभी एक प्रविष्टि के बारे में करने जा रहे हैं, तो "meh" कहना और आगे बढ़ना है, तो आप शायद इसे फ़िल्टर करना चाहते हैं। समीक्षा के लिए पूर्ण लॉग को बचाने के लिए है कि जरूरत किया जाना चाहिए सुनिश्चित करें, लेकिन अपने नियमित निगरानी में केवल धक्का कार्यप्रवाह सामान कि आप वास्तव में करने जा रहे हैं करने के साथ कुछ जब यह दिखाता है। यदि आप कुछ विफल कनेक्शन प्रयासों के बाद एक होस्ट को ब्लॉक करने के लिए असफल 2 आबंटन स्थापित करते हैं, तो संभावना बहुत अच्छी है कि आपको मैन्युअल रूप से उन लोगों की समीक्षा करने की आवश्यकता नहीं होगी, और उन्हें आपकी निगरानी सूचनाओं से हटा सकते हैं। यदि कोई वैध उपयोगकर्ता पहुंच में कमी की शिकायत करता है, तो बस पूर्ण लॉग को बाहर निकालें और एक नज़र डालें।


व्यापक प्रतिक्रिया की सराहना करते हैं, मुझे लगता है कि मैंने कभी भी दोनों के बारे में नहीं सोचा था कि यह पूरी तरह से अलग कार्य करता है।
किंगमिलो

4

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

यहाँ कुछ नमूना है:

  #
  # SSH tracking sample
  #
  #################################################################################
  iptables -X IN_SSH
  iptables -N IN_SSH
  iptables -A IN_SSH -m set --match-set net_blacklist src -p tcp -j REJECT
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp --match limit --limit 5/second -j LOG --log-prefix whitelist_de_prefix
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp -j ACCEPT
  # filter update
  iptables -A IN_SSH -m recent --name sshbf --set --rsource
  # connlimit
  iptables -A IN_SSH -m connlimit --connlimit-above 4 --match limit --limit 5/second -j LOG --log-prefix ssh_connlimit_per_ip_above_4
  iptables -A IN_SSH -m connlimit --connlimit-above 4 -j REJECT
  # filter
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 --match limit --limit 5/second -j LOG --log-prefix ssh_filtered_13in60sec
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 -j REJECT
  iptables -A IN_SSH -j ACCEPT

iptables -A FORWARD -p tcp --dport ssh --syn --jump IN_SSH
# iptables -A INPUT -p tcp --dport ssh --syn --jump IN_SSH

आपके लॉगिंग संदेशों के आउटपुट को विफलता 2ban के साथ जोड़ा जा सकता है। आप इसे INPUT नियमों के लिए भी उपयोग कर सकते हैं।

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