Iptables là gì? Hướng dẫn cấu hình và cách sử dụng iptables

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ủ.

Iptables là gì?
Iptables là gì?

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

iptables là gì
Thứ tự xử lý các tables & chains trong flow xử lý gói tin

 

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  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  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  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

iptables là gì
Các bảng trong IPtables là gì?

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
Bash
Copy
  • -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
Bash
Copy
  • -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  ESTABLISHED trở lại client.

Nếu bạn mong muốn có thể ping các máy tính khác  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  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 

Cám ơn bạn đã quan tâm đến sản phẩm tại Khotenmien.vn

Chúng tôi sẽ liên hệ bạn ngay nhé!