2.1.3 .2Ủy quyền
3.6 Hành động trong luật
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:
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.
Ví 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 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.
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.
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.
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, ví dụ INPUT, gói sẽ chịu tác động của hành động mặc định của chuỗi luật đó.
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đổ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 đượcchỉ 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. Ví dụ: iptables -t nat -A POSTROUTING –p tcp -o eth0 -j SNAT --to-source
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 đượcgá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). 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.
Ví dụ: iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024- 31000
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, ví 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 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.
Ví 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 đượcmá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.
Ví 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, người dùng có thể tham khảo qua lệnh man.