一、安全技术
1.1 概述
1、入侵检测机制:特点是阻断,量化,定位来自内外的网路威胁情况。 提供报警和事后监督。类似与监控。
2、入侵防御:以透明模式工作,分析数据包的内容,一切进入本机的内容进行防护,对木马、蠕虫、系统漏洞进行分析判断,然后 进行阻断,主动的防御机制。部署在整个架构,或者是集群的入口处。
3、防火墙:隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放DMZ(demilitarized zone)网络中。
4、防水墙:透明模式工作,例如华为的ensp监控就是防火墙。一切对于防水墙都是透明的。
按照保护范围划分:
主机防火墙:仅为当前主机服务
网络防火墙:防护的是另一侧的局域网
按网络协议划分:
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过。
1.2 iptables和firewalld防火墙
ip tables: 系统自带的包过滤防火墙
firewalld: 主机防火墙,他也有包过滤的功能
二、iptables内核防火墙的四表五链
2.1 四表
raw | 控制数据包的状态跟踪,配置后可加快防火墙的穿越速度 |
mangle | 修改数据包的标记位规则 |
nat | 地址转换的规则表 |
filter | 包的过滤规则表,根据预定义、人工设置的规则对符合条件的数据包进行过滤,也是iptables的默认表 |
2.2 五链
PREROUTING | 处理数据包进入本机之前的规则NAT |
INPUT | 处理数据包进入本机的规则 |
FORWORD | 处理数据包转发到其他主机的规则 |
OUTPUT | 处理本机发出的数据包的规则,一般不做处理 |
POSTROUTING | 处理数据包离开本机之后的规则NAT |
2.3 iptables表链匹配流程
总结:
- 规则表的对用:容纳各种规则链
- 规则链的作用:容纳各种防火墙规则
- 表里有链,链里有规则
三、iptables配置
3.1 安装iptables服务
[root@pup1 ~]# systemctl stop firewalld.service
[root@pup1 ~]# yum -y install iptables iptables-services
[root@pup1 ~]# systemctl start iptables.service
[root@pup1 ~]# systemctl enable iptables.service
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
3.2 管理选项
-A | 在指定链的末尾进行追加 |
-I(大写i) | 在指定链插入新的规则,可以指定插入规则的位置 |
-P | 修改默认策略(链的策略) |
-D | 删除 |
-R | 修改、替换规则 |
-L | 查看指定链当中的规则 |
-F | 清空指定链当中的规则(慎用) |
-n | 以数字形式显示规则 |
-v | 查看详细信息 |
--line-numbers | 给每个链中的规则进行编号查看 |
-X | 清空自定义链的规则 |
-t | 指定表名 |
3.3 匹配条件
-p | 指定数据包的协议类型 |
-s | 指定数据包的源ip地址 |
-d | 指定数据包的目的ip地址 |
-i | 指定数据包进入本机的网络接口 |
-o | 指定数据包离开本机的网络接口 |
--sport | 指定源端口号 |
--dport | 指定目的端口号 |
3.4 控制类型
ACCEPT | 允许数据包通过 |
DROP | 拒绝数据包通过,直接丢弃数据包,不给任何回应的信息 |
REJECT | 拒绝数据包通过,会给一个回应的信息 |
SNAT | 修改数据包的源地址 |
DNAT | 修改数据包的目的地址 |
3.5 格式
[root@pup1 ~]# iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
#不指定表名时,默认指filter表
#不指定链名时,默认指表内的所有链
3. 6实例演示
查看规则列表
[root@pup1 ~]# iptables -t 表名 -vnL 链名 --line-numbers
图中标的解释:
num:详细展示后才会显示
pkts:匹配规则收到的报文个数
bytes:包的大小总额
target:规则对应的动作
prot:规则对应的协议为tcp
添加规则
示例:
拒绝其他主机ping本机
[root@pup1 ~]# iptables -F
[root@pup1 ~]# iptables -t filter -A INPUT -p icmp -j REJECT
进行放通
[root@pup1 ~]# iptables -A INPUT -p icmp -j ACCEPT
原因:
匹配规则的策略:从上往下按照规则顺序匹配,如果匹配到了规则,后续的规则不再匹配。针对相同的规则类型,匹配到之后后续的规则也不生效
解决方案:
插入规则
[root@pup1 ~]# iptables -I INPUT 1 -p icmp -j ACCEPT
删除规则
先查看链中规则序号再删除
[root@pup1 ~]# iptables -D INPUT 3
修改规则
临时修改(一般不用)
[root@pup1 ~]# iptables -R INPUT 2 -p icmp -j ACCEPT
永久修改
修改默认策略
[root@pup1 ~]# iptables -P INPUT DROP #临时修改
四、规则的匹配
4.1 通用匹配
协议匹配 | -p 协议名 |
地址匹配 | -s 源地址、-d 目的地址 #可以是ip、网段、域名 |
接口匹配 | -i 入站网卡、-o 出站网卡 |
示例1:指定地址为20.0.0.20的主机无法ping通本机
[root@pup1 ~]# iptables -A INPUT -s 20.0.0.20 -p icmp -j REJECT
示例2:指定地址为20.0.0.20的主机无法通过ssh远程连接本机
[root@pup1 ~]# iptables -A INPUT -s 20.0.0.20 -p tcp --dport 22 -j REJECT
#ssh远程连接使用tcp协议,默认端口为22
示例3:指定地址20.0.0.20的主机无法给本机发送httpd请求
[root@pup1 ~]# iptables -A INPUT -s 20.0.0.20 -p tcp --dport 80 -j REJECT
示例4:不指定协议
[root@pup1 ~]# iptables -A INPUT -s 20.0.0.20 -j DROP
示例5:指定整个网段的数据无法从ens33设备访问(包括本机)
[root@pup1 ~]# iptables -A INPUT -i ens33 -s 20.0.0.0/24 -j DROP
示例6:指定整个网段无法访问本机的80端口
[root@pup1 ~]# iptables -A INPUT -s 20.0.0.0/24 -p tcp --dport 80 -j REJECT
4.2 隐含匹配
-p指定协议时,不需要使用-m来指明拓展模块
示例:指定多端口匹配
[root@pup1 ~]# iptables -A INPUT -p tcp --dport 22:80 -j REJECT
#端口号小的写在前,大的写在后,用冒号隔开
4.3 显示匹配
-m加拓展模块可以明确指定类型,例如多端口、mac地址、IP范围
用拓展模块指定多个端口
示例:
[root@pup1 ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT
指定ip地址范围
-m iprange --src-range 源ip范围
-m iprange --dst-range 目的ip范围
示例:
[root@pup1 ~]# iptables -A INPUT -p icmp -m iprange --src-range 20.0.0.20-20.0.0.30 -j REJECT
指定mac地址
示例:
[root@pup1 ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:29:ec:03 -j REJECT
4.4 备份与还原
示例:
[root@pup1 ~]# iptables-save > /opt/iptables.bak
[root@pup1 ~]# iptables-restore < /opt/iptables.bak
五、自定义链
5.1 添加自定义链
5.2 给自定义链改名
5.3 在自定义链中创建自定义规则
此时还无法使用,要将添加的自定义链及规则添加到系统链之下让系统能够识别
5.4 删除自定义链和规则
若自定义规则已被系统引用,先删除系统链下的自定义规则,然后删除自定义链下的自定义规则,最后删除自定义链
六、SNAT和DNAT
6.1 工作原理
SNAT:源地址转换
DNAT:目的地址转换
6.2 iptables实现地址转化实验
准备三台虚拟机:
虚拟机2添加网络适配器并查看
配置网关服务器的网卡
[root@pup2 network-scripts]# vim ifcfg-ens33
TYPE = Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=20.0.0.254
NETMASK=255.255.255.0
#GATEWAY=20.0.0.2
#DNS1=218.2.135.1
[root@pup2 network-scripts]# vim ifcfg-ens36
TYPE = Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.254
NETMASK=255.255.255.0
#GATEWAY=20.0.0.2
#DNS1=218.2.135.1
[root@pup2 network-scripts]# systemctl restart network
配置内网服务器的网卡
[root@pup1 network-scripts]# vim ifcfg-ens33
TYPE = Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=20.0.0.10
NETMASK=255.255.255.0
GATEWAY=20.0.0.254
#DNS1=218.2.135.1
[root@pup1 network-scripts]# systemctl restart network
配置外网服务器的网卡
[root@pup3 network-scripts]# vim ifcfg-ens33
TYPE = Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=20.0.0.254
#DNS1=218.2.135.1
[root@pup3 network-scripts]# systemctl restart network
网关服务器在iptables的nat表中添加内网到外网地址转换规则
[root@pup2 ~]# iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 10.0.0.10
-t:指定表名
nat:地址转换的表名
-A:在行尾追加一条新的规则
POSTROUITING:在出本机的时候添加一个地址转换的规则
-s 20.0.0.0/24:指定源ip地址
-o ens36:从网卡设备ens36出去的数据都会做转换
-j SNAT:指定控制类型,做源地址转换
--to 10.0.0.10:所有的源ip属于233.0这个网段,只要是从ens36出来的数据,都会把其地址转换成10.0.0.10
[root@pup2 network-scripts]# vim /etc/sysctl.conf #修改内核参数的文件
net.ipv4.ip_forward=1
[root@pup2 network-scripts]# sysctl -p #即刻生效
网关服务器在iptables的nat表中添加外网到内网地址转换规则
[root@pup2 network-scripts]# iptables -t nat -A PREROUTING -d 11.0.0.11 -i ens36 -p tcp --dport 80 -j DNAT --to 20.0.0.10:80
-t:指定表名
nat:地址转换的表名
-A:在行尾追加一条新的规则
PRWROUTING:在进入本机之后添加一个地址转换的规则
-d 11.0.0.11:指定目的ip地址
-i ens36:进入内网的设备接口
-p tcp:指定协议
--to 20.0.0.10:80:只要是从ens36这个网络接口进入本机内网的ip地址,访问内网服务http的80端口,目的ip地址都可以转换成11.0.0.11
七、linux系统的抓包
tcpdump
tcpdump:linux自带抓包工具(wireshark只适用于windows系统)
抓包方式:
1、指定抓包--指定抓包数量
2、动态抓包--会一直获取包,除非人工停止
(linux系统无法解析,需要发送到windows系统解析)
指定抓包
[root@pup1 opt]# tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 20.0.0.0/24 -w ./target.cap
[root@pup1 opt]# sz target.cap #发送
tcpdump:抓包命令固定开头
tcp:抓包的协议
-i:只抓经过ens33设备的数据包
-t:不显示时间戳
-s0:抓完整的数据包
-c:指定抓包个数,后面接数字
dst port 80:目的端口为80
src net 20.0.0.0/24:目的地址
-w:抓包的数据的保存位置
./:保存在当前目录
target.cap:包名
动态抓包
[root@pup1 opt]# tcpdump -i ens33 -s0 -w ./ens33.cap