iptables防火墙
iptables防火墙概述
不同于Firewalld防火墙,iptables针对IP数据包,体现在对包内的IP地址、端口等信息的处理上。
iptables表链结构
四表
规则表的作用:容纳各种规则链
默认包括四个规则表:
- raw表:确定是否对该数据包进行状态跟踪–bug测试时用
- mangle表:为数据包设置标记
大部分情况用的两张表:(需要人为定义的表) - nat表:修改数据包中的源、目标IP地址或端口
- filter表:确定是否放行该数据包(过滤)–防火墙的默认表(核心)
五链
规则链的作用:容纳各种防火墙规则
规则的作用:对数据包进行过滤
默认包括五条规则链(类似于ACL访问控制列表):
- INPUT:处理入站数据包(进入防火墙时)
- OUTPUT:处理出战数据包(出防火墙时)
- FORWARD:处理转发数据包
- PREROUTING:在进行路由选择前处理数据包(先把目标IP转换为私有IP再查询路由表进行数据转发)
- POSTROUTING:在进行路由选择后处理数据包(从内向外会查路由表;将源地址转换为外网地址出去)
数据包过滤匹配流程
规则表顺序:
raw——mangle——nat——filter
规则链顺序:
PREROUTING——INPUT——FORWARD——OUTPUT——POSTROUTING
入站:PREROUTING——INPUT
出站:OUTPUT——POSTROUTING
转发:PREROUTING——FORWARD——POSTROUTING
规则链内:
按顺序依次匹配,匹配到即停止,LOG除外;
若找不到匹配的规则,按该链的默认策略处理。
iptables工具
CentOS7默认使用Firewalld防火墙工具,需要先关闭Firewalld才能使用iptables防火墙。
安装iptables
systemctl stop firewalld
yum -y install iptables iptables-services //安装iptables防火墙
systemctl start iptables
systemctl enable iptables //设置iptables开机启动
iptables基本语法
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
-t:指定规则表,不加默认为filter表
链名:指定规则链,不加默认为表内所有链
条件:指定协议、端口
-j:指定控制类型
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
- 常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配 - 常用选项
添加新的规则:
-A:在链的末尾追加一条长规则
-I:在链的开头或指定序号插入一条规则
查看规则列表:
-L:列出所有的规则
-n:以数字形式显示地址、端口信息(可与-L合用为-nL)
-v:显示更详细的信息
–line-numbers:查看规则时,显示规则的序号
删除、清空规则:
-D:删除链内指定序号或内容的一条规则
-F:清空所有规则
设置默认策略:
-P:为指定的链设置默认规则
示例
iptables -t filter -A INPUT -p tcp -j ACCEPT ##在INPUT链的末尾追加tcp协议允许通过的规则
iptables -I INPUT -p udp -j ACCEPT ##在INPUT链的开头插入允许udp协议通过的规则
iptables -I INPUT 2 -p icmp -j ACCEPT ##在INPUT链的第二个规则中插入允许icmp协议通过的规则
iptables -L INPUT --line-numbers ##查看INPUT链所有的规则条目,并显示规则的序号
iptables -nL INPUT ##以数字形式显示INPUT链所有的规则条目
iptables -D INPUT 2 ##删除INPUT链中的第二条规则
iptables -F ##清空filter表中的规则(加-F是只清空filter表中的规则)
iptables -t nat -F ##清空nat表中的规则
iptables -t mangle -F ##清空mangle表中的规则
iptables -t raw -F ##清空raw表中的规则
iptables -t filter -P FORWARD DROP ##为FORWARD链设置默认规则为直接丢弃
iptables -P OUTPUT ACCEPT ##为OUTPUT链设置默认规则为允许通过
规则的匹配条件
匹配类型
- 通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件 - 隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件 - 显示匹配
要求以“-m 扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
常见的通用匹配
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o出站网卡
感叹号!表示条件取反
iptables -A FORWARD ! -p icmp -j ACCEPT ##FORWARD链中追加一条规则:除了icmp协议,其他协议都accept
iptables -A INPUT -s 192.168.20.100 -j REJECT ##在INPUT链中添加一条规则:来自192.168.20.100的数据包都拒绝通过
iptables -A INPUT -s 192.168.20.0/24 -j DROP ##在INPUT链中添加一条规则:来自192.168.20.0/24网段的数据包全都丢弃
iptables -A INPUT -i ens33 -s 192.168.20.100 -j DROP ##在INPUT链中追加一条规则:从192.168.20.100来的,从外网接口ens33进入的数据包都丢弃
[root@service ~]# iptables -A INPUT -i ens33 -s 192.168.20.0/24 -j DROP ##在INPUT链中追加一条规则:从192.168.20.0/24网段来的,从外网接口ens33进入的数据包都丢弃
常见的隐含匹配
端口匹配:–sport 源端口、–dport 目的端口
ICMP类型匹配:–icmp-type ICMP类型
iptables -A FORWARD -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j DROP
(echo-request 8请求,echo-rely 0回显,destination-unreachable 3不可达)
常见的显示匹配
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --state 连接状态
iptables -A INPUT -p tcp -m multiport --dports 25,80,110 -j ACCEPT ##在INPUT链中追加一条规则:目的端口列表中tcp25,80,110端口允许通过
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.50-192.168.1.100 -j ACCEPT ##在FORWARD链中追加一条规则:IP地址范围为192.168.1.50-192.168.1.100的数据包允许通过
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:53:23 -j DROP ##在INPUT链中追加一条规则:MAC地址为00:0c:29:c0:53:23的数据包丢弃