Hướng dẫn Iptables toàn tập [NEW]

Sử dụng tường lửa (Bức tường lửa) gần như là việc cần làm khi bạn sử dụng máy chủ để chống lại việc truy cập bất hợp pháp bằng cách thiết lập các quy tắc chặn truy cập của riêng bạn. Trong các bản phân phối Linux như CentOS, Ubuntu, Fedora, .. đều được tích hợp công cụ tường lửa gọi là Iptables nhưng đôi khi hơi khó sử dụng đối với người mới.

Trong bài viết này, tôi sẽ giải thích chi tiết về cách “chinh phục” Iptables Đây là cách đơn giản và dễ hiểu nhất. Các bạn lưu ý rằng, trong bài viết này mình sẽ hướng dẫn các bạn dễ hiểu, ngắn gọn nên những thứ ít dùng, không cần thiết mình đều lược bỏ.

Bắt đầu với Iptables

Trước khi bắt đầu, tôi muốn cho bạn xem danh sách một số quy tắc tường lửa yêu cầu trong mỗi máy chủ. Theo mặc định, iptables sẽ không có bất kỳ quy tắc nào.

Các quy tắc dưới đây mình sẽ viết theo cấu trúc hiển thị các quy tắc trong iptables, các bạn đừng vội thắc mắc cách xem các quy tắc mà chỉ cần hiểu ý nghĩa của từng dòng là được.

TARGET    PROT   OPT  IN   OUT   SOURCE     DESTINATION
ACCEPT    all    --   lo   any   anywhere   anywhere
ACCEPT    all    --   any  any   anywhere   anywhere    ctstate  RELATED,ESTABLISHED
ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:ssh
ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:http
ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:https
DROP      all    --   any  any   anywhere   anywhere

Ngay ở đoạn đầu tiên, chúng ta có các cột như TARGET, PROT, OPT, IN, OUT, SOURCE, DESTINATION, ý nghĩa của mỗi cột như sau:

  • MỤC TIÊU: Hành động được thực hiện cho mỗi chuỗi quy tắc.
  • PROT: là viết tắt của từ Protocol, có nghĩa là giao thức. Đó là, các giao thức sẽ được áp dụng để thực thi quy tắc này. Ở đây chúng tôi có 3 lựa chọn là tất cả các, tcp hoặc udp. Các ứng dụng như SSH, FTP, sFTP, .. đều sử dụng loại. giao thức TCP.
  • IN: Thiết bị mạng nhận kết nối đến được áp dụng cho quy tắc, chẳng hạn như lo, eth0, eth1.
  • NGOÀI: Các thiết bị mạng phục vụ nhu cầu gửi kết nối đi phải tuân theo các quy tắc.
  • ĐIỂM ĐẾN: Địa chỉ thăm khám được phép áp dụng quy tắc.

Để dễ hiểu hơn, tôi xin lấy quy tắc đầu tiên để giải thích cho bạn:

ACCEPT    all    --   lo   any   anywhere   anywhere

Chấp nhận tất cả các kết nối thông qua thiết bị lo, lo ở đây có nghĩa là “Giao diện lặp lại“, Là một thiết bị mạng ảo nội bộ, chẳng hạn như IP 127.0.0.1 được kết nối thông qua thiết bị này.

ACCEPT    all    --   any  any   anywhere   anywhere    ctstate  RELATED,ESTABLISHED

Cho phép giữ các kết nối hiện tại. Điều này có nghĩa là khi bạn đang ở trong SSH và sửa đổi Tường lửa, nó sẽ không loại bạn khỏi SSH nếu bạn không đáp ứng các quy tắc.

ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:ssh

Cho phép kết nối với SSH Server từ mọi thiết bị, bất kỳ ai và ở bất kỳ đâu. Mặc định nó sẽ hiển thị dpt: ssh để đại diện cho cổng SSH 22, nếu bạn đổi SSH sang cổng khác nó sẽ hiển thị số cổng.

ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:http

Cho phép kết nối trên cổng 80, theo mặc định nó sẽ được biểu thị bằng từ http.

ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:https

Cho phép các kết nối trên cổng 443, theo mặc định nó sẽ được biểu thị bằng từ https.

DROP      all    --   any  any   anywhere   anywhere

Ngắt kết nối tất cả các kết nối khác nếu không thuộc các loại kết nối trên.

Cách tạo quy tắc mới

Nếu iptables của bạn chưa được thiết lập, hãy nhập lệnh iptables -L -v nó sẽ trả về một cái gì đó như thế này:

Chain INPUT (policy ACCEPT 2245 packets, 200K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 1795 packets, 147K bytes)
 pkts bytes target     prot opt in     out     source               destination

Trong đoạn trên, bạn sẽ thấy nó được chia thành 3 nhóm với 3 loại quy tắc đó là:

  • ĐẦU VÀO: áp dụng cho các kết nối đến.
  • Ở ĐẰNG TRƯỚC: áp dụng cho các kết nối đã được trỏ đến một vị trí khác.
  • ĐẦU RA: áp dụng cho các kết nối gửi đi từ máy chủ.

Được rồi, bây giờ chúng ta sẽ thêm một quy tắc đơn giản vào iptables bằng lệnh sau:

[bash]iptables -A INPUT -i lo -j CHẤP NHẬN[/bash]

Đoạn văn trên có nghĩa là:

  • – ĐẦU VÀO: khai báo kiểu kết nối sẽ được áp dụng (A có nghĩa là Nối).
  • -i lo: Khai báo thiết bị mạng áp dụng (ý là Giao diện).
  • -j CHẤP NHẬN: khai báo hành động sẽ được áp dụng cho quy tắc này (j có nghĩa là Jump).

Và bây giờ hãy thử gõ lại lệnh iptables -L -v tốt, bạn sẽ thấy quy tắc chúng tôi vừa thêm xuất hiện trong đó.

Hướng dẫn Iptables toàn tập [NEW]

Sau khi thêm quy tắc hoặc làm bất kỳ điều gì khác, hãy nhớ nhập lệnh lưu quy tắc và khởi động lại iptables để áp dụng các thay đổi.

[bash]

dịch vụ iptables tiết kiệm
dịch vụ iptables khởi động lại
[/bash]

Tiếp tục, bây giờ chúng tôi thêm quy tắc cho phép lưu các kết nối hiện tại để tránh chặn bạn khỏi máy chủ.

[bash]iptables -A INPUT -m conntrack –ctstate LIÊN QUAN, THÀNH LẬP -j CHẤP NHẬN[/bash]

Cấu trúc trên giống với quy tắc chúng ta vừa thêm, nhưng nó sẽ có hai tham số mới:

  • -m conntrack: Áp dụng cho các kết nối trong mô-đun có tên “Theo dõi kết nối“. Mô-đun này sẽ có 4 kiểu kết nối: MỚI, THIẾT LẬP, LIÊN QUAN và KHÔNG HỢP LỆ. Cụ thể, trong quy tắc này, chúng tôi sẽ sử dụng các loại LIÊN QUAN và ĐÃ THIẾT LẬP để lọc các kết nối đến.
  • –Ctstate LIÊN QUAN, ĐÃ THÀNH LẬP: Khai báo kiểu kết nối áp dụng của mô-đun Theo dõi Kết nối mà tôi đã đề cập ở trên.

Và đây là đoạn mã tạo quy tắc cho phép truy cập cổng 22 SSH.

[bash]iptables -A INPUT -p tcp –dport 22 -j CHẤP NHẬN[/bash]

  • -p tcp: Giao thức được áp dụng.
  • – Cổng 22: Cổng được phép áp dụng.

Và cho phép 80. cổng vào

[bash]iptables -A INPUT -p tcp –dport 80 -j CHẤP NHẬN[/bash]

Nhưng sẽ chặn tất cả các kết nối còn lại:

[bash]iptables -A INPUT -j DROP[/bash]

Bây giờ bạn có tất cả các quy tắc cần thiết mà tôi đã đề cập ở đầu bài viết. : D

Thêm quy tắc

Trong phần tạo quy tắc, bạn có để ý rằng chúng tôi luôn sử dụng tham số -MỘT (tức là Nối) để thêm một quy tắc mới vào danh sách các quy tắc của iptables, mỗi khi một quy tắc mới được tạo, nó sẽ tự động đặt nó cuối cùng.

Nhưng nếu bạn muốn thêm quy tắc và đặt nó ở vị trí mong muốn, hãy sử dụng tham số -TÔI thay vì -MỘTNhư là:

[bash]iptables -I INPUT 2 -p tcp –dport 443 -j CHẤP NHẬN[/bash]

Trong đó, – ĐẦU VÀO 2 nghĩa là tôi đặt quy tắc này ở dòng thứ 2 trong danh sách các quy tắc của kiểu kết nối INPUT. Cũng vui lòng thêm rằng cổng 443 là cổng HTTPS / SSL.

Cách xóa quy tắc

Ở trên tôi đã nói về cách thêm quy tắc cho phép kết nối đến cổng 22 của SSH. Nhưng nếu bạn đã thay đổi cổng SSH, tất nhiên chúng tôi sẽ không cần quy tắc này nữa, vì vậy chúng tôi sẽ cần xóa nó để thêm quy tắc mới.

Trước khi xóa quy tắc, bạn cần xác định quy tắc nằm ở hàng nào trong kiểu kết nối (INPUT, OUTPUT, ..). Chỉ cần gõ lệnh iptables -L ra xem và đếm.


Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all — anywhere anywhere
ACCEPT tcp — anywhere anywhere tcp dpt:https
ACCEPT all — anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp — anywhere anywhere tcp dpt:ssh
ACCEPT tcp — anywhere anywhere tcp dpt:http
DROP all — anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Vì vậy, ở đây tôi cần xóa quy tắc số 4 của INPUT.


iptables -D INPUT 4

Ngoài ra, nếu bạn muốn xóa tất cả các quy tắc có chứa hành động DROP, bạn có thể sử dụng lệnh sau:

[bash]iptables -D INPUT -j DROP[/bash]

Bạn có thể gõ nó để kiểm tra xem nó có còn ở đó không.

Phần kết

Tuy iptables có một số khái niệm khác nhưng mình thấy nó ít được sử dụng nên mình không đưa vào bài viết này để tránh việc nén quá nhiều kiến ​​thức, các bạn có thể xem thêm tại HowTos / Network / Iptables của CentOS để nắm rõ hơn.

Cũng phải nói thêm rằng iptables khá quan trọng nên nếu có thể bạn hãy nắm vững cách sử dụng của nó. Vì ngoài iptables còn có một số ứng dụng khác như CSF Firewall, Fail2Ban để thiết lập tường lửa nhưng nó vẫn sử dụng iptables. Tôi sẽ nói chi tiết về các công cụ này trong các bài viết sau.

Đánh giá nội dung này

Tiếp tục đọc trong bộ truyện