转载来源 :https://help.aliyun.com/knowledge_detail/52981.html

一、账号设置

以专门的用户帐号和用户组运行 Apache 服务。

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

创建 Apache 用户组。

groupadd apache

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

useradd apache –g apache

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

User apacheGroup apache

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

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

二、授权设置

严格控制 Apache 主目录的访问权限,非超级用户不能修改该目录中的内容。

1、Apache 的主目录对应于 Apache Server配置文件 httpd.conf 中的 Server Root 控制项,应设置为:

 Server Root /usr/local/apache
  • 判定条件: 非超级用户不能修改该目录中的内容。
  • 检测操作: 尝试进行修改,看是否能修改该目录中的内容。

该目录一般设置为 /etc/httpd 目录,默认情况下属主为 root 用户,其它用户不能修改该目录中的文件。默认设置一般即符合要求。

2、严格设置配置文件和日志文件的权限,防止未授权访问。

执行chmod 600 /etc/httpd/conf/httpd.conf命令设置配置文件为属主可读写,其他用户无读写权限。
执行chmod 644 /var/log/httpd/*.log命令设置日志文件为属主可读写,其他用户拥有只读权限。

注意:

  • /etc/httpd/conf/httpd.conf 配置文件的默认权限是644,可根据需要修改权限为600。
  • /var/log/httpd/*.log 日志文件的默认权限为644,默认设置即符合要求。

三、日志设置

Apache 设备应配置日志功能,对运行错误、用户访问等事件进行记录,记录内容包括时间,用户使用的 IP 地址等内容。

修改 httpd.conf 配置文件,设置日志记录文件、记录内容、记录格式。

  • 错误日志:
  LogLevel notice #日志的级别ErrorLog /…/logs/error_log #日志的保存位置(错误日志)
  • 访问日志:
  LogFormat %h %l %u %t \”%r\” %>s %b “%{Accept}i\”%{Referer}i\” \”%{User-Agent}i\””combinedCustomLog /…/logs/access_log combined (访问日志)

注意:

  • ErrorLog指令设置错误日志文件名和位置。错误日志是最重要的日志文件。Apache httpd
    程序将在这个文件中存放诊断信息和处理请求中出现的错误。若要将错误日志传送到 Syslog,则执行ErrorLog syslog命令。
  • CustomLog指令指定了保存日志文件的具体位置以及日志的格式。访问日志中会记录服务器所处理的所有请求。
  • LogFormat命令用于设置日志格式,建议设置为 combined 格式。
  • LogLevel命令用于调整记录在错误日志中的信息的详细程度,建议设置为 notice。日志的级别,默认是 warn 级别,notice
    级别比较详细,但在实际中由于日志会占用大量硬盘空间。

四、禁止访问外部文件

禁止 Apache 访问 Web 目录之外的任何文件。

1、修改 httpd.conf 配置文件。

 Order Deny,AllowDeny from all

2、设置可访问的目录。

 Order Allow,DenyAllow from /web

说明: 其中 /web 为网站根目录。

3、默认配置如下,可根据您的业务需要进行设置。

 Options FollowSymLinksAllowOverride None

五、禁止目录列出

目录列出会导致明显信息泄露或下载,建议禁止 Apache 列表显示文件。在 /etc/httpd/httpd.conf 配置文件中删除 Options 的 Indexes 设置即可。

1、修改 httpd.conf 配置文件:

 #Options Indexes FollowSymLinks #删掉IndexesOptions FollowSymLinksAllowOverride NoneOrder allow,denyAllow from all

将Options Indexes FollowSymLinks中的Indexes去掉,就可以禁止 Apache 显示该目录结构。Indexes的作用就是当该目录下没有 index.html 文件时,自动显示目录结构。

重新启动 Apache 服务。

六、错误页面重定向

Apache 错误页面重定向功能可以防止敏感信息泄露。

1、修改 httpd.conf 配置文件:

ErrorDocument 400 /custom400.htmlErrorDocument 401 /custom401.htmlErrorDocument 403 /custom403.htmlErrorDocument 404 /custom404.htmlErrorDocument 405 /custom405.htmlErrorDocument 500 /custom500.html

注意: Customxxx.html 为要设置的错误页面。

2、重新启动 Apache 服务。

注意: 此项配置需要应用系统设有错误页面,或者不在 httpd 中设置,而完全由业务逻辑实现。

七、拒绝服务防范

根据业务需要,合理设置 session 时间,防止拒绝服务攻击。

1、修改 httpd.conf 配置文件:

 Timeout 10 #客户端与服务器端建立连接前的时间间隔KeepAlive OnKeepAliveTimeout 15 #限制每个 session 的保持时间是 15 秒 注:此处为一建议值,具体的设定需要根据现实情况。

2、重新启动 Apache 服务。

注意: 默认值为Timeout 120,KeepAlive Off,KeepAliveTimeout 15,该项设置涉及性能调整。

八、隐藏 Apache 的版本号

隐藏 Apache 的版本号及其它敏感信息。

修改 httpd.conf 配置文件:

ServerSignature Off ServerTokens Prod

九、关闭 TRACE功能

关闭 TRACE 功能,防止 TRACE 方法被访问者恶意利用。

在 /etc/httpd/conf/httpd.conf 配置文件中添加以下设置参数:

TraceEnable Off

注意: 该参数适用于 Apache 2.0 以上版本。

十、禁用 CGI

如果服务器上不需要运行 CGI 程序,建议禁用 CGI。

如果没有CGI程序,可以修改 /etc/httpd/conf/httpd.conf 配置文件,把 cgi-bin 目录的配置和模块都进行注释。

#LoadModule cgi_module modules/mod_cgi.so
#ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
#
#AllowOverride None
# Options None
#Order allow,deny
#Allow from all
#

十一、绑定监听地址

服务器有多个 IP 地址时,只监听提供服务的 IP 地址。

执行以下命令查看是否绑定 IP 地址。

 cat /etc/httpd/conf/httpd.conf|grep Listen

修改 /etc/httpd/conf/httpd.conf 配置文件。

 Listen x.x.x.x:80

监听功能默认监听所有地址,如果服务器只有一个 IP 地址可不修改该项设置,如果有多个 IP 可根据需要进行设置。

十二、删除缺省安装的无用文件
删除缺省安装的无用文件。

  • 删除缺省 HTML 文件:
  # rm -rf /usr/local/apache2/htdocs/*
  • 删除缺省的 CGI 脚本:
  # rm –rf /usr/local/apache2/cgi-bin/*
  • 删除 Apache 说明文件:
  # rm –rf /usr/local/apache2/manual
  • 删除源代码文件:
# rm -rf /path/to/httpd-2.2.4*
  • 删除 CGI。
    可根据实际情况删除,一般情况下 /var/www/html /var/www/cgi-bin 默认就是空的。

注意: 根据安装步骤不同和版本不同,某些目录或文件可能不存在或位置不同。

十三、禁用非法 HTTP 方法

禁用 PUT、DELETE 等危险的 HTTP 方法。

修改 httpd.conf 配置文件,只允许 get、post 方法。

<Location />
<LimitExcept GET POST CONNECT OPTIONS> Order Allow,Deny Deny from all
</LimitExcept>
</Location>

您可根据需要进行设置,如果需要用到 PUT 或 Delete 等 HTTP 方法的话,在 /etc/httpd/conf/httpd.conf 配置文件中相应添加即可。

apache日志分析

1.查看apache的进程数

ps -aux | grep httpd | wc -l

2.分析日志查看当天的ip连接数

cat default-access_log | grep “10/Dec/2010″ | awk ‘{print $2}’ | sort | uniq -c | sort -nr

3.查看指定的ip在当天究竟访问了什么url

cat default-access_log | grep “10/Dec/2010″ | grep “218.19.140.242″ | awk ‘{print $7}’ | sort | uniq -c | sort -nr

4.查看当天访问排行前10的url

cat default-access_log | grep “10/Dec/2010″ | awk ‘{print $7}’ | sort | uniq -c | sort -nr | head -n 10

5.看到指定的ip究竟干了什么

cat default-access_log | grep 218.19.140.242 | awk ‘{print $1″\t”$8}’ | sort | uniq -c | sort -nr | less

6.查看访问次数最多的几个分钟(找到热点)

awk ‘{print $4}’ default-access_log |cut -c 14-18|sort|uniq -c|sort -nr|head

十四、Apache解析漏洞(换行解析+多后缀解析)复现

Apache两个解析漏洞环境在httpd目录下:

一个是换行解析漏洞(CVE-2017-15715),另一个是多后缀解析。(ssi的rce本次不复现)

复现一:换行解析

一、原理

Apache可以通过mod_php来运行PHP网页。

其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,解析到下面例子时候:

  1.php\x0A

将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。(%0a即编码中的换行符,于是这个解析漏洞叫换行解析)

二、复现过程

首先进入到换行解析漏洞环境目录下开启环境:

service docker startdocker-compose builddocker-compose up -d


接着访问虚拟机ip:8080即可:

先上传一个简单的小马看看:

被拦了,开始尝试下换行符后缀:

在Hex编码下查看,该处插入(insert byte)0a作为换行符

放包,访问 ip/2.php%0A:

phpinfo():

退出docker环境:
docker-compose down

复现二:多后缀解析

一、原理

Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:

AddType text/html .html
AddLanguage zh-CN .cn

其中,.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。

以上就是Apache多后缀的特性。

如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

二、复现过程

同上,进入多后缀解析漏洞的目录,开启环境:

访问 虚拟机ip:

先上传小马:被拦。

接着利用多后缀解析的漏洞,修改文件后缀名:.php.jpg

成功,并返回文件的路径

访问ip/路径,并输入phpinfo:

Apache优化方法

1、控制MaxClients的设置,以避免服务器产生太多的子进程而发生交换。

进程间的数据交换会占用很大内存,数据交换产生的滞后使用户总感觉”不够快”,所以用户就可能去按”停止”和”刷新”,从而带来更大的负载。一般建议小网站将MaxClients设置为12~24。

2、选择更好的硬件,CPU、内存、硬盘等等

这句很鸡肋啦,如果有更多的银子,谁不愿意换更好的呢?

3、定期更新操作系统,打上系统补丁;如果你的操作系统支持sendfile()系统调用,则务必安装带有此功能的版本或补丁

在支持sendfile的系统中,Apache2可以更快地发送静态内容而且占用较少的CPU时间。

4、HostnameLookups设置为off

尽量较少DNS查询的次数。如果你使用了任何”Allow from domain”或”Deny from domain”指令(也就是domain使用的是主机名而不是IP地址),则代价是要进行两次DNS查询(一次正向和一次反向,以确认没有作假)。所以,为了得到最高的性能,应该避免使用这些指令(不用域名而用IP地址也是可以的)。

5、为Directory加上FollowSymLinks

如果网站空间中没有使用 Options FollowSymLinks ,Apache就必须执行额外的系统调用以验证符号连接。例如:在请求”/index.html”时,Apache将对”/www”、”/www/htdocs”、”/www/htdocs/index.html”执行lstat()调用。而且lstat()的执行结果不被缓存,因此对每一个请求都要执行一次。

6、将AllowOverride设置为None

对于使用虚拟主机的朋友可能会觉得不方便,这样设置将会使.htaccess中的设置失效,如果实在需要,并且在有条件的情况下,请在conf配置文件中直接写入rewrite规则

7、禁用内容协商

尽管在实践中,内容协商的好处大于性能的损失,如果你很在意那一点点的性能损失,则可以禁止使用内容协商。但是仍然有个方法可以提高服务器的速度,就是不要使用通配符。

8、MaxRequestsPerChild设置为非0以防止内存泄漏

MaxRequestsPerChild用于控制apache子进程在何时销毁,默认为0,代表永不销毁子进程,这可能会存在内存泄漏的风险,建议设置为10000

9、KeepAlive与KeepAliveTimeOut

如果你使用的使mpm_prefork模式(apache默认安装),那么建议你将KeepAlive设置为off;因为,开启keepalive会为每个客户端建立一个连接,prefork不会创建线程,估计100个用户同时访问你的网站,apache就会挂了~,如果你实在想开启,那么请将KeepAliveTimeOut 时间设置更短些,例如5,默认是60秒呢

10、不要静态编译apache

尽管会有很多人和你说静态编译的好处,同时,你自己也想自己编译一把,以体验乐趣~但是,将模块已静态方式编译进apache绝对不是一个好选择,尤其是对于缺银子的站长们来说,一个配置不当,apache会在启动时就占用光你所有的内存,最后拖垮服务器。

参考链接 :

Apache服务安全加固 :https://help.aliyun.com/knowledge_detail/52981.html

apache日志分析 :https://www.jianshu.com/p/02ac1efd5adb

Windows下 Apache Tomcat文件包含漏洞|CVE-2020-1938 漏洞复现 :jianshu.com/p/dd8c67515a56

Apache解析漏洞(换行解析+多后缀解析)复现 :https://www.jianshu.com/p/41ccabca57a2

Apache优化方法 :https://mp.weixin.qq.com/s/1LHvprP9lwTHwNn55VXraw

Apache服务安全加固及Apache优化相关推荐

  1. Apache服务(一)Apache服务的基本控制

    Apache相关 Apache稳定相较高 Nginx速度较快,比apache同步阻塞模式快,异步非阻塞模式 门户网站常使用 轻量级 index.html 默认的发布测试页 安装手册才可以查看说明 修改 ...

  2. Apache服务(二)Apache服务的虚拟主机和内部访问控制

    一.Apache的虚拟主机 1 编辑本地解析文件 vim /etc/hosts 172.25.254.127 www.westos.com news.westos.com music.westos.c ...

  3. apache服务Forbidden 403问题精彩总结

    部署apache服务Forbidden 403问题小结 ######################################################### #<老男孩linux就 ...

  4. Apache服务网页和安全优化(带有小实验,轻松学习)

    目录 一.Apache网页优化 1.网页压缩 1>gzip压缩 2>Apache的压缩模块 mod_gzip模块与mod_deflate模块 3>配置压缩功能步骤 4>实验: ...

  5. Tomcat服务安全加固和优化

    转载来源 : https://help.aliyun.com/knowledge_detail/37421.html?spm=a2c4g.11186623.4.5.4ad6510eY2UhOS 介绍 ...

  6. CentOS 7 Apache服务的安装与配置(转)

    https://blog.51cto.com/13525470/2070375 一.Apache简介 Apache 是一个知名的开源Web服务器. 早期的Apache服务器由Apache Group来 ...

  7. ubuntu安装discourse论坛----结合在apache服务上建立虚拟主机

    指导操作:https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md 一.先安装 Docker / Git: wg ...

  8. 《Apache服务》

    WEB服务 http协议简介: HTTP协议,全称HyperText Transfer Protocol,中文名称超文本传输协议,是互联网上应用最为广泛的一种网络协议.所有WWW都必须遵守这个标准.设 ...

  9. 使用Apache服务部署静态网站

    10.1 网站服务程序 1970年,作为互联网前身的ARPANET(阿帕网)已初具雏形,并开始向非军用部门开放,许多大学和商业部门开始接入.虽然彼时阿帕网的规模(只有4台主机联网运行)还不如现在的局域 ...

最新文章

  1. Asp.net控件开发学习笔记(六)----数据回传
  2. 在pl/sql中使用exp/imp工具实现oracle数据导出/导入
  3. web渗透之前端基础
  4. LeetCode 309: 一个很清晰的DP解题思路
  5. (转载)(收藏)OceanBase深度解析
  6. 终端启动service和activity
  7. 【linux】io_uring 和 eBPF 将如何彻底改变 Linux 中的编程
  8. fft qt 代码_最简洁的FFT代码(C++实现)
  9. python 代码命令大全-Python 命令行参数
  10. python结构_科学网—Python与结构分析(1)---反应谱 - 潘超的博文
  11. 小米笔记本android开发,小米笔记本将预装自主研发的MIOS系统!
  12. webrtc学习--websocket服务器(二) (web端播放h264)
  13. python需要学什么-学习python需要什么基础吗?老男孩Python
  14. 如何判断自己的手机是山寨机?如何判断山寨机的芯片型号和平台?
  15. 我爱Ruby的三十七个理由
  16. 2022年最好的游戏引擎是什么?
  17. 《我喜欢生命本来的样子》读书笔记
  18. 迭代器 iter()函数与next()函数 for...in...循环的本质
  19. nginx日志统计pv、uv命令
  20. 直播带货赚钱太难,一定要学会这5种方法,让你收益翻倍

热门文章

  1. 只显示小方格_excel中最有效率的插件——方方格子
  2. java 异常哪个包,这个提示包不存在的异常是咋回事
  3. 定时器翻转io口的好处_STM32 定时器输出比较翻转模式
  4. java如何新建一个空的压缩包_如何在Java中创建zip文件
  5. python glob用法
  6. python super().__init__()参数_python类中super()和__init__()的区别
  7. Linux内核源代码分析——插入之后会发生什么?
  8. listview mysql 安卓_Android——ListView与数据库的结合
  9. 竞价推广经验分享 账户的搭建方法
  10. 019-Spring Boot 日志