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,icmphoặ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
 

