选项
-t <表>:指定要操纵的表
-A:向规则链中添加条目
-D:从规则链中删除条目
-I:向规则链中插入条目
-R:替换规则链中的条目
-L:显示规则链中已有的条目
-F:清楚规则链中已有的条目
-Z:清空规则链中的数据包计算器和字节计数器
-N:创建新的用户自定义规则链
-P:定义规则链中的默认目标
-h:显示帮助信息
-p:指定要匹配的数据包协议类型
-s:指定要匹配的数据包源ip地址
-j<目标>:指定要跳转的目标
-i<网络接口>:指定数据包进入本机的网络接口
-o<网络接口>:指定数据包要离开本机所使用的网络接口
规则格式
iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
-t table
raw、mangle、nat、filter(默认)
SUBCOMMAND
链管理
-N:自定义一条新的规则链
-X:delete,删除自定义的空的规则链
-P:policy,设置默认策略;对 filter 表中的链而言,其默认策略有:ACCEPT 接收,DROP丢 弃
-E:重命名自定义链;引用计数不为零的自定义链不能够被重命名,也不能被删除
查看
-L:list,列出指定链上的所有规则,本选项须置后
-n:numberic:以数字格式显示地址和端口号
-v:verbose,详细信息;-vv 更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
–line-number:显示规则的序号,可简写为 –line
常用组合:-vnL、-vnL --line-number
-S:selected,以 iptables-save 命令格式显示链上规则
规则管理
-A:append,追加
-I:insert,插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除
(1)指明规则序号
(2)指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
-Z:zero,置零;iptables 的每条规则都有两个计数器
(1)匹配到的报文的个数
(2)匹配到的所有报文的大小之和
chain
PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
匹配条件
基本:通用的,PARAMETERS
扩展:需加载模块,MATCH EXTENTIONS
基本匹配条件:无需加载模块,由 iptables/netfilter 自行提供
[!] -s, --source address[/mask] [,…]:源 IP 地址或范围
[!] -d, --destination address[/mask] [,…]:目标 IP 地址或范围
[!] -p, --protocol protocol:指定协议,可使用数字,如0(all)
protocol:tcp、udp、icmp、icmpv6、udplite、esp、ah、sctp、mh 或者 all,可参考 /etc/protocols
扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so)方可生效,查看帮助:man iptables-extesions
隐式扩展:在使用-p选项指明了特定的协议时,无需再用 -m 选项指明扩展模块的扩展机制,不需要手动加载扩展模块
tcp协议的扩展选项:
[!] --source-port, --sport port[:port] :匹配报文源端口,可为端口范围
[!] --destination-port, --dport port[:port] :匹配报文目标端口,可为端口范围
[!] --tcp-flags mask comp
mask 需检查的标志位,用逗号分隔,例如:SYN、ACK、FIN、RST
comp 在 mask 列表中必须为1的标志位列表,无指定则必须为 0,用逗号分隔例:表示要检查的标志位 SYN,ACK,FIN,RST 四个,其中 SYN 必须为 1,余下的必须为 0
–tcp-flags SYN,ACK,FIN,RST SYN
–tcp-flags ALL ALL
–tcp-flags ALL NONE
udp 协议的扩展选项:
[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围
[!] --destination-port, --dport port[:port]:匹配报文的目标端口或端口范围
icmp 协议的扩展选项:
[!] --icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp 应答
0/0 echo-request icmp 请求
显式扩展:必须使用 -m 选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块
[-m matchname [per-match-options]]
使用帮助:
CentOS 6:man iptables
CentOS 7:man iptables-extensions
处理动作:-j targetname [per-target-options]
简单:ACCEPT,DROP
扩展:REJECT:–reject-with:icmp-port-unreachable 默认
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
SNAT:源地址转换
DNAT:目标地址转换
MASQUERADE:地址伪装
multiport 扩展:以离散方式定义多端口匹配,最多指定 15 个端口
指定多个源端口:[!] --source-ports, --sports port[,port|,port:port]
指定多个目标端口:[!] --destination-ports, --dports port[,port|,port:port]
多个源或目标端口:[!] --ports port[,port|,port:port]
例:iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22:80 -j ACCEPT
iprange 扩展:指明连续的(但一般不是整个网络)ip 地址范围
源 IP 地址范围:[!] --src-range from[-to]
目标 IP 地址范围:[!] --dst-range from[-to]
例:iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP
mac 扩展:指明源 mac 地址
适用于:PREROUTING,INPUT,FORWARD 链
[!] --mac-source xx:xx:xx:xx:xx:xx
例:iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT
iptables -A INPUT -s 172.16.0.100 -j REJECT
string 扩展:对报文中的应用层数据做字符串模式匹配检测
–algo {bm|kmp} 字符串匹配检测算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
–from offset 开始偏移
–to offset 结束偏移
[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern 要检测的字符串模式,16 进制格式
例:iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string “google” -j REJECT
time 扩展:根据将报文到达的时间与指定的时间范围进行匹配
日期:
–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
时间:
–timestart hh:mm[:ss]
–timestop hh:mm[:ss]
每个月的几号:
[!] --monthdays day[,day]
星期几,1-7 分别表示星期一到星期日
[!] --weekdays day[,day]
–kerneltz:内核时区,不建议使用,CentOS 7 默认使用 UTC 时区
注意:CentOS 6 不支持 kerneltz,–localtz 指定本地时区(默认)
例:iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -J DROP
connlimit 扩展:根据每个客户端 IP 做并发连接数数量匹配,可防止 Dos(Denial of service,拒绝服务)攻击,通常分别与默认的拒绝或允许策略配合使用
连接的数量小于等于 # 时匹配
–connlimit-upto #
连接的数量大于 # 时匹配
–connlimit-above #
例:iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
limit 扩展:基于收发报文的速率做匹配,令牌桶过滤器
–limit #[/second|/minute|/hour|/day]
–limit-burst number
例:iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit -burst 5 -j ACCEPT
state 扩展:根据“连接追踪机制”去检查连接的状态,较耗资源
conntrack机制:追踪本机上的请求和响应之间的关系
[!] --state state
状态有以下几种:
NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如raw表中关闭追踪
例:iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
TABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如raw表中关闭追踪
例:
iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT