第三届全国技能大赛网络安全(模块A)复现与练习(七)— 域内Web服务器的创建和证书申请流程

        本文是全国技能大赛网络安全赛项关于 APP 服务器的配置,基于 CentOS 9 系统,核心围绕网站域名的 Web 服务部署、CA 证书申请与认证、LDAP 权限控制及系统安全加固展开。该服务器作为域内 Web 服务节点,承接所有域名的访问请求,并通过https 加密、LDAP 身份认证及安全规则防护,保障服务稳定性与安全性。

  • 实现目标:实现https 加密访问、域用户 LDAP 认证授权、Web 安全防护(防目录穿越 / 文件包含)、DNS 解析。

一、前置准备与环境检查

1.1 基础环境要求

检查项

要求

操作系统版本

CentOS 9

域环境依赖

已加入示例网站域,DC 服务器(10.0.8.1)可访问

静态 IP 配置

已固定(示例:10.0.8.3)

管理员权限

拥有 root 账户或 sudo 权限

依赖工具预装

OpenSSL 已安装

CA 环境

中间 CA/DC CA 已部署,支持证书申请

复现平台

天枢一体化虚拟仿真靶场平台

1.2 工具与资源准备

  • 域管理员账户:SKILLS\Administrator及密码(用于证书申请与 LDAP 认证)
  • 证书相关:后续生成的密钥、证书请求需妥善保存
  • 配置文件模板:HTTPD 虚拟主机配置文件、ModSecurity 规则文件(将手动创建)
  • 测试账户:域内WEB组用户(如 ldap@skills.cn,用于 LDAP 认证测试)

二、证书申请与 CA 认证(向 DC 服务器申请)

2.1 生成证书密钥与请求文件

      实现目的:创建服务器端 RSA 密钥(用于https 加密)和证书请求文件(CSR),CSR 将提交至 DC 的 AD CS 服务申请签名认证。

  • 终端切换至 root 用户:
  • 生成 2048 位 RSA 密钥与 CSR 文件(-nodes表示不加密密钥,便于服务自动加载):

[root@localhost ~]# openssl req -new -newkey rsa:2048 -nodes -keyout www.skills.cn.key -out www.skills.cn.csr

  • 按提示填写证书主体信息(需与域环境一致):

Country Name (2 letter code) [XX]:CN                # 国家代码

State or Province Name []:Chongqing               # 省/州(与DC/CA一致)

Locality Name []:Chongqing                        # 城市(与DC/CA一致)

Organization Name []:DubheLjsec                   # 组织名称(与DC/CA一致)

Organizational Unit Name []:IT                    # 部门名称

Common Name []:(示例网站名)                   # 核心:必须与域名一致

Email Address []:                                 # 可选,留空

A challenge password []:dubhe                    # 验证密码(需牢记)

An optional company name []:dubhe                 # 可选,与组织名一致

  • 验证文件生成:

[root@localhost ~]# ls -l (示例网站名).*

# 显示(示例网站名).key(密钥)和(示例网站名).csr(请求文件)即为成功

2.2 提交 CSR 至 DC 服务器认证

        实现目的:通过 DC 的 AD CS Web 服务,将 CSR 文件提交给 CA 签名,获取合法的服务器证书。

  • 传输 CSR 文件:
    • 由于 APP 服务器为无图形化 Linux,所以不好访问dc服务器的认证页面,我们将csr文件发送到任意一个可以访问到dc服务器的地方然后操作。
  • 客户端浏览器访问 DC 的证书注册页面:

输入域管理员账户(SKILLS\Administrator)和密码登录。

  • 提交证书请求:
    • 点击「Request a certificate」→ 选择「advanced certificate request」
    • 打开拷贝的(示例网站名).csr文件,复制全部内容(含-----BEGIN CERTIFICATE REQUEST----------END CERTIFICATE REQUEST-----
    • 粘贴至「Base-64-encoded certificate request」输入框
    • 「Certificate Template」选择「Web Server」(之前在 DC 配置的模板)→ 点击「Submit」

选择webserver并将csr内容复制进入

        

2.3 转换证书格式并传输至 APP 服务器

        实现目的:将 DC 颁发的 DER 格式证书转换为 PEM 格式,并传输回 APP 服务器。

  • 转换证书格式(DER→PEM):

[root@localhost ~]# openssl x509 -inform der -in certnew.cer -out www.skills.cn.crt.pem

  • 验证转换后的证书:

[root@localhost ~]# openssl x509 -in www.skills.cn.crt.pem -noout -subject

# 输出包含“CN=(示例网站名)”即为正常

三、httpd 服务部署与配置

3.1 安装httpd  及依赖模块服务

        实现目的:安装 Apachehttpd 服务及所需模块(SSL 加密、LDAP 认证、安全防护),为 Web 服务提供基础环境。

  • 安装相关包:

[root@localhost ~]# dnf install httpd mod_ldap mod_ssl mod_security -y

  • 验证安装:

[root@localhost ~]#httpd -v

# 显示httpd 版本(如2.4.53)即为成功

3.2 部署证书与密钥

        实现目的:将证书和密钥统一存储至httpd 指定目录,便于管理并保障权限安全。

  • 创建证书存储目录,复制证书和密钥至该目录,并设置严格权限:

[root@localhosthttpd]# mkdir pki

[root@localhosthttpd]# cp ~/(示例网站名).

www.skills.cn.crt.pem  (示例网站名).csr      (示例网站名).key      

[root@localhosthttpd]# cp ~/(示例网站名).key pki/

[root@localhosthttpd]# cp ~/www.skills.cn.c

www.skills.cn.crt.pem (示例网站名).csr      

[root@localhosthttpd]# cp ~/(示例网站名).crt.pem pki/

[root@localhosthttpd]# pwd

/etc/httpd

[root@localhosthttpd]#

3.3 配置httpd 虚拟主机(https+LDAP 认证)

        实现目的:配置(示例网站名)的虚拟主机,实现 HTTP 自动跳转https、SSL 加密、LDAP 权限控制及安全防护。

  • 创建虚拟主机配置文件:

        在/etc/httpd/conf.d目录下添加一个服务的配置文件,内容如下:

        此处配置了无法直接访问目录和访问auth目录需要ldap权限

[root@localhost conf.d]# cat (示例网站名).conf

# ServerName www.skills.cn

<VirtualHost *:80>

    ServerName www.skills.cn

    Redirect permanent / https://(示例网站名)/

</VirtualHost>

<VirtualHost *:443>

    ServerName (示例网站名)

    SSLEngine on

    SSLCertificateFile /etc/httpd/pki/(示例网站名).cert.pem

    SSLCertificateKeyFile /etc/httpd/pki/(示例网站名).key

    # 添加SSL协议和密码套件配置

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

    SSLCipherSuite HIGH:!aNULL:!MD5

    SSLHonorCipherOrder off

    DocumentRoot /var/www/html

    # 禁止目录浏览

    <Directory "/var/www/html">

        Options -Indexes

        AllowOverride None

        Require all granted

    </Directory>

    # LDAP Basic Auth - 使用Directory替代Location

    <Directory "/var/www/html/auth">

        AuthType Basic

        AuthName "Restricted Content - LDAP Authentication Required"

        # 生产环境建议降低日志级别

        LogLevel warn

        AuthBasicProvider ldap

        # 更精确的LDAP查询

        AuthLDAPURL "ldap://dc.skills.cn:389/DC=skills,DC=cn?sAMAccountName?sub?(objectClass=user)"

        AuthLDAPBindDN "CN=Administrator,CN=Users,DC=skills,DC=cn"

        AuthLDAPBindPassword "Skills@123"

        # 防止LDAP引用错误

        LDAPReferrals off

        

        # 添加LDAP超时设置

        #AuthLDAPTimeout 10

        

        # 使用authnz_ldap模块进行组验证

        Require ldap-group CN=WEB,CN=Users,DC=skills,DC=cn

        

        # 备用:如果组验证有问题,可以使用属性匹配

        # Require ldap-attribute memberOf=CN=WEB,CN=Users,DC=skills,DC=cn

    </Directory>

    

    # 隐藏 Apache 版本信息

    ServerSignature Off

    # 安全头设置

    Header always set X-Content-Type-Options nosniff

    Header always set X-Frame-Options DENY

    Header always set X-XSS-Protection "1; mode=block"

    # mod_security

    IncludeOptional /etc/httpd/modsecurity.d/*.conf

</VirtualHost>

[root@localhost conf.d]#

3.4 配置 ModSecurity 安全规则

实现目的:

  • 拒绝请求参数中包含目录穿越符号(../" 或 "..\\)的请求,返回 403 状态码。
  • 拒绝请求参数中包含与文件包含相关的 PHP 函数名("include"、"require"、

在/etc/httpd/modsecurity.d文件夹下创建一个custom_rules.conf文件

[root@localhost modsecurity.d]# cat custom_rules.conf

SecRuleEngine On

SecRule ARGS|REQUEST_URI|REQUEST_BODY|REQUEST_HEADERS "@rx \.\.(/|\\x5c)" \

    "id:1001,phase:2,deny,status:403,msg:'Directory Traversal Attack Detected',logdata:'%{MATCHED_VAR}'"

SecRule ARGS|REQUEST_URI|REQUEST_BODY|REQUEST_HEADERS "@rx (?i:(include|require)(?:_once)?)" \

    "id:1002,phase:2,deny,status:403,msg:'Potential PHP File Inclusion Attack Detected',logdata:'%{MATCHED_VAR}'"

3.5 启动httpd 服务并设置自启

  • 启动httpd 服务:

[root@localhost conf.d]# systemctl start httpd

  • 设置开机自启(避免服务器重启后服务中断):

[root@localhost conf.d]# systemctl status httpd

  • 验证服务状态:

[root@localhost conf.d]## systemctl status httpd

# 显示“Active: active (running)”即为正常

四、DNS 解析配置

4.1 pfSense DNS 域覆盖配置

        操作目的:让域内客户端访问skills.cn域名时,自动指向 DC 服务器(10.0.8.1)解析,确保(示例网站名)能正确解析到 APP 服务器 IP。

  • 登录 pfSense 管理界面:
    • 访问地址:https://10.0.8.254(pfSense 的 IP)

  • 配置项:
      • Domain:(示例网站名)
      • IP Address:10.0.8.1

4.2 DC 服务器 DNS 配置

实现目的:dc域控服务器内添加对(示例网站名)的解析。

登录 DC 服务器(Windows Server 2022):

    • 打开「Server Manager → Tools → DNS」。

添加 A 记录:

    • 展开DC → 【Forward Lookup Zones】 → 【(示例网站名)】
    • 右键【(示例网站名)】→ 【New Host (A or AAAA)...】

五、系统安全加固配置

5.1 防火墙端口放行

        操作目的:开放 HTTP(80 端口)和https(443 端口),允许外部客户端访问 Web 服务,同时拒绝其他不必要端口。

  • 开放 HTTP/HTTPS 服务:

[root@localhost conf.d]# firewall-cmd --permanent --add-service=http

[root@localhost conf.d]# firewall-cmd --permanent --add-service=https

  • 重新加载防火墙规则(即时生效):

[root@localhost ~]# firewall-cmd --reload

  • 验证端口开放:

[root@localhost ~]# firewall-cmd --list-services

# 输出包含“http https ssh”即为正常(ssh用于远程管理)

5.2 启用 selinux(强制模式)

实现目的:selinux 是 Linux 内核安全机制,强制模式下可防止未授权进程访问敏感文件,提升系统安全性。

  • 修改 selinux  配置文件:

[root@localhost ~]# vi /etc/selinux/config

  • 修改selinux 参数:

selinux =enforcing  # 改为强制模式

5.3 密码安全规则配置

        实现目的:强化本地用户密码策略,防止弱密码攻击,要求密码复杂度、有效期及超时锁定。

  • 修改密码有效期配置(/etc/login.defs):

[root@localhost ~]# vi /etc/login.defs

  • 修改以下参数:

PASS_MAX_DAYS   10  # 密码最长使用10天

PASS_WARN_AGE   0   # 密码过期后立即锁定(无警告期)

  • 配置密码复杂度(/etc/security/pwquality.conf):

[root@localhost ~]# vi /etc/security/pwquality.conf

  • 添加 / 修改以下配置:

minlen = 8          # 密码最小长度8位

dcredit = -1        # 至少包含1个数字

ucredit = -1        # 至少包含1个大写字母

lcredit = -1        # 至少包含1个小写字母

ocredit = -1        # 至少包含1个特殊字符(如!@#$%)

  • 验证密码规则:

[root@localhost ~]# passwd testuser  # 创建测试用户

# 若输入弱密码(如12345678),会提示“密码不符合复杂度要求”即为正常

六、全流程验证

6.1https 访问验证

客户端浏览器访问:

  • 浏览器地址栏显示 “小锁” 图标(无证书警告)→ 证书验证成功访
  • https://示例网站/auth→ 弹出登录框→ 输入 WEB 组用户(如 ldap@skills.cn)和密码→ 能正常访问→ LDAP 认证成功

6.2 安全规则验证

测试目录穿越攻击:

  • 访问https://示例网站/../etc/passwd→ 返回 403 Forbidden→ 规则生效

测试文件包含攻击:

  • 访问https://示例网站/?file=include(/etc/passwd)→ 返回 403 Forbidden→ 规则生效

6.3 DNS 解析验证

客户端执行:ping  示例网站→ 解析到 10.0.1.1→ 解析成功

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值