自动化架构-iptables防火墙
今日内容:
iptables防火墙
一、防火墙概述
1.1 防火墙的功能
可以用于实现:
1.2 防火墙种类及使用说明
硬件: 整个企业入口
- 三层路由: H3C 华为 Cisco(思科)
- 防火墙: 深信服,绿盟,奇安信…..
软件: 开源软件 网站内部 封ip 封ip
- iptables 写入到Linux内核中,以后服务docker 工作在 4层(大部分)
- firewalld C7
- nftalbes C8
- ufw (ubuntu firewall) Ubuntu
云防火墙(公有云)
- 阿里云:
- 安全组 (封ip,封端口)
- NAT网关(共享上网,端口映射….)
- waf应用防火墙
- waf防火墙(应用防火墙,处理7层的攻击) SQL注入,等攻击.
企业选型建议:
中小企业: 使用公有云,安全组,waf防火墙,态势感知
访问量巨大: 使用硬件防火墙,waf防火墙,硬件服务器+云服务器
1.3 必须熟悉的名词
容器:如瓶子、罐子,存放东西
表(tables):存放链的容器,防火墙最大概念
链(chain):存放规则的容器
规则(policy):准许或拒绝规则
Netfilter |
表(tables) |
链(chains) |
规则(Policy) |
一栋楼 |
楼里的房子 |
房子里的柜子 |
柜子里衣服,摆放规则 |
1.4 iptables的执行过程(重要)
工作流程:
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 防火墙的默认规则是所有规则都匹配完才会匹配的。
1.5 表与链
1.5.1 概述
表(table)是对功能的分类,如:
- 防火墙功能(filter表)
- 共享上网,端口转发(nat表)
链对数据流进行处理,需要使用不同的链,如:
iptables 是4表5链
- 4表: filter表 nat表 raw表 mangle表
- 5链: INPUT OUTPUT FORWARD PREROUTING POSTROUTING
链的理解,以主机自身为准,如:
- INPUT,就是禁止别的主机数据包进入我
- OUTPUT,禁止我的数据包出去
1.5 2 每个表的说明
1)filter表
企业工作场景:主机防火墙
作用:
- 是iptables默认的表,用于过滤
- 实现防火墙功能:(对数据包filter过滤)屏蔽或准许端口或IP
这个表定义了三个链(chains)
filter表 |
作用 |
INPUT |
负责过滤所有目标地址是本机地址的数据包 通俗来说:就是过滤进入主机的数据包 (能否让数据包进入服务器) |
FORWARD |
路过: 负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍 LVS NAT模式, net.ipv4.ip_forward=0 |
OUTPUT |
处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出去的数据包 |
2)nat表
企业工作场景:
- 用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)
- 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(PREROUTING)
- WEB,单个端口的映射,直接映射80端口(PREROUTING)
作用:
实现共享上网的功能(内网服务器上外网)
端口映射、IP映射
这个表定义了3个链,nat功能相当于网络的acl控 制。和网络交换机acl类似
nat表 |
作用 |
OUTPUT |
和主机放出去的数据包有关,改变主机发出数据包的目的地址。 |
PREROUTING |
在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等 就是收信时,根据规则重写收件人的地址。 例如:把公网IP:xxx.xxx.xxx.xxx映射到局域网的xx.xx.xx.xx服务器上。 如果是web服务,可以报80转换为局域网的服务器9000端口上 10.0.0.61 8080(目标端口) —-nat转换10.0.0.7 22 |
POSTROUTING |
在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。 写好发件人的地址,要让家人回信时能够有地址可回。 例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。 生产应用:局域网共享上网。 |
3)raw表
主要用来决定是否对数据包进行状态跟踪。
对应的内核模块为:iptable_raw
,其表内包括两个链:output
、prerouting
;
4)mangle表
主要用来修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形、策略
路由等,对应的内核模块为:iptable_mangle
,
其表内包括五个链:prerouting
、postrouting
、input
、output
、forward
;
1.5.3 流程图
1.6 iptables的命令参数
参数 |
含义 |
-L |
显示表中的所有规则 |
-n |
不要把端口或ip反向解析为名字 |
指定表 |
|
-t |
指定表,不指定默认是filter表 |
指定连接(加入/追加/删除) |
|
-A |
append 追加把规则写入到链的末尾.加入准许类规则 使用-A |
-I |
insert 把规则加在链的第1条 拒绝类规则放在所有规则最上面 拒绝类 -I |
-D |
delete 删除 -D INPUT 1 |
参数 |
含义 |
-p |
指定协议 protocal tcp/udp/icmp/all |
–dport |
目标端口 dest destination ⚠ 指定端口的时候加上协议 -p tcp |
–sport |
源端口 source 源 |
-s |
–source 源ip ⚠ 如果只屏蔽/准许ip,网段,不用加上协议. |
-d |
–destination 目标ip |
-m |
指定模块 multiport |
-i |
input 输入的时候 从哪个网卡进来 |
-o |
ouput 输出的时候 从哪个网卡出去 |
参数 |
含义 |
-j |
满足条件后的动作 : DROP(拒绝)/ACCEPT(准许)/REJECT(拒绝) |
DROP REJECT拒绝 DROP 把数据丢掉 不会返回信息给用户 REJECT 拒绝 返回拒绝信息 |
|
参数 |
含义 |
-F flush |
清除指定表中所有的规则,备份. |
-X |
删除用户自定义的链 |
-Z zero |
链的计数器清零(数据包计数器与数据包字节计数器) iptables |
-v |
显示数据包,数据量 |
iptables命令及选项 |
指定表 |
指定链 (插入/追加/删除) |
ip |
具体要求 (端口,ip,协议) |
端口 |
动作 |
iptables |
-t filter |
-A INPUT |
-s |
-p tcp/udp/icmp |
–dport 目标端口 |
-j DROP |
|
|
-I |
-d |
|
–sport 源端口 |
-j REJECT |
|
|
-D |
|
|
|
-j ACCEPT |
二、实操
2.1 环境准备
1)虚拟机准备
2)安装
主要配置文件
3)iptable模块加载到内核中
查看内核模块,是否生效
4)启动服务
5)查看表中的规则,默认查看filter表
查看指定表中的规则
2.2 配置filter表规则
2.2.1 备份并清空
正式配置之前,先备份,清空规则
2.2.2 禁止访问22端口
配置:
虚拟机上查看规则
删除规则
删除完,又能重新ssh访问
2.2.3 禁止指定IP
配置
封禁后ping不通、ssh也不通
2.2.4 禁止指定网段
配置,禁止10.0.0.0/24网段访问8080端口
参数理解:
-I:配置INPUT链
-s:源网段(封禁网段)
-p:端口类型
–dport:目的端口号(本机)
-j:禁止访问
2.2.5 只允许指定网段连入
实现阿里云白名单功能 :默认是拒绝,开放部分端口、网段,如
配置方法一,利用!
排除
配置方法二:修改链的默认规则,默认拒绝,再添加允许
2.2.6 指定多个端口
如果需要封禁多个端口,一个个来比较麻烦
可以通过选项,一次指定多个端口
-m multiport -p tcp --dport 80,443
如果端口是连续的,可以不加-m multiport
选项
2.2.7 匹配ICMP类型
通过防火墙规则,控制是否可以ping通
扩展:
也可以通过修改内核参数,来控制ping
2.2.8 匹配网络状态(TCP/IP连接状态)
-m state --state
状态即可
- NEW:已经或将启动新的连接
- ESTABLISHED:已建立的连接
- RELATED:正在启动的新连接
- INVALID:非法或无法识别的
2.2.9 限制并发及速率
-m limit
限制模块
--limit
选项:
--limit-burst
选项:
实验:
测试:用web01 ping
2.2.10 防火墙规则的保存与恢复(重要)
iptables-save
进行备份,默认输出到屏幕
iptables-restore
进行恢复,加上文件
2.2.10.1 保存
案例:保存配置到/etc/sysconfig/iptables
2.2.10.2 恢复
先删除有的规则
再恢复
补充:
重启iptables服务,也可以恢复配置
2.2.11 filter表的实际生产用法
iptables配置方式
- 逛公园模式: 默认规则是 ACCEPT(黑名单模式)
- 看电影模式: 默认规则是 DROP (白名单模式)
生产中建议采用看电影模式
,在设置以下白名单
1、ssh可以连接进来
2、允许本机回环lo接口数据流量流出与流入
3、配置默认规则,放行80、443端口
4、允许网段访问
5、保存配置
2.3 配置NAT表规则
2.3.1 实现共享上网🌟
1)原理
172.16.1.7内网服务器,通过iptables实现共享上网
相关命令如下:
温馨提示:
如果公网ip不固定, -j SNAT –to-source 10.0.0.61 可以写为 -j MASQUERADE 伪装成公网ip
2)环境准备
关闭web01的公网网卡(10.0.0.7),只保留内网172网段的IP
3)配置NAT共享上网
命令
4)web01服务器设置网关
将网关指向172.16.1.61,并设置DNS
5)测试
ping百度,虽然无10网段IP,但仍然可以通
2.3.2 实现端口转发🌟
端口转发常用于解决用户进来的问题,如:外部的用户访问内网的某个服务器,端口…
vmware也能设置端口映射,比如我想在真实机,通过http://127.0.0.1:9000访问到http://10.0.0.7:80,可以按图示设置端口映射
1)原理
2)配置
作用:访问10.0.0.61:9000,相当于访问172.16.1.7:22
3)测试
在xshell本地模式中
记录:
首先测试失败,因为没有“开启系统nat模块”的命令
2.3.3 实现IP映射
1)配置
测试
ssh访问10.0.0.61:22,登录到了web01,说明IP转发成功