防火墙:隔离功能
部署在网络边缘或者主机边缘。在工作中,防火墙的主要作用决定哪些数据可以被外网访问以及哪些数据可以进入内网访问。
网络层
安全技术:
1、入侵检查系统:检测出了威胁,病毒,木马,不会阻断网络访问,事后提供报警和监督。类似于监控。看着你,但是不干预。出了事以后再来找你。
2、入侵防御系统:一旦检测出威胁,会立即予以阻断,主动的方式保护网络安全。透明模式工作的。一般都是用在线部署的方式。(所有数据进出的必经之路。)
现在市面上大部分的防火墙都是上述二者的结合体。
防水墙:waterwall。防止信息泄露。
软件防火墙:360 卡巴斯基 金山毒霸 iptables firewalld
硬件防火墙:路由器,交换机,三层交换机
1保护范围:
1、主机防火墙:服务范围的就是当前自己的主机
2、网络防火墙:必经之路
2实现方式:
1、硬件防火墙:既有专业的硬件来实现防火墙功能,又有软件来进行配合。
2、软件防火墙:代码实现,判断。
3网络协议划分:
网络层:包过滤防火墙
应用层(代理服务器):设置数据的进出。
网络层:包过滤防火墙
linux防火墙:firewalld centos7专门自带的
iptables 包过滤防火墙
selinux 自带的安全工具。
集成在一个内核当中:netfilter组件
iptables 包过滤防火墙
工作在:网络层
主要使命是针对数据包进行过滤和限制
iptables属于用户态
netfilter 属于内核态。
过滤数据包:ip地址 端口 协议。都可以在iptables中进行配置,可以限制,也可以放行。
协议:tcp(基于端口基本上都用它) udp
iptables的构成和工作机制
iptables的组成部分:
四表五链组成(selinux,也是一个表,不在我们讨论范围之内。)面试会问
四表:
raw:连接跟踪机制,加快封包穿过防火墙的速度,数据包跟踪
mangle:数据标记
nat:地址转换表
filter:过滤规则表,根据规则来定义或者过滤符合条件的数据包,默认表
四表的优先级:security-----------raw--------------mangle------------net--------------filter
五链:
INPUT链:处理数据包进入本机的规则
OUTPUT:处理数据包发出的规则,一般不做处理。
prerouting:处理数据包进入的规则
postrouting:处理数据包离开本机之后的规则 结合地址转换使用
FORWARD:处理数据转发规则
iptables的规则:
表里面有链,链里面有规则,规则就是我们自定义的对于数据包的控制命令。
匹配顺序:
1、根据表的优先级匹配,在表中从上到下进行检查,找到匹配规则立即停止,不在表中向下继续查找,如果匹配不到规则,按照链的默认规则进行处理。
2、报文流向
流向本机:prerouting--------->input------------>用户进程(httpd服务)---------请求---------响应------------数据要返回用户
流出本机:httpd---------->响应--------->output----------->postrouting(地址转换)---------->用户
转发:数据包进来,肯定不是同一网段,路由转发---------->forward--------->数据包出去,若不允许转发,数据包直接丢弃。
安装:
关闭防火墙:
iptables的命令格式:
iptables [-t 表名](不指定表名,默认就是filter表)管理选项[链名][匹配条件][-j 控制类型]
指定表名查看:-t
管理选项:(大写)
-A 在链的末尾追加一条,添加
-I 在链中插入一条新的规则,可以指定序号。-i 后面的数字,表示序号
-P 修改链的默认策略
-D 删除
-R 修改,替换规则
-L 查看链中的规则(一般和vnL结合使用)
-vnL --line-number 查看规则的序号
v 显示详细信息
n 把规则以数字形式进行展示
-F 清空链中的所有规则,慎用
例:指定表名 指定添加 指定匹配条件
匹配条件:(小写)
-p 指定匹配数据包的协议类型
-s 指定匹配数据包的源ip地址
-d 指定匹配数据包的目的ip地址
-i 指定数据包进入本机的接口
-o 指定数据包离开本机使用的接口
--sport 指定源端口号
--dport 指定目的端口号
控制类型:(全部大写)
ACCEPT:允许数据包通过
DROP:拒绝,直接丢弃数据包,不给出任何信息回应
REJECT:拒绝,但是会给一个响应信息。
SNAT:修改数据包的源ip地址
DNAT:修改数据包的目的地址。
添加规则:iptables -I INPUT 1 -p icmp -j ACCEPT
第一条规则变为accept了,就允许了
iptables -vnL --line 在规则前面加上编号,更加直观
指定ip地址
iptables -A INPUT -s 192.168.233.20 -p tcp -j REJECT
指定端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
指定只有20端口才能访问10的tcp的80端口
iptables -A INPUT -s 192.168.233.20 -p tcp --drop 80 -j ACCEPT
删除规则:
IPtables -D INPUT 4 (根据指定规则序号来删)
修改规则:(用的很少)
让它拒绝(指定规则序号,修改第几条)
iptables -R INPUT 1 -p icmp -j REJECT (不推荐)
修改规则一般不用,都是添加或者删除。且它们都是即配即生效。
修改链的默认规则(核心,重点):
在生成中iptables所有的链的默认规则都是DROP(清空规则之后默认就是全DROP了)
iptables -P INPUT DROP
-P 修改指定链的规则 改为DROP
全部拒绝了,远程连接不上了
回虚拟机编辑,让其重新允许
生成当中都是按照白名单来设置的,默认策略就是全拒绝
以上的设置都是临时策略,重启防火墙就可以恢复默认了
默认保留的策略如下:
慎用清空,默认全是拒绝。没有进行默认保留策略的备份,又无法进入机房重新配置,就是炸。
通用匹配:
网络协议 端口 ip地址
综合:整个网段禁止访问10服务器的80端口的服务
iptables -A INPUT 192.168.233.0/24 -p tcp --drop 80 -j REJECT
注:端口要跟在协议之后,ip地址要在协议之前
隐藏扩展模块:
例:既拒绝22端口,又拒绝80端口(小的数字在前,大的数字在后)
iptables -A INPUT -p tcp --dport 22:80 -j REJECT
-p:指定协议时,tcp udp 指明了是什么协议,就不需要再用-m指明扩展模块。就变成了了隐藏模块。指定多端口 可以用冒号的形式,也可用-m隐藏模块来实现。
-m:可以用明确的形式指出类型,包括多端口,mac地址,以及ip地址,数据包的状态。
指定多端口用的最多。
-m 指定多端口:
事前查:了解要配置的服务的基本情况
事后查:查配置有没有写进去
最后检测指定的策略有没有生效
iptables -vnL --line-number
指定协议 指定多端口 拒绝多个:iptables -A INPUT -p tcp -m multiport --dport 22,30,443,80 -j REJECT
注:使用-m指定多端口用逗号隔开,无需考虑端口号大小的范围
-m multiport 指定多端口,多个端口号用逗号分开
-m multiport --dport 目的
-m multiport --sport 源
ip范围:
-m iprange --src-range 源ip地址的范围
-m iprange --dst-range 目的地址范围
例:
iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT
即刻生效
mac地址(了解即可)
-m mac --mac-source(用的很少)
例:iptables -A INPUT -p icmp -m mac --mac-source 00:0c:29:92:4e:48 -j DROP
重点
会四表五链,是哪四表五链及其用处
四表的优先级
报文的数据流向
相关的命令选项:会添加及删除规则
指定多端口及ip范围
---------------------------------------------------------------------------------------------------------------------------------
iptables防火墙(二)
四表五链(核心)
raw mangle nat filter
表的作用,容纳各种链
五链
INPUT 处理进入本机的规则
OPTPUT 出本机的规则
PREROUTING 进入本机是否需要进行地址转换
POSTROUTING 出本机是否需要进行地址转换
FORWARD 转发数据
链的作用就是容纳各种规则
规则是从上到下匹配,一旦匹配立即终止;不再向下匹配。
规则
iptables -t /filter(指定表,默认fil) -A -I -P -D -R -P(管理选项,大写)
-p(指定匹配条件) ip地址要写在协议之前,端口号要写在协议之后
-j 控制选项 ACCEPT REJECT DROP SNAT/DNAT(源/目标地址转换)
-vnL --line-number 查看规则的序号
数据流向问题(以httpd服务为例)
httpd 服务名 apache服务
请求
响应
INPUT
请求---发起方---用户---客户端---请求---------->httpd
三次握手(建立连接) 静态页面
响应--------------httpd------>页面------------>用户(客户端)/----->数据库
访问结束,四次挥手
iptables的备份与还原
1、写在命令行当中的都是临时配置
2、把我们的规则配置在服务的文件当中,形成永久生效。
策略备份:
iptables-save > /opt/ky30.bak
默认配置文件:
iptables-save > /opt/ky30.bak 导出配置
iptables-restore < /opt/ky30.bak 导入
导入配置也是临时生效,永久生效必须写入配置文件当中
/etc/sysconfig/iptables写入配置文件当中。
自定义链(自定义添加链名)
1、创建自定义链
iptables -N custom
查看 iptables -vnL
不加-t,就是没有指定表名,就是默认在filter表中添加一个自定义链
2、怎么给自定义链改名字
iptables -E 原链名 新链名
例:iptables -E custom ky30
-vnL 查看一下
3、添加规则
iptables -I ky30 -p icmp -j ACCEPT
iptables -I INPUT -p icmp -j ky30
注:创建在自定义链当中的规则,需要添加到默认链当中,才能够使用
-j ky30 自定义的链名。
删除自定义链:
iptables -D INPUT 1
查看一下
还需要在自定义链中把它删除掉
这样才能删除自定义链
iptables -X ky30
再查看一下,自定义链就没有了
总结:
第一步,自定义链的规则被默认链使用,要先在默认链当中删除,删除默认链之后,再把自定义链当中的规则删除,最后才能把自定义链删除。
iptables -X ky30 (自定义的链名)
SNAT和DNAT
SNAT:源地址转换
内网到外网 转换源
DNAT:目标地址转换
外网到内网 转换目的
必须要做地址转换
DNAT: 目标地址转换
外网到内网 目的
12.0.0.10 10.0.0.10 192.168.233.21
10.0.0.10 192.168.233.10
web服务器 网关服务器 网关服务器 客户端
地址转换
10 目的地址10.11 180 12.0.0.10 12.0.0.10源 192.168.233.10
web服务器------网关服务器----------12.0.0.10.--------网关服务器----客户端发起请求
web服务器响应请求--------网关服务器--------网关服务器......客户端
180 12.0.0.10 目标 192.168.233.21
10.10 10.11 180 源
小实验:
test1:192.168.233.10 内网服务器
test2:192.168.233.20 网关服务器
ens33 test1的网关192.168233.254
ens36 test2的网关12.0.0.254
test3: 192.168.233.30 web服务器
撰写栏:只使用于同一命令同一操作
修改test3
web服务器,安装一下web服务
yum -y install httpd
都开启一下服务
systemctl restart httpd
测试一下服务
修改一下test1的ip地址
test2在虚拟机上添加网卡
ifconfig 有ens36
但是网卡文件没有
需要配置一下
ens33的ip地址配置成内网服务器的网关
把它复制成36
改设备名称和ip地址
ip地址对应外网的12.0.0.254
还需要修改内核参数,让服务器开启转发功能
/etc/sysctl.conf 重要的配置文件
可以修改内核参数,永久生效
开启它的转发功能
重启一下网络
进虚拟机看一下配置是否生效
接下来开始做地址转换
从ens36出
把出去的地址转换成10.0.0.10
回来时转换成11.0.0.11
先从内到外,做源地址转换
指定表 指定网段(因为不止一个服务器) 指定设备 指定控制条件
iptables t nat A POSTROUTING -S 192.168.233.0/24 -o ens36 SANT --to 10.0.0.10
从test1访问test3,看一下日志
做目标地址转换
iptables t nat ·A PREROUTING ·d 11.0.0.11 ens36 p tcp .dport 80 .j DNAT .to 192.168.233.10:80
iptables *t nat A PREROUTING -d 11.0.0.11 -i ens36 p tcp -dport 80 j DNAT --to 192.168.233.10:80
-t nat 指定表名
-A PREROUTING
-d 指定目的ip
p指定tcp协议
-dport 80 指定端口号为80
-j DNAT 目标地址转换
-to 192.168.233.10:80
所有外部来的访问IP地址都变成11.0.0.11来访问内网,目标端口为80,协议是tcp协议的流量转发到192.168.233.10:80的端口.
外部客户端可以通过11.0.0.11:80来访问内部服务器192.168.233.10:80的http服务
查看一下
到test3访问试一下,看看test1的日志
linux系统如何抓包
面试题,也是必要的技能之一
用tcpdump来实现linux抓包,自带的工具。
tcpdump
tcpdump tcp-i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.233.0/24 -w /opt/target.cap
指定抓包的协议 tcp
-i ens33 只抓经过ens33的数据包
-t:不显示时间戳
-s0: 抓取完整的数据包
and:目的端口是80,and 192.168.233.0/24数据包的源地址
-w 把抓包的文件保存
执行一下
多访问几次,看看抓包情况
用xshell看会是乱码,我们把抓的包放到桌面
用wireshake看一下抓的包
刚刚的是第一种方式,指定,我们来看第二种方式,不指定
动态处理(用的比较多)
同样放到桌面上,用wireshake来看一下