Giới thiệu về Iptables
Tham khảo từ tài liệu :
http://www.linuxhomenetworking.com/w…k_HOWTO_:_Ch14
_:_Linux_Firewalls_Using_iptables
Vẫn còn rất thiếu sót trong tài liệu này . Mong mọi người ủng hộ và đóng góp ý
kiến để tài liệu này hoàn thiện hơn . Mọi ý kiến đóng góp xin gởi về
I. GIỚI THIỆU VỀ IPTABLES:
Bảo mật mạng là một vấn đề quan trọng hàng đầu đối việc lập một website , cũn
như nhiều dịch vụ khác trên mạng . Một trong những cách bảo vệ là sử dụng
firewall . bài viết này sẽ cho thấy làm sao để chuyển một Linux server thành :
• Một firewall đồng thời cho mail server , web server , DNS server.
• Một thiết bị dẫn đường ( router ) sẽ dùng NAT và chuyển tiếp cổng ( port
forwarding ) để vừa bảo vệ hệ thống mạng của bạn , vừa cho phép một web serv
công khai chia sẻ địa chỉ IP firewall .
Một trong những firewall thông dụng nhất chạy trên Linux là iptables . Ta sẽ xem
qua một số chức năng của iptables :
• Tích hợp tốt với Linux kernel , để cải thiện sự tin cậy và tốc độ chạy iptables
• Quan sát kỹ tất cả các gói dữ liệu . Điều này cho phép firewall theo dõi mỗi m
kết nối thông qua nó , và dĩ nhiên là xem xét nội dung của từng luồng dữ liệu để
đó tiên liệu hành động kế tiếp của các giao thức . Điều này rất quan trọng trong
việc hỗ trợ các giao thức FTP , DNS ….
• Lọc gói dựa trên địa chỉ MAC và các cờ trong TCP header. Điều này giúp ng
chặn việc tấn công bằng cách sử dụng các gói dị dạng (malformed packets) và ng
chặn việc truy cập từ nội bộ đến một mạng khác bất chấp IP của nó.
• Ghi chép hệ thống (System logging) cho phép việc điều chỉnh mức độ của bá
cáo
• Hỗ trợ việc tính hợp các chương trình Web proxy chẳng như Squid .
• Ngặn chặn các kiểu tấn công từ chối dịch vụ.
II. SỬ DỤNG IPTABLES
1. Khởi động iptables :
Câu lệnh start, stop, và restart iptables .
[root@goldenbook]#service iptables start
[root@goldenbook]# service iptables stop
[root@goldenbookservice iptables restart
Để khởi động iptables mỗi khi khởi động máy .
[root@goldenbook]# chkconfig iptables on
Để xem tình trạng của iptables
[root@goldenbook]# service iptables status
2. Xử lý gói trong iptables:
Tất cả mọi gói dữ liệu đều được kiểm tra bởi iptables bằng cách dùng các bảng
tuần tự xây dựng sẵn (queues ) . Có 3 loại bảng này gồm :
_ Mangle : chịu trách nhiệm thay đổi các bits chất lượng dịch vụ trong TCP header
như TOS (type of service), TTL (time to live), và MARK.
_ Filter : chịu trách nhiệm lọc gói dữ liệu . Nó gồm có 3 quy tắc nhỏ (chain) để
giúp bạn thiết lập các nguyên tắc lọc gói , gồm :
• Forward chain: lọc gói khi đi đến đến các server khác .
• Input chain: lọc gói khi đi vào trong server .
• Output chain: lọc gói khi ra khỏi server .
_ NAT : gồm có 2 loại :
• Pre-routing chain: thay đổi địa chỉ đến của gói dữ liệu khi cần thiết.
• Post-routing chain: thay đổi địa chỉ nguồn của gói dữ liệu khi cần thiết .
Ta cùng xem qua 1 ví dụ mô tả đường đi của gói dữ liệu .
http://my.opera.com/goldenbook/album…icture=6278187
Đầu tiên, gói dữ liệu đến mạng A , tiếp đó nó được kiểm tra bởi mangle table
PREROUTING chain (nều cần).Tiếp theo là kiểm tra gói dữ liệu bởi nat table’s PREROUTING chain để kiểm tra xem gói dữ liệu có cần DNAT hay không? DNAT sẽ thay đổi địa chỉ đích của gói dữ liệu . Rồi gói dữ liệu được dẫn đi .Nếu gói dữ liệu đi vào một mạng được bảo vệ, thì nó sẽ được lọc bởi FORWARD chain của filter table, và nếu cần gói dữ liệu sẽ được SNAT trong POSTROUTING chain để thay đổi IP nguồn trước khi vào mạng B.
Nếu gói dữ liệu được định hướng đi vào trong bên trong firewall , nó sẽ được kiểm
tra bởi INPUT chain trong mangle table, và nếu gói dữ liệu qua được các kiểm tra của
INPUT chain trong filter table, nó sẽ vào trong các chương trình của server bên trong
firewall .
Khi firewall cần gởi dữ liệu ra ngoài . Gói dữ liệu sẽ được dẫn và đi qua sự kiểm
tra của OUTPUT chain trong mangle table( nếu cần ), tiếp đó là kiểm tra trong OUTPUT chain của nat table để xem DNAT (DNAT sẽ thay đổi địa chỉ đến) có cần hay không và OUTPUT chain của filter table sẽ kiểm tra gói dữ liệu nhằm phát hiện các gói dữ liệu không được phép gởi đi. Cuối cùng trước khi gói dữ liệu được đư ra lại Internet, SNAT and QoS sẽ được kiểm tra trong POSTROUTING chain .
3. Targets
Targets là hành động sẽ diễn ra khi một gói dữ liệu được kiểm tra và phù hợp với một yêu cầu nào đó. Khi một target đã được nhận dạng , gói dữ liệu cần nhảy ( jump ) để thực hiện các xử lý tiếp theo . Bảng sau liệt kê các targets mà iptables sử dụng .
Bảng 2 : Miêu tả các target mà iptables thường dùng nhất :
http://my.opera.com/goldenbook/album…icture=6278259
http://my.opera.com/goldenbook/album…icture=6278273
4. Các tham số chuyển mạch quan trọng của Iptables:
Các tham số sau sẽ cho phép Iptables thực hiện các hành động sao cho phù hợp với biểu đồ xử lý gói do người sử dụng hoạch định sẵn .
Bảng 3 : Các tham số chuyển mạch (switching) quan trọng của Iptables .
http://my.opera.com/goldenbook/album…icture=6278343
Để hiểu rõ hơn về các lệnh ta , ta cùng xem một ví dụ sau :
iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP \
-j ACCEPT
Iptables được cấu hình cho phép “firewall” chấp nhận các gói dữ liệu có giao tiếp(protocols) là TCP , đến từ giao tiếp card mạng eth0 , có bất kỳ địa chỉ IP nguồn là bất
kỳ đi đến địa chỉ 192.168.1.1, là địa chỉ IP của firewall. 0/0 nghĩa là bất kỳ địa chỉ IP nào .
Bảng 4 : Các điều kiện TCP và UDP thông dụng .
http://my.opera.com/goldenbook/album…icture=6278404
Ta cùng xem ví dụ sau :
iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \
–sport 1024:65535 –dport 80 -j ACCEPT
Iptables được cấu hình cho phép firewall chấp nhận các gói dữ liệu có giao tiếp (protocols) là TCP , đến từ card mạng eth0 , có bất kỳ địa chỉ IP nguồn là bất kỳ , đi đến địa chỉ 192.168.1.58 qua card mạng eth1. Số port nguồn là từ 1024 đến 65535 v
port đích là 80 (www/http).
Điều kiện ICMP :
–icmp-type
Ta cùng xem mộ ví dụ sau về ICMP .
iptables -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT
Iptables được cấu hình cho phép firewall chấp nhận gởi ICMP echo-requests (pings) và gởi trả các ICMP echo-replies. Ta cùng xem ví dụ khác như sau :
iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 1/s -i eth0 -j ACCEPT
Iptables cho phép giới hạn giá trị lớn nhất số lượng các gói phù hợp trong một giây
. Bạn có chỉ định thời gian theo định dạng /second, /minute, /hour, hoặc /day . Hoặc
sử dụng dạng viết tắt 3/s thay vì 3/second . Trong ví dụ này ICMP echo requests bị
giới hạn không nhiều hơn một yêu cần trong một giây . Đặc điểm này của iptables
giúp ta lọc bớt các lưu lượng lớn , đây chính là đặc tính của tấn công từ chối dịch vụ (
DOS ) và sâu Internet.
iptables -A INPUT -p tcp –syn -m limit –limit 5/s -i eth0 -j ACCEPT
Bạn có thể mở rộng khả năng giới hạn của iptables để giảm thiểu khả năng bị tấn
công bởi các loại tấn công từ chối dịch vụ. Đây là cách phòng vệ chống lại kiểu tấn
công SYN flood bằng cách hạn chế sự chấp nhận các phân đoạn TCP có bit SYS không nhiều hơn 5 phân đoạn trong 1 giây.
Bảng 6 : Các điều kiện mở rộng thông dụng
http://my.opera.com/goldenbook/album…icture=6278551
Đây là phần mở rộng tiếp theo của ví dụ trước :
iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \
–sport 1024:65535 -m multiport –dport 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
Iptables được cấu hình cho phép firewall chấp nhận các gói dữ liệu có giao tiếp (protocols) là TCP , đến từ card mạng eth0 , có bất kỳ địa chỉ IP nguồn là bất kỳ , đi đến địa chỉ 192.168.1.58 qua card mạng eth1. Số port nguồn là từ 1024 đến 65535 v
port đích là 80 (www/http) và 443 (https). Đến khi các gói dữ liệu nhận trở lại từ 192.168.1.58, thay vì mở các port nguồn và đích , bạn chỉ việc cho phép dùng kết nối cũ đã thiết lập bằng cách dùng tham số -m state và –state ESTABLISHED.
5_ Sử dụng user defined chains:
Chuỗi User Defined Chains nằm trong bảng iptables. Nó giúp cho quá trình sử lý
gói tốt hơn.
Ví dụ: Thay vì sử dụng gói đơn được xây dựng trong chain cho tất cả giao thức, ta
có thể sử dụng chain này để quyết định loại giao thức cho gói và sau đó kiểm soát việc
xử lý user-defined, protocol-specific chain trong bảng filter table.
Mặt khác, ta có thể thay thế một chuỗi “long chain” với chuỗi chính “stubby main
chain” bởi nhiều chuỗi “stubby chain”, bằng cách chia ngắn đó tổng chiều dài của tất
cả chain gói phải thông qua.
Sáu lệnh sau giúp việc cải tiến tốc độ xử lý:
iptables -A INPUT -i eth0 -d 206.229.110.2 -j \
fast-input-queue
iptables -A OUTPUT -o eth0 -s 206.229.110.2 -j \
fast-output-queue
iptables -A fast-input-queue -p icmp -j icmp-queue-in
iptables -A fast-output-queue -p icmp -j icmp-queue-out
iptables -A icmp-queue-out -p icmp –icmp-type \
echo-request -m state –state NEW -j ACCEPT
iptables -A icmp-queue-in -p icmp –icmp-type echo-reply\
-j ACCEPT
6_ Lưu lại những đoạn mã iptables:
Đoạn mã iptables được lưu tạm thời ở file “/etc/sysconfig/iptables”
Định dạng mẫu trong file iptables cho phép giao thức ICMP, IPSec (những gói
ESP và AH), thiết lập liên kết, và quay lại SSH.
[root@goldenbook]# cat /etc/sysconfig/iptables
# 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
[root@goldenbook]#
7_ Thiết lập những Rule cho Fedora’s iptable:
Trong Fedora có chương trình gọi lokkit, chưong trình này có thể thiết lập một rule
irewall đơn giản, giúp tăng cường bảo mật. Chương trình lokkit lưu những rule
irewall trong file mới “/etc/sysconfig/iptables”.
8_ Tìm lại Đoạn mã bị mất:
Đoạn mã iptables được lưu trữ trong file “/etc/sysconfig/iptables”. Ta có thể chình
ửa những đoạn mã và tạo lại những thành những rule mới.
Ví dụ: xuất những lệnh trong iptables đã lưu trữ ra file văn bản với tên firewall-
onfig:
[root@goldenbook]# iptables-save > firewall-config
[root@goldenbook]# cat firewall-config
