আমি iptables থেকে নির্দিষ্ট নিয়মগুলি কীভাবে সরিয়ে ফেলতে পারি?


334

আমি যথাক্রমে 8006 এবং 8007 বন্দরগুলিতে বিশেষ HTTP এবং HTTPS পরিষেবাগুলি হোস্ট করছি services আমি সার্ভারটি "অ্যাক্টিভেট" করতে আইপ্যাবলেটগুলি ব্যবহার করি; অর্থাত্ আগত এইচটিটিপি এবং এইচটিটিপিএস পোর্টগুলি রুট করতে:

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 নিয়মও মুছে ফেলবে যা অনাকাঙ্ক্ষিত।


2
আমি দেখেছি যে, এটি ব্যবহার করার জন্য উত্তম -Iপরিবর্তে -Aজন্য ACCEPTলাইন। এর কারণ হল সাধারণত, গত লাইন (জন্য INPUTউদাহরণস্বরূপ শৃঙ্খল) একটি DROPবা REJECTএবং আপনি আপনার নিয়ম আগে আসতে চান। -Aনতুন নিয়মটি সর্বশেষ -Iবিধিটির পরে রাখে , যখন এটি শুরুতে রাখে।
লাকাতা

উত্তর:


471

একই কমান্ডগুলি প্রয়োগ করুন তবে "-A" এর সাথে "-D" প্রতিস্থাপন করুন। উদাহরণ স্বরূপ:

iptables -A ...

হয়ে

iptables -D ...

7
আপনার যদি কোনও ধরণের কয়েকটি বিধি থাকে তবে তা সেগুলি সরিয়ে দেবে না।
ইটেক

4
এই-ডি কমান্ডটি একাধিকবার কার্যকর করার চেষ্টা করুন এবং এটি তাদের সমস্তটি মুছে ফেলবে।
ঝেনিউ লি

4
আমি একই কমান্ড কার্যকর করেছি, তবে -আমি পরিবর্তে -D দিয়েছি। তবে আমি খারাপ নিয়ম পেয়েছি (একটি মিলের নিয়ম রয়েছে কি না) ...
বেন

4
আপনি -Iবা এর সাথে কোনও বিধি যুক্ত করলে -Rআপনি এখনও এটি দিয়ে মুছতে পারেন -D
ডেভিড জিয়া

শুধু একটি নোট. আমি 'iptables -A ...' দিয়ে একটি নিয়ম তৈরি করেছি এবং নিয়মটি উপস্থিত হয়েছিল তবে কার্যকর ছিল না। 'Iptables -D ...' ব্যবহার করার পরে প্রতিক্রিয়াটি ছিল খারাপ নিয়ম । তবুও বিধি মোছা হয়েছিল। 'Sudo iptables -nvL' দিয়ে নিয়মটি দৃশ্যমান ছিল। আমি যে চেইনটি ব্যবহার করেছি তা ছিল 'আইএনপুট'।
বেন পাজ

446

আপনি নিয়মের নম্বর ( - লাইন নম্বর ) ব্যবহার করতে পারেন :

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

হালনাগাদ

আপনি যদি (ডি) নির্দিষ্ট সারণী (উদাহরণস্বরূপ নাট) ব্যবহার করেন তবে আপনাকে এটি মুছে ফেলুন কমান্ডে যোগ করতে হবে (মন্তব্যের জন্য থ্যাঙ্কস @ থারসুমনার)

sudo iptables -t nat -D PREROUTING 1

4
উভয় সমাধানই দুর্দান্ত, তবে লাইন নম্বরটি অজানা থাকলে এই স্ক্রিপ্টযুক্ত সেটিংয়ে কাজ করবে না। সুতরাং অন্য সমাধানটি আরও সাধারণ, এবং তাই আরও সঠিক, আইএমও।
জেরোইন

2
ঠিক আছে যদি আপনি লাইনটি না জানেন তবে আপনি কোনও মন্তব্য ব্যবহার করতে পারেন (যেমন উত্তরের মতো) আপনার নিয়মের জন্য iptables -L INPUT --line-numbers | grep -oP "([0-9]{1,3}).*tcp.*domain" | cut -d" " -f1
গ্রেপ করতে পারেন

6
এটি কেবলমাত্র যদি টেবিলে কোনও সময়ে বিন্দু .োকানো না পারে fine অন্যথায় লাইন নম্বরগুলি তাদের পর্যবেক্ষণ এবং মোছার বিধি কার্যকর করার মধ্যে পরিবর্তন হতে পারে। এই জাতীয় ক্ষেত্রে, সময় উইন্ডোটি এতটাই সংক্ষিপ্ত যে "এটি কখনই হওয়ার সম্ভাবনা নেই" এটি ধরে নেওয়া নিরাপদ নয়।
নিক

14
মনে রাখবেন যে আপনি যদি একটি নিয়ম মুছে ফেলেন তবে অবশিষ্ট অংশের লাইন নম্বরগুলি পরিবর্তিত হবে। সুতরাং, যদি আপনার নিয়ম 5, 10 এবং 12 মুছতে হয় ... তবে 12, 10, তারপর 5
মুছুন

2
অগ্রণীকরণ বিধি মুছে ফেলার চেষ্টা করার সময় আমাকে উল্লেখ করতে হয়েছিল -t nat, উদাহরণস্বরূপ: sudo iptables -t nat --line-numbers -Lএবং এগুলিও মুছে ফেলতে -t natহবে, উদাহরণস্বরূপ: sudo iptables -t nat -D PREROUTING 1(উত্তরে যোগ করার উপযুক্ত হতে পারে?)
থারস্ম্মোনার

31

কোনও সমস্যা ছাড়াই আমার পক্ষে সেরা সমাধানটি এইভাবে দেখায়:
1. কিছু মন্তব্য সহ অস্থায়ী নিয়ম যুক্ত করুন:

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

২. নিয়মটি যুক্ত হয়ে গেলে এবং আপনি এটি (বা এই মন্তব্য সহ সমস্ত কিছু) সরাতে চান, তখন করুন:

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

সুতরাং, আপনি% মন্তব্যে মেলে এমন সমস্ত নিয়ম 100% মুছবেন এবং অন্য রেখাগুলি কোনওভাবে ছাড়বেন না। এই সমাধানটি প্রতিদিন প্রায় 100 টি নিয়মের পরিবর্তনের সাথে গত 2 মাস ধরে কাজ করে - কোনও সমস্যা নেই H হ্যাঁ, এটি সহায়তা করে


2
যদি আপনার কাছে iptables- সংরক্ষণ / পুনরুদ্ধার না থাকে:iptables -S | grep "${comment}" | sed 's/^-A //' | while read rule; do iptables -D $rule; done
মনসুর

বাস্তব জীবনের ব্যবহারের জন্য: CRON 1) পুরানো spamhausiptables নিষেধাজ্ঞাগুলি মুছুন , ২) স্প্যামহাউস.আর.ড্রপোপ দখল করুন , 3) সিআইডিআর আইপি এর জন্য iptables -A INPUT -s $ip_cidr -j -m comment --comment "spamhaus"
গ্রেপ

2
@Mansour অথবা iptables -S | sed "/$comment/s/-A/iptables -D/e";) মত এই
hek2mgl

@ হেক টু এমজিএল সেড ছেড়ে দেয় না, তাই না? =] ধন্যবাদ, আমি এই ক্ষমতাটি মাথায় রাখব (আমি একদিনে বাক্যবিন্যাসটি ভুলে যাব)।
মনসুর

সেড ইউউইড থেকে "" "সরাতে ব্যবহৃত হয়। যাই হোক না কেন, একবার সিড সিনট্যাক্স পেয়ে গেলে - এটি কখনও ভুলে যাবে না। ))
ইটেক

11

প্রথমে এই কমান্ডের সাহায্যে সমস্ত আইপটিবল বিধি তালিকাবদ্ধ করুন:

iptables -S

এটি এর মতো তালিকা তৈরি করে:

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

তারপর পছন্দসই লাইন কপি এবং মাত্র প্রতিস্থাপন -Aসঙ্গে -Dসহজেই মুছে ফেলতে:

iptables -D XYZ -p ...

2
সচেতন থাকা! এটি অসম্পূর্ণ উত্তর। "-S" সম্পর্কে ম্যানুয়াল থেকে: "প্রতিটি অন্যান্য iptables কমান্ডের মতো এটি নির্দিষ্ট টেবিলের ক্ষেত্রেও প্রয়োগ হয় (ফিল্টারটি ডিফল্ট হয়)"। Nat, ছিন্ন করা, ইত্যাদি: - তো, এই সুইচ ব্যবহার ক্ষেত্রে সব টেবিলের জন্য পুনরাবৃত্তি করা উচিত
pmod

1
আমার ক্ষেত্রে, আমি iptables: Bad rule (does a matching rule exist in that chain?).এখন কি পেতে পারি ?
আব্দুল

আহ, এটিকে আবিষ্কার করলেন - আমার মুছুন আদেশটি সারণীর বিশদটি অনুপস্থিত। সুতরাং আপনি যদি সারণী থেকে সমস্ত বিধি তালিকাভুক্ত natকরেন sudo iptables -S -t natএবং আপনি ফিরে আসা কোনও বিধি মুছে ফেলতে চান তবে অনুলিপি যথেষ্ট নয়। আপনি যোগ করতে হবে -t nat, যেমন sudo iptables -D ... -t nat
আব্দুল

সহজে বোধগম্য!
স্কাইনাট

5

-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টেবিল) কাজ না করে থাকেন তবে -t TABLENAMEসেই লক্ষ্য সারণীটি নির্দিষ্ট করতে ব্যবহার করুন ।

মেলে একটি নিয়ম মুছুন

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

দ্রষ্টব্য: এটি কেবল প্রথম নিয়মের সাথে মিলছে। আপনার যদি অনেকগুলি নিয়ম মিলে যায় (এটি আইপটেবলে ঘটতে পারে), এটি বেশ কয়েকবার চালান।

একটি সংখ্যা হিসাবে নির্দিষ্ট একটি বিধি মুছুন

iptables -D INPUT 2

সংখ্যা গণনা ব্যতীত আপনি --line-numberপ্যারামিটার সহ লাইন নম্বরটি তালিকাভুক্ত করতে পারেন , উদাহরণস্বরূপ:

iptables -t nat -nL --line-number

আমি
লাইন

হ্যাঁ! চমত্কার! পুরোটা চাই নাiptables -F
দেব আনন্দ সদসীভাম

2

ধরে নিন যে, আপনি যদি 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

আপনি যদি আইপেটেবলগুলি থেকে নাট বিধিটিকে সরাতে চান তবে কমান্ডটি কার্যকর করুন,

# sudo iptables -F -t nat -v

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

তারপরে, আপনি এটি যাচাই করতে পারেন,

# sudo iptables -L -t nat -v
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.