iptables 命令

选项

-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

原文地址:https://www.cnblogs.com/d1anlong/p/11868008.html