Cách liệt kê và xóa các quy tắc firewall Iptables
Iptables là một firewall đóng role thiết yếu trong bảo mật mạng cho hầu hết các hệ thống Linux. Trong khi nhiều hướng dẫn về iptables sẽ dạy bạn cách tạo các luật firewall để bảo mật server của bạn , thì phần này sẽ tập trung vào một khía cạnh khác của quản lý firewall : liệt kê và xóa các luật .Trong hướng dẫn này, ta sẽ trình bày cách thực hiện các việc iptables sau:
- Liệt kê các luật
- Xóa gói và bộ đếm byte
- Xóa luật
- Xả chuỗi (xóa tất cả các luật trong một chuỗi)
- Xóa tất cả các chuỗi và bảng, xóa tất cả các chuỗi và chấp nhận tất cả lưu lượng truy cập
Lưu ý: Khi làm việc với firewall , hãy cẩn thận không tự khóa server của bạn bằng cách chặn lưu lượng SSH (cổng 22, theo mặc định). Nếu bạn mất quyền truy cập do cài đặt firewall , bạn có thể cần phải kết nối với nó qua console để sửa quyền truy cập của bạn . Sau khi kết nối qua console , bạn có thể thay đổi các luật firewall của bạn để cho phép truy cập SSH (hoặc cho phép tất cả lưu lượng truy cập). Nếu các luật firewall đã lưu của bạn cho phép truy cập SSH, một phương pháp khác là khởi động lại server của bạn.
Yêu cầu
Trước khi bắt đầu sử dụng hướng dẫn này, bạn nên có một account superuser riêng biệt, không phải root — user có quyền sudo — được cài đặt trên server của bạn. Nếu bạn cần cài đặt điều này, hãy làm theo hướng dẫn thích hợp:
Trước tiên, hãy xem cách liệt kê các luật . Có hai cách khác nhau để xem các luật iptables đang hoạt động của bạn: trong một bảng hoặc dưới dạng danh sách các đặc tả luật . Cả hai phương pháp đều cung cấp thông tin gần giống nhau ở các định dạng khác nhau.
Liệt kê các luật theo đặc điểm kỹ thuật
Để liệt kê tất cả các luật iptables đang hoạt động theo đặc tả, hãy chạy lệnh iptables
với tùy chọn -S
:
- sudo iptables -S
Example: Rule Specification Listing-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -N TCP -N UDP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP -A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -j REJECT --reject-with icmp-proto-unreachable -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Như bạn thấy , kết quả trông giống như các lệnh được sử dụng để tạo chúng, không có lệnh iptables
trước đó. Điều này cũng sẽ trông tương tự như các file cấu hình luật iptables, nếu bạn đã từng sử dụng iptables-persistent
hoặc iptables save
.
Liệt kê chuỗi cụ thể
Nếu bạn muốn giới hạn kết quả cho một chuỗi cụ thể ( INPUT
, OUTPUT
, TCP
, v.v.), bạn có thể chỉ định tên chuỗi ngay sau tùy chọn -S
. Ví dụ: để hiển thị tất cả các đặc tả luật trong chuỗi TCP
, bạn sẽ chạy lệnh sau:
- sudo iptables -S TCP
Example: TCP Chain Rule Specification Listing-N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Hãy xem cách thay thế để xem các luật iptables đang hoạt động, dưới dạng một bảng luật .
Liệt kê các luật dưới dạng bảng
Liệt kê các luật iptables trong chế độ xem bảng có thể hữu ích để so sánh các luật khác nhau với nhau,
Để xuất tất cả các luật iptables đang hoạt động trong một bảng, hãy chạy lệnh iptables
với tùy chọn -L
:
- sudo iptables -L
Điều này sẽ xuất ra tất cả các luật hiện tại được sắp xếp theo chuỗi.
Nếu bạn muốn giới hạn kết quả cho một chuỗi cụ thể ( INPUT
, OUTPUT
, TCP
, v.v.), bạn có thể chỉ định tên chuỗi ngay sau tùy chọn -L
.
Hãy xem một chuỗi INPUT ví dụ:
- sudo iptables -L INPUT
Example: Input Chain Rule Table ListingChain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID UDP udp -- anywhere anywhere ctstate NEW TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW ICMP icmp -- anywhere anywhere ctstate NEW REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere reject-with tcp-reset REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
Dòng đầu tiên của kết quả cho biết tên chuỗi (INPUT, trong trường hợp này), tiếp theo là policy mặc định của nó (DROP). Dòng tiếp theo bao gồm các tiêu đề của mỗi cột trong bảng và được tuân theo các luật của chuỗi. Hãy xem xét những gì mỗi tiêu đề chỉ ra:
- target : Nếu một gói phù hợp với luật , target sẽ chỉ định những gì nên làm với nó. Ví dụ: một gói có thể được chấp nhận, bị loại bỏ, được ghi lại hoặc được gửi đến một chuỗi khác để được so sánh với nhiều luật hơn
- prot : Giao thức, chẳng hạn như
tcp
,udp
,icmp
hoặcall
- opt : Hiếm khi được sử dụng, cột này chỉ ra các tùy chọn IP
- source : Địa chỉ IP nguồn hoặc mạng con của lưu lượng truy cập hoặc
anywhere
- đích : Địa chỉ IP đích hoặc mạng con của lưu lượng truy cập hoặc
anywhere
Cột cuối cùng, không được gắn nhãn, cho biết các tùy chọn của luật . Đó là, bất kỳ phần nào của luật không được các cột trước đó chỉ ra. Đây có thể là bất cứ thứ gì từ cổng nguồn và cổng đích, đến trạng thái kết nối của gói tin.
Hiển thị số lượng gói và kích thước tổng hợp
Khi liệt kê các luật iptables, cũng có thể hiển thị số lượng gói và kích thước tổng hợp của các gói theo byte, phù hợp với từng luật cụ thể. Điều này thường hữu ích khi cố gắng có một ý tưởng sơ bộ về các luật nào phù hợp với các gói. Để làm như vậy, chỉ cần sử dụng tùy chọn -L
và -v
cùng nhau.
Ví dụ: hãy xem lại chuỗi INPUT, với tùy chọn -v
:
- sudo iptables -L INPUT -v
Example: Verbose ListingChain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 DROP all -- any any anywhere anywhere ctstate INVALID 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW 17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
Lưu ý danh sách hiện có hai cột bổ sung, pkts
và bytes
.
Đến đây bạn đã biết cách liệt kê các luật firewall hoạt động theo nhiều cách khác nhau, hãy xem cách bạn có thể đặt lại bộ đếm gói và byte.
Đặt lại số lượng gói và kích thước tổng hợp
Nếu bạn muốn xóa hoặc bằng không, bộ đếm gói và byte cho các luật của bạn , hãy sử dụng tùy chọn -Z
. Chúng cũng đặt lại nếu xảy ra khởi động lại. Điều này rất hữu ích nếu bạn muốn xem liệu server của bạn có nhận được lưu lượng truy cập mới phù hợp với các luật hiện có của bạn hay không.
Để xóa bộ đếm cho tất cả các chuỗi và luật , hãy sử dụng tùy chọn -Z
của chính nó:
- sudo iptables -Z
Để xóa bộ đếm cho tất cả các luật trong một chuỗi cụ thể, hãy sử dụng tùy chọn -Z
và chỉ định chuỗi. Ví dụ, để xóa bộ đếm chuỗi INPUT, hãy chạy lệnh này:
- sudo iptables -Z INPUT
Nếu bạn muốn xóa bộ đếm cho một luật cụ thể, hãy chỉ định tên chuỗi và số luật . Ví dụ: để 0 bộ đếm cho luật đầu tiên trong chuỗi INPUT, hãy chạy lệnh này :
- sudo iptables -Z INPUT 1
Đến đây bạn đã biết cách đặt lại gói iptables và bộ đếm byte, hãy xem hai phương pháp được dùng để xóa chúng.
Xóa luật theo đặc điểm kỹ thuật
Một trong những cách để xóa các luật iptables là theo đặc tả luật . Để làm như vậy, bạn có thể chạy lệnh iptables
với tùy chọn -D
theo sau là đặc tả luật . Nếu bạn muốn xóa các luật bằng phương pháp này, bạn có thể sử dụng kết quả của danh sách luật , iptables -S
, để được trợ giúp.
Ví dụ: nếu bạn muốn xóa luật loại bỏ các gói đến không hợp lệ ( -A INPUT -m conntrack --ctstate INVALID -j DROP
), bạn có thể chạy lệnh này:
- sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
Lưu ý tùy chọn -A
, được sử dụng để chỉ ra vị trí luật tại thời điểm tạo, nên được loại trừ ở đây.
Xóa luật theo chuỗi và số
Cách khác để xóa các luật iptables là theo chuỗi và số dòng của nó. Để xác định số dòng của luật , hãy liệt kê các luật trong định dạng bảng và thêm tùy chọn --line-numbers
:
- sudo iptables -L --line-numbers
[secondary_output Example Output: Rules with Line Numbers] Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED 2 ACCEPT all -- anywhere anywhere 3 DROP all -- anywhere anywhere ctstate INVALID 4 UDP udp -- anywhere anywhere ctstate NEW 5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 6 ICMP icmp -- anywhere anywhere ctstate NEW 7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable 8 REJECT tcp -- anywhere anywhere reject-with tcp-reset 9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable 10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED ...
Thao tác này thêm số dòng vào mỗi hàng luật , được biểu thị bằng tiêu đề num .
Khi bạn biết mình muốn xóa luật nào, hãy ghi lại chuỗi và số dòng của luật . Sau đó chạy lệnh iptables -D
theo sau là chuỗi và số luật .
Ví dụ: nếu ta muốn xóa luật đầu vào làm rơi các gói không hợp lệ, ta có thể thấy rằng đó là luật 3
của chuỗi INPUT
. Vì vậy, ta nên chạy lệnh này:
- sudo iptables -D INPUT 3
Đến đây bạn đã biết cách xóa các luật firewall riêng lẻ, hãy xem qua cách bạn có thể xóa các chuỗi luật .
Chuỗi xả
Iptables cung cấp một cách để xóa tất cả các luật trong một chuỗi hoặc xóa một chuỗi. Phần này sẽ trình bày nhiều cách khác nhau để thực hiện việc này.
Lưu ý: Hãy cẩn thận để không tự khóa mình khỏi server của bạn, thông qua SSH, bằng cách đưa ra một chuỗi với policy loại bỏ hoặc từ chối mặc định. Nếu bạn làm vậy, bạn có thể cần phải kết nối với nó qua console để sửa quyền truy cập của bạn .
Xả một chuỗi đơn
Để xóa một chuỗi cụ thể, điều này sẽ xóa tất cả các luật trong chuỗi, bạn có thể sử dụng tùy chọn -F
hoặc tương đương --flush
, và tên của chuỗi để xóa.
Ví dụ: để xóa tất cả các luật trong chuỗi INPUT
, hãy chạy lệnh sau:
- sudo iptables -F INPUT
Xả tất cả các chuỗi
Để xóa tất cả các chuỗi, điều này sẽ xóa tất cả các luật firewall , bạn có thể sử dụng tùy chọn -F
hoặc tương đương --flush
, bởi chính nó:
- sudo iptables -F
Xóa tất cả các luật , xóa tất cả các chuỗi và chấp nhận tất cả
Phần này sẽ chỉ cho bạn cách xóa tất cả các luật , bảng và chuỗi firewall của bạn và cho phép tất cả lưu lượng mạng.
Lưu ý: Điều này sẽ vô hiệu hóa hiệu quả firewall của bạn. Bạn chỉ nên làm theo phần này nếu bạn muốn bắt đầu lại cấu hình firewall của bạn .
Đầu tiên, hãy đặt các policy mặc định cho từng chuỗi tích hợp thành ACCEPT
. Lý do chính để làm điều này là đảm bảo rằng bạn sẽ không bị khóa khỏi server của bạn qua SSH:
- sudo iptables -P INPUT ACCEPT
- sudo iptables -P FORWARD ACCEPT
- sudo iptables -P OUTPUT ACCEPT
Sau đó xóa bảng nat
và mangle
, xóa tất cả các chuỗi ( -F
) và xóa tất cả các chuỗi không mặc định ( -X
):
- sudo iptables -t nat -F
- sudo iptables -t mangle -F
- sudo iptables -F
- sudo iptables -X
Tường lửa của bạn bây giờ sẽ cho phép tất cả lưu lượng mạng. Nếu bạn liệt kê các luật của bạn bây giờ, bạn sẽ thấy không có luật nào và chỉ còn lại ba chuỗi mặc định (INPUT, FORWARD và OUTPUT).
Kết luận
Sau khi xem qua hướng dẫn này, bạn nên làm quen với cách liệt kê và xóa các luật firewall iptables của bạn .
Lưu ý bất kỳ thay đổi nào của iptables thông qua lệnh iptables
là tạm thời và cần được lưu lại để tồn tại qua các lần khởi động lại server . Điều này được đề cập trong phần Luật lưu của hướng dẫn Luật và lệnh firewall chung.
Các tin liên quan
Iptables Essentials: Các quy tắc và lệnh firewall chung2015-08-10
Cách cô lập server trong mạng riêng bằng Iptables
2014-06-04
Cách thiết lập firewall bằng Iptables trên Ubuntu 14.04
2014-05-06
Cách thức hoạt động của firewall Iptables
2014-05-02
Cách thiết lập firewall Iptables cơ bản trên Centos 6
2013-04-16
Cách thiết lập firewall Iptables cơ bản trên Centos 6
2013-04-16