25、Web服务器管理与安全防护指南

Web服务器管理与安全防护指南

1. 启用覆盖并执行URL重写

1.1 准备工作

此操作需要一个具备网络连接的CentOS系统,系统配置的IP地址为192.168.56.100,并按照之前的方法运行Apache。同时,需要具备管理员权限,可通过root账户登录或使用sudo命令。

1.2 操作步骤

  1. 用文本编辑器打开 /etc/httpd/conf/httpd.conf 文件:
vi /etc/httpd/conf/httpd.conf
  1. 找到定义文档根目录各种选项的 <Directory> 部分,将 AllowOverrides 的值从 None 更新为 All
<Directory "/var/www/html">
    ...
    AllowOverrides All
    ...
</Directory>
  1. 保存更改并关闭文件。
  2. 重启Apache以使配置更新生效:
systemctl restart httpd
  1. 验证 mod_rewrite 模块是否可用:
httpd -M | grep rewrite
  1. 在文档根目录下创建一个名为 .htaccess 的文件:
vi /var/www/html/.htaccess
  1. .htaccess 文件中添加 RewriteEngine on 以开启URL重写引擎:
RewriteEngine on
  1. 添加描述所需重定向的 Rewrite 规则。例如,以下规则将所有无文件扩展名的请求重定向到同名的PHP文件:
RewriteRule ^/?([A-Z]+)$ $1.php [NC,L]
  1. 保存并关闭文件。

1.3 工作原理

.htaccess 文件是位于网站目录结构中的补充配置文件。配置后,Apache在处理请求时会搜索 .htaccess 文件并应用其中的选项设置。虽然每次请求都搜索和加载配置值会对性能有轻微影响,但它增加了灵活性。例如,修改 .htaccess 文件的配置无需重启服务器即可生效。在共享托管环境中,精明的客户可以自行调整服务器行为,而无需询问服务器管理员或访问 /etc/httpd 中的主配置文件(可能包含敏感配置值)。甚至依赖特定服务器功能的Web应用程序也可能包含一个 .htaccess 文件,以便更轻松地部署。

Apache默认不允许使用 .htaccess 文件覆盖服务器配置。要启用此功能,需要在适当的上下文中更新 AllowOverrides 选项,然后重启服务器。 AllowOverrides 的值及其含义如下表所示:
| 值 | 含义 |
| — | — |
| None | 服务器忽略任何 .htaccess 文件 |
| AuthConfig | 允许覆盖授权选项(如 AuthUserFile AuthDBMUserFile 等) |
| FileInfo | 允许覆盖与请求相关的选项(如 ErrorDocument Redirect RewriteRule 等) |
| Indexes | 允许覆盖与索引相关的选项(如 DirectoryIndex IndexOptions 等) |
| Limit | 允许覆盖访问选项(如 Allow Deny Order ) |
| All | 允许覆盖所有选项组 |

由于 AllowOverrides 应用于目录级别,因此可以在不同目录中允许或拒绝不同的覆盖。例如,可以在整个站点禁用覆盖,但为 private 目录允许覆盖授权选项,以便指定特定的授权数据库:

<Directory "/var/www/html">
    AllowOverrides None
</Directory>
<Directory "/var/www/html/priv">
    AllowOverrides AuthConfig
</Directory>

mod_rewrite 模块会注入到服务器的请求处理流程中,并根据我们提供的规则集动态更改请求的URL。虽然该模块默认已安装,但仍需使用 RewriteEngine on 显式启用URL重写。此外,两个最重要的重写选项是 RewriteRule RewriteCond

RewriteRule 选项指定一个正则表达式,用于与URL进行比较。如果匹配,则进行给定的替换。可以在替换中使用位置变量(如 $1 )来引用捕获的模式匹配。在我们的示例中,规则匹配路径(如 /about /contactus )并将其重写为指向同名的PHP脚本( about.php contact.php ),从而对用户隐藏我们使用PHP的事实:

RewriteRule ^/?([A-Z]+)$ $1.php [NC,L]

我们还可以提供影响请求返回方式的标志。例如, NC 标志进行不区分大小写的模式匹配, L 标志停止引擎并返回URL,不再进行进一步的规则处理。常见的标志还有 R (强制重定向,通常会给出一个HTTP状态码,如 R=301 )和 QSA (将原始URL的查询字符串附加到新URL)。

RewriteCond 选项给出一个条件,在评估 RewriteRule 之前必须满足该条件。该条件是正则表达式匹配、变量和测试运算符的组合。可以使用特殊变量来引用URL的各个部分,如主机名( %{HTTP_HOST} )、请求的文件( %{REQUEST_FILENAME} )和查询字符串( %{QUERY_STRING} ),或环境/请求的详细信息,如cookie( %{HTTP_COOKIE} )和用户代理字符串( %{HTTP_USER_AGENT} )。 -d 运算符测试路径是否为目录, -f 运算符测试路径是否为文件, ! 否定匹配。 RewriteCond 也可以接受一些标志,如 NC 标志进行不区分大小写的比较, OR 标志将多个选项以或关系连接(多个选项默认以与关系处理)。

一个非常常见的同时使用 RewriteCond RewriteRule 的重写规则是,当请求不匹配现有文件或目录时,将用户定向到主 index.php 文件。这在将所有请求路由到中央控制点的Web应用程序中经常使用:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [L,QSA]

第一个 RewriteCond 选项检查请求是否针对现有文件,第二个检查是否针对现有目录。如果请求既不是针对文件也不是针对目录,则 RewriteRule 选项将请求映射到 index.php 。任何可能存在的查询字符串都会被包含在内,并标记为最后一个操作,因此不会再进行进一步的重写。

许多人开玩笑地将重写称为“黑魔法”。确实, mod_rewrite 非常强大,能够改变请求,但当你无法确定如何编写规则以实现预期效果时,可能会感到沮丧。在这种情况下,你可以启用日志记录,以了解引擎如何处理请求。要启用日志记录,使用 RewriteLog 选项指定一个日志文件,使用 RewriteLogLevel 选项指定详细程度。通常, RewriteLogLevel 的值为5就足够了。可以将它们添加到 .htaccess 文件中,确定规则正确后再删除:

RewriteLog /var/log/httpd/rewrite_log
RewriteLogLevel 5

2. 安装NGINX作为负载均衡器

2.1 准备工作

此操作需要一个具备网络连接的CentOS系统。假设你有其他配置了Apache的系统来提供网站服务,这些系统的IP地址为192.168.56.20和192.168.56.30。NGINX软件包由EPEL存储库托管;如果尚未注册该存储库,请参考相关方法进行注册。同时,需要具备管理员权限,可通过root账户登录或使用sudo命令。

2.2 操作步骤

  1. 从EPEL存储库安装 nginx 软件包:
yum install nginx
  1. 用文本编辑器打开NGINX服务器的配置文件:
vi /etc/nginx/nginx.conf
  1. http 块中添加一个新的 upstream 块,以标识集群中的服务器:
upstream cluster {
    server 192.168.56.20;
    server 192.168.56.30;
}
  1. 找到 location 块并添加一个 proxy_pass 选项,引用 upstream 块:
location / {
    proxy_pass http://cluster;
}
  1. 保存配置更改并关闭文件。
  2. 启动服务器并设置系统重启时自动启动:
systemctl start nginx.service
systemctl enable nginx.service
  1. 打开系统防火墙的端口80,允许HTTP请求通过:
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload

2.3 工作原理

和往常一样,我们首先安装了 nginx 软件包,该软件包可在EPEL存储库中找到。安装完成后,我们更新了其配置,标识了集群中的服务器并代理请求。首先,我们添加了一个 upstream 块:

upstream cluster {
    server 192.168.56.20;
    server 192.168.56.30;
}

cluster 只是我们为这组服务器指定的名称,以便可以按名称引用该组。如果要平衡多个集群,可以有多个 upstream 块。其中的每个 server 条目给出运行站点的系统的IP地址或主机名。

接下来,我们找到主 location 块并添加了一个 proxy_pass 参数。 proxy_pass 会将传入的请求转发到集群组中的一个系统,并返回响应以满足请求:

location / {
    proxy_pass http://cluster;
}

NGINX与托管Web服务器之间的通信通过HTTP进行,因为 proxy_pass 的值中指定了该协议。这是可行的,因为集群系统将在负载均衡器后面的受信任网络上运行。如果你的网站要通过HTTPS提供服务,则需要由NGINX处理TLS协商,因为它是客户端看到的公共服务器点;客户端不知道负载均衡器后面的任何内容。要配置NGINX处理HTTPS请求,在 server 块中更新 listen 选项以监听端口443,然后添加 ssl_certificate ssl_certificate_key 选项的条目,分别标识证书和密钥:

server {
    # listen 80 default_server;
    # listen [::]:80 default_server;
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ssl_certificate /etc/pki/tls/certs/www.example.pem;
    ssl_certificate_key /etc/pki/tls/private/www.example.key;
    ...
}

进行更改并保存配置文件后,打开防火墙的端口443并重启NGINX:

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
systemctl restart nginx.service

轮询是负载均衡的默认方法。这意味着第一个请求会被代理到集群中的第一台服务器,下一个请求到第二台服务器,依此类推。当NGINX到达列表末尾时,会从列表顶部重新开始,将下一个请求代理到第一台服务器。我们还可以使用其他策略,例如加权平衡。要进行加权平衡,为任何服务器分配一个权重,它将在每次迭代中处理该数量的请求。例如,以下配置中第一台服务器将处理五个请求,然后NGINX才会将请求代理到第二台服务器:

upstream cluster {
    server 192.168.56.20 weight=5;
    server 192.168.56.30;
}

使用负载均衡时,请记住任何一台Web服务器都不能保证接收用户发送的下一个请求。如果你正在平衡对使用会话的Web应用程序的访问,这可能会有问题。你可能需要考虑将会话数据存储在每个Web服务器都可以访问的中央系统上,例如使用Redis或Memcache等数据库。建议避免使用任何依赖会话持久性的平衡策略。

2.4 安全防护相关

除了上述Web服务器管理内容,还涉及系统安全防护的多个方面,包括:
- 发送消息到Syslog :可以设置一个中央日志服务器,记录系统的活动信息。
- 使用logrotate旋转日志文件 :确保日志文件不会无限增长,便于管理和维护。
- 使用Tripwire检测修改的文件 :通过检查重要系统文件是否被修改,检测系统入侵。
- 使用ClamAV对抗病毒 :保护系统免受病毒、特洛伊木马和其他恶意软件的侵害。
- 使用chkrootkit检查rootkit :查找系统中可能存在的rootkit。
- 使用Bacula进行网络备份 :保护系统数据免受日常威胁,如意外删除和硬件故障。

以下是这些安全防护措施的简单操作流程:
1. 发送消息到Syslog:配置Syslog服务器,将系统消息发送到指定的日志文件或远程服务器。
2. 旋转日志文件:使用 logrotate 工具,根据预设的规则定期旋转日志文件。
3. 检测修改的文件:安装和配置 Tripwire ,定期检查系统文件的完整性。
4. 对抗病毒:安装和配置 ClamAV ,定期扫描系统以检测病毒。
5. 检查rootkit:使用 chkrootkit 工具,扫描系统以查找rootkit。
6. 网络备份:安装和配置 Bacula ,设置定期备份任务,将系统数据备份到远程服务器。

通过这些措施,可以全面保护系统和数据的安全,减少各种威胁带来的风险。

3. 各项安全防护措施详解

3.1 发送消息到Syslog

Syslog 是一种用于记录系统消息的标准协议,通过设置中央日志服务器,可以集中管理系统的活动信息。

操作步骤
  1. 配置本地 Syslog 客户端 :编辑 /etc/rsyslog.conf 文件,添加或修改规则以指定消息的发送目标。例如,将所有消息发送到远程 Syslog 服务器:
*.* @remote_server_ip:514
  1. 重启 Syslog 服务 :使配置生效。
systemctl restart rsyslog
  1. 验证配置 :可以通过发送测试消息来验证配置是否成功。
logger "Test message for Syslog"

3.2 旋转日志文件

随着系统运行,日志文件会不断增大,使用 logrotate 工具可以定期旋转日志文件,避免文件过大。

操作步骤
  1. 编辑配置文件 logrotate 的配置文件通常位于 /etc/logrotate.conf ,可以在其中添加自定义规则。例如,为 /var/log/messages 文件设置每天旋转一次:
/var/log/messages {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 root root
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
  1. 手动测试 :可以使用 logrotate -f /etc/logrotate.conf 命令手动触发旋转,检查配置是否正确。
  2. 自动执行 logrotate 通常会被 cron 任务每天自动执行。

3.3 使用 Tripwire 检测修改的文件

Tripwire 是一个文件完整性检查工具,通过定期检查重要系统文件是否被修改,能够及时发现系统入侵。

操作步骤
  1. 安装 Tripwire :使用包管理器安装 Tripwire。
yum install tripwire
  1. 初始化数据库 :创建 Tripwire 的初始数据库。
tripwire --init
  1. 定期检查 :设置定期任务,使用 tripwire --check 命令检查文件完整性。如果发现文件被修改,会生成报告。

3.4 使用 ClamAV 对抗病毒

ClamAV 是一个开源的防病毒引擎,可以保护系统免受病毒、特洛伊木马和其他恶意软件的侵害。

操作步骤
  1. 安装 ClamAV :使用包管理器安装 ClamAV。
yum install clamav
  1. 更新病毒库 :安装完成后,需要更新病毒库。
freshclam
  1. 扫描系统 :使用 clamscan 命令扫描系统。例如,扫描 /home 目录:
clamscan -r /home

3.5 使用 chkrootkit 检查 rootkit

rootkit 是一种隐藏在系统中的恶意软件,使用 chkrootkit 工具可以查找系统中可能存在的 rootkit。

操作步骤
  1. 安装 chkrootkit :可以从官方网站下载并编译安装,或者使用包管理器安装。
yum install chkrootkit
  1. 扫描系统 :使用 chkrootkit 命令扫描系统。
chkrootkit

3.6 使用 Bacula 进行网络备份

Bacula 是一个开源的网络备份解决方案,可以保护系统数据免受日常威胁,如意外删除和硬件故障。

操作步骤
  1. 安装 Bacula :使用包管理器安装 Bacula 的服务器和客户端组件。
yum install bacula-server bacula-client
  1. 配置 Bacula :编辑 /etc/bacula 目录下的配置文件,设置备份任务、存储设备和客户端等信息。
  2. 启动服务 :启动 Bacula 服务器和客户端服务。
systemctl start bacula-fd bacula-sd bacula-dir
  1. 创建备份任务 :在 Bacula 控制台中创建备份任务,并设置定期执行。

4. 总结与流程梳理

4.1 整体流程总结

整个 Web 服务器管理与安全防护工作包含多个方面,从 URL 重写、负载均衡到各项安全防护措施,每个环节都至关重要。以下是一个简单的 mermaid 流程图,展示了整体的操作流程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(URL重写):::process
    B --> C(负载均衡):::process
    C --> D(安全防护):::process
    D --> E{选择防护措施}:::decision
    E --> |Syslog| F(发送消息到Syslog):::process
    E --> |logrotate| G(旋转日志文件):::process
    E --> |Tripwire| H(检测修改的文件):::process
    E --> |ClamAV| I(对抗病毒):::process
    E --> |chkrootkit| J(检查rootkit):::process
    E --> |Bacula| K(网络备份):::process
    F --> L([结束]):::startend
    G --> L
    H --> L
    I --> L
    J --> L
    K --> L

4.2 注意事项

  • 在进行 URL 重写时,要谨慎编写规则,避免出现循环重定向或性能问题。
  • 负载均衡时,要根据实际情况选择合适的策略,如加权平衡等。
  • 安全防护措施要定期执行和更新,确保系统的安全性。

通过遵循上述步骤和注意事项,可以有效地管理 Web 服务器,同时保障系统和数据的安全,为网站的稳定运行提供坚实的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值