iptables नियम सलाहकार स्क्रिप्ट


9

बिना iptables रक्षा के एक सर्वर है :ACCEPT all..

इस सर्वर पर कस्टम एप्लिकेशन हो सकते हैं।

यदि हमें इस सर्वर को सख्त करने की आवश्यकता है (तो सभी को अस्वीकार करें, और केवल सख्त अनुप्रयोगों के साथ अनुप्रयोगों को जो आवश्यक हो) दें, हमें यह पता लगाना होगा कि कौन सा ऐप किस का उपयोग करता है dst/src port/protocolऔर फिर हमें iptables नियमों को लिखना होगा उन्हें..

सवाल : क्या ऐसी कोई स्क्रिप्ट है जो इन चेस्ट को रनिंग मशीन से इकट्ठा करने में मदद कर सकती है? (लॉग से?) - और स्वचालित रूप से iptables नियम उत्पन्न कर रहा है?

जैसे वहाँ audit2allowपर है SELinux। बस के लिए iptables!

मशीन का कोई आउटेज नहीं हो सकता है!

Ex .: "MAGIC" स्क्रिप्ट को मशीन पर एक सप्ताह / महीना चलाना चाहिए, फिर से सूचना एकत्र करना, फिर, एक सप्ताह / महीने के बाद, स्क्रिप्ट एक iptables नियम फ़ाइल का उत्पादन करने में सक्षम होगी जिसे हम उपयोग कर सकते हैं।

बहुत से लोग इस स्थिति में आ सकते हैं (कैसे iptables के बारे में एक सर्वर को सख्त करें)। और यह बहुत अच्छा होगा यदि कोई स्क्रिप्ट / समाधान हो जो ऐसा कर सके: \ _


वैकल्पिक रूप से, सबकुछ ब्लॉक करें और केवल उसी चीज़ को जाने दें जिसकी आवश्यकता है। आप यह पता लगा सकते हैं कि एक सप्ताह से अधिक समय से चल रहे tcpdump के साथ क्या आवश्यक है।
लॉरेंस

इस मशीन पर कोई आउटेज नहीं हो सकता है :)
evachristine


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

यह करना काफी संभव है, आप चल रहे अनुप्रयोगों और उजागर बंदरगाहों से एक नियम बनाने के लिए एक तरीका लिख ​​सकते हैं। लेकिन आप वास्तव में ऐसा नहीं करना चाहते हैं क्योंकि 1) ज्यादातर मामलों में सभी सेवाओं को नेटवर्क के संपर्क में नहीं आना चाहिए और 2) ऐसी सेवाएं हो सकती हैं जो आप बिल्कुल नहीं चाहते हैं कि वे नेटवर्क के संपर्क में आए। इसके बजाय इसे हाथ से करें, एक बार, एक अच्छा नियम सेट करें और वहां से जाएं। इसे सुरक्षित तरीके से करने का एक तरीका यह है कि स्थापित नियम / संबंधित और स्वीकृत नियमों के साथ नियम का निर्माण करें और फिर जांच करें कि संबंधित नियम यातायात से मेल खा रहे हैं या नहीं। जब आप खुश होते हैं, तो ड्रॉप करने के लिए INPUT नीति बदलें।
पेड्रो

जवाबों:


2

इसे मैन्युअल रूप से करें

sudo ss -tuanp

या

sudo netstat -tuanp

स्पष्टीकरण:

-t - show tcp sockets
-u - show udp sockets
-a - show all sockets
-n - show numeric, don't resolve 
-p - show process name

1

tcpdumpऔसत ट्रैफ़िक कैप्चर करने के लिए एक या दो सप्ताह के लिए मशीन पर चलाएं । फिर आप बाद में वायरशर्क का उपयोग करके ट्रैफ़िक को ब्राउज़ कर सकते हैं कि पोर्ट का क्या उपयोग किया जा रहा है।

इसके लिए कमांड होगी tcpdump -i <interface> -s 65535 -w <some-file>

इसके बाद आप यह netstat -tuanpदेख सकते हैं कि पीआईडी ​​/ एप्लिकेशन किन पोर्ट का उपयोग कर रहे हैं।

सैद्धांतिक रूप से यह स्क्रिप्टेड हो सकता है।


1

आप एक बहुत ही बुनियादी टेम्पलेट के साथ शुरू कर सकते हैं जैसे- https://gist.github.com/jirutka/3742890 , जो केवल ssh और ping की अनुमति देता है, और किसी भी चीज़ को मैन्युअल रूप से जोड़ता है।

सार्वजनिक इंटरफ़ेस (0.0.0.0) / tcp पर आपके एप्लिकेशन को सुनने के लिए iptables नियम बनाने के लिए एक त्वरित स्क्रिप्ट हैक

netstat -lnpt | egrep '0.0.0.0:[0-9]+' | awk '{print $4,$7}' | \
sed -E -e 's/0.0.0.0://g' -e 's|[0-9]+/||' | \
awk '{printf ("iptables -A INPUT -p tcp --dport %5d --syn -m conntrack --ctstate NEW -m comment %s \n", $1,$2) }'

आप iptables -I INPUT <number>किसी विशिष्ट स्थान पर नियमों को इंजेक्ट करने के लिए भी उपयोग कर सकते हैं , जिसे आप सूचीबद्ध कर सकते हैंiptables -nvL --line-numbers INPUT


1

दुर्भाग्य से ऐसी कोई स्क्रिप्ट नहीं है जो मैंने कभी देखी हो जो आपके सभी नेटवर्क के उपयोग को सीखने के मोड या निष्क्रिय मोड में चल सकती है, इसके परिणाम ले सकती है और iptablesइसके लॉग से उपयोग करके एक वास्तविक फ़ायरवॉल उत्पन्न कर सकती है।

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

$ sudo netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:890                 0.0.0.0:*                   LISTEN      26149/ypbind        
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      26226/python        
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      26221/./hpiod       
tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      26237/snmpd         
tcp        0      0 0.0.0.0:809                 0.0.0.0:*                   LISTEN      26067/rpc.statd     
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      26038/portmap       
tcp        0      0 0.0.0.0:35604               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      26249/sshd          
tcp        0      0 0.0.0.0:631                 0.0.0.0:*                   LISTEN      26257/cupsd         
tcp        0      0 :::22                       :::*                        LISTEN      26249/sshd          
tcp        0      0 :::631                      :::*                        LISTEN      26257/cupsd         

नोट: ऊपर में आप देख सकते हैं कि मेरे पास कौन सी सेवाएँ हैं जो एक सर्वर पर चल रही हैं जो टीसीपी कनेक्शन स्वीकार कर रही हैं, अर्थात वे विभिन्न बंदरगाहों के लिए कनेक्शन के लिए "सुन रहे हैं"।

यह एसएसएच (पोर्ट 22) और एचटीटीपी (पोर्ट 80) जैसी चीजों के साथ शुरू करने के लिए एक दिमाग नहीं है, अगर ये आपके सिस्टम के लिए विशिष्ट हैं, तो मैं इन प्रकार की सेवाओं को एक साथ बड़े पैमाने पर करूंगा। एलडीएपी या एनआईएस जैसी अन्य सेवाओं के लिए आप इन्हें और अधिक नियंत्रित तरीके से करना चाह सकते हैं, जिससे यह सुनिश्चित हो जाता है कि चीजें टूट नहीं सकतीं क्योंकि आप उनका परिचय देते हैं।

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

FireHOL

फायरहोल एक भाषा है (और इसे चलाने के लिए एक कार्यक्रम) जो किसी भी जटिलता के सुरक्षित, स्टेटफुल फायरवॉल को आसानी से समझती है, मानव-पठनीय विन्यास बनाती है।

उदाहरण

transparent_squid 8080 "squid root" inface eth0

interface eth0 mylan
    policy accept

interface ppp+ internet
    server smtp accept
    server http accept
    server ftp  accept
    server ssh  accept src example.firehol.org

    client all  accept

router mylan2internet inface eth0 outface ppp+
    masquerade
    route all accept
fwbuilder

Fwbuilder एक अद्वितीय ग्राफिकल फ़ायरवॉल टूल है जो उपयोगकर्ता को ऑब्जेक्ट बनाने और फिर उन ऑब्जेक्ट्स को फ़ायरवॉल में खींचने और छोड़ने के लिए, एक पीसी या पीसी के नेटवर्क के लिए एक शक्तिशाली सुरक्षा प्रणाली बनाने की अनुमति देता है। Fwbuilder फायरवॉल की एक विस्तृत श्रृंखला (सिस्को ASA / PIX, लिनक्स iptables, FreeBSD के ipfilter, OpenBSD के pf, और अधिक) का समर्थन करता है, इसलिए इसके नियमों को कई प्लेटफार्मों पर तैनात किया जा सकता है। आइए लिनक्स पर Fwbuilder का उपयोग करने पर एक नज़र डालें, जो एक शक्तिशाली सुरक्षा प्रणाली के साथ जीवन भर का संबंध बन सकता है।

उदाहरण

   ss fwbuilder

eztables

Eztables आपको iptables को छूने के बिना जल्दी से एक फ़ायरवॉल को कॉन्फ़िगर करने की अनुमति देता है। फ़ायरवॉल नियम सिंटैक्स को पढ़ने और लागू करने में आसान होने के लिए डिज़ाइन किया गया है।

यह है कि आप पूरे इंटरनेट को टीसीपी-पोर्ट 80 पर अपने वेबसर्वर का उपयोग करने की अनुमति देते हैं:

  allow_in any $eth0 any 80/tcp

Eztables को सरल, अभी तक शक्तिशाली बनाया गया है। इससे कोई फर्क नहीं पड़ता कि आप अपने लैपटॉप की सुरक्षा करना चाहते हैं, एक होम राउटर स्थापित कर रहे हैं, या एक कंपनी फ़ायरवॉल का निर्माण कर रहे हैं।

Fail2Ban का उपयोग करना

iptablesजगह में एक अल्पविकसित फ़ायरवॉल के साथ आप Fail2Ban जैसे उपकरण का उपयोग करके इसकी तारीफ करना चाहेंगे ।

अंश

Fail2ban लॉग फ़ाइलों को स्कैन करता है (जैसे / var / log / apache / error_log) और दुर्भावनापूर्ण संकेत दिखाने वाले IP पर प्रतिबंध लगाता है - बहुत अधिक पासवर्ड विफलताएं, शोषण की मांग, आदि। आमतौर पर Fail2Ban का उपयोग आईपी पते को अस्वीकार करने के लिए नियम को अद्यतन करने के लिए किया जाता है। निर्धारित समय के लिए, हालांकि कोई भी मनमाना अन्य कार्य (जैसे ईमेल भेजना) भी कॉन्फ़िगर किया जा सकता है। आउट ऑफ द बॉक्स Fail2Ban विभिन्न सेवाओं (अपाचे, कूरियर, एसश, आदि) के लिए फिल्टर के साथ आता है।

इस तरह के टूल का उपयोग करने से एक्सपोज़र को सीमित करने में मदद मिलेगी जो कि आपके सिस्टम को सहन करना होगा क्योंकि आप इसे सख्त करना जारी रखेंगे। आपके सिस्टम के सख्त हो जाने के बाद भी, आप अभी भी अपने सुरक्षा उपायों के तहत Fail2Ban का उपयोग जारी रखना चाहते हैं।

संदर्भ


0

नए कनेक्शन को लॉग करने के लिए iptable नियमों का उपयोग करें, जो udp को भी लॉग करेगा।

iptables -I INPUT -m state --state NEW -j LOG --log-prefix "New inbound connection: "
iptables -I OUTPUT -m state --state NEW -j LOG --log-prefix "New outbound connection: "

आप --log-level / var / log / संदेशों की तुलना में किसी अन्य फ़ाइल में लॉग करने के लिए अलग-अलग निर्दिष्ट कर सकते हैं (आपको syslog डेमॉन कॉन्फ़िगर करना होगा)।

मुझे लगता है कि आपको मुख्य एप्लिकेशन लॉग को पढ़ना चाहिए क्योंकि कुछ सर्वर में दोपहर की तरह एक बहुत आवधिक गतिविधि होती है, सप्ताह का अंत, महीने का अंत (तिमाही, वर्ष) इसलिए आप सर्वर की एक महत्वपूर्ण नेटवर्क गतिविधि को याद नहीं करेंगे।

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


0

मुझे पता है कि यह एक स्क्रिप्ट नहीं है और यह ओपी के सवाल का जवाब नहीं है, लेकिन यह मेरा एक विचार है जिसे मैं ओपी के साथ साझा करना चाहता हूं।

मुझे सभी सुनने वाले पोर्ट मिले:

netstat -an | egrep 'tcp .*LISTEN' | awk -F" " '{print $4}' | awk -F":" '{print $NF}'

हो सकता है कि यह आपको अपनी स्क्रिप्ट लिखने के किसी भी करीब ले जाए। :)


0

आप कुछ इस तरह से शुरुआत कर सकते हैं:

netstat -n -l -p | egrep "^(tcp|tcp6|udp)" | grep LISTEN | sed -r 's!^(tcp|tcp6|udp)\s.*:([0-9]+).*LISTEN\s+.*/(.*)!iptables -A INPUT -p \1 --dport \2 -j ACCEPT # \3!'

और फिर इसके साथ पालन करें

iptables -P INPUT DROP

या

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

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

iptables -A INPUT -p tcp --dport 111 -j ACCEPT # rpcbind       
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # sshd          
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # master        
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # mysqld        
iptables -A INPUT -p tcp --dport 49476 -j ACCEPT # rpc.statd     
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT # postgres.bin  
iptables -A INPUT -p tcp --dport 55371 -j ACCEPT # rpc.statd

ध्यान देने योग्य दो महत्वपूर्ण बातें:

1) ये नियम आपके लिए तब तक कुछ नहीं करते जब तक आप अंत में एक DROP या REJECT लाइन नहीं डालते हैं या बेजोड़ पैकेट के लिए डिफ़ॉल्ट नीति नहीं बनाते हैं। ये नियम पैकेट की अनुमति देते हैं , जो कि डिफ़ॉल्ट है, यदि डिफ़ॉल्ट नीति कुछ भी मिलान नहीं होने देती है।

2) ये नियम स्रोत आईपी ​​के बारे में अस्पष्ट हैं । अपने मूल पोस्ट से, ऐसा लगता है कि आप अपने सभी क्लाइंट को सर्वर का उपयोग करने की अनुमति देना चाहते हैं, फिर, स्रोत आईपी ​​को गंतव्य बंदरगाहों के साथ जाने के लिए लॉग की जांच करें । मुझे ऐसा करने के लिए एक उपकरण का पता नहीं है, इसलिए यह स्क्रिप्ट केवल आपके सर्वर पर नई सेवाओं को बनाने से रोकेगी जो अन्य बंदरगाहों पर सुनते हैं ... जो कि कुछ है

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