安全技术
-
入侵检测系统:以提供报警和事后监督为主,不采取措施
-
入侵防御系统 :透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
-
防火墙:隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.
防火墙的分类
传输层 端口 防火墙
网络层 ip 路由器 三层
数据链路层 mac 交换机
按保护范围划分:
-
主机防火墙:服务范围为当前一台主机
-
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
-
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40亿美元收购)等
-
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront
按网络协议划分:
-
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
-
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否 允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
应用层防火墙
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来实现优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
正反向代理
正向代理:(翻墙),代理的是客户端,绕开防火墙限制,加快访问速度
反向代理:代理的是服务端
轮询:代理的客户端,按照1:1:1的规则分配
加权:按照自定的规则分配(1:2:4)
Linux 防火墙的基本认识
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
Netfilter官网文档:https://netfilter.org/documentation/
netfiler中的四个表五个链
数据流向表
内核中数据包传输的过程:
首先:当一个数据进入网卡的时候,数据包会先进入prerouting链,内核根据数据包的目的ip来判断是否需要转发至下一个链表——forward或者input;
如果是到本机的:到达数据包会到INPUT链,到达之前先查规则,看是否放行,允许的话继续往下就进入了本机,任何进程都会受到该数据。本机上处理数据包的程序会发送数据包到output链,也是根据output的链表规则查看是否放行;最后如果ouput允许的话,再根据数据包的目的ip来进行转发,有一个路由判断,数据包会到到达postrouting,再次查询策略表,放行的话就继续,不行就丢弃;
另一方面,如果是需要进行转发的数据包,此时本机是一台路由功能的服务器,一次匹配forward、postrouting规则链表,允许则转发,不允许则丢弃;
netfilter中的五个勾子函数和报文流向
netfilter在内核中选取五个位置放了五个勾子,function(INPUT OUTPUT FORWARD PREROUTING POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具向其写入规则。(iptables就是一种命令工具)
三种报文流向
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
五个链:
input: 进入本机
output: 出本机
prerouting: 路由选择前
postrouting: 路由选择后
forward: 转发
四个规则表(容纳各种规则链)
raw: 确定是否对该数据包进行状态跟踪(跟踪)
mangle: 为数据包设置标记(标记)
nat: 地址转换
filter: 确定是否放行该数据包(过滤)
注:表的作用是存放链,链决定了在什么位置控制流量,表中有链,链中有规则
注意:表中有链,链中有规则
表的优先级:
security -->raw-->mangle-->nat-->filter
链:表示在什么时机处理流量
表的用处:存放链和规则,控制流量
iptables的组成
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。
netfilter/iptables:IP 信息包过滤系统,由netfilter 和 iptables组成。
- netfilter:属于“内核态”又称内核空间的防火墙功能体系。
- iptables:属于“用户态”( 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。
- raw表: 主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT, PREROUTING
- mangle表 : 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链, INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING
- nat表: 负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链, OUTPUT、PREROUTING、POSTROUTING
- filter表: 负责过滤数据包,确定是否放行该数据包(过滤)。包含三个链,即PREROUTING、 POSTROUTING、OUTPUT
iptables的命令格式
iptables -t 指定表 子命令 指定链 规则
管理选项
-A:在指定链末尾追加
-I:在指定链中插入一条新的,未指定序号默认作为第一条
-P:指定默认规则,一般默认的规则是ACCEPT()黑名单, ACCEPT为黑名单(默认允许所有访 问),DROP为白名单(默认拒绝所有访问)
-D:删除指定链
-R:替换指定链
-Z:清空链的计数器
规则选项
-s: 源地址
-d: 目标IP地址
-p: 协议(tcp,udp,icmp DHCP..)
--sport: 源端口
--dport: 目标端口
-i: 流量进口网卡
-o: 流量出口网卡
j: 后面跟着跳转策略(需要大写,可补全)
跳转
DROP:丢弃
REJECT:拒绝
ACCEPT:允许
LOG:添加备注(日志)
SNAT:修改数据包的源ip地址
DNAT:修改数据包的目标ip地址
MASQUERADE:伪装成一个非固定公网IP地址
查询命令
iptables -vnL: 看表(v:详细 ,n:数字化 ,L:列表)
查询并显示规则编号
iptables -vnL --line -num: 看表时给规则加上序号
iptables -F : 清空所有规则
iptables
centos7是默认使用firewalld防火墙,需要永久关闭。
[root@localhost ~]#rpm -q iptables
iptables-1.4.21-35.el7.x86_64
iptables的操作
##拒绝来自192.168.11.10主机访问本机的22端口
[root@localhost ~]#iptables -A INPUT -s 192.168.20.6 -p tcp --dport 22 -j DROP
##查看filter规则表
[root@localhost ~]#iptables -vnL
##查看filter规则表,并显示规则编号
[root@localhost ~]#iptables -vnL --line-num
##删除规则编号2
[root@localhost ~]#iptables -D INPUT 2
[root@localhost ~]#iptables -vnL --line-num
[root@localhost ~]#iptables -vnL --line-num
[root@localhost ~]#iptables -F ##清空
设置默认策略
iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。
语法:iptables [-t表名] -P <链名> <控制类型>
[root@localhost ~]#iptables -t filter -P INPUT DROP
##修改默认input为drop
添加允许连接本机回环网卡
[root@localhost ~]#iptables -A INPUT -i lo -j ACCEPT
##添加允许流量进入本机回环网卡
[root@localhost ~]#iptables -A INPUT -s 192.168.20.1 -j ACCEPT
##192.168.20.1代表的是电脑真机
##先在accept基础上设置黑名单,等同于iptables -P INPUT DROP
[root@localhost ~]#iptables -A INPUT -j DROP
[root@localhost ~]#iptables -vnL
##在第一行插入,添加允许xshell连接本机
[root@localhost ~]#iptables -I INPUT -s 192.168.20.1 -j ACCEPT
[root@localhost ~]#iptables -vnL
通用匹配
直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名
地址匹配: -s 源地址、-d目的地址
#可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡
iptables -A FORWARD ! -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.91.101 -j DROP
iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROP
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT //感叹号”!”表示取反
隐含扩展
man iptables-extensions
查看扩展帮助
iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。 端口匹配: --sport 源端口、--dport 目的端口 #可以是个别端口、端口范围
[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
[!] --tcp-flags mask comp
mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
--tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0,第一次握手
--tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手
#错误包
--tcp-flags ALL ALL
--tcp_flags ALL NONE
--sport 1000 匹配源端口是1000的数据包
--sport 1000:3000 匹配源端口是1000-3000的数据包
--sport :3000 匹配源端口是3000及以下的数据包
--sport 1000: 匹配源端口是1000及以上的数据包
注意: --sport和--dport 必须配合-p <协议类型>使用
端口可以使用的范围 0-65535
[root@localhost ~]#iptables -A INPUT -p tcp --sport 20:80 -j REJECT
#20到80端口 全部被拒
TCP标记匹配: --tcp-flags TCP标记:SYN,RST,ACK,SYN
[root@localhost ~]#iptables -I INPUT -i ens33 -p tcp --tcp-flags FIN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
[root@localhost html]#iptables -A INPUT -p tcp --dport 20:80 -j DROP
[root@localhost ~]#iptables -I INPUT -s 192.168.20.1 -j ACCEPT
拓展,允许本机去访问192.168.11.9,不允许192.168.11.10 访问本机;
思路,如果是禁止源ip地址的话,数据是有去有回,本机也无法ping另一台主机;那么往底层思考,根据icmp的请求和回复包的type来进行限制,请求是type和code分别是80,回复包type和code分别是00,那就是允许192.168.20.8回复00包,不允许发80请求包,也就是说限制icmp 的type为8即可
#此时其它主机需要配置关于icmp协议的控制类型为REJECT
[root@localhost ~]#iptables -A INPUT -p icmp -j REJECT
#icmp 协议的扩展选项
[!] --icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp应答
8/0 echo-request icmp请求