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

IPtables 实现snat iptables j_TCP

这是网卡名称!!!!

# --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