sre工程师第五周


1. 总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。

OpenSSH 服务安全加固总结:

  1. 更新版本

    • 使用最新版本的 OpenSSH,因为它们通常修复了先前版本中存在的安全漏洞。
  2. 禁用不安全的协议和算法

    • 禁用弱密码算法,如MD5和96位强度以下的算法。
    • 禁用旧的 SSH 版本协议(如 SSHv1)。
    • 配置只使用安全的加密算法,如AES,SHA2系列等。
  3. 配置访问控制

    • 使用防火墙或 SSH 配置来限制访问,仅允许来自受信任 IP 地址的连接。
    • 禁止 root 用户直接登录。
  4. 密钥管理

    • 强制使用密钥认证,禁用密码认证。
    • 限制私钥的权限,并确保合适的文件和目录权限。
  5. 多因素认证

    • 结合公钥认证和密码认证或其他多因素认证方法,增强安全性。
  6. 监控和日志

    • 启用详细的日志记录以监控 SSH 访问,并定期检查这些日志。
  7. 定期更新

    • 定期审查和更新配置,以适应最新的安全最佳实践。

OpenSSH 免密认证原理和实现过程总结:

免密认证原理: OpenSSH 免密认证基于公钥密码学,使用密钥对(公钥和私钥)进行身份验证。用户将公钥部署到服务器上,而私钥则保留在本地。当用户连接到服务器时,服务器会向用户发送一个随机值,并要求用户使用私钥对该值进行签名。如果服务器能够使用用户已在服务器上存储的公钥验证签名,就会允许用户登录。

免密认证实现过程

  1. 生成密钥对

    • 在本地计算机上生成密钥对(公钥和私钥)。
    • 使用 ssh-keygen 命令生成密钥对。
  2. 将公钥部署到目标服务器

    • 将本地生成的公钥复制到目标服务器的 ~/.ssh/authorized_keys 文件中。
    • 可以使用 ssh-copy-id 命令或手动复制粘贴的方式添加公钥到目标服务器。
  3. 配置服务器

    • 确保目标服务器允许公钥认证。
    • 检查 SSH 配置文件(通常是 /etc/ssh/sshd_config)确保 PubkeyAuthentication 选项设置为 yes
  4. 尝试连接

    • 当用户尝试 SSH 连接到服务器时,OpenSSH 将会检查本地私钥,并尝试使用其中的私钥对服务器发送的挑战进行签名。
    • 如果服务器可以使用公钥验证签名,用户将被授权登录而无需输入密码。


2. 总结sudo配置文件格式,总结相关示例。

Sudo 配置文件:/etc/sudoers

  1. 格式

    • sudoers 文件使用特定的语法规则,它由用户授权规则组成,定义了哪些用户或用户组有权以其他用户的身份执行特定命令。
  2. 语法规则

    • user host=(runas) command:授权用户在特定主机上以特定用户身份运行特定命令。
    • User_AliasHost_Alias:定义用户别名和主机别名,简化规则的管理。
    • 特殊字符:
      • %:表示用户组。
      • ALL:表示所有用户、主机或命令。
      • NOPASSWD::表示允许用户无需输入密码执行命令。

示例:

  1. 基本示例

    user1 ALL=(root) /bin/ls

    • 允许 user1 在所有主机上以 root 用户身份执行 /bin/ls 命令。
  2. 使用别名

    User_Alias ADMINS = user1, user2 Host_Alias SERVERS = server1, server2 ADMINS SERVERS=(root) /sbin/reboot

    • 定义了用户别名 ADMINS 和主机别名 SERVERS,然后授权这些用户在指定服务器上以 root 用户身份执行 /sbin/reboot 命令。
  3. 允许无密码执行

    user1 ALL=(ALL) NOPASSWD: ALL

    • 允许 user1 在所有主机上以任何用户身份执行任何命令,无需输入密码。
  4. 按需求细分权限

    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 架构:

  1. 模块化结构

    • PAM 采用模块化结构,由一系列独立的可插拔模块组成,每个模块负责执行特定的认证、授权或会话管理任务。
  2. 四个基本管理组件

    • 认证模块(Authentication Module):验证用户的身份。
    • 授权模块(Authorization Module):确定用户是否有权限执行请求的操作。
    • 账号管理模块(Account Management Module):检查用户是否允许访问系统。
    • 会话管理模块(Session Management Module):管理用户登录和注销时的操作。
  3. 配置文件

    • PAM 的配置文件通常为 /etc/pam.d/ 目录下的各个应用程序文件,如 loginsudo 等。
    • 每个文件定义了使用 PAM 进行认证、授权和会话管理的规则。

PAM 工作原理:

  1. 应用程序调用

    • 当用户尝试登录或执行需要身份验证的操作时,相关的应用程序调用 PAM 库。
  2. PAM 库调用配置文件

    • PAM 库根据应用程序请求的服务名称(比如 loginssh 等)查找并加载对应的 PAM 配置文件。
  3. PAM 配置文件

    • 配置文件定义了一系列模块和控制标志,用于指定在特定情况下如何进行认证、授权和会话管理。
  4. 模块堆栈执行

    • PAM 根据配置文件中定义的模块堆栈(stack),按顺序调用相应的认证、授权、账号管理和会话管理模块。
    • 模块可以根据需要返回成功、失败或需要更多信息的结果。
  5. 反馈结果

    • PAM 将每个模块的结果整合,并根据结果决定是否允许用户继续操作。
    • 如果所有模块均返回成功,则用户被授权执行请求的操作。
  6. 结束会话

    • 当用户会话结束时,会话管理模块负责执行必要的清理操作。


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域名三级结构

三级结构组成:

  1. 顶级域(Top-Level Domain, TLD)

    • 顶级域是域名的最高层级,标识域名所属的顶级组织、国家或区域。
    • 分为两种类型:
      • 通用顶级域:代表一般类别,如 .com、.org、.net 等。
      • 国家代码顶级域:代表特定国家或地区,如 .us(美国)、.uk(英国)等。
  2. 二级域(Second-Level Domain)

    • 二级域是位于顶级域之下的层级,通常表示组织、公司或个人的名称。
    • 二级域名是唯一的,并在整个顶级域中具有唯一性。
  3. 子域名(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

  1. 配置主要的 Bind 文件

编辑 Bind 的主配置文件/etc/bind/named.conf

  1. 创建区域文件

/etc/bind/zones/ 目录下创建一个新文件 yourdomain.com.db并添加以下内容:

 

步骤 3: 配置网络

  1. 修改网络设置

编辑网络配置文件以确保本地主机使用新的 DNS 服务器:

/etc/netplan/01-network-manager-all.yaml

  1. 应用配置

sudo netplan apply

步骤 4: 启动和测试 DNS 服务器

  1. 重启 Bind 服务

sudo systemctl restart bind9

  1. 测试 DNS 服务器

在本地主机上使用 nslookup 命令来测试 DNS 服务器是否正常工作:

 


9. 总结DNS服务器类型,解析答案,正反解析域,资源记录定义。

DNS 服务器类型:

  1. 递归DNS服务器

    • 负责完成客户端发起的完整 DNS 查询过程,从根域名服务器开始,直至获得目标域名的 IP 地址。
  2. 权威DNS服务器

    • 存储特定域名区域(zone)的 DNS 记录,提供其他 DNS 服务器查询该区域信息的答案。
  3. 转发DNS服务器

    • 在无法直接解析某个域名时,转发查询给其他 DNS 服务器来解析,并将结果返回给客户端。

解析答案:

DNS 解析答案指的是 DNS 查询的结果,其中包含了域名解析到的 IP 地址或其他相关资源记录。解析答案可以包含 A 记录(IPv4 地址)、AAAA 记录(IPv6 地址)、CNAME 记录(别名记录)、MX 记录(邮件交换记录)等。

正反解析域:

  1. 正向解析(Forward DNS)

    • 通过域名查找对应的 IP 地址。例如,将域名转换为 IP 地址,如将 www.example.com 解析为 192.0.2.1
  2. 反向解析(Reverse DNS)

    • 通过 IP 地址查找对应的域名。例如,将 IP 地址转换为域名,如将 192.0.2.1 解析为 www.example.com

资源记录定义:

DNS 中的资源记录(Resource Record, RR)包含了不同类型的信息,用于指定特定域名的各种数据。常见的资源记录类型包括:

  1. A 记录:将域名解析为 IPv4 地址。
  2. AAAA 记录:将域名解析为 IPv6 地址。
  3. CNAME 记录:指定域名的别名。
  4. MX 记录:指定邮件交换服务器。
  5. PTR 记录:反向解析,将 IP 地址解析为域名。
  6. NS 记录:指定域名服务器的域名。
  7. SOA 记录:区域起始授权记录,包含了有关区域的重要信息,如域名的管理者、刷新时间等。


10. 实现DNS主从同步


11. 实现DNS子域授权


12. 基于acl实现智能DNS


13. 总结防火墙分类

防火墙分类:

  1. 软件防火墙(Software Firewall)

    • 运行在计算机上的软件程序,用于监控和过滤该计算机的网络流量。
    • 通常用于单个设备,如个人电脑、服务器等。
    • 能够根据预定义的规则设置来过滤流入和流出的数据包。
  2. 硬件防火墙(Hardware Firewall)

    • 基于硬件设备的防火墙,通常是一个独立的网络设备或路由器。
    • 适用于保护整个网络,可连接到网络中央,过滤进出网络的流量。
    • 具有更高的处理能力和性能,可以有效过滤大量流量。
  3. 网络层防火墙(Network Layer Firewall)

    • 基于网络层(OSI 模型中的第三层)工作,根据 IP 地址、端口号等信息过滤流量。
    • 可以实现对网络数据包的路由和转发决策,提供路由功能并进行访问控制。
  4. 应用层防火墙(Application Layer Firewall)

    • 在 OSI 模型中的应用层工作,可以检测和控制特定应用程序的数据流。
    • 能够检查应用层协议,如 HTTP、FTP、SMTP 等,并针对具体应用的通信进行过滤和监控。
  5. 代理防火墙(Proxy Firewall)

    • 作为客户端和服务器之间的中间层,代理特定类型的流量,监视所有进出流量。
    • 通常会对进出流量进行解析和重新组装,并对数据包进行检查和过滤。
  6. 云防火墙(Cloud Firewall)

    • 部署在云计算环境中的防火墙,用于保护云服务、虚拟网络和云资源。
    • 提供了在云环境中管理和保护网络流量的能力。


14. 总结iptable 5表5链, 基本使用,扩展模块。

iptables 的五个表:

  1. Filter 表(filter)

    • 默认表,用于过滤数据包,控制数据包是否允许通过。
  2. NAT 表(nat)

    • 用于修改网络数据包的源或目标地址,用于网络地址转换(NAT)和端口转发。
  3. Mangle 表(mangle)

    • 主要用于修改数据包的头部信息,例如标记数据包或更改 TOS 字段。
  4. Raw 表(raw)

    • 用于配置特定的数据包免受连接追踪(Connection Tracking)系统的影响。
  5. Security 表(security)

    • 用于 SELinux (Security-Enhanced Linux)防火墙规则。

每个表包含的预定义链:

  1. INPUT:处理到达本地计算机的数据包。
  2. OUTPUT:处理本地计算机产生的数据包。
  3. 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 规则:

  1. 合并规则

    • 避免重复规则,并合并具有相似条件的规则,以减少规则数量。
  2. 限制使用通配符

    • 尽可能具体地定义规则,避免使用通配符,以提高匹配效率。
  3. 使用连接状态

    • 使用 -m state-m conntrack 模块来根据连接状态过滤数据包,减少不必要的处理。
  4. 使用 IP 地址集合

    • 使用 ip_set 模块创建 IP 地址集合,可以更高效地管理和匹配 IP 地址。
  5. 优先处理常用规则

    • 将最常用的规则放在较前的位置,以减少匹配次数。

规则保存和恢复:

  1. 保存规则

    • 使用 iptables-save 命令将当前的 iptables 规则保存到文件中,以便后续恢复使用。

    iptables-save > /etc/iptables/rules.v4

  2. 恢复规则

    • 使用 iptables-restore 命令从保存的文件中恢复 iptables 规则。

    iptables-restore < /etc/iptables/rules.v4

  3. 持久化规则

    • 根据不同 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:

  1. 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

  1. 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非自然降水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值