iptables是默认linux实现防火墙的工具
在centos7上有个更强大的firewalld
入侵监测 IDS
入侵防御 IPS
防火墙fw
入侵监测 IDS 检查发现是否有入侵行为,并不起到隔断的作用,事后报告的作用,一般采用旁路部署
分析网络中用户发送来的请求,监听是否有黑客攻击的行为
入侵防御 IPS 一旦发现有黑客攻击行为,就进行阻断,要采取在线部署的方式
国内做安全比较有名的,绿盟,启明星辰
防火墙也是起到隔离作用,防止互联网用户随意侵入内部系统
防火墙内部出去回来就不受限制,一般都有状态跟踪功能,外面主动发起请求回应的就会被防火墙拒绝访问
防火墙是防止企业内部和外部之间不安全通讯的
防水墙就是在企业内部做一些限制,比如插入优盘什么的
判断你上网的行为是否合法是否 和工作相关,可以监控你的qq聊天记录,但是qq协议是号称加密的
防火墙都是基于linux内核开发的
说白了就是小的cpu,小的内存跑一个linux系统
删除用户
linux本身就可以实现防火墙功能,一些深层次的功能,二次开发下就好
从理论上来讲,硬件防火墙也没有什么奇怪的地方,要做好,底层的TCP/IP协议应用要非常精通,每一个协议的细节都要非常了解
**主机防火墙只是保护这一台电脑
网络防火墙,保护的不是一个主机,而是一个网络(一般都是拿硬件实现的,有一些软件防火墙也可以,微软早期有一个防火墙产品isa,更老版本叫proxy)
一般的国内的硬件防火墙都是基于linux内核开发的
内核是基于GPL法律约定的(这种约定就是你只要用我的源码就要开放你自己的源代码,发布了就有些不怎么安全)但是国内的问题不大
**
网络防火墙关心的是一些底层的,比如ip,mac地址,tcp/udp端口号,换句话说,只要走特定的底层应用,可以根据底层的ip地址来做控制,或者可以访问tcp,http协议可以,80端口给你访问,如果走的是tcp22端口就不让你访问,如果都是tcp的80,就做不到拒绝,URL不一样,如果study不能访问,那么网络防火墙是做不到的,因为这个是属于应用层的
将来想要限制一下QQ的登录,比如工作中不允许上QQ,拿就分析一下QQ这个软件用的什么协议,用什么端口号,UDP,8000(一般企业都回封的,不让上,所以腾讯开了tcp的443 https://)
如果掐ip地址来杜绝登录qq,但是qq服务器隔断时间会变化的,所以用网络防火墙是很难做到的,就需要用到应用层,
应用层可以看到只要带有www.tencent.com的数据包就给掐了
以前微软的isa server就可以掐,看你的数据报文中是否带有腾讯的签名
应用层的防火墙不仅起到防火墙的功能还起到代理服务器的功能,一般指的都是正向代理功能
正向代理离客户端近,反向代理离服务器近
一个企业内部上网与互联网之间配置一个正向代理服务器,大家只要上网就通过正向代理服务器,通过这个代理服务器上网能起到一个控制作用,可以控制能访问哪些资源,哪些不能访问;还有个功能就是起到一个加速访问的效果,因为可以把互联网上的资源缓存到代理服务器上,
反向代理服务器,一般起到调度的效果,把企业从互联网发送过来的i请求,调度到后端提供 服务的web服务器或者特定的服务器上去
网络防火墙一般应用在包级别(也就是只要引用在数据链路层,网络层以及传输层)在往上应用层就做不到了,比如说病毒分析不出来,一个数据包传过来以后,走http协议,假设这是个病毒文件,网络层的防火墙不能知道这是个病毒,因为网络层的防火墙顶多看看ip地址端口号,tcpudp协议,mac地址等,里面传什么东西就不认识了,而且一个病毒有可能是比较大的,假设一个病毒文件时1M,这个病毒文件真正传过来,mtu最多时1500字节,就会把这个1M文件进行切片,而网络层的防火墙只是检查一个一个包,肯定分辨不出病毒,
所以网络防火墙相对来讲比较弱,功能单一,但是优点是速度块(不去分析应用层的具体协议,不去分析对内层的东西,应用层的封装是在最里面的,应用层先封装,封装以后到达传输层,传输层用tcp协议封装,再用ip协议封装,再去封装以太网帧),易于维护
顶多分析到这,不往里面拆了,分析的东西少了,就速度快了
应用层的防火墙就全部识别,既然拆得多,那就是功能较大,但是速度会相比较慢
因为每个包都要分析,而且需要把包组合起来,看看是不是病毒
生产中遇到的防火墙可能两种都有,结合在一起,不仅可以分析应用层的数据,也可以分析下面底层一点的地址,或是端口
在linux内核级就有防火墙的功能
有个组建Netfilter,有了这个才具有了防火墙的功能
这个文件可以定义哪些功能需要编译到内核里,有些是模块,有些是放到内核里
/lib/modules里的是模块
这些是放在内核中的
在编译i内核的时候到底哪些功能启用,哪些不启用功能,如果功能要启用的话,是放在lib/modules,还是内核里是由一个配置文件决定的
之前为了让linux内核支持NTFS功能就重新编译了一下内核
关于防火墙就在这里面,m代表以模块方式
确实防火墙功能已经启用 了,但是是以模块方式提供的
linux内核中放置了5个hook(勾子)function,钩子函数是做什么的,这5个钩子是和防火墙相关的,可以理解为5个触发器,(钩子始终监控你对内核操作,一旦发现某个条件满足了,就钩住你,触发一个动作),这个5个函数分别叫input,output,foward,prerouting,postrouting,分别处于内核的不同位置,在内核,你要传输哪些数据,就要在哪些地方设置关卡
1.数据发给你本机程序使用
2.把自己电脑配置成路由器了,数据穿过你的电脑到达另外一台机器
3.自己也可能访问别人
知道了数据的三个流向,那么设置关卡怎么设置
1.一个总关卡设置在路由表的前面
2.总出口也需要设置一个关卡
3.数据发送给自己的需要设置一个关卡
4.本人访问出去的也需要设置关卡
5.路过也需要设置关卡,出来也要检查路由表
、
prerouting 路由前和postrouting 路由后
将来这5个检查哨可以各自定义自己的规则,一般满足需求,没有必要重复性地定义安全规则
比如想要拒绝一个ip地址访问本机的http服务
在input上设置最有意义
路由前设置,因为不确定这个数据包是不是经过你
如果这个是个路由,想要设置不让你访问优酷,应该在forward,prerouting路由前也能起到这个作用
内核里叫钩子,用户敲命令配置用的工具,对应这个5个钩子名称是不一样的,叫链chain
还有4个表,4表5链
在linux里要想实现防火墙功能,就需要通过一些防火墙对应的软件工具,在centos7上有两种方式,一种是iptables,和firewalld
**所谓4个表分别是filter、nat、mangle、raw
filter表主要是过滤,比如之前过滤哪个IP地址访问,不满足需要就不让它通过
nat表,地址转换(不仅是把数据报文传过去,而且还把数据报文进行修改了,数据报文在传输过程中,以太网有以太网的帧头部,有ip头部,有tcp头部,udp头部,还有应用层的报文头部,在传输中可能以太网帧头部的mac地址会改变,但是通常不怎么会变,ip也会变,就需要用到nat表,把网络地址转换)
mangle改的是,下面一些位置的标记,修改报文的位置
**
(认为将来定义的安全规则,如果是http的和https,想把这两种逻辑组合在一起,叫web协议,可以给这两个协议打标签,只要认为是10标签的都认为是一个协议)打标签就需要用到mangle
raw是关闭nat表上的链接跟踪功能,加快访问速度的,防火墙出去可以,别人进来不行,但是你出去返回的就可以,就是用了防火墙的跟踪功能
平时filter表用的更多一些
如果在4个表上都定义了优先级,如果冲突,从高到底,raw优先级最高,filter最低
4个表和5个链式笛卡尔乘积的关系,有些表对应的里面,没又raw(缺少的)
nat表,centos6和centos7 不一样。,centos6没有这个input
下面是查filter对应的有几个链
查一下nat
在6上查一下
当数据报文发过来,第一个到达的是prerouting(raw表,mangle表,nat表),filter表没有prerouting链
经过检查,由input发到本地,
forward发到外面(只支持mangle表和filter表)
这个是数据报文的三个流向
就算只有一个网卡,也要决定这个网卡出,否则你不知道你的数据发往哪里 ,还有经过postrouting总出口
prerouting总入口
iptables是一个客户端用户空间的工具包,并不是内核级,就是个应用程序,是一个用户使用的程序,内核里集成的防火墙叫netfilter,iptable只是个工具,netfilter才是防火墙
文件列表,扩展 了很多功能
7上已经没有脚本概念是一个service
iptables在定义规则的时候,就是两大块,满足什么条件,,一匹配什么条件,而处理动作
条件有两种,
一种叫基本匹配, ip,端口,简单匹配
一种扩展匹配,(更复杂的,比如当你访问某一个时间段,上课时间允许,下课时间不允许,就可以通过扩展匹配来实现
处理动作叫target( 目标),当满足某个条件的时候,就用对应目标来处理,方式是跳转的意思
当满足什么条件了,就跳转到目标,这个目标由里面的处理动作来决定ACCEPT接收,DROP抛弃,REJECT拒绝(抛弃和拒绝虽然都是访问不了,但是还是不太一样,不去明确拒绝就是DROP,
规则要设置在哪里就要关联到某一个链上
**4表5链, t 是table的意思 -A(表示增加的意思,在原有规则最后增加)指定input链(这个图上input应该是大写INPUT
-s是源地址,当你是这源地址,-j就是跳跃,跳跃到一个target上去drop
只要从192.168.0.1 地址发过来的请求,就抛弃拒绝,由于没有定义其他的信息,就意味着不管什么ping,ssh,ftp还是其他访问请求都拒绝,只要访问就全部拒绝
**
现在做下测试,都可以进行访问
查看现有规则
现在添加过滤。不写就是默认filter表,-A表示增加,input表示记录,-s源,-jdrop抛弃,可以加一个编号
1个被drop掉了
但对于cen’to’s6来讲是看不出来是被拒绝了
也可以直接改成 REJECT拒绝
如果有多条规则,是按照顺序来检查的,一旦满足直接生效,不会往下再看了
删除第一条规则
这就是被拒绝的现象
27是可以ping通的,第一条规则和第二条规则都不满足,默认是允许
想实现网段,统统被拒绝,这样windows机器连接也断了
只能本机操作
现在想要30.6可以访问,30.0网段访问不了,要想实现这个需求,iu需要把30.6条件写到前面去
就可以访问了
条件越严格苛刻的,越精确范围越小往前放,代表的主机越宽往后放
表,链,满足什么条件,就怎么样
不小心把自己提出来了,这是生产中容易遇到的问题,一般定义防火墙
先把系统默认的规则做一下备份(起码原来防火墙策略是可以连接上去的,然后定义一个计划任务,5分种以后还原旧的策略,然后再放心去改(at 命令)
centos要做干净的iptable策略需要stop防火墙服务,firewalld会变相再系统种添加很多iptable规则
这个关并不是没有防火墙功能了,是没有系统默认的规则了,内核防火墙功能是一直有的,不是失去了防火墙功能、