一、基础知识
规则:定义数据包过滤条件,包含源地址、目的地址、传输协议、服务类型等;
链:指数据包的传播路径,一条链中可以有多条规则;
表:提供特定功能。iptables内置了filter、nat、mangle这3个表,分别用于实现包过滤、网络地址转换、包重构;
filter表包含:input、output、forward。这个表只有接收和丢弃包的功能,无法对数据包进行修改。
nat:可以实现1对1、1对多、多对多的工作。表包含prerouting(修改即将到来的数据包)、output(修改在路由之前本地
生成的数据包)、postrouting(修改即将出去的数据包)3个链。
mangle:包含input、output、forward、prerouting、postrouting5个链
二、iptables语法
iptables [-t 表] <命令选项> [链] [匹配选项] [操作选项]
命令选项说明:
-A 在所选链的链尾加入一条或多条规则
-D 在所选链的链尾删除一条或多条规则
-R 在所选链的链尾替换一条或多条规则
-I 以给出的规则号,在所选链中插入规则
-L 列出指定链的规则
-F 清除指定链或表中的所有规则
-N 创建新链
-X 删除链,链中的规则不能在使用中
-P 为永久链指定默认规则
-C 检查指定的包是否与指定链的规则相匹配
-Z 将制定链中的所有规则的包字节器清零
-h 显示帮助信息
匹配选项
-p [!] proto 指定要匹配的协议,加上!表示逻辑非
-s [!] address[/mask 根据源地址或地址范围确定数据包是否通过过滤器
-i [!] input name[+] 指定数据包从哪个接口进入,如eth0,eth1
-j target 匹配规则后数据包的处理方法,可能是accept、drop等
-m match
-o [!] output name[+] 指定匹配规则的对外网络接口,该选项只有output、forward、postrouting链是合法的。
--sport sport 指定数据包匹配的源端口,可以用“起始端口:结束端口”指定一个范围
-d [!] address[/mask根据目的地址或地址范围确定数据包是否通过过滤器
--dport dport指定数据包匹配的目标端口,可以用“起始端口:结束端口”指定一个范围
默认时,终端中创建的各种规则在系统重启后就丢失了,所以要把这些规则保存到文件中,通过iptables-save来实现:
iptables-save > /etc/sysconfig/iptables
重启后规则丢失,再使用以下命令回复:
iptables-restore < /etc/sysconfig/iptables
若希望重新启动后自动恢复,则:
service iptables save
目标动作
ACCEPT接收
DROP 丢弃
REJECT 拒绝包
LOG 写入日志
TOS 改写包的TOS值
REDIRECT 重新导向另一个端口,可以用来实现透明代理
MASQUERADE ?
DNAT 改写数据包的目的IP为特定IP或范围
SNAT 改写源IP
MIRROR ?
QUEUE ?
RETURN ?
MARK ?
三、实例
1、 查看规则
iptables –t nat –L //查看nat表所有链的规则列表
2、 禁止客户机访问指定网站
iptables –I FORWARD –d www.xunlei.com –j DROP
3、 禁止部分客户机上网
iptables –I FORWARD –s 192.168.1.0/24 –j DROP
4、 禁止某些服务
iptables –I FORWARD –s 102.168.1.0/24 –p tcp –dport 80 –j DROP //禁用web
iptables –I FORWARD –s 102.168.1.0/24 –p tcp –dport 21 –j DROP //禁用ftp
5、 nat
透明代理的实现:
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128