DNS
目录
rocky和grub的启动和工作流程
rocky启动流程
1. BIOS/UEFI 启动:执行BIOS或UEFI程序,进行硬件自检和初始化,检测系统内存和外设
2. 加载引导加载程序(GRUB):负责加载操作系统内核和初始 RAM 磁盘
3.加载 GRUB 阶段:从 /boot 分区加载,读取配置文件并显示引导菜单
4. 用户选择引导项:用户可以选择要启动的操作系统或内核版本,如果没有用户干预,GRUB 将使用默认设置自动启动
5. 内核初始化:内核开始初始化硬件设备和系统资源,加载必要的模块和驱动程序
6. 启动systemd系统:负责管理系统服务和进程
7. 启动系统服务:Systemd 读取 /etc/systemd/system 和 /usr/lib/systemd/system 目录中的单元文件,启动必要的服务和进程
8. 登录提示:系统进入多用户模式,显示登录提示,用户可以登录系统
grub工作流程
1. MBR 或 EFI 系统分区加载
2. 加载 GRUB 阶段:负责读取配置文件(/boot/grub2/grub.cfg) 并显示引导菜单
3. 读取配置文件:GRUB 配置文件(/boot/grub2/grub.cfg) 包含了所有引导项的定义和配置,每个引导项定义了一个操作系统或内核版本的启动选项
4. 显示引导菜单
5. 加载内核和 initramfs:根据用户选择的引导项,GRUB 加载相应的内核和 initramfs
6. 传递控制给内核:GRUB 将控制传递给加载的内核,内核开始初始化系统
总结内核设计流派及特点
单内核
特点:
* 集成度高:所有的操作系统服务和驱动程序都运行在同一个地址空间内,与内核紧密结合。
* 性能优越:由于所有服务都在同一个地址空间内运行,减少了上下文切换和通信开销,因此性能通常优于微内核。
* 简单直接:设计和实现相对简单,开发和调试也较为容易。
* 扩展性差:增加新功能或驱动程序需要重新编译整个内核,增加了维护难度。
* 稳定性问题:一个服务或驱动程序的错误可能会影响整个系统的稳定性。
微内核
特点:
* 模块化设计:内核只提供最基本的服务,如进程管理、内存管理和中断处理。其他服务(如文件系统、网络协议栈等)运行在用户空间中。
* 高可靠性:由于大部分服务运行在用户空间,一个服务的故障不会影响整个系统的稳定性。
* 灵活性高:新增或修改服务和驱动程序不需要重新编译内核,只需重新启动相应的用户空间服务。
* 性能较低:由于服务之间需要通过消息传递进行通信,增加了上下文切换和通信开销,性能通常低于单内核。
* 复杂性高:设计和实现较为复杂,开发和调试也更为困难。
混合内核
* 结合优势:结合了单内核和微内核的优点,既保持了高性能,又提高了模块化和可靠性。
* 灵活设计:可以根据需要将某些服务放在内核空间,而将其他服务放在用户空间。
* 复杂性适中:设计和实现比微内核简单,但比单内核复杂。
* 性能较好:通过优化服务的位置和通信机制,可以在性能和可靠性之间取得平衡。
systemd服务配置文件
systemd 使用 .service 文件来配置和管理服务
* /etc/systemd/system/:用户自定义的服务配置文件。
* /lib/systemd/system/:系统安装的服务配置文件。
* /usr/lib/systemd/system/:系统安装的服务配置文件
常用命令
启动服务:systemctl start xxx
停止服务:systemctl stop xxx
重启服务:systemctl restart xxx
重新加载配置:systemctl reload xxx
查看服务状态:systemctl status xxx
启用服务(开机自启动):systemctl enable xxx
禁用服务(取消开机自启动):systemctl disable xxx
openssh服务
openssh服务安全加固
[root@localhost ~]# vi /etc/ssh/sshd_config
#禁止 root 登录
PermitRootLogin no
#禁用密码认证
PasswordAuthentication no
#使用公钥认证
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#限制登录用户
AllowUsers user1 user2
#禁用空密码登录
PermitEmptyPasswords no
#限制最大连接数
MaxAuthTries 3
MaxSessions 10
#更改 SSH 端口
Port 2222
#启用日志记录
SyslogFacility AUTH
LogLevel INFO
#禁用主机名解析
UseDNS no
#禁用 TCP Wrappers
UsePAM yes
UsePrivilegeSeparation sandbox
OpenSSH 免密认证原理
OpenSSH 的免密认证基于公钥加密技术。客户端生成一对公私钥,将公钥发送到服务器,服务器将公钥存储在用户的 ~/.ssh/authorized_keys 文件中。当客户端尝试连接时,服务器会使用存储的公钥验证客户端的身份,而无需输入密码。
实现过程
1.生成密钥对 在客户端生成密钥对
ssh-keygen -t rsa -b 4096
会生成两个文件:
~/.ssh/id_rsa:私钥文件
~/.ssh/id_rsa.pub:公钥文件
2.将公钥复制到服务器 使用 ssh-copy-id 命令将公钥复制到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
3.配置服务器 确保服务器的 /etc/ssh/sshd_config 文件中启用了公钥认证
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
4.重启 SSH 服务 重启 SSH 服务以应用配置更改
systemctl restart sshd
5.测试免密登录 从客户端尝试连接服务器
ssh user@server
对称加密和非对称加密
对称加密的概念:
对称加密使用相同的密钥进行加密和解密。这意味着发送方和接收方必须共享同一个密钥。对称加密算法通常具有较高的效率和速度,适用于大量数据的加密。
特点
- 速度快:对称加密算法通常比非对称加密算法更快。
- 密钥管理:需要安全地共享密钥,密钥管理较为复杂。
- 适合大量数据:适用于需要高效加密大量数据的场景。
常见算法
AES:
密钥长度:128位、192位、256位
块大小:128位
特点:广泛用于数据保护和传输,是目前最常用的对称加密算法。
DES:
密钥长度:56位
块大小:64位
特点:已不再被认为是安全的,但仍然在一些旧系统中使用。
3DES:
密钥长度:112位或168位
块大小:64位
特点:通过三次 DES 运算提高安全性,但速度较慢。
RC4:
密钥长度:可变(40位到2048位)
特点:流加密算法,曾经广泛用于 SSL/TLS,但已不再被认为是安全的。
Blowfish:
密钥长度:可变(32位到448位)
块大小:64位
特点:速度快,适用于多种应用场景。
非对称加密的概念:
非对称加密使用一对密钥:公钥和私钥。公钥用于加密,私钥用于解密。公钥可以公开,而私钥必须保密。非对称加密算法通常用于密钥交换、数字签名和身份验证。
特点
- 安全性高:密钥管理相对简单,因为公钥可以公开。
- 速度较慢:非对称加密算法通常比对称加密算法慢。
- 适合少量数据:适用于需要高度安全性的场景,如密钥交换和数字签名。
常见算法
RSA:
密钥长度:通常为1024位、2048位、4096位
特点:广泛用于密钥交换和数字签名,是最常用的非对称加密算法之一。
DSA:
密钥长度:通常为1024位、2048位
特点:专门用于数字签名,不用于加密数据。
ECDSA:
密钥长度:通常为256位、384位、521位
特点:基于椭圆曲线密码学,提供相同安全性的密钥长度较短,计算效率更高。
ECC:
密钥长度:通常为256位、384位、521位
特点:提供更高的安全性和计算效率,适用于资源受限的设备。
ElGamal:
密钥长度:可变
特点:用于加密和数字签名,但不如 RSA 和 ECC 普遍。
应用场景
对称加密:
文件加密:大量数据的加密和解密。
网络通信:如 SSL/TLS 协议中的数据传输。
数据库加密:保护敏感数据。
非对称加密:
密钥交换:如 Diffie-Hellman 密钥交换。
数字签名:验证数据的完整性和来源。
身份验证:如 PKI中的证书管理。
域名系统DNS
首先简单介绍一下什么是DNS
因为当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的,而数字形式的IP地址是很难记忆的想要记住每个设备的IP地址基本是不可能的。所以可以使用域名来作为网络设备的名称。例如:www.baidu.com。但是计算机无法解析这个名称,因此我们需要使用DNS即名称解析服务,把名称解析为IP地址,当然也可以反向操作,把IP地址转换为域名。除此之外还有一个重要功能,利用名称解析服务可以实现主机和IP的解耦,即:当主机IP变化时,只需要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。
DNS工作流程图
DNS工作原理
- 用户请求:用户在浏览器中输入 www.magedu.com。
- 递归解析器:用户的设备联系递归解析器。
- 根域名服务器(根域名):递归解析器查询根域名服务器,获取 .com 域名服务器的信息。
- 顶级域名服务器(顶级域名):递归解析器查询 .com 域名服务器,获取 magedu.com 的权威域名服务器的信息。
- 权威域名服务器(二级域名):递归解析器查询 magedu.com 的权威域名服务器,获取 www.magedu.com 的 IP 地址(如 6.6.6.6)。
- 返回结果:递归解析器将解析结果返回给用户的设备,浏览器使用该 IP 地址建立连接并加载网页。
DNS 的架构
根域名服务器:
全球共有 13 组根域名服务器,负责管理顶级域名服务器的信息。
顶级域名服务器(顶级域名):
负责管理特定顶级域名(如 .com、.org、.cn)的信息。
权威域名服务器(二级域名):
负责管理特定域名(如 example.com)的信息,提供最终的 IP 地址解析。
递归解析器:
通常由 ISP 或企业网络提供,负责递归查询并返回最终的解析结果给用户设备。
DNS域名划分
举例:www.baidu.com
- com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
- baidu: 二级域名,指公司名。
- www: 三级域名是在二级域名之下的部分,通常用于进一步细分网站的结构或功能。
- www.example.com 中的 www 是三级域名。
- mail.google.com 中的 mail 是三级域名。
DNS查询类型
递归查询:
定义:
递归查询是由递归解析器(通常称为 DNS 递归解析器或 DNS 缓存服务器)执行的一种查询方式。
DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没
有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用户。
客户端请求:用户在浏览器中输入 www.example.com,浏览器向递归解析器发送递归查询请求
递归解析器处理:
查询根域名服务器,获取 .com 域名服务器的信息。
查询 .com 域名服务器,获取 example.com 域名服务器的信息。
查询 example.com 域名服务器,获取 www.example.com 的 IP 地址。
返回结果:递归解析器将最终的 IP 地址返回给客户端。
迭代查询:
定义:
DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的
地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
初始请求:递归解析器向根域名服务器发送迭代查询请求。
根域名服务器响应:根域名服务器返回 .com 域名服务器的地址。
查询顶级域名服务器:递归解析器向 .com 域名服务器发送迭代查询请求。
顶级域名服务器响应:.com 域名服务器返回 example.com 域名服务器的地址。
查询权威域名服务器:递归解析器向 example.com 域名服务器发送迭代查询请求。
权威域名服务器响应:example.com 域名服务器返回 www.example.com 的 IP 地址。
返回结果:递归解析器将最终的 IP 地址返回给客户端。
NDS缓存
DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意
位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。
DNS主从服务器
主服务器:
主服务器是权威 DNS 服务器,负责维护域名的原始记录。
- 存储和管理域名的权威记录。
- 接受来自管理员的更改请求。
- 将记录同步到从服务器。
从服务器:
从服务器是从主服务器同步记录的辅助 DNS 服务器。
- 定期从主服务器获取最新的 DNS 记录。
- 在主服务器不可用时,继续提供 DNS 解析服务。
- 减轻主服务器的负担,提高整体系统的性能和可靠性。
解析答案
DNS 解析答案是 DNS 服务器返回给客户端的响应,包含请求的域名解析结果。解析答案可以是以下几种形式:
-
A 记录:将域名映射到 IPv4 地址。
示例:www.example.com. 3600 IN A 93.184.216.34 -
AAAA 记录:将域名映射到 IPv6 地址。
示例:www.example.com. 3600 IN AAAA 2606:2800:220:1:248:1893:25c8:1946 -
CNAME 记录:将一个域名映射到另一个域名。
示例:www.example.com. 3600 IN CNAME example.com. -
MX 记录:指定邮件服务器。
示例:example.com. 3600 IN MX 10 mail.example.com. -
NS 记录:指定域名的权威域名服务器。
示例:example.com. 3600 IN NS ns1.example.com. -
PTR 记录:用于反向解析,将 IP 地址映射到域名。
示例:93.184.216.34.in-addr.arpa. 3600 IN PTR www.example.com. -
SRV 记录:用于服务发现,指定服务的位置。
示例:_sip._tcp.example.com. 3600 IN SRV 10 60 5060 sipserver.example.com. -
TXT 记录:用于存储任意文本信息,常用于验证域名所有权或配置 SPF 记录。
示例:example.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all"
实现主从DNS服务器
DNS软件bind
DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns
bind相关程序包:
yum list all bind*
bind:服务器
bind-utils: 客户端
bind-libs:相关库,依赖关系自动安装
bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/
配置主服务器
[root@localhost ~]# yum install -y bind
[root@localhost ~]# systemctl enable --now named
#修改网卡配置里的dns(测试)
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
#文件生效
[root@localhost ~]# nmcli connection reload
[root@localhost ~]# nmcli connection up ens33
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
#配置已生效
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
#成功解析百度
[root@localhost ~]# ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
[root@localhost ~]# vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
[root@localhost named]# named-checkconf #语法检查
[root@localhost named]# rndc reload #文件生效
server reload successful
[root@localhost ~]# vi /etc/named.rfc1912.zones
#实现域名(mqh.org)和数据文件(mqh.org.zone)的关联关系,约定其配置类型(master)
zone "mqh.org" {
type master; #(master代表主服务器)
file "mqh.org.zone";
};
[root@localhost named]# cd /etc/named/
#创建mqh.org.zone文件并添加以下配置信息
[root@localhost named]# cat mqh.org.zone
$TTL 86400
@ IN SOA dns.mqh.org. admin.mqh.com. ( 20241126 3H 10M 1D 1W )
NS dns1
dns1 A 192.168.93.200
www IN A 192.168.93.201
db IN A 192.168.93.100
#因为.zone文件是通过named组来读取的,所以该文件要修改为named组
[root@localhost named]# chgrp named mqh.org.zone
#为了安全,要修改权限
[root@localhost named]# chmod 640 mqh.org.zone
#语法检查
[root@localhost named]# named-checkzone mqh.org /var/named/mqh.org.zone
#文件生效
[root@localhost named]# rndc reload
#验证
#在201主机(客户端)上下载nginx并启动
#在200主机(dns服务器)上curl一下
[root@localhost ~]# curl www.mqh.org
<h1>hello<h1/>
bind的named.conf配置文件详解
options {
// listen-on port 53 { 127.0.0.1; }; #指定dns服务器的地址和端口
listen-on-v6 port 53 { ::1; };
directory "/var/named"; #指定存放区域文件和其他相关文件的目录(mqh.org.zone就放在这个目录底下)。
dump-file "/var/named/data/cache_dump.db"; #指定缓存数据的转储文件路径
statistics-file "/var/named/data/named_stats.txt"; #指定统计信息文件的路径
memstatistics-file "/var/named/data/named_mem_stats.txt"; #指定内存使用情况统计文件的路径
secroots-file "/var/named/data/named.secroots"; #指定安全根区域文件的路径
recursing-file "/var/named/data/named.recursing"; #指定递归查询文件的路径
// allow-query { localhost; }; #指定允许查询的客户端(注释掉就代表允许所有主机查询)
.zone配置文件详解
1.必须包含SOA记录且必须是第一行(SOA表示起始授权记录)
2.NS记录(表示谁来作为www.mqh.org的dns服务器)
3.A记录
格式:name [TTL] IN rr_type value
name:域名
TTL:默认的生存时间(86400单位是秒。即一天)(全局定义后可以省略)
IN:表示 Internet 类型
rr_type:记录的类型(参考前面的解析答案)
value:记录的具体值
[root@localhost named]# cat mqh.org.zone
$TTL 86400
#SOA记录
@ IN SOA dns.mqh.org. admin.mqh.com. ( 20241126 3H 10M 1D 1W )
# @表示本机域名,也可以写完整域名(www.mqh.org.)
# dns.mqh.org. 主域名服务器的名称(相当于注释)
# admin.mqh.com. 管理者的邮箱地址
# 20241126 版本号(可以用日期,例:dns服务器IP变更,版本号也必须更新,作用:数据同步判断依据)
# 3H 从服务器检查主服务器的更新时间间隔
# 10M 从服务器在刷新失败后重新尝试的时间间隔(10分钟)
# 1W 缓存服务器在没有收到响应时保留数据的时间(1周)
@ IN NS dns1
@ IN NS dns2
dns1 A 192.168.93.200
dns2 A 192.168.93.199
#完整域名写法应该是www.mqh.org.(由于已经创建了一个mqh.org.zone,所以mqh.org可以省略)
#A记录
www IN A 192.168.93.201
db IN A 192.168.93.100
配置从服务器
[root@localhost named]# yum install -y bind
[root@localhost named]# yum install -y bind-utils
[root@localhost named]# systemctl enable --now named
[root@localhost ~]# vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
[root@localhost named]# named-checkconf #语法检查
[root@localhost named]# rndc reload #文件生效
server reload successful
[root@localhost ~]# vi /etc/named.rfc1912.zones
#实现域名(mqh.org)和数据文件(mqh.org.zone)的关联关系,约定其配置类型(slave)
zone "mqh.org" {
type slave; #从服务
masters { 192.168.93.200; }; #声明主服务器地址
file "slaves/mqh.org.slaves.zone";
};
#配置完成后可以看到一下文件,没有就重启服务
[root@localhost named]# ll slaves/
总用量 4
-rw-r--r-- 1 named named 321 11月 27 09:26 mqh.org.slaves.zone
#在主服务器上添加dns2
[root@localhost named]# vi mqh.org.zone
$TTL 86400
@ IN SOA dns.mqh.org. admin.mqh.com. ( 2024112611 3H 10M 1D 1W )
NS dns1
NS dns2
dns1 A 192.168.93.200
dns2 A 192.168.93.201
www IN A 192.168.93.202
db IN A 192.168.93.100
[root@localhost named]# rndc reload
server reload successful