Cấu hình Iptables Firewall

Tác giả admin+, T.Ba 14, 2011, 03:54:44 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cấu hình Iptables Firewall


1. Giới thiệu.

Trong môi trường Linux phần mềm tường lửa phổ biến và cơ bản nhất đó là Iptables, thông qua nó bạn có thể dễ dàng hiểu được nguyên lý hoạt động của một hệ thống tường lửa nói chung. Sau đây là những kiến thức cơ bản nhất mà mình muốn tóm tắt về tường lửa Iptables.


2. Nguyển tắc hoạt động của tường lửa Iptables.

Iptables cơ bản gồm ba bảng FILTER, MANGLE, NAT và các chain trong mỗi bảng, với chúng thì người quản trị có thể tạo ra các quy tắc cho phép các gói tin vào ra hệ thống tuỳ theo ý muốn của mình. Chức năng cụ thể của chúng như sau.

  • Mangle: Dùng để chỉnh sửa QOS(qulity of service) bit trong phần TCP Header của gói tin.
  • Filter: Đúng như tên gọi nó dùng để lọc các gói tin gồm các build-in chain.
  • Forward chain: Lọc những gói tin đi qua hệ thống.
  • Input chain: Lọc những gói tin đi vào hệ thống.
  • Output chain: Những gói tin đi ra từ hệ thống.
  • Nat: Sửa địa chỉ gói tin gồm các build-in chain.
  • Pre-routing: Sửa địa chỉ đích của gói tin trước khi nó được routing bởi bảng routing của hệ thống (destination NAT hay DNAT).
  • Post-routing: Ngược lại với Pre-routing, nó sửa địa chỉ nguồn của gói tin sau khi gói tin đã được routing bởi hệ thống (SNAT).

Mỗi quy tắc mà bạn tạo ra phải tương ứng với một chain, table nào đó. Nếu bạn không xác định tables nào thì Iptables coi như là mặc định là cho bảng FILTER.

Có thể tóm tắt trình tự xử lý gói tin của tường lửa Iptables bằng hình vẽ như sau.

  • Các gói tin từ ngoài đi vào sẽ được kiểm tra bởi các Pre-routing chain đầu tiên xem xem nó có cần DNAT không, sau đó gói tin được routing. Nếu gói tin cần đi tới một hệ thống khác (protected network) nó sẽ được lọc bởi các FORWARD chain của bảng FILTER và nếu cần nó có thể được SNAT bởi các Post-routing chain trước khi đến được hệ thống đích.
  • Tương tự khi hệ thống đích cần trả lời, gói tin sẽ đi theo thứ tự như vậy nhưng theo chiều ngược lại. Lưu ý trong hình vẽ những FORWARD và Post-routing chain của bảng mangle chỉ tác động vào đặc điểm QOS ( Quality of Service ) của gói tin.
  • Nếu gói tin được gửi tới hệ thống (hệ thống chứa iptables) nó sẽ được xử lý bởi các INPUT chain và nếu không bị lọc bỏ nó sẽ được xử lý bởi một dịch vụ ( System Service ) nào đó chạy trên hệ thống. Khi hệ thống gửi trả lời, gói tin mà nó gửi đi được xử lý bởi các OUTPUT chain và có thể được xử ký bởi các Post-routing chain của bảng FILTER và bảng MANGLE nếu nó cần SNAT hay QoS.

3. Targets và Jumps.

Những quy tắc của tưởng lửa Iptables sẽ kiểm tra những gói địa chỉ IP và cố gắng xác định nó sẽ được xử lý theo kiểu nào (target), khi đã được xác định gói địa chỉ IP sẽ được xử lý theo kiểu đó. Sau đây là một số build-in targets thường được sử dụng.

  • ACCEPT: Tường lửa Iptables chấp nhận gói tin, đưa nó qua hệ thống mà không tiếp tục kiểm tra nó nữa.
  • DROP: Tường lửa Iptables loại bỏ gói tin, không tiếp tục xử lý nó nữa.
  • LOG: Thông tin của gói tin sẽ được ghi lại bởi syslog hệ thống, tường lửa Iptables sẽ tiếp tục xử lý gói tin bằng những quy tắc tiếp theo.
  • REJECT: Chức năng của nó cũng giống như DROP tuy nhiên nó sẽ gửi một error message tới máy khách đã gửi gói tin.
  • DNAT: Dùng để sửa lại địa chỉ đích của gói tin.
  • SNAT: Dùng để sửa lại địa chỉ nguồn của gói tin
  • MASQUERADE: Cũng là một kiểu dùng để sửa địa chỉ nguồn của gói tin.

Để xây dựng các quy tắc của tường lửa Iptables thì các bạn còn phải sử dụng các tuỳ chọn để tạo điều kiện so sánh. Sau đây là một số tuỳ chọn thường dùng.

  • t : Chỉ ra tên của bảng mà rule của bạn sẽ dược ghi vào (mặc định là FILTER ).
  • j : Nhẩy đến một kiểu xử lý (target) tương ứng như đã định nghĩa ở trên nếu điều kiện so sánh thoả mãn.
  • A : Ghi nối tiếp rule vào đuôi một chain.
  • p: So sánh protocol gói tin.
  • s: So sánh địa chỉ nguồn của gói tin.
  • d : So sánh địa chỉ đích của gói tin.
  • i: So sánh tên card mạng mà gói tin đi vào hệ thống qua đó.
  • o: So sánh tên card mạng mà gói tin từ hệ thống đi ra qua đó.
  • p tcp –sport: Xác định port nguồn của gói tin TCP.
  • p tcp –dport: xác định port đích của gói tin TCP.
  • p udp –sport: Xác định port nguồn của gói tin UDP.
  • p udp –dport: Xác định port đích của gói tin UDP.
  • syn: Xác định gói tin có phải là một yêu cầu tạo một kết nối TCP mới không.
  • icmp-type : Các định loại gói icmp (echo-reply hay echo-request).
  • m multiport –sport < port, port >: Xác định một loạt các giá trị port nguồn.
  • m multiport –dport < port, port >:Xác định một loạt các giá trị port đích.
  • m multiport –port < port, port >: Xác định một loạt các giá trị port ( không phân biệt nguồn hay đích ).
  • m –state < state >: Xác định trạng thái kết nối mà gói tin thể hiện.
  • ESTABLISHED: Gói tin thuộc một kết nối đã được thiết lập.
  • NEW: Gói tin thể hiện một yêu cầu kết nối.
  • RELATED : Gói tin thể hiện một yêu cầu kết nối thứ hai (có liên quan đến kết nối thứ nhất, thường xuất hiện ở những giao thức FPT hay ICMP)
  • INVALID : Thể hiện một gói tin không hợp lệ.

4. Sau đây là một số quy tắc minh hoạ.

  • Chấp nhận những gói tin từ mọi địa chỉ ip (-s 0/0) đi vào từ eth0, gửi đến hệ thống có địa chỉ 192.168.1.1

Mã nguồn [Chọn]
iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP -j ACCEPT
  • Cho phép những gói tin từ mọi địa chỉ IP đi vào từ eth0 đi ra eth1 để đến hệ thống có địa chỉ 192.168.1.58, giá trị port nguồn của các gói tin trong phạm vi 1024 đến 65535 và giá trị port đích là 80 ( www/https).

Mã nguồn [Chọn]
iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \ –sport 1024:65535 –dport 80 -j ACCEPT
  • Hệ thống được phép thực hiện lệnh ping ra ngoài.

Mã nguồn [Chọn]
iptables -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT

  • Giới hạn chỉ nhận một gói tin Ping trong một giây.

Mã nguồn [Chọn]
iptables -A INPUT -p icmp –icmp-type echo-request \ -m limit –limit 1/s -i eth0 -j ACCEPT
  • Giới hạn trong một giây chỉ nhận 5 yêu cầu kết nối TCP (chống kiểu tấn công syn flood)

Mã nguồn [Chọn]
iptables -A INPUT -p tcp –syn -m limit –limit 5/s -i eth0 -j ACCEPT
  • Mở dịch vụ Web trên hệ thống 192.168.1.58. Chỉ cho phép những gói tin có giá trị port nguồn trong phạm vi 1024:65535, giá trị port đích 80,443 (https,httpss) từ mọi địa chỉ ip đi vào card mạng eth0 đi ra card mạng eth1 đến hệ thống 192.168.1.58. Cho phép hệ thống có địa chỉ 192.168.1.58 gửi ( gửi trả lời ) những gói tin TCP qua card mạng eth1 đi ra card mạng eth0.

Mã nguồn [Chọn]
iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \ –sport 1024:65535 -m multiport –dports 80,443 -j ACCEPT
Mã nguồn [Chọn]
iptables -A FORWARD -d 0/0 -o eth0 -s 192.168.1.58 -i eth1 -p TCP \ -m state –state ESTABLISHED -j ACCEPT
  • Thông thường tường lửa Iptables lưu trữ cấu hình hiện tại của nó tại /etc/sysconfig/iptables, mỗi lần hệ thống khởi động lại thì nó sẽ dùng lệnh iptable-restore để đọc lại cấu hình từ tập tin này và active nó. Để xem cấu hình của tưởng lửa Iptables hiện tại thì các bạn có thể dùng lệnh sau.

Mã nguồn [Chọn]
# cat /etc/sysconfig/iptables
Hoặc

Mã nguồn [Chọn]
# iptables-save
Mã nguồn [Chọn]
# Generated by iptables-save v1.2.9 on Mon Nov 8 11:00:07 2004
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [144:12748]
:RH-Firewall-1-INPUT – [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp –icmp-type 255 -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Nov 8 11:00:07 2004

  • Để sửa cấu hình của tường lửa Iptables thì các bạn không nên chỉnh sửa trực tiếp nội dung của tập tin này /etc/sysconfig/iptables mà thay vào đó bạn nên lưu cấu hình hiện tại ra một tập tin tạm thời nào đó như sau.

Mã nguồn [Chọn]
# iptables-save > firewall-config
  • Để xem cấu hình của tưởng lửa Iptables hiện tại thì các bạn có thể dùng lệnh sau.

Mã nguồn [Chọn]
# cat firewall-config
Mã nguồn [Chọn]
# Generated by iptables-save v1.2.9 on Mon Nov 8 11:00:07 2004
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [144:12748]
:RH-Firewall-1-INPUT – [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp –icmp-type 255 -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Nov 8 11:00:07 2004

  • Chỉnh sửa tập tin cấu hình firewall-config theo ý các bạn, sau đó khởi động lại tưởng lửa Iptables để  xem có hoạt động đúng với ý mình không.

Mã nguồn [Chọn]
# iptables-restore < firewall-config
  • Nếu thấy hệ thống hoạt động tốt thì bạn có thể yên tâm lưu lại tâp tin cấu hình đó bằng lệnh sau đây.

Mã nguồn [Chọn]
# service iptables save