实验环境

1
2
3
4
5
root@NF:~# apache2 -version
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2020-03-13T12:26:16
root@NF:~# cat /etc/issue
Ubuntu 18.04.3 LTS \n \l

关注官网更新公告

https://httpd.apache.org/security_report.html

以最小权限运行Apache进程

注意:本环境下的Apache默认就是以www-data用户运行,默认符合要求。

  1. 根据需要,为 Apache 服务创建用户及用户组。如果没有设置用户和组,则新建用户,并在 Apache 配置文件中进行指定。

    1. 创建 Apache 用户组。

      groupadd apache

    2. 创建 Apache 用户并加入 Apache 用户组。

      useradd apache –g apache

    3. 将下面两行设置参数加入 Apache 配置文件 apache2.conf 中:

      1
      2
      User apache
      Group apache
  2. 检查 apache2.conf 配置文件中是否允许使用非专用账户(如 root 用户)运行 Apache 服务。

    默认设置一般即符合要求。Linux 系统中默认使用 apache 或者 nobody 用户,Unix 系统默认使用 daemon 用户。

1585551312747

加固作用:

  • 以最小权限运行中间件服务,即使网站被getshell,也能减少影响程度。

扩展阅读:

查看和修改运行 Apache 的用户与用户组 - 荒原之梦

linux 下修改 apache 启动的所属用户和组 - 天涯雪

apache2为什么有多个进程? - muru

禁用目录浏览功能

编辑配置文件apache2.conf,指定网站根目录添加Options FollowSymLinks参数。

1
2
3
4
5
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>

若要启用目录浏览功能,则是Options Indexes FollowSymLinks,同样禁止目录浏览功能除了删除Indexes也可以在前面加个减号,即Options -Indexes FollowSymLinks来表示。

1588057988595

加固作用:

  • 不展示目录结构信息,防止敏感文件泄露。

扩展阅读:

Apache Options Indexes FollowSymLinks详解 - callie

AllowOverride参数详解 - upupw

Apache的Order Allow,Deny 详解 - 与时俱进

Apache2.4使用require指令进行访问控制 - leoyu

启用日志审计

apache2默认启用了错误日志和访问日志的记录,可看配置文件apache.conf有无以下内容。

1
2
3
4
5
6
7
8
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

apache默认日志路径:/var/log/apache2

一条标准的访问日志内容如下:

1
192.168.56.1 - - [30/Mar/2020:16:34:56 +0800] "GET /test/index.php HTTP/1.1" 200 277 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
格式 含义
%h 远端主机(访问网站的客户端地址)
%l 远端登录名,用了短横代替
%u 远端用户名,用了短横代替
%t 时间,包括访问的日期、时间、时区
%r 请求起始行,包括请求方法、访问的文件路径
%>s HTTP状态码
%O 响应包数据大小,单位是字节
%{Referer}i\ 来源
%{User-Agent}i\ 远端主机浏览器的UA信息

加固作用:

  • 记录访问信息,提供溯源证据。
  • 帮助开发者排查问题。

扩展阅读:

Apache日志详解 - long9617

限制特定目录文件执行权限

编辑配置文件apache2.conf,根据业务需求添加下面内容。

1
2
3
4
5
6
<Directory "/var/www/html/upload">
<FilesMatch "\.(php|php3)$">
Order allow,deny
Deny from all
</FilesMatch>
</Directory>

1588058583430

加固作用:

  • 通过禁止访问来阻止一些非法文件的执行(恶意攻击者通过任意文件上传漏洞,往往会上传一些可执行文件,如木马文件,从而拿到webshell)。

扩展阅读:

apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法(转)

自定义错误页面

编辑配置文件apache2.conf,添加下面内容

1
2
3
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 500 /custom500.html

其中customxxx.html为要设置的错误页面,需提前写好放网站根目录下。

1
2
3
4
root@NF:~# ls -lah /var/www/html/ | grep html
-rw-r--r-- 1 ubuntu ubuntu 688 1月 19 15:00 403.html
-rw-r--r-- 1 ubuntu ubuntu 685 1月 19 14:57 404.html
-rw-r--r-- 1 ubuntu ubuntu 665 1月 19 15:01 500.html

1588059807819

加固作用:

  • 防止默认报错页面泄露一些敏感信息(开发框架、数据库语句、物理路径、内网IP等)。

扩展阅读:

APACHE_自定义404错误页面 - epsilon1

隐藏Apache版本号

编辑配置文件apache2.conf,添加下面内容

1
2
ServerSignature Off
ServerTokens Prod

1588060732445

加固作用:

  • 防止中间件版本信息泄露。

限制和允许特定IP访问

编辑配置文件apache2.conf,添加下面内容。

若使用IP白名单,则根据业务需求添加下面内容

1
2
3
4
5
6
7
8
<Directory "/var/www/html/test">
Options All
AllowOverride None
Order Deny,Allow
Deny From all
Allow From 192.168.1.0/24 192.168.3.0/24
Allow From 127.0.0.1
</Directory>

若使用IP黑名单,则根据业务需求添加下面内容

1
2
3
4
5
6
7
<Directory "/var/www/html/test">
Options All
AllowOverride None
Order Deny,Allow
Deny From 192.168.1.0/24 192.168.3.0/24
Deny From 192.168.56.1
</Directory>

1588063242132

加固作用:

  • 使访问受控。

扩展阅读:

Apache中限制和允许特定IP访问 - we will rock you

扩展阅读

http://httpd.apache.org/docs/current/zh-cn/

https://blog.51cto.com/ww123/1639424

https://www.cnblogs.com/xiaozi/p/10117715.html

https://www.jianshu.com/p/a8bab3f50c7b

https://bbs.ichunqiu.com/thread-35736-1-1.html

http://www.defvul.com/apache/

https://www.alibabacloud.com/help/zh/faq-detail/52981.htm

https://blog.csdn.net/my98800/article/details/51740389

小彩蛋

各位大佬有空能不能帮我投个票,有账号的直接投(还有两天)

没有注册过的,用手机号注册一个账号(先领个VIP再投)
账号注册地址
https://user.ichunqiu.com/?u=RAFnx93Zfg0Ai7uBqVi3suaXELRRE1xp&type=1

投票地址
https://www.ichunqiu.com/20201111

一个账号每天 可以投3票(11号晚上截止,还有两天)
新注册账号可以领24小时VIP(可以投两次6票的)
感谢

1
2