1. 总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。
OpenSSH 服务安全加固总结:
-
更新版本:
- 使用最新版本的 OpenSSH,因为它们通常修复了先前版本中存在的安全漏洞。
-
禁用不安全的协议和算法:
- 禁用弱密码算法,如MD5和96位强度以下的算法。
- 禁用旧的 SSH 版本协议(如 SSHv1)。
- 配置只使用安全的加密算法,如AES,SHA2系列等。
-
配置访问控制:
- 使用防火墙或 SSH 配置来限制访问,仅允许来自受信任 IP 地址的连接。
- 禁止 root 用户直接登录。
-
密钥管理:
- 强制使用密钥认证,禁用密码认证。
- 限制私钥的权限,并确保合适的文件和目录权限。
-
多因素认证:
- 结合公钥认证和密码认证或其他多因素认证方法,增强安全性。
-
监控和日志:
- 启用详细的日志记录以监控 SSH 访问,并定期检查这些日志。
-
定期更新:
- 定期审查和更新配置,以适应最新的安全最佳实践。
OpenSSH 免密认证原理和实现过程总结:
免密认证原理: OpenSSH 免密认证基于公钥密码学,使用密钥对(公钥和私钥)进行身份验证。用户将公钥部署到服务器上,而私钥则保留在本地。当用户连接到服务器时,服务器会向用户发送一个随机值,并要求用户使用私钥对该值进行签名。如果服务器能够使用用户已在服务器上存储的公钥验证签名,就会允许用户登录。
免密认证实现过程:
-
生成密钥对:
- 在本地计算机上生成密钥对(公钥和私钥)。
- 使用
ssh-keygen
命令生成密钥对。
-
将公钥部署到目标服务器:
- 将本地生成的公钥复制到目标服务器的
~/.ssh/authorized_keys
文件中。 - 可以使用
ssh-copy-id
命令或手动复制粘贴的方式添加公钥到目标服务器。
- 将本地生成的公钥复制到目标服务器的
-
配置服务器:
- 确保目标服务器允许公钥认证。
- 检查 SSH 配置文件(通常是
/etc/ssh/sshd_config
)确保PubkeyAuthentication
选项设置为yes
。
-
尝试连接:
- 当用户尝试 SSH 连接到服务器时,OpenSSH 将会检查本地私钥,并尝试使用其中的私钥对服务器发送的挑战进行签名。
- 如果服务器可以使用公钥验证签名,用户将被授权登录而无需输入密码。
2. 总结sudo配置文件格式,总结相关示例。
Sudo 配置文件:/etc/sudoers
-
格式:
sudoers
文件使用特定的语法规则,它由用户授权规则组成,定义了哪些用户或用户组有权以其他用户的身份执行特定命令。
-
语法规则:
user host=(runas) command
:授权用户在特定主机上以特定用户身份运行特定命令。User_Alias
和Host_Alias
:定义用户别名和主机别名,简化规则的管理。- 特殊字符:
%
:表示用户组。ALL
:表示所有用户、主机或命令。NOPASSWD:
:表示允许用户无需输入密码执行命令。
示例:
-
基本示例:
user1 ALL=(root) /bin/ls
- 允许
user1
在所有主机上以root
用户身份执行/bin/ls
命令。
- 允许
-
使用别名:
User_Alias ADMINS = user1, user2 Host_Alias SERVERS = server1, server2 ADMINS SERVERS=(root) /sbin/reboot
- 定义了用户别名
ADMINS
和主机别名SERVERS
,然后授权这些用户在指定服务器上以root
用户身份执行/sbin/reboot
命令。
- 定义了用户别名
-
允许无密码执行:
user1 ALL=(ALL) NOPASSWD: ALL
- 允许
user1
在所有主机上以任何用户身份执行任何命令,无需输入密码。
- 允许
-
按需求细分权限:
user1 SERVERS=(root) /bin/kill, /bin/ps user2 SERVERS=(appuser) /bin/restart_app
user1
可以在指定服务器上以root
用户身份执行/bin/kill
和/bin/ps
命令。user2
可以在指定服务器上以appuser
用户身份执行/bin/restart_app
命令。
3. 总结PAM架构及工作原理
PAM(Pluggable Authentication Modules)是一种用于身份验证服务的模块化框架,广泛用于各种 Linux 和 UNIX 系统。其设计理念是将身份验证的方法与应用程序分离开来,允许系统管理员通过简单地配置 PAM 模块,自定义认证方式而无需修改应用程序代码。
PAM 架构:
-
模块化结构:
- PAM 采用模块化结构,由一系列独立的可插拔模块组成,每个模块负责执行特定的认证、授权或会话管理任务。
-
四个基本管理组件:
- 认证模块(Authentication Module):验证用户的身份。
- 授权模块(Authorization Module):确定用户是否有权限执行请求的操作。
- 账号管理模块(Account Management Module):检查用户是否允许访问系统。
- 会话管理模块(Session Management Module):管理用户登录和注销时的操作。
-
配置文件:
- PAM 的配置文件通常为
/etc/pam.d/
目录下的各个应用程序文件,如login
、sudo
等。 - 每个文件定义了使用 PAM 进行认证、授权和会话管理的规则。
- PAM 的配置文件通常为
PAM 工作原理:
-
应用程序调用:
- 当用户尝试登录或执行需要身份验证的操作时,相关的应用程序调用 PAM 库。
-
PAM 库调用配置文件:
- PAM 库根据应用程序请求的服务名称(比如
login
、ssh
等)查找并加载对应的 PAM 配置文件。
- PAM 库根据应用程序请求的服务名称(比如
-
PAM 配置文件:
- 配置文件定义了一系列模块和控制标志,用于指定在特定情况下如何进行认证、授权和会话管理。
-
模块堆栈执行:
- PAM 根据配置文件中定义的模块堆栈(stack),按顺序调用相应的认证、授权、账号管理和会话管理模块。
- 模块可以根据需要返回成功、失败或需要更多信息的结果。
-
反馈结果:
- PAM 将每个模块的结果整合,并根据结果决定是否允许用户继续操作。
- 如果所有模块均返回成功,则用户被授权执行请求的操作。
-
结束会话:
- 当用户会话结束时,会话管理模块负责执行必要的清理操作。
4. 总结PAM配置文件格式,总结相关示例, nologin.so, limits,等模块的使用。
PAM 配置文件格式总结:
PAM 配置文件通常位于 /etc/pam.d/
目录下,每个文件对应一个应用程序或服务。以下是 PAM 配置文件的一般格式和示例:
格式示例:
# PAM configuration for the <service> auth required <module_path> <module_options> account required <module_path> <module_options> password required <module_path> <module_options> session required <module_path> <module_options>
- service:服务或应用程序名称。
- module_path:PAM 模块的路径或名称。
- module_options:模块特定的参数和选项。
示例:
nologin 模块:
nologin
模块用于禁止特定用户登录系统,通常用于阻止系统账户登录。
示例配置文件内容:
# /etc/pam.d/nologin auth required pam_nologin.so account required pam_nologin.so
这会阻止所有用户登录,因为 pam_nologin.so
模块被标记为 "required",任何尝试登录都会被拒绝。
limits 模块:
limits
模块允许设置用户级别的资源限制,如 CPU 使用、内存等。
示例配置文件内容:
# /etc/pam.d/system-login session required pam_limits.so
这会在用户登录时加载 pam_limits.so
模块,并按照 /etc/security/limits.conf
中的规则对用户进行资源限制。
pam_tally2 模块:
pam_tally2
模块用于跟踪登录失败的次数,并在达到设定的阈值时采取措施,如锁定账户。
示例配置文件内容:
# /etc/pam.d/login auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300
这个示例中的配置将在登录时使用 pam_tally2.so
模块,当失败尝试达到 3 次时,将拒绝用户登录,并在 300 秒后解锁账户。
5. 实现私有时间服务器
服务器端:
客户端:
6. 总结DNS域名三级结构
三级结构组成:
-
顶级域(Top-Level Domain, TLD):
- 顶级域是域名的最高层级,标识域名所属的顶级组织、国家或区域。
- 分为两种类型:
- 通用顶级域:代表一般类别,如 .com、.org、.net 等。
- 国家代码顶级域:代表特定国家或地区,如 .us(美国)、.uk(英国)等。
-
二级域(Second-Level Domain):
- 二级域是位于顶级域之下的层级,通常表示组织、公司或个人的名称。
- 二级域名是唯一的,并在整个顶级域中具有唯一性。
-
子域名(Subdomain):
- 子域名是二级域名的下一级,可以按需创建多个级别。
- 子域名通常表示组织内部结构、特定服务、地理位置等。
7. 总结DNS服务工作原理,涉及递归和迭代查询原理
DNS 服务工作原理:
1. 递归查询(Recursive Query):
-
用户请求:当用户在浏览器中输入一个域名时,本地计算机的 DNS 解析器会发送一个 DNS 查询请求到本地 DNS 服务器,寻求域名对应的 IP 地址。
-
递归查询:本地 DNS 服务器收到请求后,若自身没有缓存该域名对应的 IP 地址,会负责完成整个解析过程。
-
迭代查询至根域名服务器:本地 DNS 服务器向根域名服务器发起查询请求,询问所需域名的顶级域名服务器(TLD)的地址。
-
查询至权威域名服务器:根域名服务器返回 TLD 的域名服务器地址,本地 DNS 服务器再向 TLD 服务器查询次级域名服务器(例如
.com
域)的地址。 -
获取最终目标IP地址:本地 DNS 服务器最终询问目标域名的权威域名服务器,获取目标域名对应的 IP 地址,并将结果返回给用户的计算机。
-
-
缓存结果:本地 DNS 服务器将获得的域名与 IP 地址的映射关系保存在缓存中,以便将来的查询使用。
2. 迭代查询(Iterative Query):
-
上级 DNS 服务器的协助:在递归查询中,本地 DNS 服务器在每个步骤中负责向下一个级别的 DNS 服务器发起查询。这种查询方式也被称为迭代查询。
-
DNS 服务器之间的交互:在迭代查询中,一个 DNS 服务器收到另一个 DNS 服务器的查询请求后,要么返回所需的解析信息,要么给出下一个可以查询的 DNS 服务器地址。
-
责任分离:迭代查询的特点是每个 DNS 服务器只负责给出下一个应该被询问的 DNS 服务器的地址,直到最终得到目标域名对应的 IP 地址。
8. 实现私有DNS, 供本地网络主机作DNS递归查询。
步骤 1: 安装 Bind
首先,确保你的系统处于最新状态,并安装 Bind 服务器:
步骤 2: 配置 Bind
- 配置主要的 Bind 文件:
编辑 Bind 的主配置文件/etc/bind/named.conf
- 创建区域文件:
在 /etc/bind/zones/
目录下创建一个新文件 yourdomain.com.db
并添加以下内容:
步骤 3: 配置网络
- 修改网络设置:
编辑网络配置文件以确保本地主机使用新的 DNS 服务器:
/etc/netplan/01-network-manager-all.yaml
- 应用配置:
sudo netplan apply
步骤 4: 启动和测试 DNS 服务器
- 重启 Bind 服务:
sudo systemctl restart bind9
- 测试 DNS 服务器:
在本地主机上使用 nslookup
命令来测试 DNS 服务器是否正常工作:
9. 总结DNS服务器类型,解析答案,正反解析域,资源记录定义。
DNS 服务器类型:
-
递归DNS服务器:
- 负责完成客户端发起的完整 DNS 查询过程,从根域名服务器开始,直至获得目标域名的 IP 地址。
-
权威DNS服务器:
- 存储特定域名区域(zone)的 DNS 记录,提供其他 DNS 服务器查询该区域信息的答案。
-
转发DNS服务器:
- 在无法直接解析某个域名时,转发查询给其他 DNS 服务器来解析,并将结果返回给客户端。
解析答案:
DNS 解析答案指的是 DNS 查询的结果,其中包含了域名解析到的 IP 地址或其他相关资源记录。解析答案可以包含 A 记录(IPv4 地址)、AAAA 记录(IPv6 地址)、CNAME 记录(别名记录)、MX 记录(邮件交换记录)等。
正反解析域:
-
正向解析(Forward DNS):
- 通过域名查找对应的 IP 地址。例如,将域名转换为 IP 地址,如将
www.example.com
解析为192.0.2.1
。
- 通过域名查找对应的 IP 地址。例如,将域名转换为 IP 地址,如将
-
反向解析(Reverse DNS):
- 通过 IP 地址查找对应的域名。例如,将 IP 地址转换为域名,如将
192.0.2.1
解析为www.example.com
。
- 通过 IP 地址查找对应的域名。例如,将 IP 地址转换为域名,如将
资源记录定义:
DNS 中的资源记录(Resource Record, RR)包含了不同类型的信息,用于指定特定域名的各种数据。常见的资源记录类型包括:
- A 记录:将域名解析为 IPv4 地址。
- AAAA 记录:将域名解析为 IPv6 地址。
- CNAME 记录:指定域名的别名。
- MX 记录:指定邮件交换服务器。
- PTR 记录:反向解析,将 IP 地址解析为域名。
- NS 记录:指定域名服务器的域名。
- SOA 记录:区域起始授权记录,包含了有关区域的重要信息,如域名的管理者、刷新时间等。
10. 实现DNS主从同步
11. 实现DNS子域授权
12. 基于acl实现智能DNS
13. 总结防火墙分类
防火墙分类:
-
软件防火墙(Software Firewall):
- 运行在计算机上的软件程序,用于监控和过滤该计算机的网络流量。
- 通常用于单个设备,如个人电脑、服务器等。
- 能够根据预定义的规则设置来过滤流入和流出的数据包。
-
硬件防火墙(Hardware Firewall):
- 基于硬件设备的防火墙,通常是一个独立的网络设备或路由器。
- 适用于保护整个网络,可连接到网络中央,过滤进出网络的流量。
- 具有更高的处理能力和性能,可以有效过滤大量流量。
-
网络层防火墙(Network Layer Firewall):
- 基于网络层(OSI 模型中的第三层)工作,根据 IP 地址、端口号等信息过滤流量。
- 可以实现对网络数据包的路由和转发决策,提供路由功能并进行访问控制。
-
应用层防火墙(Application Layer Firewall):
- 在 OSI 模型中的应用层工作,可以检测和控制特定应用程序的数据流。
- 能够检查应用层协议,如 HTTP、FTP、SMTP 等,并针对具体应用的通信进行过滤和监控。
-
代理防火墙(Proxy Firewall):
- 作为客户端和服务器之间的中间层,代理特定类型的流量,监视所有进出流量。
- 通常会对进出流量进行解析和重新组装,并对数据包进行检查和过滤。
-
云防火墙(Cloud Firewall):
- 部署在云计算环境中的防火墙,用于保护云服务、虚拟网络和云资源。
- 提供了在云环境中管理和保护网络流量的能力。
14. 总结iptable 5表5链, 基本使用,扩展模块。
iptables 的五个表:
-
Filter 表(filter):
- 默认表,用于过滤数据包,控制数据包是否允许通过。
-
NAT 表(nat):
- 用于修改网络数据包的源或目标地址,用于网络地址转换(NAT)和端口转发。
-
Mangle 表(mangle):
- 主要用于修改数据包的头部信息,例如标记数据包或更改 TOS 字段。
-
Raw 表(raw):
- 用于配置特定的数据包免受连接追踪(Connection Tracking)系统的影响。
-
Security 表(security):
- 用于 SELinux (Security-Enhanced Linux)防火墙规则。
每个表包含的预定义链:
- INPUT:处理到达本地计算机的数据包。
- OUTPUT:处理本地计算机产生的数据包。
- FORWARD:处理通过本地计算机转发的数据包。
基本使用:
-
查看规则:
iptables -L
显示当前防火墙规则。
-
添加规则:
iptables -A INPUT -s 192.168.1.100 -j DROP
允许或拒绝从 IP 地址为 192.168.1.100 的主机发出的所有数据包。
-
删除规则:
iptables -D INPUT -s 192.168.1.100 -j DROP
删除之前添加的规则。
-
清除规则:
iptables -F
清除所有规则。
扩展模块:
iptables 可以使用不同的扩展模块来增强其功能,例如:
- iptables-extensions:提供额外的功能和条件来过滤和修改数据包,如
-m limit
、-m state
等。 - ip_set 模块:允许创建 IP 地址集合,提供高效的 IP 地址匹配和管理功能。
- conntrack 模块:用于连接跟踪,允许防火墙在数据包流经时跟踪连接状态。
15. 总结iptables规则优化实践,规则保存和恢复。
优化 iptables 规则:
-
合并规则:
- 避免重复规则,并合并具有相似条件的规则,以减少规则数量。
-
限制使用通配符:
- 尽可能具体地定义规则,避免使用通配符,以提高匹配效率。
-
使用连接状态:
- 使用
-m state
或-m conntrack
模块来根据连接状态过滤数据包,减少不必要的处理。
- 使用
-
使用 IP 地址集合:
- 使用 ip_set 模块创建 IP 地址集合,可以更高效地管理和匹配 IP 地址。
-
优先处理常用规则:
- 将最常用的规则放在较前的位置,以减少匹配次数。
规则保存和恢复:
-
保存规则:
- 使用
iptables-save
命令将当前的 iptables 规则保存到文件中,以便后续恢复使用。
iptables-save > /etc/iptables/rules.v4
- 使用
-
恢复规则:
- 使用
iptables-restore
命令从保存的文件中恢复 iptables 规则。
iptables-restore < /etc/iptables/rules.v4
- 使用
-
持久化规则:
-
根据不同 Linux 发行版,可以使用特定工具(如
iptables-persistent
)或在启动脚本中添加命令来实现系统重启后规则的持久化。 -
对于 Ubuntu/Debian 等系统:
- 安装
iptables-persistent
包。 - 保存当前规则:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6
- 在系统重启时,这些规则将会自动加载。
- 安装
-
16. 总结NAT转换原理, DNAT/SDNAT原理,并自行设计架构实现DNAT/SNAT。
NAT转换原理:
NAT 是一种技术,用于将网络数据包的源 IP 地址或目标 IP 地址转换为另一个 IP 地址,通常用于连接私有网络和公共网络,实现内部私有 IP 地址和外部公共 IP 地址之间的映射转换。
- SNAT:将源 IP 地址转换为另一个地址。
- DNAT:将目标 IP 地址转换为另一个地址。
DNAT和 SNAT原理:
-
DNAT:在数据包到达目的地之前修改目标 IP 地址,将目标 IP 地址替换为另一个地址。这通常用于在防火墙上重定向外部流量到内部服务器,实现端口转发或负载均衡等功能。
-
SNAT:在数据包离开源主机之前修改源 IP 地址,将源 IP 地址替换为另一个地址。这通常用于隐藏内部网络结构,将私有 IP 地址映射为公共 IP 地址,以便内部主机访问外部网络。
自行设计架构实现 DNAT/SNAT:
- DNAT 实现端口转发:
假设有一台防火墙,内网有一台 Web 服务器(内网 IP: 192.168.1.10),需要将外部访问防火墙的 80 端口重定向到该服务器。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
- SNAT 实现出口 IP 转换:
假设内网主机(IP: 192.168.1.20)需要访问外部网络,将其源 IP 地址转换为防火墙的公共 IP 地址。
iptables -t nat -A POSTROUTING -s 192.168.1.20 -j SNAT --to-source <防火墙公共IP>
17. 使用REDIRECT将90端口重定向80,并可以访问到80端口的服务
18. firewalld常见区域总结。
1. public
- 描述:公共区域,适用于不受信任的公共网络,如公共 Wi-Fi 或互联网连接。
- 默认规则:通常较为严格,限制了对于大多数服务的访问。
2. internal
- 描述:内部区域,适用于受信任的内部网络,如内部企业网络。
- 默认规则:允许大多数常见服务,更加开放。
3. external
- 描述:外部区域,用于连接到外部网络的接口。
- 默认规则:通常比较严格,只允许特定的入站流量。
4. dmz
- 描述:非受信任区域,用于放置公共服务,如 web 服务器。
- 默认规则:允许来自外部网络的访问,限制对内部网络的访问。
5. work
- 描述:用于办公环境,信任级别介于 public 和 internal 之间。
- 默认规则:允许常见服务,但对来自公共网络的访问较为严格。
6. home
- 描述:家庭网络,信任级别较高,适用于家庭网络环境。
- 默认规则:相对宽松,允许常见服务,限制来自外部网络的访问。
19. 通过ntftable来实现暴露本机80/443/ssh服务端口给指定网络访问"
# 允许 192.168.117.111 访问本机的 80、443、22 端口
iptables -A INPUT -p tcp -s 192.168.117.111 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.117.111 --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.117.111 --dport 22 -j ACCEPT