iptables 基本语法

作者: 85030455 2009-04-28 09:44:56
iptables 语法概述

iptables -A 添加规则 (在最后一条规则后添加)
-I 添加规则 (默认在第一条规则前添加,可输入指定的规则号)
-D 删除规则 (可匹配条件,也可指定规则号)
-R 替换规则 (可替换内容)
-F 清空规则
-P 设置默认规则 (默认允许或拒绝)
-L 列出规则

匹配条件:
-i 入口
-o 出口
-i <匹配数据进入的网络接口>
例如:
-i eth0
匹配是否从网络接口 eth0 进来

-i ppp0
匹配是否从网络接口 ppp0 进来

-o 匹配数据流出的网络接口
例如:
-o eth0
-o ppp0


-s 源地址
-d 目的地址
-s <匹配来源地址>
可以是 IP、NET、DOMAIN,也可空(任何地址)
例如:
-s 192.168.0.1 匹配来自 192.168.0.1 的数据包
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
-s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包

-d <匹配目的地址>
可以是 IP、NET、DOMAIN,也可以空
例如:
-d 202.106.0.20 匹配去往 202.106.0.20 的数据包
-d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包
-d www.abc.com 匹配去往域名 www.abc.com 的数据包


-p 协议类型
可以是 TCP、UDP、ICMP 等,也可为空
例如:
-p tcp
-p udp
-p icmp --icmp-type 类型
ping: type 8 pong: type 0


--sport 源端口
--dport 目的端口
--sport <匹配源端口>
可以是个别端口,可以是端口范围
例如:
--sport 1000 匹配源端口是 1000 的数据包
--sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
--sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
--sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

--dport <匹配目的端口>
可以是个别端口,可以是端口范围
例如:
--dport 80 匹配源端口是 80 的数据包
--dport 6000:8000 匹配源端口是 6000-8000 的数据包(含6000、8000)
--dport :3000 匹配源端口是 3000 以下的数据包(含 3000)
--dport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

-m multiport --d/sport 多个端口

注意:--sport 和 --dport 必须配合 -p 参数使用

动作(处理方式):

ACCEPT
-j ACCEPT
通过,允许数据包通过本链而不拦截它.类似 Cisco 中 ACL 里面的 permit

例如:
iptables -A INPUT -j ACCEPT
允许所有访问本机 IP 的数据包通过

DROP
-j DROP
丢弃,阻止数据包通过本链而丢弃它
类似 Cisco 中 ACL 里的 deny

例如:
iptables -A FORWARD -s 192.168.80.39 -j DROP
阻止来源地址为 192.168.80.39 的数据包通过本机

SNAT
-j SNAT --to IP[-IP][:端口-端口](nat 表的 POSTROUTING 链)
源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池
(一组连续的 IP 地址)
例如:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10


DNAT
-j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 链)
目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
(一组连续的 IP 地址)
例如:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
把从 ppp0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10


MASQUERADE
-j MASQUERADE
动态源地址转换(动态 IP 的情况下使用)

例如:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
将源地址是 192.168.0.0/24 的数据包进行地址伪装


-m :一些 iptables 的模块,主要常?的有:
state :状态

--state :数据包的状态,主要有:
INVALID :无效的数据包,例如?料损坏的数据包
ESTABLISHED:已经连接的数据包;
RELATED :与本机发送的数据包相关的连接

举例:只要已建立或相关的数据包包就予以通过,只要是不合法封包就丢弃
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP

相关资讯