Lệnh iptables (Linux firewall) cho người mới

Nếu bạn đã sử dụng Máy tính trong một thời gian, bạn chắc chắn đã quen thuộc với từ “Firewall”. Chúng ta biết rằng nhìn từ bề ngoài, mọi thứ có vẻ phức tạp, nhưng qua hướng dẫn này, chúng ta sẽ giải thích cơ bản của IPTables và sử dụng các lệnh cơ bản để ngay cả khi bạn là sinh viên mạng hoặc muốn tìm hiểu sâu về mạng, bạn cũng có thể tận hưởng hướng dẫn này.

IPTables là gì?

Cách mà Firewall hoạt động rất đơn giản. Nó tạo ra một rào cản giữa các mạng đáng tin cậy và không đáng tin cậy để hệ thống của bạn có thể an toàn khỏi các gói tin độc hại.

Nhưng làm thế nào chúng ta quyết định điều gì là an toàn và điều gì không? Theo mặc định, bạn có một số tiền đề để thiết lập các quy tắc cho mô tả. Tuy nhiên, để giám sát chi tiết hơn về các gói tin đang vào và đi ra, IPTables là điều cần thiết nhất.

IPTables có thể được sử dụng cho việc tính toán cá nhân hoặc cũng có thể được áp dụng cho toàn bộ mạng. Sử dụng IPTables, chúng ta sẽ xác định một tập hợp các quy tắc mà chúng ta có thể giám sát, cho phép hoặc chặn các gói tin mạng đến hoặc đi ra.

Thay vì chỉ tập trung vào phần lý thuyết toàn bộ, chúng tôi sẽ chỉ thảo luận về những điều quan trọng trong thực tế. Vì vậy, hãy bắt đầu bằng việc hiểu các khái niệm cốt lõi của IPTables.

Hiểu về Khái niệm của IPTables

Trong khi thảo luận về IPTables, chúng ta phải hiểu 3 thuật ngữ: BảngChuỗi, và Quy tắc. Vì đây là những phần quan trọng, chúng tôi sẽ thảo luận về mỗi phần.

Vì vậy, chúng ta hãy bắt đầu với Bảng.

Bảng trong IPTables

Có 5 loại bảng trong IPTables và mỗi bảng có quy tắc khác nhau được áp dụng. Vì vậy, hãy bắt đầu với bảng phổ biến nhất “Filer”.

  1. Bảng Lọc – Đây là bảng mặc định và chính khi sử dụng IPTables. Điều này có nghĩa là mỗi khi bạn không đề cập đến bất kỳ bảng cụ thể nào trong quy tắc áp dụng, chúng sẽ được áp dụng vào bảng lọc. Như tên gọi, vai trò của Bảng Lọc là quyết định xem các gói tin có được phép đến đích hay từ chối yêu cầu của chúng.
  2. Bảng NAT (Network Address Translation) – Như tên gọi, bảng này cho phép người dùng xác định việc dịch địa chỉ mạng. Vai trò của bảng này là xác định liệu có sửa đổi và làm thế nào để sửa đổi nguồn và đích của địa chỉ gói tin.
  3. Bảng Mangle – Bảng này cho phép chúng ta sửa đổi các tiêu đề IP của gói tin. Ví dụ, bạn có thể điều chỉnh TTL để kéo dài hoặc rút ngắn số bước nhảy mạng mà gói tin có thể chịu đựng. Tương tự, các tiêu đề IP khác cũng có thể được sửa đổi theo sở thích của bạn.
  4. Bảng RAW – Sử dụng chủ yếu của bảng này là để theo dõi các kết nối vì nó cung cấp công cụ đánh dấu gói tin để xem gói tin như một phần của một phiên đang diễn ra.
  5. Bảng Security – Sử dụng Bảng Bảo mật, người dùng có thể áp dụng các dấu hiệu nội bộ SELinux bảo mật trên gói tin mạng.

Đối với hầu hết các trường hợp sử dụng, 2 loại cuối cùng (RAW và Security) của bảng không có nhiều ảnh hưởng và chỉ có 3 tùy chọn đầu tiên được tính là bảng chính.

Bây giờ, hãy nói về Chuỗi.

Chuỗi trong IPTables

Chúng hoạt động ở các điểm trong tuyến đường mạng mà chúng ta có thể áp dụng quy tắc. Trong IPTables, chúng ta có 5 loại chuỗi và chúng ta sẽ thảo luận về từng chuỗi. Hãy nhớ rằng không phải loại chuỗi nào cũng có sẵn cho mỗi loại bảng.

  1. Pre-routing – Chuỗi này được áp dụng cho bất kỳ gói tin đến nào sau khi nó đã nhập stack mạng và chuỗi này được xử lý trước bất kỳ quyết định định tuyến nào liên quan đến điểm đến cuối cùng của gói tin.
  2. Input Chain – Đây là điểm mà gói tin nhập stack mạng.
  3. Forward Chain – Đây là điểm mà gói tin đã được chuyển tiếp qua hệ thống của bạn.
  4. Output Chain – Chuỗi đầu ra được áp dụng cho gói tin khi nó được khởi tạo thông qua hệ thống của bạn và ra ngoài.
  5. Post-routing – Đây là sự đối nghịch hoàn toàn của chuỗi pre-routing và được áp dụng cho các gói tin đã được chuyển tiếp hoặc gửi đi sau khi quyết định định tuyến được thực hiện.

Bây giờ, chỉ còn một điều cần thảo luận là quy tắc, và đây là dễ dàng nhất trong ba điều chúng ta đã thảo luận ở đây. Vì vậy, hãy hoàn thành những gì còn lại trong phần lý thuyết.

Quy tắc trong IPTables

Quy tắc chỉ là tập hợp hoặc các lệnh riêng lẻ mà người dùng sử dụng để điều chỉnh lưu lượng mạng. Mỗi khi một chuỗi hoạt động, gói tin sẽ được kiểm tra so với các quy tắc xác định.

Nếu một quy tắc không đáp ứng điều kiện, nó sẽ được bỏ qua và chuyển sang quy tắc tiếp theo và nếu nó đáp ứng điều kiện, quy tắc tiếp theo sẽ được chỉ định bằng giá trị của mục tiêu.

Mỗi quy tắc có hai thành phần: thành phần khớp và thành phần mục tiêu.

  1. Thành phần khớp – Đây là các điều kiện khác nhau để xác định quy tắc có thể khớp bằng giao thức, địa chỉ IP, địa chỉ cổng, giao diện và các tiêu đề.
  2. Thành phần mục tiêu – Đây là một hành động sẽ được kích hoạt sau khi điều kiện được thoả mãn.

Đây là phần giải thích và bây giờ chúng tôi sẽ đề cập đến các lệnh cơ bản liên quan đến IPTables trong Linux.

Cài đặt IPTables Firewall trên Linux

Trong các bản phân phối Linux hiện đại như Pop!_OS, IPTables được cài đặt sẵn nhưng nếu hệ thống của bạn thiếu gói IPTables, bạn có thể dễ dàng cài đặt theo hướng dẫn dưới đây:

Để cài đặt IPTables trên các bản phân phối Linux dựa trên RHEL như Rocky Linux, AlmaLinux và CentOS Stream, sử dụng lệnh dnf sau đây.

$ sudo dnf install iptables-services

Quan trọng: Nếu bạn đang sử dụng Firewalld, bạn phải tắt nó trước khi tiến hành cài đặt. Để tắt tường lửa hoàn toàn, bạn phải sử dụng các lệnh sau:

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
$ sudo systemctl mask firewalld

Để cài đặt IPTables trên các bản phân phối Linux dựa trên Debian, sử dụng lệnh apt sau đây.

$ sudo apt install iptables

Sau khi bạn cài đặt IPTables, bạn có thể bật tường lửa bằng các lệnh sau:

$ sudo systemctl enable iptables
$ sudo systemctl start iptables

Để giám sát trạng thái dịch vụ IPTable, bạn có thể sử dụng lệnh sau:

$ sudo systemctl status iptables
Kiểm tra trạng thái IPTables

Tìm hiểu cơ bản về lệnh IPTables trên Linux

Sau khi hoàn thành quá trình cài đặt, chúng ta có thể tiếp tục với cú pháp của IPTables cho phép bạn tinh chỉnh mặc định và cấu hình theo nhu cầu của bạn.

Cú pháp cơ bản của IPTables như sau:

# iptables -t {type of table} -options {chain points} {condition or matching component} {action}

Hãy hiểu phần giải thích của lệnh trên:

Bảng

Phần đầu tiên là -t nơi chúng ta có thể chọn từ 5 tùy chọn bảng khả dụng và nếu bạn loại bỏ phần -t khỏi lệnh, nó sẽ sử dụng bảng lọc vì nó là loại bảng mặc định.

Tùy chọn chuỗi

Phần thứ hai là chuỗi. Ở đây, bạn có thể chọn từ các tùy chọn điểm chuỗi khác nhau và các tùy chọn đó được liệt kê dưới đây:

  • -A – Thêm một quy tắc mới vào chuỗi ở cuối chuỗi.
  • -C – Kiểm tra quy tắc xem liệu nó đáp ứng yêu cầu của chuỗi hay không.
  • -D – Cho phép người dùng xóa một quy tắc hiện có khỏi chuỗi.
  • -F – Điều này sẽ xóa mỗi quy tắc được xác định bởi người dùng.
  • -I – Cho phép người dùng thêm quy tắc mới vào vị trí được chỉ định.
  • -N – Tạo một chuỗi hoàn toàn mới.
  • -v – Khi sử dụng với tùy chọn liệt kê, mang lại thông tin chi tiết.
  • -X – Xóa chuỗi.

Thành phần khớp

Các tùy chọn khớp là điều kiện để kiểm tra yêu cầu chuỗi. Bạn có thể chọn từ các tùy chọn khác nhau và một số trong số chúng được liệt kê dưới đây:

Protocols -p
Source IP -s
Destination IP -d
IN interface -i
OUT interface -o

Đối với TCP, chúng như sau:

-sport
-dport
--tcp-flags

Thành phần hành động

Bây giờ, nếu chúng ta xem xét phần hành động, các tùy chọn có sẵn phụ thuộc vào loại bảng như NAT, và bảng mangle có nhiều tùy chọn hơn so với các loại khác. Bằng cách sử dụng hành động, bạn cũng có thể nhắm vào một bảng hoặc chuỗi cụ thể.

Hành động được sử dụng phổ biến nhất là Jump (-j) cho phép chúng ta một số tùy chọn như sau:

  • ACCEPT – Được sử dụng để chấp nhận gói tin và kết thúc việc truy tìm.
  • DROP – Được sử dụng để từ chối gói tin và kết thúc việc truy tìm.
  • REJECT – Đây khá tương tự như DROP nhưng nó gửi gói tin bị từ chối về nguồn.
  • RETURN – Điều này sẽ dừng việc truy tìm của gói tin trong chuỗi phụ và sẽ gửi gói tin cụ thể đến danh sách trình điều khiển cao hơn mà không có tác động.

Sau khi chúng ta đã hoàn thành cú pháp, chúng tôi sẽ chỉ cho bạn cách bạn có thể sử dụng IPTables bao gồm cấu hình cơ bản.

Liệt kê tập hợp quy tắc IPTables hiện tại

Nếu bạn muốn kiểm tra cái gì đang đi qua Firewall theo mặc định, liệt kê tập hợp quy tắc hiện tại là một cách hoàn hảo. Để liệt kê các quy tắc đã áp dụng, sử dụng lệnh sau:

$ sudo iptables -L
Liệt kê quy tắc IPTables

Cho phép/Từ chối Lưu lượng Mạng trên Cổng Cụ thể

Trong phần này, chúng tôi sẽ chỉ cho bạn cách bạn có thể cho phép hoặc từ chối lưu lượng mạng cho các cổng cụ thể. Chúng tôi sẽ chỉ cho bạn một số cổng nổi tiếng vì chúng tôi muốn hữu ích nhất có thể.
Nếu bạn muốn cho phép lưu lượng mạng HTTPS, chúng ta sẽ phải cho phép cổng số 443 bằng cách sử dụng lệnh sau:

$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Tương tự, bạn cũng có thể vô hiệu hóa lưu lượng web HTTP bằng cách sử dụng lệnh sau:

$ sudo iptables -A INPUT -p tcp --dport 80 -j REJECT

Giải thích các tùy chọn lệnh đã sử dụng:

  • -p được sử dụng để kiểm tra giao thức xác định và trong trường hợp của chúng tôi là TCP.
  • --dport được sử dụng để chỉ định cổng đích.
  • -j được sử dụng để thực hiện hành động (chấp nhận hoặc từ chối).

Kiểm soát Lưu lượng với Địa chỉ IP

Đúng, bạn cũng có thể kiểm soát lưu lượng mạng từ một địa chỉ IP. Không chỉ một hoặc hai mà còn kiểm soát cả dải địa chỉ IP và chúng tôi sẽ chỉ cho bạn như thế nào.

Để cho phép một địa chỉ IP cụ thể, sử dụng cú pháp lệnh sau:

$ sudo iptables -A INPUT -s 69.63.176.13 -j ACCEPT

Tương tự, để từ chối các gói tin từ IP cụ thể, bạn cần sử dụng cú pháp lệnh sau:

$ sudo iptables -A INPUT -s 192.168.0.27 -j DROP

Nếu bạn muốn, bạn cũng có thể kiểm soát dải địa chỉ IP bằng cách sử dụng cú pháp lệnh sau:

$ sudo iptables -A INPUT -m range --src-range 192.168.0.1-192.168.0.255 -j REJECT

Xóa Quy tắc Được Xác định bởi Người dùng

Đôi khi chúng ta có thể mắc lỗi khi tạo ra các quy tắc và cách tốt nhất để khắc phục những lỗi đó là xóa chúng. Xóa quy tắc đã được xác định là quá trình dễ nhất trong suốt hướng dẫn này và để xóa chúng, trước tiên, chúng ta sẽ phải liệt kê chúng.

Để liệt kê quy tắc đã xác định có số, sử dụng lệnh sau:

$ sudo iptables -L --line-numbers
Liệt kê quy tắc IPTables

Để xóa các quy tắc, chúng ta sẽ phải tuân theo cấu trúc lệnh sau:

$ sudo iptables -D <INPUT/FORWARD/OUTPUT> 

Hãy giả sử rằng tôi muốn xóa quy tắc thứ 10 từ INPUT  do đó tôi sẽ sử dụng lệnh sau:

$ sudo iptables -D INPUT 10

Để kiểm tra lại xem chúng ta đã thành công loại bỏ quy tắc chưa, chúng ta phải liệt kê quy tắc bằng lệnh sau:

$ sudo iptables -L –line-numbers
Xác nhận quy tắc IPTables

Như bạn có thể thấy, chúng tôi đã thành công xóa quy tắc thứ 10.

Lưu Các Quy tắc IPTables Đã xác định

Có thể bạn đang tự hỏi tại sao chúng tôi phải lưu các quy tắc khi chúng hoạt động tốt sau khi áp dụng chúng? Vấn đề là sau khi hệ thống của bạn khởi động lại, tất cả các quy tắc đã xác định mà chưa được lưu trữ sẽ bị xóa nên quan trọng đối với chúng ta để lưu chúng.

Để lưu chúng trong các distro dựa trên RHEL:

$ sudo /sbin/service iptables save

Để lưu chúng trong các bản sao dựa trên Debian:

$ sudo /sbin/iptables–save

Để tìm hiểu thêm về các quy tắc tường lửa IPtable, hãy xem hướng dẫn chi tiết của chúng tôi tại:

Suốt qua hướng dẫn này, chúng tôi đã cố gắng làm cho mọi thứ đơn giản để mọi người có thể tận hưởng. Đây là một hướng dẫn giải thích cơ bản về IPTables, nếu bạn có bất kỳ câu hỏi nào, hãy đặt trong các ý kiến.