iptables规则一般分为来源,匹配条件和动作,其中匹配条件有扩展和基础条件,动作有基础动作和扩展动作,只是扩展动作不像条件那样需要指定模块
iptables有哪些动作
ACCEPT、DROP、REJECT、LOG、SNAT、DNAT、MASQUERADE、REDIRECT
NAT示意图
如果需要nat正常使用,需要开启linux的核心转发功能 echo 1>/proc/sys/net/ipv4/ip_forward
常用命令操作
iptables
-t 指定表名,默认不指定时操作的是filter表
-L 查看所有规则
-n 不解析规则中的地址
-v 显示规则中相信信息
-x 用常用单位显示规则中的匹配的报文的数量和大小
规则中的增删改
iptables -t 执行表名 链名
-I 插入 iptables中规则是一次执行
-D 删除
-R 修改
-P 修改默认的policy
-p 修改规则协议
-A 插入规则到最后
-s 指定源地址
-d 指定目标地址
-i 指定报文流入的网卡
-o 是定输出网卡
-N 自定义链
-E 修改自定义链名称
-X 修改自定义链
同时iptables扩展可以使用man iptables-extensions查看
--dport 指定端口,此功能是iptables扩展模块功能,添加规则时要指定-m模块名,比如iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -s 192.168.1.145 -j DROP
--sport 目标端口,可以指定端口范围比如22:25,代表22,23,24,25端口
-m multiport 可以指定多个非连续端口和连续端口,此扩展只适合tcp,upd协议
iptables -t filter -A INPUT -p tcp -m multiport --dport 23,29,81:89 -s 192.168.1.111 -j DROP
iprange模块可以指定连续的IP,其中有两个匹配条件可用
--src-range 源端口
--dst-range 目标端口
用法:iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.1.10-192.168.1.20 -j ACCEPT
string可以匹配报文中的字符
--algo {bm|kmp} bm ,kmp是算法
用法:iptables -t filter -A INPUT -m string --algo bm --string "OOXX" -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...]
--weekdays day[,day...]
用法:
icmp报文分类
i
state模块可以指定规则拦截报文状态,状态有NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED
用法:iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
自定义链-N
iptables中我们可以自定义链来管理规则,但是自定义链不能直接使用,需要被默认链引用才能调用
用法:
iptables -N test
引用方法:
iptables -t filter -I INPUT -p tcp --dport 80 -j test
修改链名称
iptables -E test test1
iptables -X 删除自定义链
删除有两个条件
对应链没有被引用
对应链中规则为空
命令操作iptables只是临时修改规则,重启服务后不保存会丢失规则,保存方法
service iptables save
iptables-save >/etc/sysconfig/iptables