Trong các server Linux luôn tích hợp sẵn một hệ thống tường lửa (firewall), đây là công cụ tường lửa rất mạnh. Tuy nhiên, công cụ này lại hơi khó sử dụng cho người mới. Trong bài viết này, khotenmien.vn sẽ giải thích khái niệm Iptables là gì? Và cấu trúc cũng như cách sử dụng Iptables, đưa ra một vài ví dụ cụ thể tạo tường lửa trên server.
Iptables là gì?
IPtables là phần mềm tường lửa không mất lệ phí trong Linux, cho phép thiết lập các quy tắc riêng để làm chủ truy tìm, tăng tính bảo mật. Khi dùng máy chủ, tường lửa là một trong những công cụ quan trọng giúp bạn ngăn chặn các truy cập không hợp lệ. Đối với các bản phân phối Linux như Ubuntu, Fedora, CentOS…
IPtables là một phần mềm tường lửa có sẵn trên Linux, IPtables Linux firewall cho phép người sử dụng cài đặt các quyền truy cập để làm chủ lưu lượng 1 cách chọn lọc trên máy chủ.

Thành phần của IPtables là gì?

Về căn bản, IPtables chỉ là bố cục và giao diện dòng lệnh để tương tác với packet filtering của netfilter framework. Cơ chế packet filtering của IPtables hoạt động gồm 3 thành phần là Tables, Chains và Targets.
Các bảng trong IPtables là gì?
Table được IPtables được dùng để định nghĩa các rules (quy tắc) dành cho các gói tin. Trong số đó, có các Table sau.
-
Filter Table
Là một trong những tables được IPtables sử dụng nhiều nhất, Filter Table sẽ quyết định việc một gói tin có được đi đến đích dự kiến hay từ chối yêu cầu của gói tin.
-
NAT Table
Để dùng các rules về NAT(Network Address Translation), NAT Table sẽ có trách nhiệm chỉnh sửa source(IP nguồn) hoặc destination(IP đích) của gói tin khi thực hiện cơ chế NAT.
-
Mangle Table
Cho phép chỉnh sửa header của gói tin, giá trị của các trường TTL, MTU, Type of Service.
-
Raw Table
IPtables là một stateful firewall với các gói tin được kiểm tra liên quan đến trạng thái(state). Ví dụ gói có thể thuộc một phần của một kết nối mới hoặc thuộc một phần của kết nối hiện có. Raw Table có thể giúp bạn làm việc với các gói tin trước khi kernel bắt đầu kiểm tra tình trạng & có thể loại một vài gói khỏi việc tracking vì vấn đề hiệu năng của hệ thống.
-
Security Table
Một số kernel có thể hỗ trợ thêm Security Table, được dùng bởi SELinux để thiết lập các chính sách bảo mật.
Chains
Chains được xây dựng với một vài lượng rõ ràng ứng với mỗi Table, giúp lọc gói tin tại các điểm khác nhau.
- Chain PREROUTING hiện hữu trong Nat Table, Mangle Table & Raw Table, các rules trong chain sẽ được thực thi ngay khi gói tin vào đến bố cục và giao diện mạng (Network Interface).
- Chain INPUT chỉ có ở Mangle Table & Nat Table với các rules được thực thi ngay trước khi gói tin gặp tiến trình.
- Chain OUTPUT tồn tại ở Raw Table, Mangle Table và Filter Table, có các rules được thực thi một khi gói tin được tiến trình tạo ra.
- Chain FORWARD hiện hữu ở Manle Table & Filter Table, có các rules được thực thi cho các gói tin được định tuyến qua host hiện tại.
- Chain POSTROUTING chỉ tồn tại ở Manle Table & Nat Table với các rules được thực thi khi gói tin rời bố cục và giao diện mạng.
Target
Target có thể sẽ được hiểu là hành động dành cho các gói tin khi gói tin thỏa mãn các rules đặt ra.
- ACCEPT: Chấp thuận và cho phép gói tin đi vào hệ thống.
- DROP: Loại gói tin, không có gói tin giải đáp.
- REJECT: Loại gói tin những có trả lời table gói tin khác. Ví dụ: trả lời table 1 gói tin “connection reset” đối với gói TCP hoặc “destination host unreachable” đối với gói UDP & ICMP.
- LOG: Chấp thuận gói tin mặc dù vậy có ghi lại log.
Gói tin sẽ được đi qua tất cả các rules đặt ra mà không dừng lại ở bất kì rule nào đúng. Trường hợp gói tin không khớp với rules nào mặc định sẽ được chấp nhận

Làm như thế nào để dùng iptables?
Khi nắm rõ định nghĩa iptables là gì, sau đây sẽ chỉ dẫn cách thực hiện một số tác vụ trong iptables.
Liệt kê cấu hình hiện tại:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
- -P cho policy. Có các policy khác nhau như đã đề cập ở trên.
Cho phép các packet bên trong local interface của bạn khi di chuyển mà không bị chặn.
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p tcp --dport 67 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 68 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 68 -j ACCEPT
- -p dành cho giao thức. Các giao thức khác nhau có thể được sử dụng như tcp, udp, gre, v.v. Bình thường DNS & DHCP tiếp xúc thông qua giao thức UDP. Thế nhưng với các packet lớn hơn, TCP thường được dùng. Đó là nguyên nhân vì sao tôi đề cập đến các rule đấy.
- –dport cho destination port. Bạn cũng có thể dùng –sport cho source port.
Để mở kết nối SSH khi máy tính của bạn là máy client, bạn cần phải thêm hai rule theo cả hai hướng.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Đây là hướng trái lại với rule trước đây, mở các packet đến port 22 và gửi các packet thành công có tình trạng RELATED và ESTABLISHED trở lại client.
Nếu bạn mong muốn có thể ping các máy tính khác và cho phép các máy tính khác có thể ping máy tính của bạn, bạn nên cho phép các packet icmp.
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
Thao tác này sẽ cho phép cả lưu lượng HTTP và HTTPS ra khỏi hệ thống của bạn.
Bạn mong muốn ghi lại các packet bị DROP để bạn có cái nhìn về những gì đang diễn ra. Nó cũng sẽ giúp bạn nếu bạn mong muốn mở một port trong tương lai.
iptables -t nat -A OUTPUT -p tcp --dport 22 --destination 192.168.40.40 -j DNAT --to-destination 123.123.123.123:4040
Sau lệnh trên, mọi lưu lượng đi từ máy tính của bạn đến địa chỉ IP 192.168.40.40 port 22 sẽ được gửi đến địa chỉ IP 123.123.123.123 port 4040.
Cờ –destination sẽ lọc các packet dựa trên destination IP.
Khi mong muốn phủ định rule thì hãy sử dụng dấu chấm than !
vì như thế, bạn sẽ phủ định một rule thông qua việc đặt trước nó bằng dấu !. Ví dụ ! –Source 192.168.40.40 sẽ có hiệu lực đối với bất kỳ source IP nào ngoài 192.168.40.40.
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
MASQUERADE hợp nhất khi bạn cần forward mọi traffic từ một Interface cụ thể để được định tuyến qua máy tính của bạn mà không cần thay đổi bất kỳ thứ gì bên trong packet. Tất nhiên, bạn có thể cần cài đặt tham số kernel trước khi cài đặt việc thực hiện các thực hành các bước trên:
echo net.ipv4.ip_forward =1> /etc/sysctl.d/30-ip-forward.conf
Iptables là công cụ với phần đông các tính năng. Các lệnh trên là những lệnh được dùng nhiều nhất. & đôi lúc bạn sẽ thấy mình đang dùng lệnh này hoặc lệnh kia.
Đọc kỹ chỉ dẫn dùng vì họ có thông tin chi tiết tốt:
man iptablesman iptables-extension
Lời kết
Để trả lời iptables là gì? Vietnix đã thử làm rõ ràng các phần bên trong & bên ngoài của iptables. Đấy một công cụ để quản lý tường lửa ở Linux. Hầu hết các công cụ khác như firewalld và ufw sẽ đủ dễ dàng để giúp bạn thao tác dễ dàng hơn. Thế nhưng bạn sẽ không nhận được nhiều tính linh động trong việc xử lý các rule mà bạn thấy phù hợp với dữ liệu. Nếu có thắc mắc gì thì hãy để comment phía dưới để mình liên hệ với bạn sớm nhất có thể nhé !
Xem thêm : Nhúng video là gì? Cách nhúng video hiệu quả nhất
Thanh Xuân – Tổng hợp, bổ sung