VnExperts Academy - Đào tạo, học, thi chứng chỉ Quốc tế Cisco CCNA, CCNP, Microsoft MCP, MCSA, MCITP, Linux, Security+, CEH

Cấu hình cho Iptables firewall PDF Print E-mail
Trong môi trường Linux phần mềm firewall 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 firewall nói chung. Sau đây là những kiến thức cơ bản nhất mà tôi tóm tắt về 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 người quản trị có thể tạo ra các rules cho phép các gói tin vào ra hệ thống (được bảo vệ bằng iptables) 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 (đi vào một hệ thống khác).
+ 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 rule mà bạn tạo ra phải tương ứng với một chain, table nào đấy. Nếu bạn không xác định tables nào thì iptables coi mặc định là cho bảng FILTER.

Có thể tóm tắt trình tự xử lý gói tin của iptables bằng hình vẽ 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.



Targets và Jumps
những iptables rules kiểm tra những gói 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 ip sẽ được xử lý theo kiểu đó. Sau đây là một số build-in targets thường được sử dụng.
-ACCEPT: 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: 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, iptables tiếp tục xử lý gói tin bằng những rules 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 host đã 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 rules 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 : xá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ệ

sau đây là một số rule ví dụ minh hoạ.

iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP -j ACCEPT
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

iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \
--sport 1024:65535 --dport 80 -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/http).

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
hệ thống được phép thực hiện lệnh ping ra ngoài.

iptables -A INPUT -p icmp --icmp-type echo-request \
-m limit --limit 1/s -i eth0 -j ACCEPT
giới hạn chỉ nhận một gói tin ping trong một giây.

iptables -A INPUT -p tcp --syn -m limit --limit 5/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)

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

iptables -A FORWARD -d 0/0 -o eth0 -s 192.168.1.58 -i eth1 -p TCP \
-m state --state ESTABLISHED -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 (http,https) 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.

Thông thường 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 reboot nó sẽ dùng lệnh iptable-restore để đọc lại cấu hình từ file này và active nó. Để xem cấu hình iptables hiện tại bạn có thể dùng lệnh
cat /etc/sysconfig/iptables hoặc iptables-save
# 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 iptables bạn không nên sửa trực tiếp trên file /etc/sysconfig/iptables này thay vào đó bạn nên up cấu hình hiện tại ra một file tạm thời nào đó như sau
iptables-save > firewall-config
cat firewall-config

# 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 file firewall-config theo ý bạn (thêm sửa xoá các rules)
sau đó reload nó để cho iptables sử dụng xem có hoạt động đúng với ý mình không bằng lệnh
iptables-restore < firewall-config

nếu thấy hệ thống hoạt động tốt bạn có thể yên tâm save file cấu hình đó bằng lệnh
service iptables save.

Hải Thắng - thangh@vnexperts.net

Tin liên quan:
Tin mới hơn:
Tin cũ hơn: