Iptables लगातार सेवा मेरे परिवर्तनों को सहेजना क्यों नहीं है?


19

मैंने ubuntu 12.04 पर IP नियम स्थापित करने के लिए इस ट्यूटोरियल का अनुसरण किया । सब कुछ सेटअप पर ठीक काम किया - लेकिन अब मैंने फ़ायरवॉल में बदलाव किया है जो रिबूट पर नहीं रहता है। मुझे समझ नहीं आता कि ऐसा क्यों है। यहां बताया गया है कि मैं कैसे iptables-persistent का उपयोग कर रहा हूं। मैं क्या गलत कर रहा हूं?

$ sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

 $ sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ sudo iptables -L  //rule is back

मैं देख रहा हूँ कि iptables -D INPUTनियम यह नहीं है sudoकि आप वास्तव में सफलता की सूचना दे रहे हैं? यदि आप इसे भीतर चलाते हैं तो व्यवहार बदल जाता है sudo?
ब्राचली

जवाबों:


42

iptables-persistentउस तरह से काम नहीं करता है। iptables-persistent"सेवा" को पुनरारंभ करना iptables की वर्तमान स्थिति को कैप्चर नहीं करता है और इसे बचाता है; यह सब कुछ iptables नियमों को बहाल करता है जो पैकेज को अंतिम रूप से कॉन्फ़िगर किए जाने पर सहेजे गए थे।

कॉन्फ़िगर करने के लिए iptables-persistent, आपको इसे अपने वर्तमान iptables नियमों के बारे में बताना होगा।

इसे पूरा करने का एक तरीका इस प्रकार है:

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

या, समकक्ष, iptables-persistentपैकेज भी निम्नलिखित प्रदान करता है:

dpkg-reconfigure iptables-persistent

(आपको नियमों को बचाने के बारे में सवालों के जवाब देने की आवश्यकता होगी।)

उसके बाद, अगली बार iptables-persistentशुरू / पुनरारंभ होने पर, आपके द्वारा अपेक्षित iptables नियम लोड किए जाएंगे।


9

वर्तमान iptables नियमों को बचाने का बहुत सरल तरीका है कमांड का उपयोग करना:

sudo service netfilter-persistent save

उपरोक्त का उपयोग करना, जो netfilter-persistent(और iptables-persistent) पैकेज को स्थापित करने के बाद कम से कम उबंटू में काम करता है, मैन्युअल रूप से iptables कमांड चलाने या पैकेज को फिर से कॉन्फ़िगर करने की आवश्यकता नहीं है (जैसा कि ऊपर दिए गए उत्तर द्वारा भी सुझाया गया है)।


यह है sudo service netfilter-persistent saveया sudo service netfilter-persistent save .? (अंत में डॉट।)

यह नोट करने के लिए धन्यवाद, सही कमांड लाइन के अंत में w / o है। तदनुसार उत्तर को सही किया।
OpenITeX

3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

इसका DROPमतलब या नहीं है। से man iptables:

... विशेष मान ACCEPT, DROP, QUEUE या RETURN। ACCEPT का मतलब पैकेट के माध्यम से जाने देना है। DROP का मतलब है कि फर्श पर पैकेट गिराना। QUEUE का अर्थ है ...

इसलिए आपने जो किया है वह एक नया नियम है। यह प्रभावी रूप से किसी भी अन्य नियमों की संख्या को बढ़ा सकता है, लेकिन वे नियम अभी भी मौजूद हैं।

इस तरह से सामान की जाँच करते समय (आपका iptables -Lआउटपुट), मैं grep "string unique to this rule"आपकी आँखों का उपयोग करने के बजाय इसे खिलाऊँगा। यह करना आसान और तेज़ है, और कम त्रुटि वाला है।

iptables -L | grep "some unique string"

यदि आप एक नियम हटाना चाहते हैं, तो -Dस्विच का उपयोग करें; मैन पेज इस के दो रूपों का वर्णन करता है:

-D, --delete चेन नियम-विनिर्देश

-डी, -डेली चेन रूलेनम

चयनित श्रृंखला से एक या अधिक नियम हटाएं। इस आदेश के दो संस्करण हैं: नियम को श्रृंखला में एक संख्या के रूप में निर्दिष्ट किया जा सकता है (पहले नियम के लिए 1 पर शुरू) या मिलान करने के लिए एक नियम।


खेद है कि स्पष्ट नहीं था। मैं एक नियम को -D विकल्प के लिए -D विकल्प का उपयोग कर रहा हूं। उपरोक्त परिवर्तन देखें
bernie2436

3
-D"डीआरओपी" को "डिलीट" नहीं करने का मतलब "डीआरओपी" शब्द का उपयोग करना है, जबकि जंप टार्गेट के अलावा कुछ भी मतलब नहीं है, जब iptablesनरक के रूप में भ्रमित करना।
ब्राचली

1

जैसा कि @ steven-monday द्वारा समझाया गया है , आप अपने नियम को उचित निर्देशिका (अर्थात्:) में सेट कर सकते हैं /etc/iptables/rules.v{4,6}

हालाँकि, @OpenITeX सही है: कॉलिंग की saveक्रिया service netfilter-persistentबेहतर है।

(18.10 में) आज के रूप में, iptables-बचाने builtin है, लेकिन iptables-persistentहै नहीं स्थापित किया। इसलिए, द्वारा बुलाया प्लगइन निर्देशिका service netfilter-persistentखाली है, और सेवा प्रिंट करती है कि नियमों को सहेजा गया था, जबकि यह नहीं था।

TLDR: स्थापित करें iptables-persistentऔर जांचें कि प्लगइन निर्देशिका /usr/share/netfilter-persistent/plugins.dमें प्लगइन्स हैं।


यहाँ है कि मैं कैसे पता लगा:

$ cat /etc/init.d/netfilter-persistent 
...
case "$1" in
...
save)
    log_action_begin_msg "Saving netfilter rules"
    /usr/sbin/netfilter-persistent save
    log_action_end_msg $?
    ;;

फिर /usr/sbin/netfilter-persistentस्क्रिप्ट की जांच करें , ध्यान दें कि यह बाहरी स्क्रिप्ट को आमंत्रित करता है:

$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
    if [ -d ${PLUGINS} ]; then
        run-parts -v -a ${1} ${PLUGINS}
    fi
}

case $1 in
start|save|flush)
    run_plugins ${1}
    ;;

फिर मैंने देखा कि /usr/share/netfilter-persistent/plugins.dखाली था।


1

Iptables-persistent स्थापित करें:

sudo apt install iptables-persistent

वांछित परिवर्तन करने के बाद नियम सहेजें:

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