安全技术和防火墙
安全技术
- 入侵检测系统:不阻断任何网络访问,只能留下记录
- 入侵防御系统:一般为硬件设备,当有流量进来时,进行检测,判断
- 防火墙:一般为软件类,现将进入的信息隔离到一个固定的区域中;工作机制为隔离功能,防止外部的
- 防水墙:是一种防止内部信息泄漏的安全产品
防火墙分类
按保护范围划分:
- 主机防火墙:服务范围为当前一台主机
- 网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
- 硬件防护墙:在专用硬件级别实现部分功能的防火墙
- 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
按网络协议划分
- 网络层防火墙:OSI模型下4层,又称包过滤防火墙
- 应用层防火墙/代理服务器:proxy 代理网关,OSI模型7层
防火墙基本认识
Netfilter
- Netfilter给linux提供防火墙服务,工作在内核空间,集成在linux内核中
- centos7磨人的防火墙是firewalld
防护墙工具
iptables
提供命令行工具,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
firewalld
软件包:
- firewalld
- firewalld-config
管理工具:
- firewall-cmd 命令行工具
- firewall-config 图形工作
命令行配置
查看现有的firewall设置
iptables
iptables组成
- Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。
- iptables由五个表table和五个链chain以及一些规则组成
四表五链
四表:
- filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表;确定是否放行该数据包(过滤)
- nat:修改数据包中的源、目ip地址或端口
- mangle:修改数据标记位规则表
- raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
- (security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现)一般不使用,所以称为四表
- 优先级由高到低顺序为:security -->raw-->mangle-->nat-->filter 五链:
- prerouting:在进行路由选择前处理数据宝
- input:处理入站数据包;流向自己,明确知道信息是发给自己的
- ouput:处理出站数据包;流出本机(穿过本机)
- forward:处理转发数据包
- postrouting:在进行路由选择后处理数据包;转发
规则表的作用
容纳各种规则链
表的划分依据:
防火墙规则的作用相似
规则链的作用
容纳各种防火墙规则
规则的作用
对数据包进行过滤或处理 ;链的分类依据:处理数据包的不同时机
总和
表里有链,链里有规则
三种报文流向
- 流入本机:PREROUTING --> INPUT-->用户空间进程(访问我的服务)
- 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING(穿过我)
- 转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)
规则链内的匹配顺序
- 按顺序依次检查,匹配即停止(LOG策略例外)
- 若找不到相匹配的规则,则按该链的默认策略处理
内核中数据包传输过程
- 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要 转送出去
- 如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达
- 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
实操
准备工作
- 这边我们设置开机不自启
基本语法
| 语法 | 功能 |
|---|---|
| -p | 协议:tcp;udp |
| -s | 源地址 |
| -d | 目的地址 |
| -i | 进口网卡 |
| -o | 出口网卡 |
| --sport | 源端口 |
| --dport | 目标端口 |
- iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
- 如果不指定表,默认为filter表
数据包常见控制类型
| 控制类型 | 功能 |
|---|---|
| -ACCEPT | 允许数据包通过 |
| -DROP | 直接丢弃数据包,不给出任何回应信息 |
| -REJECT | 拒绝数据包通过,必要时会给出举报发送端一个响应信息 |
| -LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则 |
| -ANAT | 修改数据包的源地址 |
| -DNAT | 修改数据包的目的地址 |
| -MASQUERADE | 伪装成一个非固定公网IP地址 |
防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助 注意:大小写
基本操作
规则的添加、查看和删除等
| 管理选项 | 用法用例 |
|---|---|
| -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 | 所有字段以数字形式显示iptables -L -n,iptables -nL,iptables -vnL (查看) |
| -v | 查看时显示更详细信息,常跟-L一起使用 (查看) |
| --line-number | 规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number |
| -F | 清除链中所有规则 iptables -F (操作) |
| -X | 清空自定义链的规则,不影响其他链 iptables -X |
| -Z | 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z |
| -S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
防火墙命令
查看,删除,清空等规则表
iptables [-t表名] -n -L [链名] |[-- line-numbers] 查看规则表,并显示编号
隐藏匹配
- --sport 1000:匹配源端口是1000的数据包
- --sport 1000:2000:匹配源端口是1000-3000的数据包
- --sport :2000:匹配源端口是3000及以下的数据包
- --sport 1000:匹配源端口是1000及以上的数据包
MAC地址匹配
- -m mac --mac-source MAC地址
- iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
NAT
NAT实现类型:
- SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问
- DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外
- PNAT: port nat,端口和IP都进行修改
SNAT
基于nat表的target,适用于固定的公网IP
SNAT原理
源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映谢
SNAT源地址转换过程
- 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
- 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
- 当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。
DNAT
nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能
DNAT原理
目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。
实验
SNAT策略配置
SNAT转换前提条件
- 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
- Linux网关开启IP路由转发
Linux网关开启IP路由转发
- 临时开启:
echo 1 > /proc/sys/net/ipv4/ip_forward
或者
sysctl -W net.ipv4.ip_forward=1
2. 永久打开:
编辑配置文件:
vim /etc/sysct1.conf
net.ipv4.ip_forward = 1添加在配置文件中
sysctl -p表示取修改后的配置
SNAT转换1:固定的公网IP地址
配置SNAT策略,时间SNAT功能,将所有192.168.42.0这个网段的ip的源ip改为12.0.0.1
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o ens37 -j SNAT --to 12.0.0.1
- 或者:
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o ens37 -j SNAT --to-source 12.0.0.1
- #-A POSTROUTING 指定POSTROUTING链
- #-s 192.168.42.0/24 源地址所处的网段(内网IP)
- #-o ens37 出站网卡
- #-j SNAT
- #--to 12.0.0.1 外网IP
- #--to-source ip地址范围 外网地址池
SNAT转换2:非固定的公网ip地址(共享动态ip地址)
DNAT策略配置
DNAT转换前提条件
- 局域网的服务器能够访问Internet
- 网关的外网地址有正确的DNS解析记录
Linux网关开启IP路由转发
vim /etc/sysctl.conf编辑配置文件
net.ipv4.ip_forward=1添加此内容
sysctl -p重新读取修改后的配置
DNAT转换1:发布内网的web服务
将从ens37进来要访问web服务的数据包目的地址转换为192.168.42.37
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.72.102
- #-A PREROUTING //修改目标地址的链
- #-i ens37 //入站网卡
- #-d 12.0.0.1 //数据包的目的地址
- #-p tcp --dport 80 //数据包的目的端口
- #-j DNAT //使用DNAT功能
- #--to 192.168.42.37 //内网服务器IP
DNAT转换2:发布时修改目标端口
将公网的IP和端口,转换成内网的ip和端口
- 发布局域网内部的web服务器,外网主机需使用8080端口进行连接
- 将12.0.0.1:8080 转换成192.168.42.37:80
- 发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
- 将12.0.0.1:250 转换成192.168.42.37:22