iptables语法
一、iptables语法
1、语法构成
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
举例:
#进站的ICMP包都丢掉
[root@CentOS7-4 ~]# iptables -t filter -I INPUT -p icmp -j REJECT
- 注意事项
- 不指定表名时,默认指filter表
- 不指定链名时,默认指表内的所有链
- 除非设置链的默认策略,否则必须指定匹配条件
- 选项、链名、控制类型使用大写字母,其余均为小写
2、常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
3、常见选项
-
管理选项
类别 选项 用途 添加新的规则 -A
在链的末尾追加一条规则 -I
在链的开头(或指定序号)插入一条规则 查看规则列表 -L
列出所有的规则条目 -n
以数字形式显示地址、端口等信息 -v
以更详细的方式显示规则信息 --line-numbers
查看规则时,显示规则的序号 删除、清空规则 -D
删除链内指定序号(或内容)的一条规则 -F
清空所有的规则 设置默认策略 -P
为指定的链设置默认规则 #添加新规则 #在链的末尾添加进站所有的TCP协议包都放通 [root@CentOS7-4 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT #在链的最前面添加进站所有的UDP协议包都放通 [root@CentOS7-4 ~]# iptables -I INPUT -p udp -j ACCEPT #在链的最前面添加进站所有的ICMP协议包都放通 [root@CentOS7-4 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
#查看规则 #带序号查询 [root@CentOS7-4 ~]# iptables -nL --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 5 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 8 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination #不带序号查询 [root@CentOS7-4 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
#指定序号删除规则 [root@CentOS7-4 ~]# iptables -D INPUT 3 #查看规则 [root@CentOS7-4 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
#删除所有规则 [root@CentOS7-4 ~]# iptables -F [root@CentOS7-4 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination #删除nat表种的所有规则 [root@CentOS7-4 ~]# iptables -t nat -F #删除mangle表种的所有规则 [root@CentOS7-4 ~]# iptables -t mangle -F #删除raw表种的所有规则 [root@CentOS7-4 ~]# iptables -t raw -F
#为指定的链设置默认规则(要么是允许,要么是丢弃) #进入forward链包都直接丢弃 [root@CentOS7-4 ~]# iptables -t filter -A FORWARD -j DROP #放通所有出战流量 [root@CentOS7-4 ~]# iptables -A OUTPUT -j ACCEPT
-
匹配条件
类别 条件类型 用法 通用匹配 协议匹配 -p 协议名 地址匹配 -s 源地址、-d 目的地址 接口匹配 -i 入站网卡、-o 出站网卡 隐含匹配 端口匹配 —sport 源端口、—dport 目的端口 TCP标记匹配 —tcp-flags 检查范围 被设置的标记 ICMP类型匹配 —icmp-type ICMP类型 显式匹配 多端口匹配 -m multiport —sports \ —dports 端口列表 IP范围匹配 -m iprange —src-range IP范围 MAC地址匹配 -m mac —mac-source MAC地址 状态匹配 -m state —state 连接状态 ( NEW
新连接、ESTABLISHED
双向传输、RELATED
新连接但前提是有链接、INVAILD
未知链接,一般DROP)# “ ! ” 表示取反 #进站的所有icmp包丢弃 [root@CentOS7-4 ~]# iptables -I INPUT -p icmp -j DROP #不是icmp协议包的允许通行 [root@CentOS7-4 ~]# iptables -A FORWARD ! -p icmp -j ACCEPT # -s 指定源地址 #拒绝源地址为1.11的包进行转发 [root@CentOS7-4 ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT #进站源地址为20.30网段丢弃 [root@CentOS7-4 ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP # -i ens37 指定入站网卡 [root@CentOS7-4 ~]# iptables -A INPUT -i ens33 -s 192.168.0.0/16 -j DROP [root@CentOS7-4 ~]# iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP [root@CentOS7-4 ~]# iptables -A INPUT -i ens33 -s 172.16.0.0/12 -j DROP
这是网卡名称!!!!
# --dport 20:21 指定目标端口20和21 #指定源地址为4.0网段的UDP协议的目标端口为53放通 [root@CentOS7-4 ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT #进站放通TCP协议端口为20和21放通 [root@CentOS7-4 ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
# 指定ICMP类型 [root@CentOS7-4 ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP [root@CentOS7-4 ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT [root@CentOS7-4 ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #所有进站的icmp协议包都丢弃 [root@CentOS7-4 ~]# iptables -A INPUT -p icmp -j DROP
如果不知道ICMP的类型可以百度一手!!!!
#指定目的范围端口 #把所有进站包都丢弃 [root@CentOS7-4 ~]# iptables -A INPUT -j DROP #把进站的TCP端口为1-80的包放通 [root@CentOS7-4 ~]# iptables -I INPUT -p tcp -m multiport --dport 1:80 -j ACCEPT #把进站的TCP端口为1,80,3389的包放通 [root@CentOS7-4 ~]# iptables -I INPUT -p tcp -m multiport --dport 1,80,3389 -j ACCEPT [root@CentOS7-4 ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
#指定范围多端口,指定IP范围,指定源MAC #进站协议TCP端口为25,80,110,143都放行 [root@CentOS7-4~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT #4.21到4.28的IP地址进行转发 [root@CentOS7-4 ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT #这是基于mac地址然后丢掉 [root@CentOS7-4 ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
4、永久性保存修改的规则
#如果重启服务器或者重启iptables它自己会找它的配置文件里的配置进行读取,所以配置完之后记得保存 [root@CentOS7-4 ~]#iptables-save > /etc/sysconfig/iptables
5、提供状态化链接
[root@CentOS7-4 ~]# iptables -I FORWARD -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT