it-swarm.asia

كيف يمكنني إزالة قواعد محددة من iptables؟

أنا أستضيف خدمات HTTP و HTTPS الخاصة على المنفذين 8006 و 8007 على التوالي. أستخدم iptables "لتنشيط" الخادم ؛ أي لتوجيه منافذ HTTP و HTTPS الواردة:

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006 
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007  
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007 

هذا يعمل مثل السحر. ومع ذلك ، أود إنشاء برنامج نصي آخر يعطل الخادم الخاص بي مرة أخرى ؛ أي استعادة iptables إلى الحالة التي كان عليها قبل تشغيل الخطوط أعلاه. ومع ذلك أواجه صعوبة في معرفة بناء الجملة لإزالة هذه القواعد. الشيء الوحيد الذي يبدو أنه يعمل هو تدفق كامل:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

ولكن ذلك سيحذف أيضًا قواعد iptables الأخرى غير المرغوب فيها.

288
Jeroen

تنفيذ نفس الأوامر ولكن استبدال "-A" بـ "-D". فمثلا:

iptables -A ...

يصبح

iptables -D ...
411
Eli Rosencruft

يمكنك أيضًا استخدام رقم القاعدة ( - أرقام الأسطر ):

iptables -L INPUT --line-numbers

مثال الإخراج:

Chain INPUT (policy ACCEPT) 
    num  target prot opt source destination
    1    ACCEPT     udp  --  anywhere  anywhere             udp dpt:domain 
    2    ACCEPT     tcp  --  anywhere  anywhere             tcp dpt:domain 
    3    ACCEPT     udp  --  anywhere  anywhere             udp dpt:bootps 
    4    ACCEPT     tcp  --  anywhere  anywhere             tcp dpt:bootps

لذلك إذا كنت ترغب في حذف القاعدة الثانية:

iptables -D INPUT 2

تحديث

إذا كنت تستخدم (د) جدولًا محددًا (مثل nat) ، فيجب عليك إضافته إلى أمر الحذف (من thx إلىThorSummoner للتعليق)

Sudo iptables -t nat -D PREROUTING 1
398
domi27

الحل الأفضل الذي يناسبني دون أي مشاكل يبدو بهذه الطريقة:
(1). أضف قاعدة مؤقتة مع بعض التعليقات:

comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION

2. عند إضافة القاعدة وترغب في إزالتها (أو كل شيء مع هذا التعليق) ، قم بما يلي:

iptables-save | grep -v "${comment}" | iptables-restore

لذلك ، ستقوم بحذف 100٪ من جميع القواعد التي تتطابق مع تعليق $ وترك الأسطر الأخرى دون تغيير. يعمل هذا الحل على مدار الشهرين الماضيين مع حوالي 100 تغيير في القواعد يوميًا - لا توجد مشاكل. نأمل ، أنه يساعد

29
ETech

اذكر أولاً جميع قواعد iptables باستخدام هذا الأمر:

iptables -S

يسرد مثل:

-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

ثم انسخ السطر المرغوب ، ثم استبدل -A بـ -D لحذف ذلك:

iptables -D XYZ -p ...
4
Wladdy Lopez

استخدم أمر -D ، هكذا توضح الصفحة man:

-D, --delete chain rule-specification
-D, --delete chain rulenum
    Delete  one  or more rules from the selected chain.  
    There are two versions of this command: 
    the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match.

هل تدرك هذا الأمر ، مثل كل أمر آخر (-A ، -I) يعمل على جدول معين. إذا كنت لا تعمل على الجدول الافتراضي (filter table) ، فاستخدم -t TABLENAME لتحديد هذا الجدول الهدف.

حذف قاعدة للمطابقة

iptables -D INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

ملاحظة: هذا يحذف فقط القاعدة الأولى المتطابقة. إذا كان لديك العديد من القواعد المتطابقة (يمكن أن يحدث هذا في iptables) ، فقم بتشغيل هذا عدة مرات.

حذف قاعدة محددة كرقم

iptables -D INPUT 2

بخلاف حساب الرقم ، يمكنك إدراج رقم السطر مع المعلمة --line-number ، على سبيل المثال:

iptables -t nat -nL --line-number
2
cizixs

افترض أنه ، إذا كنت تريد إزالة NAT القواعد ،

اذكر قائمة IPtables الملحقة باستخدام الأمر أدناه ،

# Sudo iptables -L -t nat -v

Chain PREROUTING (policy ACCEPT 18 packets, 1382 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    7   420 DNAT       tcp  --  any    any     anywhere             saltmaster           tcp dpt:http to:172.31.5.207:80
    0     0 DNAT       tcp  --  eth0   any     anywhere             anywhere             tcp dpt:http to:172.31.5.207:8080

إذا كنت ترغب في إزالة القاعدة nat من IPtables ، فقط قم بتنفيذ الأمر ،

# Sudo iptables -F -t nat -v

Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'

ثم ، يمكنك التحقق من ذلك ،

# Sudo iptables -L -t nat -v
1
lakshmikandan