Xóa chuỗi iptables với tất cả các quy tắc của nó


31

Tôi có một chuỗi được nối với nhiều quy tắc như:

> :i_XXXXX_i - [0:0]
> -A INPUT -s 282.202.203.83/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.62.253/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.60.62/32 -j i_XXXXX_i 
> -A INPUT -s 224.93.27.235/32 -j i_XXXXX_i 
> -A OUTPUT -d 282.202.203.83/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.62.253/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.60.62/32 -j i_XXXXX_i 
> -A OUTPUT -d 224.93.27.235/32 -j i_XXXXX_i

khi tôi cố gắng xóa chuỗi này với:

iptables -X XXXX

nhưng đã gặp lỗi như (đã thử iptables -F XXXXX trước đó):

iptables: Quá nhiều liên kết.

Có cách nào dễ dàng để xóa chuỗi bằng lệnh một lần không?


2
Tôi chưa từng thấy iptables barf như thế trước đây khi cố gắng xả nước.
Tom O'Connor

Chỉ tò mò ... có bao nhiêu quy tắc là "nhiều"?
Ladadadada

1
2 nhiều là nhiều :) nếu tôi cố gắng xóa các quy tắc trước, nó sẽ thích gõ nhiều lần: iptables -D OUTPUT -d XXX / 32 -j i_XXXXX_i
nhút nhát

3
Hãy thử điều này:iptables-save | grep -v i_XXXXX_i | iptables-restore
Steven Thứ Hai ngày

@StevenMonday tại sao không viết dưới dạng câu trả lời, đây là cách hữu ích nhất (thay thế làm điều này thông qua tệp và chỉnh sửa tệp). Điều duy nhất nó không xóa là hoàn thành các bảng ("thô")
nhed

Câu trả lời:


38

Bạn không thể xóa các chuỗi khi các quy tắc với '-j CHAINTODELETE' đang tham chiếu chúng. Chỉ ra những gì đang tham chiếu chuỗi của bạn (liên kết) và loại bỏ điều đó. Ngoài ra, xả nước sau đó giết.

-F, --flush [chuỗi]

Xóa chuỗi đã chọn (tất cả các chuỗi trong bảng nếu không có chuỗi nào được đưa ra). Điều này tương đương với việc xóa tất cả các quy tắc từng cái một.

-X, --delete-chain [chuỗi]

Xóa chuỗi do người dùng xác định tùy chọn được chỉ định. Không được có tài liệu tham khảo về chuỗi. Nếu có, bạn phải xóa hoặc thay thế các quy tắc tham chiếu trước khi chuỗi có thể bị xóa. Chuỗi phải trống, tức là không chứa bất kỳ quy tắc nào. Nếu không có đối số nào được đưa ra, nó sẽ cố gắng xóa mọi chuỗi không dựng sẵn trong bảng.


Tôi chỉ muốn tìm cách xóa chuỗi (có nhiều quy tắc tham chiếu '-j CHAINTODELETE'), nhưng từ câu trả lời của bạn, có vẻ như không thể :(
nhút nhát

1
@timy Nhận xét của StevenMonday sẽ bỏ qua bất kỳ tham chiếu nào đến chuỗi. Có lẽ không lý tưởng, nhưng rất gần gũi.
Jeff Ferland

12

Điều này có khả năng lạc đề, nhưng đó là những gì tôi đã làm sau khi tìm thấy bài đăng này! Đối với một số trường hợp sử dụng, tùy chọn iptables -D có thể hữu ích. Vì nó cho phép bạn xóa các quy tắc giới thiệu được thêm vào theo chương trình với -A (nếu bạn biết chính xác cách bạn đã thêm chúng).

Ví dụ

    iptables -N MYCHAIN
    iptables -A INPUT -i interface -j MYCHAIN
    iptables -A MYCHAIN -j ACCEPT

có thể được đảo ngược với

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN

8

Bạn cần hai bước, nhưng điều này thực hiện trong một lệnh.

Tạo một tập tin và đặt nó trong đó.

# Empty the entire filter table
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

Lưu tệp dưới dạng "rõ ràng tất cả các quy tắc". Bây giờ, thực hiện lệnh này:

iptables-restore < clear-all-rules

Bây giờ bạn có thể xóa nó bất cứ lúc nào chỉ với một lệnh.


1
+1 Đây thực sự là cách nhanh nhất để bắt đầu với cấu hình fw sạch.
dr01

6

Đây là một kế hoạch thay thế. Nó liên quan đến ba lệnh, không phải một, nhưng với may mắn, nó sẽ hoạt động.

Kết xuất bộ iptablesquy tắc của bạn vào một tệp:

iptables-save > /tmp/iptables.txt

Xóa TẤT CẢ việc sử dụng (và tham chiếu đến) chuỗi vi phạm:

sed -i '/i_XXXXX_i/d' /tmp/iptables.txt

Sau đó tải lại bộ quy tắc:

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt

0

Một cái gì đó dọc theo các dòng này sẽ đưa tất cả chúng vào một dòng duy nhất mà không lấy iptables xuống dưới bất kỳ hình thức nào.

for chain in `iptables -L |grep i_XXXXX_i|awk '{ print $2 }'`; do iptables -X $chain; done

0

Trong tập tin người đàn ông iptables có một tùy chọn -S

S, --list-quy tắc [chuỗi] In tất cả các quy tắc trong chuỗi đã chọn. Nếu không có chuỗi nào được chọn, tất cả các chuỗi được in như iptables-save. Giống như mọi lệnh iptables khác, nó áp dụng cho bảng được chỉ định (bộ lọc là mặc định).

Bằng cách sử dụng iptables -S | grep <CHAINNAMEHERE>. Ví dụ như:

root @ root: ~ # iptables -S | grep TRAFFICLOG

-N GIAO DỊCH

-A LỰA CHỌN -i eth0 -j TRAFFICLOG

sau đó bạn có thể xem quy tắc nào đang chặn việc xóa chuỗi khỏi bảng. Đi qua từng quy tắc (ngoại trừ iptables -N <CHAINNAMEHERE>và xóa quy tắc bằng cách sử dụng -Dtùy chọn

-D, --delete chain rulenum Xóa một hoặc nhiều quy tắc khỏi chuỗi đã chọn. Có hai phiên bản của lệnh này: quy tắc có thể được chỉ định là một số trong chuỗi (bắt đầu từ 1 cho quy tắc đầu tiên) hoặc quy tắc phù hợp.

Ví dụ iptables -D FORWARD -i eth0 -j TRAFFICLOG. Sau khi bạn đã xóa từng quy tắc cho chuỗi của bạn, hãy xóa chuỗi bằng -Ftùy chọn , iptables -F <CHAINNAMEHERE>.

-F, --flush [chain] Xóa chuỗi đã chọn (tất cả các chuỗi trong bảng nếu không có chuỗi nào được đưa ra). Điều này tương đương với việc xóa tất cả các quy tắc từng cái một.

Sau đó xóa chuỗi của bạn với -Xtùy chọn,iptables -X <CHAINNAMEHERE>

-X, --delete-chain [chain] Xóa chuỗi do người dùng xác định tùy chọn được chỉ định. Không được có tài liệu tham khảo về chuỗi. Nếu có, bạn phải xóa hoặc thay thế các quy tắc tham chiếu trước khi chuỗi có thể bị xóa. Chuỗi phải trống, tức là không chứa bất kỳ quy tắc nào. Nếu không có đối số nào được đưa ra, nó sẽ cố gắng xóa mọi chuỗi không dựng sẵn trong bảng.

Iptables là một bộ công cụ phức tạp nên cần một hướng dẫn lý tưởng. Bạn có thể dùng thử tại www.iptables.info


0

Điều này sẽ nhổ ra chuỗi và xóa chúng

for i in $(iptables -S | awk '{print $2}' | uniq ); do iptables -F $i && iptables -Z $i && iptables -X $i  ; done

0

Tôi đã thấy rằng bạn có thể xóa các quy tắc và chuỗi bằng cách chỉnh sửa tệp quy tắc trong /etc/iptables/rules.v4. Nếu bạn xóa chuỗi không mong muốn trong tệp này và sau đó tải lại iptables, bạn sẽ không còn thấy chuỗi khi thực hiện iptables -L.


Tệp này chỉ tồn tại trên các bản phân phối Linux nhất định và sau đó chỉ trên các phiên bản nhất định của các bản phân phối Linux nhất định.
Michael Hampton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.