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、常见选项
- 管理选项
类别 | 选项 | 用途 |
添加新的规则 |
| 在链的末尾追加一条规则 |
| 在链的开头(或指定序号)插入一条规则 | |
查看规则列表 |
| 列出所有的规则条目 |
| 以数字形式显示地址、端口等信息 | |
| 以更详细的方式显示规则信息 | |
| 查看规则时,显示规则的序号 | |
删除、清空规则 |
| 删除链内指定序号(或内容)的一条规则 |
| 清空所有的规则 | |
设置默认策略 |
| 为指定的链设置默认规则 |
#添加新规则
#在链的末尾添加进站所有的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 连接状态 ( |
# “ ! ” 表示取反
#进站的所有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