Sau khi đã chỉ ra các điều kiện kiểm tra gói tin, b−ớc cuối cùng của công việc thiết lập luật trong iptables là chỉ ra các hành động xử lý gói tin khi thông tin của gói tin đáp ứng đ−ợc các điều kiện chỉ ra trong luật. Tên của hành động xử lý gói tin phải đ−ợc đặt sau tham số -j trong luật. D−ới đây là một số hành động xử lý gói tin cơ bản:
6.2.5.4.1 user-defined-chain <user-defined-chain>
Hành động này sẽ thực hiện chuyển gói tin tới chuỗi luật ng−ời dùng định nghĩa, đã đ−ợc tạo tr−ớc đó với tên user-defined-chain, để đ−ợc kiểm tra và chịu xử lý theo các luật đ−ợc khai báo trong chuỗi luật ng−ời dùng định nghĩa này.
Thí dụ: iptables -A INPUT -p tcp -j tcp_packets ACCEPT
Ngay sau khi gói tin đáp ứng đ−ợc các điều kiện trong một luật và hành động xử lý gói này là ACCEPT, gói tin đ−ợc chấp nhận và không phải bị kiểm tra thêm qua các luật khác trong chuỗi luật hiện hành hay bị kiểm tra bởi các chuỗi luật khác trong cùng bảng. Tuy nhiên, một gói tin đ−ợc chấp nhận trong một chuỗi
Đồ án tốt nghiệp
luật vẫn có thể phải đi qua các chuỗi luật khác trong các bảng khác và có thể bị loại bỏ ở những bảng đó. Để sử dụng hành động này, cần chỉ ra –j ACCEPT trong luật.
6.2.5.4.2 DROP
Hành động DROP sẽ loại bỏ các gói tin ngay lập tức. Chú ý rằng hành động có thể gây ra một số tác động ngoài ý muốn, do nó có thể bỏ lại những socket không dùng trên máy. Do vậy, giải pháp tốt hơn là sử dụng hành động REJECT, đặc biệt là khi muốn ngăn chặn việc quét cổng.
6.2.5.4.3 REJECT
Hành động REJECT hoạt động t−ơng tự nh− hành động DROP, nh−ng nó gửi thông báo lỗi cho máy gửi gói tin bị loại bỏ. Hành động này chỉ đ−ợc phép khai báo trong các chuỗi luật INPUT, FORWARD và OUTPUT.
6.2.5.4.4 RETURN
Khi một gói tin “gặp” hành động RETURN, iptables sẽ ngừng kiểm tra gói tin trong chuỗi luật hiện hành. Nếu chuỗi luật hiện hành là con của chuỗi luật khác, gói tin sẽ tiếp tục đ−ợc kiểm tra bởi các luật trong chuỗi luật cha nếu không có hành động nào khác đ−ợc thực hiện. Nếu chuỗi luật là chuỗi luật chính, thí dụ INPUT, gói sẽ chịu tác động của hành động mặc định của chuỗi luật đó.
6.2.5.4.5 SNAT
Hành động SNAT đ−ợc sử dụng để thực hiện chuyển đổi địa chỉ mạng nguồn (Source Network Address Translation), có nghĩa là thay đổi địa chỉ IP nguồn trong header của gói tin. Hành động này th−ờng đ−ợc áp dụng khi có nhiều máy tính sử dụng chung một kết nối Internet.
Hành động SNAT chỉ hợp lệ khi đ−ợc đặt trong chuỗi luật POSTROUTING của bảng nat. Chỉ có gói đầu tiên trong một kết nối là đ−ợc thay đổi bởi hành động SNAT, và sau đó tất cả các gói kế tiếp sử dụng cùng kết nối sẽ cũng đ−ợc
Đồ án tốt nghiệp
đổi địa chỉ nguồn. Thêm nữa, các luật khởi nạp trong chuỗi luật POSTROUTING sẽ đ−ợc áp dụng tới tất cả các gói tin trong cùng dòng dữ liệu.
Hành động SNAT đ−ợc sử dụng cùng với lựa chọn --to-source. Lựa chọn này đ−ợc dùng để xác định địa chỉ IP và cổng mà gói tin sẽ sử dụng. Lựa chọn này sẽ thực hiện thay thế địa chỉ IP nguồn trong header của gói tin bằng một trong những địa chỉ IP đ−ợc chỉ ra. Nếu muốn cân bằng giữa các địa chỉ IP, ta có thể sử dụng một dãy địa chỉ IP, sử dụng ký tự '-' để phân cách. Các dòng dữ liệu sẽ sử dụng các địa chỉ trong dải này một cách ngẫu nhiên; các gói tin của cùng một dòng dữ liệu sẽ sử dụng cùng một địa chỉ IP. Trong SNAT, ta cũng có thể chỉ ra một dãy các cổng đ−ợc sử để thay đổi cổng nguồn của gói tin. Các cổng nguồn chỉ hợp lệ khi điều kiện -p tcp hay -p udp đ−ợc chỉ ra trong luật.
Thí dụ: iptables -t nat -A POSTROUTING –p tcp -o eth0 -j SNAT --to- source 194.236.50.155-194.236.50.160:1024-32000
6.2.5.4.6 MASQUERADE
Hành động MASQUERADE đ−ợc sử dụng cơ bản nh− hành động SNAT, nh−ng nó không đòi hỏi phải sử dụng lựa chọn --to-source. Hành động MASQUERADE đ−ợc sử dụng để làm việc với các kết nối sử dụng địa chỉ IP động nh− các kết nối quay số (dial-up) hay DHCP. Điều này có nghĩa là chỉ sử dụng hành động MASQUERADE với các kết nối IP đ−ợc gán địa chỉ động. Nếu ta có kết nối IP tĩnh, nên sử dụng hành động SNAT.
Khi thực hiện masquerade một kết nối, có nghĩa là sử dụng địa chỉ IP của một giao tiếp mạng thay địa chỉ IP nguồn trong header của gói tin. Hành động MASQUERADE cũng tác động tới các kết nối bị ‘bỏ quên’ khi một giao tiếp mạng tắt. (nếu sử dụng SNAT thì sẽ bị mất dữ liệu trong tr−ờng hợp này).
Đồ án tốt nghiệp
Hành động MASQUERADE vẫn có thể đ−ợc sử dụng thay thế cho SNAT ngay cả khi sử dụng địa chỉ IP tĩnh, tuy nhiên việc sử dụng nh− thế không có lợi do nó phải thực hiện thêm nhiều xử lý và có thể có mâu thuẫn trong t−ơng lai.
Chú ý là hành động MASQUERADE chỉ hợp lệ khi đ−ợc đặt trong chuỗi luật POSTROUTING của bảng nat.
Hành động MASQUERADE có thể sử dụng cùng với lựa chọn --to-ports. Lựa chọn này đ−ợc sử dụng để gán lại cổng nguồn cho các gói tin đi ra. Ta có thể chỉ ra một cổng hay một dãy các cổng, đ−ợc phân cách nhau bởi ký tự '-'. Lựa chọn này chỉ hợp lệ nếu trong luật có chỉ ra điều kiện -p tcp hay -p udp.
Thí dụ: iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
6.2.5.4.7 DNAT
Hành động DNAT đ−ợc sử dụng để thực hiện chuyển đổi địa chỉ mạng đích (Destination Network Address Translation) có nghĩa là nó đ−ợc sử dụng để ghi lại địa chỉ IP Destination trong header của một gói tin. Nếu một gói tin thoả điều kiện của luật, và chịu tác động của hành động DNAT, gói tin và tất cả các gói tin theo sau trong cùng dòng dữ liệu sẽ đ−ợc chuyển đổi địa chỉ IP đích trong header của chúng và sau đó đ−ợc dẫn đ−ờng tới giao tiếp mạng, máy hay mạng đ−ợc yêu cầu. Hành động này có thể rất hữu dụng, thí dụ nh− trong tr−ờng hợp ta có một máy chủ web nằm trong LAN không có địa chỉ thật. Ta có thể thông báo cho firewall chuyển tiếp tất cả các gói tin đi vào cổng HTTP của bản thân nó (có địa chỉ thật) tới máy chủ web trong LAN.
Hành động DNAT chỉ có thể đ−ợc sử dụng trong các chuỗi luật PREROUTING và OUTPUT trong bảng nat.
Lựa chọn --to-destination đ−ợc sử dụng cùng với DNAT để thông báo cho DNAT biết địa chỉ IP sẽ đ−ợc sử dụng thay thế cho địa chỉ đích đến trong header
Đồ án tốt nghiệp
của gói tin. Ta có thể chỉ ra một dãy các địa chỉ đích, phân cách nhau bởi ký tự '- ', mỗi dòng dữ liệu sẽ sử dụng ngẫu nhiên một địa chỉ trong dãy địa chỉ đ−ợc chỉ ra. Tất cả các gói tin trong cùng một dòng dữ liệu sẽ sử dụng cùng một địa chỉ IP. Ta cũng có thể bổ sung thêm một cổng hay dãy các cổng muốn chuyển h−ớng gói tin tới những cổng đó. Để thêm cổng, khai báo thêm :port vào địa chỉ mà ta muốn DNAT các gói tin; lựa chọn này chỉ hợp lệ nếu trong luật có chỉ ra điều kiện -p tcp hay -p udp.
Thí dụ: iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80j DNAT --to-destination 192.168.1.1-192.168.1.10
Khi sử dụng DNAT, các máy trong mạng cục bộ có thể không truy nhập đ−ợc máy dịch vụ do vấn đề dẫn đ−ờng. Do vậy, giải pháp đơn giản cho vấn đề này là sử dụng hành động SNAT cho tất cả các gói đi vào firewall.
Thí dụ: iptables -t nat -A POSTROUTING -p tcp --dst $HTTP_IP --dport 80 -j SNAT --to-source $LAN_IP
Ngoài những điều kiện, hành động nêu trên, iptables còn có rất nhiều điều kiện và hành động khác nữa; để biết chi tiết về chúng, ta có thể tham khảo qua lệnh man.
6.2.5.5 Các ví dụ
D−ới đây là một số thí dụ minh hoạ về việc sử dụng các điều kiện và hành động đặc biệt hữu ích trong công việc xây dựng một firewall. Giả sử rằng mạng cục bộ có địa chỉ là $LOCAL_IP, firewall sử dụng hai card mạng: một card mạng, $EXT_ETH, nối ra Internet và một card mạng, $INT_ETH, nối với mạng cục bộ.
Chống Syn flooding:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s –j ACCEPT Chống Scan Port:
Đồ án tốt nghiệp
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Chống Ping of Death:
iptables -A FORWARD -p imp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
Chống giả mạo địa chỉ nội bộ từ bên ngoài:
iptables -t nat -A PREROUTING -i $EXT_ETH -s $LOCAL_IP -j DROP Ưu tiên thông l−ợng cho truy cập web
iptables -t mangle -A PREROUTING -p tcp --sport 80 -j TOS --set-tos Maximize-Throughput
Thiết lập Transparent proxy bằng cách chuyển h−ớng port 80 đến máy chủ proxy 10.0.0.9:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.9:3128
Ngăn chặn sâu Nimda, Codered
iptables -I INPUT -p tcp -s 0/0 -m string --string "c+dir" -j DROP iptables -I INPUT -p tcp -s 0/0 -m string --string "cmd.exe" -j DROP iptables -I INPUT -p tcp -s 0/0 -m string --string "default.exe" -j DROP Script khởi động
Để các luật của iptables đ−ợc tự động thi hành mỗi khi máy tính hay ch−ơng trình iptables đ−ợc khởi động lại, ta cần tạo một script chứa các luật của iptables. Script khởi động này là /etc/sysconfig/iptables và có định dạng nh− sau:
*Tên_bảng_1
:chuỗi_luật_1 Hành_động [số đếm byte:số đếm gói] :chuỗi_luật_2 Hành_động [số đếm byte:số đếm gói] :chuỗi_luật_n Hành_động [số đếm byte:số đếm gói]
Đồ án tốt nghiệp Luật_1 Luật_2 .... Luật_n COMMIT *Tên_bảng_2 ... COMMIT
Trong đó chuỗi_luật là tên của các chuỗi luật có trong bảng. Chú ý rằng, danh sách tên các chuỗi luật phải đ−ợc liệt kê đúng theo thứ tự. Hành_động là hành động mặc định của chuỗi luật đ−ợc chỉ ra.
Chú ý:
Không đ−ợc phép đặt các dòng trắng trong tập tin script này
Dòng ghi chú là dòng đ−ợc bắt đầu bởi ký tự #. Các dòng ghi chú không đ−ợc phép đặt tại phần nội dung của các khai báo.
Tên bảng phải đ−ợc viết bằng chữ th−ờng
Tên chuỗi luật và hành động phải đ−ợc viết bằng chữ hoa
Sau khi thay đổi nội dung script, cần phải khởi động lại iptables để thực thi ngay những thay đổi vừa đ−ợc thực hiện
# /etc/rc.d/init.d/iptables restart
D−ới đây là một thí dụ về nội dung của một script:
# Generated by iptables-save v1.2.6a on Tue Feb 11 15:01:54 2003 *nat
:PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0]
Đồ án tốt nghiệp
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 172.16.12.0/255.255.255.0 -o eth0 -j MASQUERADE COMMIT
*filter
:INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 22 --syn -j ACCEPT -A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 0:1023 --syn -j REJECT COMMIT.
Đồ án tốt nghiệp
Tài liệu tham khảo
Sách tham khảo
1. Làm chủ hệ điều hành Linux- Nhóm tác giả Elicom (NXB Thống Kê) 2. Linux toàn tập – Tổng hợp và biên dịch VN-GUIDE (NXB Thống Kê) 3. 100 thủ thuật cao cấp với Linux- Ks nguyễn Ngọc Tuấn & Hồng Phúc
( NXB Giao Thông Vận Tải ).
4. Bảo mật và tối −u hóa trong Linux- Trần Thạch Tùng và Hoàng Đức Hải (NXB Lao Động-Xã Hội)
Các địa chỉ trang web tham khảo
1. www.manguon.com 2. www.quantrimang.com 3. www.fotech.vnu.edu.vn/osg 4. www.hcmc.netnam.vn 5. www.diendantinhoc.net 6. www.vnlinux.org 7. www.redhat.com 8. www.pcworld.com.vn 9. www.echip.com.vn 10. www.apache.org 11. www.samba.org
Đồ án tốt nghiệp
Nhận xét của giáo viên h−ớng dẫn
……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ……… ………