#### 选项
iptables -h 获取帮助
iptables -V 显示版本信息
iptables -L 列出链详细信息,可指定链
iptables -vL 显示更详细链信息
iptables -vnL 显示更详细链信息,并以数字化显示
iptables -vnL --line-number 列出信息时,显示规则序号
iptables -F 清除所有规则,不包括默认规则,可指定链
iptables -D 链名 规则序号 删除指定规则
iptables -I 链名 规则序号 插入规则,之后的规则依次向后排序
iptables -Z 链的计数器清零
iptables -t 表名 指定配置哪个表, filter是默认表,不指明就默认
iptables -A 链名 追加到链里,附加或追加规则,默认配置的规则在最后一条,规则按次序执行。
iptables -s ip 指定源IP地址或源网段信息
iptables -d ip 指定目标IP地址或目标网段信息
iptables -i 网卡名 指定从哪个网卡接口进入的流量信息,只应用于INPUT、 FORWARD、PREROUTING链
iptables -o 网卡名 指定从哪个网卡接口出去的流量信息,只应用于 FORWARD、OUTPUT、POSTROUTING链
iptables -p 协议 指定规则协议,包括tcp、udp、icmp
iptables -j 动作 匹配数据包后执行的动作
iptables -m 用于指定扩展模块
#### ptables -j的动作
ACCEPT 允许
DROP 丢弃(无响应)
REJECT 拒绝(回应请求者明确的拒绝)
MASQUERADE 伪装上网使用
SNAT 共享地址上网
DNAT 目标地址改写
#### 自定义链
除了系统默认五链,还可以自定义链,实现在链下规则分类。
iptables -N 链名 添加一条新自定义链
iptables -E 链名 新名 重命名链
iptables -X 链名 删除用户自定义的链,被挂着不能删,里面有内容不能删
iptables -P 链名 策略 更改默认规则策略,ACCEPT是黑名单,只要没有拒绝的都可以连,DROP反之
iptables -I链名 位置 -s IP或网段 -j 自定义链名 将自定义链挂到默认链,否则不生效
#### 协议扩展选项
iptables -p 协议 指定规则协议,使用p选项时无需使用m指明扩展模块
tcp 协议的扩展选项
iptables -p tcp --sport 源端口 指定源端口
iptables -p tcp --dport 目标端口 指定目标端口
iptables -p tcp --syn 检查三次握手的第一次握手
iptables -p tcp --tcp-flags SYN,ACK,FIN,RST SYN,ACK 检查三次握手的第二次握手
udp 协议的扩展选项
iptables -p udp --sport 源端口 指定源端口
iptables -p udp --dport 目标端口 指定目标端口
icmp 协议的扩展选项
iptables -p --icmp-type 8 指定请求包
iptables -p --icmp-type 0 指定应答包
#### 网络扩展选项
multiport模块精确到传输层,可以指定最多15个不连续的端口
iptables -m multiport --sports 端口,端口 指定多个不连续的源端口
iptables -m multiport --dports 端口,端口 指定多个不连续的目标端口
iprange模块精确到网络层,可以指定一个连续的ip地址范围
iptables -m iprange --src-range 地址-地址 指定连续的源ip地址范围
iptables -m iprange --dst-range 地址-地址 指定连续的目标ip地址范围
mac模块精确到了数据链路层,可以指定mac地址
iptables -m mac --mac-source mac地址 指定源mac地址
#### 报文扩展选项
string模块可以对报文中的应用层数据做字符串模式匹配检测
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "字符串" -j REJECT 指定算法、跳过报文头、字符串
禁止用户访问,所以指定OUTPUT,算法包括bm和kmp,报文头跳过了8字节的前导信息、6字节的目标mac、6字节的源mac、上层协议的2个类型、ip和tcp分别20个固定头,共62个。
time模块可以根据将报文到达的时间与指定的时间范围进行匹配
iptables -m time --timestart 起始时分 --timestop 结束时分 指定时间段,每天
iptables -m time --timestart 起始时分 --timestop 结束时分 -- weekdays Wed,Thu 指定时间段,按周几
iptables -m time --timestart 起始时分 --timestop 结束时分 --monthdays 几号,几号 指定时间段,按每月几号
connlimit模块可以根据每客户端IP做并发连接数数量匹配
iptables -m connlimit --connlimit-upto N 连接的数量小于等于N时匹配
iptables -m connlimit --connlimit -above N 连接的数量大于N时匹配
limit模块,基于收发报文的速率做匹配 , 实现限流
iptables -m limit -- limit 10/minute --limit-burst 5 前5个不限制,之后每分钟至多过10个
/second|/minute|/hour|/day 分别代表每秒、每分钟、每小时、每天
#### 状态扩展选项
state 模块,可以根据"连接追踪机制"去检查连接的状态,较耗资源
iptables -m state --state NEW 匹配第一次连接
iptables -m state --state ESTABLISHED 匹配第一次之后的连接
iptables -m state --state RELATED 匹配相关的连接
iptables -m state --state INVALID 匹配无效的连接
iptables -m state --state UNTRACKED 匹配未追踪的连接
cat /proc/sys/net/netfilter/nf_conntrack_max 查看连接跟踪最大数量
超过最大数量时,主机将无法被访问,解决方法:
vi /etc/sysctl.conf
net.nf_conntrack_max = 数量 net.netfilter.nf_conntrack_max = 数量
------