安全技术和防火墙概述
安全技术
入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类似于监控系统,一般采用旁路部署(默默的看着你)方式。
入侵防御系统(Intrusion Prevention System):以透明模式工作,
分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,
在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
防火墙( FireWall ):隔离功能,工作在网络或主机边缘,
对进出网络或主机的数据包基于一定的规则检查,
并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,
基本上的实现都是默认情况下关闭所有的通过型访问,
只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中。
防水墙
广泛意义上的防水墙:防水墙(Waterwall),与防火墙相对,是一种防止内部信息泄漏的安全产品。
网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。
防水墙针对这四种泄密途径,在事前、事中、事后进行全面防护。
其与防病毒产品、外部安全产品一起构成完整的网络安全体系。
(华为的ensp就是类似与防水墙,不透明的工作,你干什么都会记录,但是你自己不知道!)
传输层 端口 防火墙
网络层 ip 路由器 三层
数据链路层 mac 交换机
按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,
如:华为,山石hillstone,天融信,等
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows防火墙
按网络协议划分:
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,
被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,
目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
应用层防火墙
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来
实现优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用层去检查
Netfilter
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。
Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。
Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作。
netfilter/iptables关系
netfilter:属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables :属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。
是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。
netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。
表中所有规则配置后,立即生效,不需要重启服务。
iptables的四表五链结构介绍
iptables由四个表table和五个链chain以及一些规则组成(SELinux也是一个表,但它是独立的,不在我们讨论的范围内)
四个表
table:filter、nat、mangle、raw
优先级由高到低的顺序为:
security -->raw–>mangle–>nat–>filter
Filter表:用于过滤数据包,可以控制数据包的进出,以及是否接受或拒绝数据包。
NAT表:用于网络地址转换,可以改变数据包的源地址和目标地址,以便实现不同的网络连接。
Mangle表:用于修改数据包的头部信息,可以更改数据包的TTL、QoS等信息。
Raw表:用于控制数据包的状态跟踪,可以决定是否跳过后续的处理流程。
五条链
PREROUTING链:处理数据包进入本机之前的规则。
INPUT链:处理数据包进入本机的规则。
FORWARD链:处理数据包转发到其他主机的规则。
OUTPUT链:处理本机发出的数据包的规则,一般不做处理。
POSTROUTING链:处理数据包离开本机之后的规则。
在iptables中,路由选择是指根据不同的目的地址将数据包路由转发到不同的网络接口
可以把这些表和链类比成一个检查站,数据包需要通过这些检查站才能被接受或者拒绝。
这些规则可以帮助我们保证网络的安全性和稳定性。
总结
四表五链
规则表的作用:容纳各种规则链
规则链的作用:容纳各种防火墙规则
总结:表里有链,链里有规则
内核中数据包的传输过程
-
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
-
如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。
数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达 -
如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
三种报文流向
流入本机:PREROUTING --> INPUT–>用户空间进程 httpd服务-目的转换-httpd
流出本机:用户空间进程 -->OUTPUT–> POSTROUTING httpd服务-out-源地址
转发:PREROUTING --> FORWARD --> POSTROUTING -----FOR------
nat PREROUTING 目的地址转换,要把别人的公网IP换成你们内部的IP
nat POSTROUTING 源地址转换,要把你的内网地址转换成公网地址才能上网,一般用于对外发布内网的服务
规则内的匹配顺序
自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)
iptables
iptables 安装
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables。
1.关闭firewalld防火墙
systemctl stop firewalld.service systemctl disable firewalld.service
2.安装iptables 防火墙
yum -y install iptables iptables-services
3.设置iptables开机启动
systemctl start iptables.service systemctl enable iptables.service
4.iptables防火墙的配置方法:
1、使用iptables命令行。
2、使用system-config-firewall; centso7不能使用 centos 6可以使用
iptables的命令格式
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
-t:如果不指定 默认是filter
表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表;
管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;
控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。
注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链,一般不这么操作
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
数据包的常见控制类型
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。
在 iptables 防火墙体系中,最常用的几种控制类型如下
ACCEPT:允许数据包通过。
DROP: 直接丢弃数据包,不给出任何回 应信息。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
SNAT: 修改数据包的源地址
DNAT: 修改数据包的本地地址
LOG: 在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
iptables 命令的常用管理选项
管理选项 用法示例
-A 在指定链末尾追加一条 iptables -A INPUT (操作)
-I 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-P 指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D 删除 iptables -t nat -D INPUT 2 (操作)
-R 修改、替换某一条规则 iptables -t nat -R INPUT (操作)
-L 查看 iptables -t nat -L (查看)
-n 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议 端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看) |
-v 查看时显示更详细信息,常跟-L一起使用 (查看)
–line-numbers 规则带编号 iptables -t nat -L -n --line-number iptables -t nat -L --line-number
-F 清除链中所有规则 iptables -F (操作)
-X 清空自定义链的规则,不影响其他链 iptables -X
-Z 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S 看链的所有规则或者某个链的规则/某个具体规则后面跟编号
匹配的条件 作用
-p 指定要匹配的数据包的协议类型
-s 指定要匹配的数据包的源IP地址
-d 指定要匹配的数据包的目的IP地址
-i 指定数据包进入本机的网络接口
-o 指定数据包离开本机做使用的网络接口
–sport 指定源端口号
–dport 指定目的端口号
添加规则 :
添加规则的两个常用选项:
-A,在末尾追加规则。
-I,在指定位置前插入规则。如果不指定,则在首行插入
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。
清空规则:
iptables -F
iptables -t filter -A INPUT -p icmp -j REJECT #禁止所有主机ping本机
iptables -t filter -A INPUT -p icmp -j ACCEPT #允许ping通,-A在前一条规则后添加
删除规则
D删除 :
1.根据序号删除内容
iptables -D INPUT 1 #删除指定的INPUT链中的第一条规则
2、内容匹配删除(有两个
相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的
注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。
直到删除最后一条时,才能将该规则全部清除 。
一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错。
修改规则
-R 直接修改
iptables -R INPUT 1 -p icmp -j REJECT#原本的ACCEPT替换成了REJECT
修改默认规则
默认策略是指四表五链中链的默认策略,INPUT,FORWARD,OUTPUT,filter三条链的默认值为ACCEPT
就像是设定黑名单一样,默认其他的协议操作都是允许的,只有指定加入的且声明权限的为(DROP 或 REJECT)是拒绝禁止的对象。
iptables -P INPUT DROP
注意:
1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改
2.-P 设置了DROP后,使用 -F 一定要小心!
#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决
此时的解决方案有三种:
第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可
第二种:操作服务器,重启iptables服务
第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!
在生产中都是默认DROP
多端口匹配:
要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT#多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则
iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP#多端口匹配,一次性放通多个udp网络协议的端口匹配规则
IP范围匹配:
-m iprange --src-range 源IP范围
-m iprange --dst-range 目的IP范围
iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT#禁止网段内的ip地址ping主机
备份与还原:
我们对iptables命令行中的设置,都是临时设置,只要遇到服务器关机,或者服务重启时,所有的设置都会清空且还原为原本的设置。
为此,我们可以对已经测试完毕符合我们需求的防火墙设置进行备份,在必要时,可以一键还原
备份iptables设置
格式:iptables-save >/指定的文件
iptables-save >/opt/iptables.bak#备份到指定文件
iptables-restore </opt/iptables.bak #一键导入,设置为当前防火墙设置
SNAT和DNAT
SNAT又称源地址转换。
源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址
(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,
即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。
就是把内网地址转成指定的IP地址,这个iP地址可以访问公网
Linux网关开启IP路由转发
1、临时开启:
echo 1 > /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1
2、永久开启:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 #将此行写入配置文件
sysctl -p #读取修改后的配置
SNAT转换1:固定的公网IP地址
#配置SNAT策略,实现SNAT功能,将所有192.168.72.0这个网段内的ip的源地址改为12.0.0.2 iptables -t nat -A POSTROUTING -s 192.168.72.0/24 -o ens33 -j SNAT --to 12.0.0.2
或
iptables -t nat -A POSTROUTING -s 192.168.72.0/24 -o ens33 -j SNAT --to-source 12.0.0.2-12.0.0.10
#-A POSTROUTING 指定POSTROUTING链
#-s 192.168.72.0/24 源地址所处的网段(内网IP)
#-o ens33 出站网卡
#-j SNAT
#–to 12.0.0.2 外网IP
#–to-source 12.0.0.2-12.0.0.10 外网地址池
SNAT转换2:非固定的公网IP地址(共享动态IP地址)
iptables -t nat -A POSTROUTING -s 192.168.72.0/24 -o ens33 -j MASQUERADE
小知识扩展:
一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网
DNAT:目的地址转换的作用是将一组本地内部的地址映射到一组全球地址。
通常来说,合法地址的数量比起本地内部的地址数量来要少得多。
私网地址只能作为源地址来访问公网IP,而无法作为目标地址被其他主机访问
所以DNAT将私网中web服务器映射到公网IP,使其公网IP作为目标地址被公网中主机进行访问
DNAT转换1:发布内网的Web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.72.10 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.72.102
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.72.10-192.168.72.20
#-A PREROUTING //修改目标地址的链
#-i ens33 //入站网卡
#-d 12.0.0.254 //数据包的目的地址
#-p tcp --dport 80 //数据包的目的端口
#-j DNAT //使用DNAT功能
#–to 192.168.109.11 //内网服务器IP
tcpdump—Linux抓包
wireshark 抓包工具只在windows中使用。
tcpdump 可以在Linux系统中使用。
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp∶ ip、icmp、arp、rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
(2)-i ens33 :只抓经过接口ens33的包。
(3)-t:不显示时间戳
(4)-s 0 :抓取数据包时默认抓取长度为68字节。加上"-s 0"后可以抓到完整的数据包。
(5)-c 100 :只抓取100个数据包。
(6)dst port ! 22 :不抓取目标端口是22的数据包。
(7)src net 192.168.1.0/24 :数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机。
(8)-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析
3