内容详细
- 架构图
1. 架构图详解
架构:
把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构
1.用户需求
用户带着域名提交访问请求
2.DNS
通过DNS解析域名找到该域名对应IP返回
3.防火墙(iptables)
也叫:包过滤防火墙
iptables内置4个表,即filter表、nat表、mangle表和raw表 每个表都会有相应的链
filter表 : 实现包过滤
nat表 : 网络地址转换
mangle表 : 包重构(修改)
raw表 : 数据跟踪处理
4.负载均衡
简单来说就是:
其一是将大量的并发处理转发给后端多个节点处理 减少工作响应时间
其二是将单个繁重的工作转发给后端多个节点处理 处理完再返回给负载均衡中心 再返回给用户
5.Web服务
Web服务是一种被访问的服务程序,只有接受到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户
6.缓存(cache)
作用是:
为了更好的利用局部性原理,减少CPU访问主存的次数,加快处理速度
简单地说:
CPU正在访问的指令和数据,其可能会被以后多次访问到,或者是该指令和数据附近的内存区域,也可能会被多次访问。因此,第一次访问这一块区域时,将其复制到cache中,以后访问该区域的指令或者数据时,就不用再从主存中取出
7.数据库(MySQL)
以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合
8.静态文件(NFS)
指不是由服务器生成的文件,例如脚本,CSS文件,图像等,但是必须在请求时发送给浏览器
9.跳板机(jumpserver)
跳板机是运维堡垒主机的另个称呼
企业为了服务器安全,所有的ssh连接都通过跳板机完成,以便于对ssh连接验证和管理
10.监控(prometheus)
指对数据中心的监控,主要针对数据中心内的硬件和软件进行监控和告警
企业的 IT 架构逐步从传统的物理服务器,迁移到以虚拟机为主导的 IaaS 云。无论基础架构如何调整,都离不开监控系统的支持
11.备份服务器(backup)
备份服务器是一项定期执行的基本任务
通过备份服务器数据,可以帮助防止数据丢失
'''
自行准备11台对应得服务器
可在模板机中创建一件优化脚本:checkip.sh
内容为:
#!/bin/bash
sed -i "s/.100/.$1/g" /etc/sysconfig/network-scripts/ifcfg-eth[10]
hostnamectl set-hostname $2
systemctl restart network
克隆完毕后 在服务器中执行:
./checkip.sh 每台主机IP的最后一位 主机名
例:./checkip.sh 8 web02
'''
2. 防火墙简介
# 1.什么是防火墙
指隔离在本地网络与外界网络之间的一道防御系统
主要为了防止别人恶意访问
# 2.防火墙种类
大类上可分为:
硬件防火墙:专用的硬件或软硬件结合的实现 F5
软件防火墙:基于普通PC或Server硬件上的通用操作系统加防火墙软件实现 iptables | firewalld
安全组
按照网络模型层次划分 防火墙可分为:
传统的包过滤器 Traditional packet filters
过滤器通常与路由器相结合构建防火墙
状态包过滤器 Stateful Packet filters
应用层网关/代理 Application-Layer gateways/Proxy
- Iptables
3. 包过滤防火墙
# 1.什么是包
在数据传输过程,并不是一次性传输完成的;而是将数据分成若干个数据包,一点一点的传输
# 2.什么是包过滤防火墙
过滤数据包的防火墙
# 3.包过滤防火墙如何实现
通过系统安全框架,过滤数据包
4. Iptables的四表五链
'四表五链'其实是对用户设置规则的管理,是看待用户设置的规则的两个维度
# 1.四个表 作用
filter : 负责做过滤功能 INPUT、FORWARD、OUTPUT
nat : 网络地址转换 PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle : 负责修改数据包内容 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
raw : 负责数据包跟踪 PREROUTING、OUTPUT
# 2.五条链 运行在什么地方
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING
01.PREROUTING
主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
02.INPUT
报文进入本机用户空间位置,允许的表filter, mangle
03.OUTPUT
报文从本机用户空间出去的位置,允许filter, mangle, nat
04.FOWARD
报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
05.POSTROUTING
报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主机出口网卡地址)
流入本机:PREROUTING --> INPUT --> PROCESS(进程)
经过本机:PREROUTING --> FORWARD --> POSTROUTING
从本机流出:PROCESS(进程) --> OUTPUT --> POSTROUTING
5. Iptables流程图
流入本机: A ---> PREROUTING ---> INPUT ---> B
流出本机: A ---> OUTPUT ---> POSTROUTING ---> B
经过本机: A ---> OUTPUT ---> POSTROUTING | ---> PREROUTING ---> FORWARD ---> POSTROUTING ---> C ---> PREROUTING ---> INPUT ---> B
filter : INPUT 、OUTPUT 、FORWARD
nat : PREROUTING 、 OUTPUT、 POSTROUTING
raw : PREROUTING、 OUTPUT
mangle : PREROUTING INPUT FORWARD OUTPUT POSTROUTING
6. iptables使用
1.安装Iptables
[root@m01 ~]# yum install iptables*
2.启动Iptables
[root@m01 ~]# systemctl start iptables
3.关闭firewalld(防止冲突)
[root@m01 ~]# systemctl disable --now firewalld
# 格式:
iptables -t(参数) 表名 选项 链名 条件 -j 动作
参数:
-t : 指定操作的表
-L : 列出当前的规则(相当于:--list)
-v : 显示数据包和数据包的大小
'''
示例:
查看nat 的全部规则表
iptables -nL -t nat
查看nat表中POSTROUTING链的规则表
iptables -nL POSTROUTING -t nat
以规则序号的方式查看
iptables -L POSTROUTING -t nat --line-numbers
'''
-n : 不反解地址
-A : 追加一条规则到链中(尾部 相当于:--append)
'''
示例:
允许接收tcp协议进来的数据包(在表filter的INPUT链中追加规则)
iptables -t filter -A INPUT -p tcp -j ACCEPT
允许接收udp协议进来的数据包(没写表名时,默认是指filter)
iptables -I INPUT -p udp -j ACCEPT
允许接收icmp协议进来的数据包(没写表名时,默认是指filter)
iptables -I INPUT 2 -p icmp -j ACCEPT
'''
-I : 插入一条规则到顶部(开头 相当于:--insert)
-F : 清空规则(相当于:--flush)
-Z : 清空计数器(包数量 、包大小 相当于:--zero)
-D : 删除指定链中的规则(相当于:--delete)
'''
示例:
删除表filter中INPUT链的第1条规则
iptables -D INPUT 1 -t filter
删除表nat中POSTROUTING链中的第2条规则
iptables -D POSTROUTING 2 -t nat
分别清空四个表,第一个默认为filter表
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
'''
-R : 修改(相当于:--replace)
-S : 列出所有的规则(相当于:--list-rules)
-N : 创建一个自定义 链(相当于:--new-chain)
-X : 删除一个自定义链(相当于:--delete-chain)
-P : 指定链的默认策略(相当于:--policy)
'''
示例:
当用户添加的规则都不匹配时,为匹配默认规则
所有链的始默认规则均为ACCEPT(接收状态)
通过-P选项可重置默认规则,常用两种状态ACCEPT或DROP
将nat表中POSTROUTING链默认规则设置为DROP(弃包状态)
iptables -t nat -P POSTROUTING DROP
将filter表中INPUT链默认规则设置为ACCEPT(接收状态)
iptables -t filter -P INPUT ACCEPT
'''
7. iptables动作
ACCEPT : 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链
REJECT : 拦阻该数据包,并传送数据包通知对方
DROP : 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序
REDIRECT : 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则
LOG : 记录日志,然后传给下一条规则
8.Iptables基本的匹配条件(协议)
TCP协议(包含:http)
UDP协议
ICMP协议(包含:ping)
ALL协议
9. -s 源地址;-d 目标地址
-s : 源地址 发送请求的地址
-d : 目标地址 想访问的地址
10. --sport源端口、--dport 目标端口
--sport : 源端口 发送请求的端口
--dport : 目标端口 想访问的端口
11. -i、-o、-m、-j 动作
-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发动作
-p : 指定协议(+ 基本的匹配条件)
12. 案例
1.只允许22端口可以访问,其他端口全部无法访问
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT # 只允许通过22端口访问
iptables -t filter -A INPUT -p TCP -j DROP # 拒绝其他所有访问
2.只允许22,80,443端口可以访问,其他端口全部无法访问
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT # 只允许通过22端口访问
iptables -t filter -A INPUT -p TCP --dport 80 -j ACCEPT # 只允许通过80端口访问
iptables -t filter -A INPUT -p TCP --dport 443 -j ACCEPT # 只允许通过443端口访问
iptables -t filter -A INPUT -p TCP -j DROP # 拒绝其他所有访问
3.要求使用192.168.15.81能够通过22端口链接,但是其他的不行
iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22 -j ACCEPT # 只允许192.168.15.81 通过22端口访问
iptables -t filter -A INPUT -p TCP -j DROP # 拒绝其他所有访问
4.只允许192.168.15.71能够通过22端口链接,其他的不行
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT # 只允许通过192.168.15.71 来访问到192.168.15.81(源地址:192.168.15.71 通过 目标地址:192.168.15.81的22端口来访问服务器)
iptables -t filter -A INPUT -p TCP -j DROP # 拒绝其他所有访问
5.要求192.168.15.71对外部不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP # 无论谁都无法在外部通过(网络) 192.168.15.71访问服务器(仅可在服务器自己操作(无需网络状态))
6.要求使用eth0网卡的所有请求全部拒绝
iptables -t filter -A INPUT -p TCP -i eth0 -j DROP # 无论谁都无法在外部通过192.168.15.71访问服务器(172.16.1.71不受影响) 等同于>> 192.168.15.71对外部不可见
7.使用172.16.1.71登录进来的窗口,不允许访问百度
iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP # 执行该命令后的远程机不受影响 其他外部网络用户则无法再通过网络连接 172.16.1.71服务器
8.要求访问服务器的8080端口转发至80端口
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80 # 外部网络访问 8080端口等同于访问 80端口
9.要求只允许windows通过ssh连接192.168.15.81,其他的拒绝
iptables -t filter -I INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT # 只有Windows的IP为 192.168.15.1的(执行命令的远程机) 可以远程连接 192.168.15.81服务器
iptables -t filter -A INPUT -p TCP --dport 22 -j DROP # 拒绝其他所有访问
拓展:
查看本机端口占用的命令 netstat -nutlp
13. 模块
# 主要作用:拓展iptables的功能的
-m : 指定模块
1.multiport模块(连续匹配多个端口)
--dports : 指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)
案例:
要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝
iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT # 外部网络只能通过 22,80,443以及30000-50000之间所有的端口连接服务器
iptables -f filter -A INPUT -p TCP -j DROP # 拒绝其他所有访问
2.iprange模块(指定一段连续的ip地址范围)
--src-range from[-to] : 源地址范围
--dst-range from[-to] : 目标地址范围
案例:
要求192.168.15.1 - 192.168.15.10之间的所有IP能够连接192.168.15.81,其他拒绝
iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT # 本地IP为:192.168.15.1 - 192.168.15.10 可以通过网络连接192.168.15.81
iptables -f filter -A INPUT -p TCP -j DROP # 拒绝其他所有访问
3.string模块(匹配指定字符串)
--string pattern : 指定要匹配的字符串
--algo {bm|kmp} : 匹配的查询算法
案例:
要求访问数据包中包含HelloWorld的数据不允许通过
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP # 远程访问服务器时 如果包内容中含有 HelloWorld 则不显示
4.time模块(根据时间段匹配报文)
--timestart hh:mm[:ss] : 开始时间
--timestop hh:mm[:ss] : 结束时间
--monthdays day[,day...] : 指定一个月的某一天
--weekdays day[,day...] : 指定周 还是 周天
案例:
要求每天的12到13之间,不允许访问(默认必须使用UTC时间 中国时间要减八小时)
iptables -t filter -A INPUT -p TCP -m time --timestart 4:00 --timestop 5:00 -j DROP # 中国时间12点到13点之间 不可以远程访问服务器
5.icmp模块(禁ping, 默认本机无法ping别人 、别人无法ping自己)
--icmp-type {type[/code]|typename}
echo-request (8) 请求
echo-reply (0) 回应
案例:
要求别人不能ping本机,但是本机可以ping别人
iptables -t filter -A INPUT -p ICMP -m icmp --icmp-type "echo-request" -j DROP # 本机不回应对方 但是可以向对方请求
6.connlimit模块(限制链接数,并发连接数)
--connlimit-upto n : 如果现有连接数小于或等于 n 则 匹配
--connlimit-above n : 如果现有连接数大于n 则匹配
案例:
要求主机连接最多有2个
iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP # 同时最多两个远程连接(当连接数大于2时 多余的被拒绝)
7.limit模块(针对报文速率进行限制 >> 秒、分钟、小时、天)
--limit rate[/second|/minute|/hour|/day] : 报文数量
--limit-burst number : 报文数量(默认:5)
案例:
要求限制速率在500k/s左右
iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT # 控制文件访问速率 333/s 但实际控制结果是不准确的 会无限往最小速率趋近
iptables -t filter -A INPUT -p TCP -j DROP # 拒绝其他所有访问