स्टार्टअप पर चलने के लिए ये iptables नियम कैसे सेट कर सकते हैं


20

जब भी मैं लॉगिन करता हूं, मैं आमतौर पर अपने iptables नियम चलाता हूं। टर्मिनल से मैं टाइप करता हूं;

sudo sh firewall.sh

अपनी बहन के कंप्यूटर की स्थापना करते हुए, मैं उसे कुछ बुनियादी फ़ायरवॉल सुरक्षा देना चाहता हूं। वह व्यवस्थापक के रूप में लॉग इन नहीं करेगा, बस एक मानक खाता है। मैं किसी भी पासवर्ड में टाइप किए बिना हर बार लॉग-इन करके फ़ायरवॉल स्क्रिप्ट कैसे बना सकता हूँ?

मैंने अपनी बहन के कंप्यूटर के लिए जो पटकथा लिखी है;

#!/bin/sh

modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

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

इस स्क्रिप्ट को टर्मिनल से रूट के रूप में चलाना ठीक काम करता है।

टाइप करने के बाद;

sudo sh firewall.sh

मैंने टर्मिनल में टाइप किया

sudo iptables -L -v

और मुझे मिलता है

Chain INPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN
    0     0 DROP       udp  --  any    any     anywhere             anywhere            
    0     0 DROP       icmp --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp spts:32768:61000 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:http
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere

मेरे पास यह स्क्रिप्ट कैसे लॉगिन पर स्वचालित रूप से चल सकती है, या संभवतः मेरी बहनों के कंप्यूटर के लिए इन नियमों को स्थायी रूप से बचा सकती है? क्या आप कृपया कुछ विस्तृत कोड प्रदान कर सकते हैं, क्योंकि r.local पद्धति और iptables-save पर मेरा पहला प्रयास बहुत सफल नहीं रहा है। हर रिबूट पर, सभी INPUT, OUTPUT और FORWARD चेन ACCEPT पर रीसेट हो जाती हैं, जब मैं टाइप करता हूं तो कोई भी पॉलिसी नहीं हैsudo iptables -L -v


लगभग दो साल बाद, लेकिन एक महत्वपूर्ण टिप्पणी: सुनिश्चित करें कि आपके पास ip6tablesनियम हैं यदि आपको एक दिन v6 कनेक्टिविटी मिलती है, क्योंकि IPv6 द्वारा नियंत्रित किया जाता है ip6tablesऔर नहीं iptables
थॉमस वार्ड

जवाबों:


38

आप iptables-persistentअपनी बूट स्क्रिप्ट के साथ गड़बड़ करने के बजाय पैकेज का उपयोग करना चाह सकते हैं । सबसे पहले, फ़ायरवॉल नियमों को सेट करने के लिए अपनी स्क्रिप्ट चलाएँ। दूसरे, sudo apt-get install iptables-persistentप्रॉम्प्ट का पालन करें और चलाएं । जब यह मौजूदा नियमों को बचाने के लिए कहता है, तो दोनों संकेतों पर "हां" मारा। अब, रिबूट पर, आपके iptables नियमों को बहाल किया जाएगा।


नोट: यदि आप इसके बाद अपने नियमों को बदलते हैं, तो आपको परिवर्तनों के बाद निम्न कमांड करने की आवश्यकता होगी:

अपने IPv4 iptables नियमों को बचाने के लिए: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

अपने IPv6 ip6tables नियमों को बचाने के लिए: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'


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

हां, या आप सीधे iptables सिस्टम में सीधे हेरफेर कर सकते हैं। यदि आप अस्थायी नियम का लगातार उपयोग करने की योजना बनाते हैं, तो नए नियम को तब तक सहेजे जाने की गारंटी नहीं है, जब तक कि आप मेरे जवाब में मेरे द्वारा बताए गए आदेशों का पालन नहीं करते हैं।
थॉमस वार्ड Thomas

क्या sudo dpkg-reconfigure iptables-persistentनियम बदलने के बाद दौड़ना बुरा है ।
सौरव

@souravc उस सवाल का जवाब देता है जो "आपको क्यों चाहिए या चाहिए?" विचार आप के लिए है कि नहीं और बस फिर से लिखने सकते हैं (या अधिलेखित (है rules.v4या rules.v6मैन्युअल रूप से फ़ाइलें ताकि वे अगले बूट पर अनुक्रमित हो, या आप चलाने के तुरंत यदि iptables-restore < /etc/iptables/rules.v4याip6tables-restore < /etc/iptables/rules.v6
थॉमस वार्ड

2

मान लें कि आपके पास फ़ायरवॉल नियम हैं:

/etc/iptables.up.rules

शायद सबसे स्पष्ट उत्तर में एक फ़ाइल बनाना होगा जिसे iptables कहा जाता है:

/etc/network/if-pre-up.d

सामग्री के साथ:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

और इसे प्रयोग करने योग्य बनाते हैं

sudo chmod +x /etc/network/if-pre-up.d/iptables

इस तरह आपके नेटवर्क इंटरफ़ेस के सक्रिय होने से पहले आपके नियम लोड हो जाएंगे।


धन्यवाद, क्या यह लॉग को कहीं भी फेंक देता है? यह काम नहीं कर रहा है और मुझे संदेह है कि यह मेरे डीएनएस सर्वर के उपयोग के कारण एक रिज़ॉल्वर है जो अभी तक शुरू नहीं हुआ है जब मेरा होस्ट बूट हो रहा है।
दिमित्री कोपरिवा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.