一.iptables防火墙基本介绍
- 主要作用:隔离功能
- 一般部署在网络边缘或主机边缘
- 主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。
二、划分的方式
2.1 按保护范围划分:
- 主机防火墙:服务范围为当前一台主机
- 网络防火墙:服务范围为防火墙一侧的局域网
2.2 按实现方式划分:
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现
- 软件防火墙:通过代码实现,并进行判断
2.3 按网络协议划分:
- 网络层防火墙:OSI模型下四层,又称为包过滤防火墙
- 应用层防火墙/代理服务器:设置数据的进出
三、Linux防火墙工具
- friewalld:centos7专有
- iptables:包过滤防火墙
- selinux:自带的安全工具
3.1 iptables
- Linux的防火墙体系主要工作在网络层,
- 针对数据包实施过滤和限制,
- 属于典型的包过滤防火墙(或称为网络层防火墙)
3.1.1 作用
- IP信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。
-
主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口、协议(主要针对tcp协议)等信息的处理。
3.2 iptables组成及原理
3.2.1 组成部分
iptables由四个表table和五个链chain以及一些规则组成(SELinux也是一个表,但它是独立的,不在我们讨论的范围内)
四表:raw、mangle、nat、filter
- raw: 用于控制数据包的状态跟踪,可以决定是否跳过后续的处理流程。
- mangle:数据标记
- nat:地址转换表
- filter:过滤规则表,根据规则表来定义或者过滤符合条件的数据包,默认表
优先级由高到低的顺序为:
security -->raw-->mangle-->nat-->filter
五链:
- INPUT:处理数据包进入本机的规则
- OUTPUT:处理数据包发出的规则
- PREROUTING:处理数据包进入本机之前的规则
- POSTROUTING:处理数据包离开本机之后的规则
-
FORWARD:处理数据包转发到其他主机的规则。
3.2.2 iptables规则
表里面有链,链里面有规则,规则就是我们自定义的对于包的控制命令
3.2.3 匹配顺序
根据表的优先级匹配,在表中从上到下 进行检查,找到匹配规则立即停止,不再继续查找,如破i配不到,按照链的默认规则处理
3.2.4 三种报文流向
- 流入本机:PREROUTING --> INPUT-->用户空间进程 httpd服务-目的转换-httpd
- 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING httpd服务-out-源地址
- 转发:PREROUTING --> FORWARD --> POSTROUTING -----FOR------
3.3 iptables命令格式
iptable [-t表名](不指定表名,默认就是filter表) 管理选项[链名] [匹配条件] [-j 控制类型]
3.3.1 管理选项
管理选项 | 用法 |
---|---|
-A | 在指定链末尾追加一条 |
-I | 在指定链中插入一条新的,可以指定序号,-I后跟数字表示序号 |
-P | 修改链的默认策略 |
-D | 删除 |
--line-numbers | 规则带编号 |
-R | 修改、替换某一条规则(修改一般不用) |
-L | 查看链中规则 |
-F | 清空链中所有规则(!!!慎用) |
-n | 所有字段以数字形式显示 |
-v | 查看时显示更详细信息,常跟-L一起使用 (查看) |
-X | 清空自定义链的规则,不影响其他链 |
-Z | 清空链的计数器(匹配到的数据包的大小和总和) |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
3.3.2 匹配条件
匹配的条件 | 作用 |
---|---|
-p | 指定要匹配的数据包的协议类型 |
-s | 指定要匹配的数据包的源IP地址(指定多个ip用“ ,”隔开,加在协议前) |
-d | 指定要匹配的数据包的目的IP地 |
-i | 指定数据包进入本机的网络接口 |
-o | 指定数据包离开本机做使用的网络接口 |
--sport | 指定源端口号(指定多个端口用” :”隔开,加在协议后,注意小端口号在前) |
--dport | 指定目的端口号 |
3.3.3 控制类型
类型 | 作用 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给出任何回应信息 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应信息 |
SNAT | 修改数据包的源IP地址 |
DNAT | 修改数据包的目的IP地址 |
四、 实际操作
4.1 前期准备
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装启用iptables
4.2 查看默认规则
iptables -vnL --line-number
##不指定表,默认就是filter
##--line-numbers 规则带编号
4.3 修改链的默认规则
在生产工作中,iptables所有链默认规则都是DROP(相当与设置了白名单)
格式:iptables -P INPUT DROP
1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改
2.-P 设置了DROP后,使用 -F 一定要小心!
#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决
此时的解决方案有三种:
第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可
第二种:操作服务器,重启iptables服务
第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!
在生产中都是默认DROP
4.4 不允许其他主机ping本机,给响应信息REJECT,ping所使用的协议为icmp
iptables -t filter -A INPUT -p icmp -j REJECT
#不允许其他主机ping本机,给响应信息REJECT,ping所使用的协议为icmp
iptables -vnL --line-number
#使用数字形式(fliter)表所有链,编号显示
换另一台主机测试:立即生效
4.5 指定序号插入,在上一规则前添加允许其它主机ping本机
iptables -I INPUT 1 -p icmp -j ACCEPT
换另一台主机测试
查看规则:
4.6 按照行号删除
iptables -D INPUT 2
#删除第二行规则
4.7 按照内容删除
iptables -D INPUT -p icmp -j DROP
#将含有icmp协议使用DROP类型的规则删除
- 注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。
- 直到删除最后一条时,才能将该规则全部清除 。
- 一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错。
五、通用匹配
可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
- 协议匹配:-p 协议名
- 地址匹配:-s 源地址、-d 目的地址 可以是IP、网段、域名、空(任何地址)
- 接口匹配:-i 入站网卡、-o出站网卡
iptables -A INPUT -s 192.168.247.0/24 -p tcp --dport 80 -j REJECT
#禁止整个网段访问80端口的服务
六、隐藏模块
iptables在使用-p 指定协议时,若指明特定协议后就无须再使用-m指明扩展模块的扩展机制。
6.1 指定多个端口
- -m multiport --sport 源端口列表
- -m multiport --dport 目的端口列表
例1:
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT
#多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则
例2:
[root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP
#多端口匹配,一次性放通多个udp网络协议的端口匹配规则
6.2 IP范围匹配
- -m iprange --src-range 源IP范围
- -m iprange --dst-range 目的IP范围
[root@localhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT
#禁止网段内的ip地址ping主机
6.3 MAC匹配
该方式范围过于有限,且操作不方便,用的不多,了解即可
- -m mac --mac-source MAC地址
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP