常见的攻击手段
拒绝服务
口令破解
欺骗用户(社工)
已知漏洞
常见的安全防御手段
基础类防火墙设备
IDS类,入侵检测系统
IPS类,入侵防御系统
主动安全类设备
防火墙有关概念
1.防火墙定义
防火墙是工作在"主机边缘"处或在"网络边缘"处对数据报文进行检测,并且能够根据事先定义好的规则,对数据报文进行"相关处理"的模块。
2.防火墙的分类
(1)根据构造方式分类
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现;性能高,成本也高。
软件服务器:应用软件处理逻辑,运行于通用硬件平台上的防火墙;性能低,成本也低。
(2)根据工作机制分类
包过滤防火墙:应用于内部主机和外部主机之间,过滤系统是一台服务器或是一台主机;过滤系统根据过滤规则来决定是否让数据包通过;主要过滤数据包内的信息有:SIP/DIP、SPORT/DPORT等
应用层防火墙:一般指应用层网关ALG,应用层防火墙顾名思义可以对七层的应用层进行防护。
iptables基础
1.iptables与netfilter
iptabels并不是真正的防火墙,可以理解为客户端代理,用户通过iptables,将用户的安全设定执行到对应的"安全框架"中,这个框架就是"netfilter"。
netfilter是Linux2.4内核防火墙架构,位于内核空间;
iptables是它的命令行工具,位于用户空间。
netfilter可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、NAT地址转换,以及基于用户及媒体控制地址的过滤和基于状态的过滤、包速率限速等。
2.聊聊iptables
客户端访问web服务时,客户端应用层产生数据,经过层层封装后,最终报文到网卡;
而TCP/IP协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传到用户空间的web服务器中,
而此时,客户端报文的目标终点为web服务所监视的socket上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,
这时,web服务所监听的ip和port反而成了原点。
netfilter是内核的一部分,所以如果我们想要防火墙能够生效,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,
经过检查后,符合条件的才能放行,于是就出现了进站`input`关卡和出站`output`关卡;在IP tables中关卡即为"链"。
如果客户端发来的报文访问的目标地址可能不是本机,而是其他服务器,当本机内核中支持"ip forward"时,我们可以将报文转发给其他服务器;
所以,就会有其他的"关卡"制定相应的放行规则,分别为 路由前`PREROUTING`,转发`FORWARD`,路由后`POSTROUTING`。
3.什么是"链"?
我们知道防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的动作,当报文经过这些关卡的时候,就必须匹配这个关卡上的规则;一个关卡上往往有多条规则,将这些规则串起来就形成了"链"。
没经过这个关卡的报文,都要将这条链上的规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。
iptables共涉及五种默认规则链,从应用时间点的角度进行理解:
1.INPUT
:
入站,当接收到防火墙本机地址的数据包时,应用此链中的规则
2.OUTPUT
:
出站,当防火墙向外发送数据包时,应用此链中的规则
3.FORWARD
:
转发,当接收到需要防火墙发送给其他地址的数据包时,应用此链中的规则
4.PREROUTING
:
在对数据包作路由选择之前,应用此链中的规则,如DNAT
经过此链的数据分为两种:1.留在本机处理 2.被转发到其他目的地
5.POSTROUTING
:
在对数据包作路由选择之后,应用此链中的规则,如SNAT
4.什么是表?
具有相同功能的规则的集合称为"表",不同功能的规则,我们可以放置在不同的表中进行管理,而iptables中定义了四张表,每张表中对应了不同的功能。
(1)filter表:主要用于对数据包进行过滤;内核模块:iptables_filter
(2)nat表:网络地址转换(SNAT/DNAT);内核模块:iptables_nat
(3)mangle表:修改数据包,并重新封装;内核模块:iptables_mangle
(4)raw表:用于决定数据包是否被状态跟踪机制处理,优先级最高;内核模块:iptables_raw
iptables中数据包和4种被跟踪连接的4种不同状态
-
NEW
:该包想要开始一个连接(重新连接或将连接重定向) -
RELATED
:该包是属于某个已经建立的连接所建立的新请求
例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接 -
ESTABLISHED
:只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包 -
INVALID
:数据包不能被识别属于哪个连接或者没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。
5.链表关系
优先级次序
(由左到右)
raw --> mangle --> nat --> filter
为了更方便管理,我们还可以在某个表里面中创建自定义链,将针对某个应用程序所设置的放置在这个自定义链中;但是自定义链不能直接使用,只能被某个默认的链当作动作去调用才能起作用。
6.数据经过防火墙的流程
当一个数据包进入网卡时,数据包首先进入PREROUTING链
,在PREOUTING链中我们有机会修改数据包的目的IP
,然后内核的"路由模块
"根据"数据包的目的IP
"以及"内核中的路由表
"判断是否需要转送出去;
1.如果数据包就是进入本机的,即目的IP就是本机的网口IP,数据包就会到达INPUT链
,数据包到达INPUT链后,这个数据包通过传输层进入用户空间,交给用户进行处理,而处理完成之后,用户进程会通过本机发出返回的数据包;
此时,这些数据包首先还是会经过主机的路由表进行路由,结束后,进入OUTPUT链
,然后到达POSTROUTING链
输出,这时数据包的源IP
就有可能以及被我们修改了
2.如果数据包是要转发出去的,即目的IP地址不在当前子网中,且内核允许转发,数据包就会经过FORWARD链
,IP包由于目的地址已经确认,就不会再经过路由,也自然不会 OUTPUT
链了 而是会进入POSTROUTING链
输出,选择对应子网的网卡发送出去。
如何开启Linux内核的路由转发功能?
vim /etc/sysct.conf
net.ipv4.ip_forward = 1 #修改为1,默认0
sysctl -p #重新加载内核参数
7.iptables的规则
(1)书写规则
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
注意
不指定表名时,默认指filter表(数据包过滤)
不指定链名,默认指表内的所有链
除非设置链的默认策略(书写外的其他策略),否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写,否则不生效
(2)控制类型(动作类型)
ACCEPT #允许通过
DROP #直接丢弃,不给出任何回应
REJECT #拒绝通过,必要时会给出提示
LOG #匹配不会停止,记录日志信息,然后传给下一条规则继续匹配
SNAT #修改数据包源地址
DNAT #修改数据包目的地址
REDIRECT #重定向