Xem tất cả các quy tắc iptables


144

Có cách nào để xem iptablescác quy tắc chi tiết hơn một chút?

Gần đây tôi đã thêm giả trang vào một loạt các IP:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

Điều này đã làm những gì tôi muốn nó, nhưng khi tôi sử dụng:

iptables -L

Tôi nhận được cùng một đầu ra như tôi thường nhận được:

Chain INPUT (policy ACCEPT)
target    prot opt source        destination

Chain FORWARD (policy ACCEPT)
target    prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source        destination

Làm cách nào tôi có thể xem các quy tắc bao gồm các quy tắc tôi thêm? (hệ thống là CentOS 6)

Câu trả lời:


116

Khi sử dụng -L, --listlựa chọn vào danh sách các quy tắc tường lửa hiện tại, bạn cũng cần phải xác định bảng Netfilter thích hợp (một trong những filter, nat, mangle, rawhoặc security). Vì vậy, nếu bạn đã thêm một quy tắc cho các natbảng, bạn nên xác định một cách rõ ràng bảng này bằng cách sử dụng -t, --tabletùy chọn:

iptables --table nat --list

Hoặc sử dụng các tùy chọn mẫu ngắn:

iptables -t nat -L

Nếu bạn không chỉ định một bảng cụ thể, filterbảng sẽ được sử dụng làm mặc định.


Để có kết quả nhanh hơn, cũng có thể hữu ích khi bao gồm -n, --numerictùy chọn in địa chỉ IP số thay vì tên máy chủ, do đó tránh phải chờ đợi tra cứu DNS ngược.

Bạn có thể nhận được nhiều thông tin hơn bằng cách bao gồm các -v, --verbosetùy chọn.


113

iptableskiểm soát lăm bảng khác nhau: filter, nat, mangle, rawsecurity. Trên một cuộc gọi nhất định, iptableschỉ hiển thị hoặc sửa đổi một trong các bảng này, được chỉ định bởi đối số cho tùy chọn -t(mặc định là filter). Để xem trạng thái hoàn chỉnh của tường lửa, bạn cần gọi iptableslần lượt từng bảng.

Ngoài ra, để có được một đại diện chính xác của các quy tắc, bạn cần phải vượt qua tùy chọn -v. Mặt khác, một số tiêu chí quan trọng bị bỏ qua trong đầu ra, chẳng hạn như giao diện trong các quy tắc của bộ lọc (ví dụ: quy tắc nói rằng chấp nhận mọi thứ, và quy tắc nói rằng chấp nhận mọi thứ trên giao diện loopback chỉ có thể phân biệt được với giao diện loopback -v).

Vì vậy, để có được một bản trình bày đầy đủ các quy tắc của bộ lọc mạng, bạn cần

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

Ngoài ra, bạn có thể gọi iptables-savechương trình, hiển thị tất cả các quy tắc trong tất cả các bảng ở định dạng có thể được phân tích cú pháp iptables-restore. Định dạng này cũng có thể đọc được một cách hợp lý bởi con người (nó khá giống với một loạt các lệnh gọi iptableslệnh để xây dựng bảng).


56

iptables -Skhông lừa cho tôi Nó dường như liệt kê tất cả các quy tắc hoạt động, ngay cả khi dịch vụ bị tắt.

Từ trang người đàn ông:

-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).


Đây là một câu trả lời thực sự kwl, tôi cũng nhận thấy rằng trạng thái / sbin / dịch vụ iptables cho một đầu ra tương tự
TheLovelySausage

6
+1. Không 'có vẻ' về nó - từ trang man: "-S, 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". Đây là thứ tôi thường cần.
Mike S

3
tôi đã không tìm thấy điều này là trường hợp. iptables -Skhông hiển thị tất cả các quy tắc tự nhiên của tôi, mà tôi có thể thấy khi tôi chạyiptables -L -t nat
mulllhausen

1
@MikeS Từ trang man, các lệnh BOTH chỉ hoạt động trên bảng được chỉ định, được lọc theo mặc định. "Giống như mọi lệnh iptables khác, nó áp dụng cho bảng đã chỉ định (bộ lọc là mặc định)." Từ ngữ trong tài liệu được sao chép gần như giống hệt cho -S và -L, chúng chỉ khác nhau về định dạng của đầu ra, không phải là các quy tắc được in. Điều này đúng ít nhất trên Ubuntu 16.04 mà trên hệ thống của tôi là iptables v1.6.0.
Scott

Đồng ý với @mulllhausen ở đây. Tôi cần "sudo iptables --table nat --list" để hiển thị quy tắc bảng nat của tôi. bản thân cờ "-S" không hiển thị chúng.
Robert Oschler

15

Những gì tôi làm là thực thi iptables-save > iptables_bckp, điều này sẽ sao lưu tất cả các lớp, sau đó chỉnh sửa tệp và khôi phục iptablesiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

Bạn có thể tạo một bản sao lưu kép để bạn sửa đổi một trong số chúng mà không làm mất các iptables trước đây của bạn.

Đây là một thực hành cá nhân, tôi không nói đây là cách tốt nhất nhưng đối với tôi hoạt động rất tốt.

Hãy thử đi


Đây là câu trả lời thực tế duy nhất tôi đã tìm thấy cho đến nay mà thực sự bỏ tất cả các bảng.
Chris Harrington

4

Các iptableslệnh cũng đòi hỏi bạn phải xác định bàn nếu không nó mặc định để lọc bảng. Hãy thử

iptables -t nat -L

1

Bạn có thể dùng:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

Để tìm tất cả các bảng và hiển thị quy tắc cụ thể trong bảng.


1

Nếu nó thực sự sẽ giúp bạn có thể viết một tập lệnh bash và đặt nó vào một thư mục được tham chiếu theo đường dẫn của bạn hoặc tham chiếu nó qua một bí danh trong tệp ~ / .bashrc.

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

Hãy nhớ cấp cho tập lệnh bash mới của bạn quyền thực thi với chmod

Nếu sự cho phép là một vấn đề, bạn có thể phải thêm sudo trước tất cả các iptableslệnh.


0
iptables -vnxL
iptables -vnxL -tnat

có thể bổ sung, mặc dù những thứ này rất hiếm khi được sử dụng:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
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.