在 Linux 上保护 Apache Web 服务器的技巧

举报
Tiamo_T 发表于 2022/04/08 18:58:14 2022/04/08
【摘要】 如果您是系统管理员,则应遵循本文中提到的 10 个提示来保护您的 Apache Web 服务器。

如果您是系统管理员,则应遵循本文中提到的 10 个提示来保护您的 Apache Web 服务器。

1.禁用不必要的模块

如果您打算从源代码安装 apache,则应禁用以下模块。如果您执行 ./configure –help,您将看到所有可以禁用/启用的可用模块。

  • userdir – 将请求映射到用户特定的目录。即 URL 中的 ~username 将被翻译到服务器中的目录
  • autoindex – 不存在 index.html 文件时显示目录列表
  • status – 显示服务器统计信息
  • env – 清除/设置 ENV 变量
  • setenvif – 将 ENV 变量放在标题上
  • cgi – CGI 脚本
  • actions - 请求触发的动作
  • negotiation——内容协商
  • alias——将请求映射到不同的文件系统部分
  • include——服务器端包括
  • filter – 智能过滤请求
  • version – 使用 IfVersion 处理配置文件中的版本信息
  • as-is - 原样文件类型

执行 ./configure 时禁用所有上述模块,如下所示

./configure \
--enable-ssl \
--enable-so \
--disable-userdir \
--disable-autoindex \
--disable-status \
--disable-env \
--disable-setenvif \
--disable-cgi \
--disable-actions \
--disable-negotiation \
--disable-alias \
--disable-include \
--disable-filter \
--disable-version \
--disable-asis

如果启用 ssl 并禁用 mod_setenv,您将收到以下错误。

  • 错误:/usr/local/apache2/conf/extra/httpd-ssl.conf 第 223 行的语法错误:无效命令“BrowserMatch”,可能拼写错误或由服务器配置中未包含的模块定义
  • 解决方案:如果您使用 ssl,请不要禁用 setenvif。或者,如果禁用 mod_setenvif,请在 httpd-ssl.conf 中注释掉 BrowserMatch。

安装后,当您执行httpd -l时,您将看到所有已安装的模块。

# /usr/local/apache2/bin/httpd -l
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_log_config.c
  mod_ssl.c
  prefork.c
  http_core.c
  mod_mime.c
  mod_dir.c
  mod_so.c

在此示例中,我们安装了以下 apache 模块。

  • core.c – Apache 核心模块
  • mod_auth* – 用于各种认证模块
  • mod_log_config.c – 记录客户端请求。提供额外的日志灵活性。
  • mod_ssl.c – 用于 SSL
  • prefork.c – 用于 MPM(多处理模块)模块
  • httpd_core.c – Apache 核心模块
  • mod_mime.c – 用于设置文档 MIME 类型
  • mod_dir.c – 用于目录路径上的斜杠重定向。如果您指定 url/test/,它会转到 url/test/index.html
  • mod_so.c - 用于在启动或重启期间加载模块

2. 以单独的用户和组运行 Apache

默认情况下,apache 可能会作为无人值守或守护进程运行。最好在自己的非特权帐户中运行 apache。例如:阿帕奇。

创建 apache 组和用户。

groupadd apache
useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache

修改httpd.conf,适当设置User和Group。

# vi httpd.conf
User apache
Group apache

在此之后,如果你重新启动 apache,然后执行 ps -ef,你会看到 apache 以“apache”的身份运行(除了第一个 httpd 进程,它总是以 root 身份运行)。

# ps -ef | grep -i http | awk '{print $1}'
root
apache
apache
apache
apache
apache

3.限制对根目录的访问(使用允许和拒绝)

通过在httpd.conf中设置以下内容来保护根目录

<Directory />
    Options None
    Order deny,allow
    Deny from all
</Directory>

在上面:

  • Options None- 将此设置为无,这将不会启用任何可选的额外功能。
  • Order deny,allow – 这是处理“拒绝”和“允许”指令的顺序。这首先处理“拒绝”,然后处理“允许”。
  • Deny from all – 这会拒绝所有人对根目录的请求。根目录没有 Allow 指令。所以,没有人可以访问它。

4.为conf和bin目录设置适当的权限

bin 和 conf 目录只能由授权用户查看。最好创建一个组,并将所有允许查看/修改 apache 配置文件的用户添加到该组。

让我们称这个组为:apacheadmin

创建组。

groupadd apacheadmin

允许访问此组的 bin 目录。

chown -R root:apacheadmin /usr/local/apache2/bin
chmod -R 770 /usr/local/apache2/bin

允许访问该组的 conf 目录。

chown -R root:apacheadmin /usr/local/apache2/conf
chmod -R 770 /usr/local/apache2/conf

向该组添加适当的成员。在这个例子中,ramesh 和 john 都是 apacheadmin 的一部分

# vi /etc/group
apacheadmin:x:1121:ramesh,john

5.禁用目录浏览

如果您不这样做,用户将能够看到您的根目录(或任何子目录)下的所有文件(和目录)。

例如,如果他们访问 http://{your-ip}/images/ 并且如果您在图像下没有 index.html,他们将看到列出的所有图像文件(和子目录)浏览器(就像 ls -1 输出)。从这里,他们可以单击单个图像文件进行查看,或单击子目录查看其内容。

要禁用目录浏览,您可以将Options 指令的值设置为“None”或“-Indexes”。A - 在选项名称前面会将其从为该目录强制执行的当前选项列表中删除。

索引将在浏览器的目录中显示可用文件和子目录的列表(仅当该文件夹中不存在 index.html 时)。因此,不应允许索引。

<Directory />
  Options None
  Order allow,deny
  Allow from all
</Directory>

(or)

<Directory />
  Options -Indexes
  Order allow,deny
  Allow from all
</Directory>

6. 不允许.htaccess

在 htdocs (或任何外部)下的特定子目录中使用 .htaccess 文件,用户可以覆盖默认的 apache 指令。在某些情况下,这是不好的,应该避免。您应该禁用此功能。

您不应允许用户使用 .htaccess 文件并覆盖 apache 指令。为此,请在根目录中设置“ AllowOverride None ”。

<Directory />
  Options None
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

7.禁用其他选项

以下是 Options 指令的可用值:

  • Options All- 启用所有选项(多视图除外)。如果您不指定 Options 指令,则这是默认值。
  • Options ExecCGI – 执行 CGI 脚本(使用 mod_cgi)
  • Options FollowSymLinks – 如果您在此目录中有符号链接,它将被跟踪。
  • Options Includes- 允许服务器端包括(使用 mod_include)
  • Options IncludesNOEXEC – 允许服务器端包含但不能执行命令或 cgi。
  • Options Indexes- 禁用目录列表
  • Options MultiViews - 允许内容协商的多视图(使用 mod_negotiation)
  • Options SymLinksIfOwnerMatch – 类似于 FollowSymLinks。但是,只有当链接和链接到的原始目录之间的所有者相同时,才会出现这种情况。

永远不要指定“全部选项”。始终指定一个(或多个)上述选项。您可以在一行中组合多个选项,如下所示。

Options Includes FollowSymLinks

当您有嵌套的目录并希望覆盖父目录指令中的选项时,选项值前面的 + 和 – 很有帮助。

在此示例中,对于 /site 目录,它同时具有包含和索引:

<Directory /site>
  Options Includes Indexes
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

对于 /site/en 目录,如果您只需要来自 /site 的索引(而不是包含),并且如果您只想跟随符号链接到此目录,请执行以下操作。

<Directory /site/en>
  Options -Includes +FollowSymLink
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>
  • /site 将具有包含和索引
  • /site/en 将有索引和 FollowSymLink

8.删除不需要的DSO模块

如果您已将任何动态共享对象模块加载到 apache,它们将出现在 httpd.conf 中的“LoadModule”指令下。

请注意,静态编译的 apache 模块不会被列为“LoadModule”指令。

在 httpd.conf 中注释掉任何不需要的“LoadModules”

grep LoadModule /usr/local/apache2/conf/httpd.conf

9. 限制对特定网络(或 IP 地址)的访问

如果您希望您的站点只能由特定的 IP 地址或网络查看,请执行以下操作:

要允许特定网络访问您的站点,请在 Allow 指令中提供网络地址。

<Directory /site>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 10.10.0.0/24
</Directory>

要允许特定 ip-address 访问您的站点,请在 Allow 指令中提供 ip-address。

<Directory /site>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 10.10.1.21
</Directory>

10.不显示或发送Apache版本(设置ServerTokens)

默认情况下,服务器 HTTP 响应标头将包含 apache 和 php 版本。类似于以下内容。这是有害的,因为我们不希望攻击者知道具体的版本号。

Server: Apache/2.2.17 (Unix) PHP/5.3.5

为避免这种情况,请在 httpd.conf 中将 ServerTokens 设置为 Prod。这将显示“Server: Apache”,没有任何版本信息。

# vi httpd.conf
ServerTokens Prod

以下是可能的 ServerTokens 值:

  • ServerTokens Prod displays “Server: Apache”
  • ServerTokens Major displays “Server: Apache/2”
  • ServerTokens Minor displays “Server: Apache/2.2”
  • ServerTokens Min displays “Server: Apache/2.2.17”
  • ServerTokens OS displays “Server: Apache/2.2.17 (Unix)”
  • ServerTokens Full displays “Server: Apache/2.2.17 (Unix) PHP/5.3.5” (如果您未指定任何 ServerTokens 值,则为默认值)

除了以上 10 条提示之外,请确保保护您的 Linux 操作系统。如果您的操作系统不安全,那么保护您的 apache 毫无意义。此外,始终保持您的 apache 版本是最新的。最新版本的 apache 包含所有已知安全问题的修复程序。确保经常查看您的 apache 日志文件。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。