Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apache安全配置 #12

Open
AI0TSec opened this issue Jun 28, 2019 · 0 comments
Open

Apache安全配置 #12

AI0TSec opened this issue Jun 28, 2019 · 0 comments
Labels

Comments

@AI0TSec
Copy link
Owner

AI0TSec commented Jun 28, 2019

Apache用户账号使用无效Shell

Apache账号不能用作常规系统登录帐户,应该分配nologin shell确保帐号不能登录主机,该账号对应系统程序/服务/进程不受影响

加固方法:
修改apache账号使用/sbin/nologin/dev/null等无效shell,界面提示信息:This account is currently not available
# chsh -s /sbin/nologin apache

锁定Apache用户账号

Apache用户帐号不应该有修改密码权限,应通过ROOT权限账户对Apache用户帐号进行锁定

加固方法:
使用ROOT权限账户passwd命令锁定apache账号
# passwd -l apache

子进程用户设置

设置Apache子进程用户
加固方法:
Unix系统:
如果没有设置用户和组,则新建用户,并在Apache配置文件中指定

  • 创建Apache组:groupadd Apache
  • 创建Apache用户并加入Apache组:useradd Apache –g Apache
  • 将下面两行加入Apache配置文件httpd.conf中
    User Apache
    Group Apache

Windows系统:

  • 新建一个Apache用户
  • 设置Apache用户对Apache目录的相关权限
  • 在服务管理器service.msc中找到Apache服务,右键选择属性,设置登录身份为Apache用户

apache

配置错误日志

LogLevel配置用于设置错误日志的级别。ErrorLog配置用于设置错误日志文件的名称/位置。日志级别值为debuginfonoticewarnerrorcritalertemerg

image

加固方法:
a.在Apache配置中添加或修改LogLevel的值,建议核心(core)模块设置为infodebug,其他模块设置为notice或更低
b.通过ErrorLog配置设置错误日志文件的名称/位置

禁用存在设计缺陷的TLS/SSL协议

ApacheSSLProtocol配置指定允许的SSL和TLS协议。由于SSLv2和SSLv3协议存在涉及缺陷且易受信息泄露的攻击,故因全部禁用,只启用TLS协议

POODLE信息泄露漏洞/弱SSL加密算法/重协商漏洞

image

加固方法:
在Apache配置文件中添加或修改SSLProtocol。建议禁用SSLv2SSLv3TLSv1.0协议,配置为SSLProtocol All -SSLv2 -SSLv3或配置为允许TLSv1.1TLSv1.2协议,SSLProtocol TLSv1.1 TLSv1.2

限制不安全的SSL Renegotiation

启用SSLInsecureRenegotiation指令会使服务器容易遭受中间人重新协商攻击(CVE-2009-3555

image

加固方法:
在Apache配置文件中查找SSLInsecureRenegotiation指令。如果存在,将该值修改为off
SSLInsecureRenegotiation off

KeepAlive应设置为On

KeepAlive指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接。若 KeepAlive 设置为 On,则用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这次 TCP 连接中完成,而不需要重复建立新的 TCP 连接和关闭TCP 连接。这样可以提高用户访问速度,避免每次请求都要新建一个连接而加重服务器的负担。

加固方法:
Apache配置文件httpd.conf中查找conf/extra/httpd-default.conf

image

配置文件conf/extra/httpd-default.conf中,将KeepAlive设置为On,以启用KeepAlive连接

image

合理设置MaxKeepAliveRequests的值

KeepAlive启用OnMaxKeepAliveRequests指令限制每个连接允许的请求数量。如果设置为0,则不限制请求的数量。

加固方法:

image

合理设置KeepAliveTimeout的值

KeepAliveTimeout指令指定在关闭持久连接(KeepAlive)前等待下一个请求的秒数。KeepAliveTimeout的值应视网站流量及服务器配置而定

加固方法:
image

合理设置TimeOut的值

TimeOut指令控制Apache HTTP服务器等待输入/输出调用完成的最长时间

加固方法:
配置文件conf/extra/httpd-default.conf中调整TimeOut的值

image

隐藏Apache版本号及其他敏感信息

攻击者可利用Apache版本号及其他敏感信息进行信息搜集进而实施有针对性的下一步攻击

加固方法:
Apache配置文件httpd.conf中添加:

ServerSignature Off
ServerTokens Prod

防止敏感/默认/缺省内容信息泄露:图标/索引/目录结构

加固方法:

图标

在Apache配置文件httpd.conf中注释:

# Fancy directory listings
#Include conf/extra/httpd-autoindex.conf

image

目录

/web为网站根目录,将 Options Indexes FollowSymLinks 中的 Indexes 去掉,可禁止 Apache 显示目录结构。Indexes 的作用就是当该目录下没有 index.html 文件时,显示目录结构。

Order定义了allowdeny的生效顺序,deny排在后面代表先处理allow from定义的允许访问的地址,其余地址均deny。Allow from 可限制接入IP地址(白名单):Allow from 192.168.0.0/24

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

image

设置 Apache 的默认页面,编辑httpd.conf 配置文件, 其中index.htmlindex.phpindex.html.php 即为默认页面,可根据情况改为其它文件。

<IfModule dir_module>
    DirectoryIndex index.html index.php index.htm l.php
</IfModule>

image

禁用HTTP TRACE/OPTIONS方法

1.TRACE方法可回显服务器收到的请求,主要用于测试或诊断,攻击者可通过该机制进行信息搜集
2.攻击者可通过TRACE方法进行跨站脚本攻击
3.在站点启用了HttpOnly头标记和禁止脚本读取Cookie信息的情况下,攻击者仍可通过TRACE方法绕过该限制并读取到Cookie信息

加固方法:
1.在Apache配置文件httpd.conf中添加或修改:TraceEnable设置为off

TraceEnable off

2.在Apache配置文件vhosts-conf中设置

单独禁用Trace方法
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
单独禁用Options方法
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(OPTIONS)
RewriteRule .* - [F]
同时禁用Trace方法和Options方法
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]
配置文件vhosts-conf如下
<VirtualHost *:80>
    DocumentRoot "C:\www"
    ServerName www.example.com
    ServerAlias example.com
  <Directory "C:\www">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
      Require all granted
      RewriteEngine on
      RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
      RewriteRule .* - [F]
  </Directory>
</VirtualHost>

限制所有目录覆盖

Apache AllowOverrideALL则网站根目录下所有项目即可读取到.htaccess文件(分布式配置文件),该文件提供了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。AllowOverrideNone.htaccess文件无法被读取,其配置无法生效。

1.AllowOverride即允许覆盖,当AllowOverride ALL,则.htaccess配置指令生效并覆盖掉原有Apache配置指令
2.AllowOverride ALL弊端:Apache在每个目录中查找.htaccess文件会导致性能的下降。通过.htaccess文件修改apache的配置,若由于配置不当会导致不必要的安全问题

加固方法:
Apache配置文件中的中应设置:AllowOverride None

image

删除默认/缺省CGI内容/manual手册文件

Web服务器常包含不需要或不适合线上生产环境所使用的默认CGI内容。示例程序/CGI内容的主要作用是展示Web服务器的功能。Apache安装中常见的默认CGI内容是脚本test-cgi。该脚本将打印请求者的CGI环境变量,其中包括服务器配置细节。

加固方法:
a.通过ScriptScriptAliasScriptAliasMatchScriptInterpreterSource 指令找到在Apache配置中启用的cgi-bin文件和目录

image

b.删除cgi-bin目录中的printenv默认CGI

image

c.删除默认安装的Apache手册文件

image

禁用CGI/禁用SSI

如果服务器上不需要运行CGI/SSI程序,建议禁用CGI/SSI(Server Side Includes)
加固方法:
禁用CGI
修改Apache配置文件httpd.conf,把相关配置和模块都注释掉

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

禁用SSI
修改Apache配置文件httpd.conf,把相关模块注释掉,在“Include”前面添加减号

#LoadModule include_module modules/mod_include.so
<Directory "/var/www/html">
    Options Indexes FollowSymLinks -Includes
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

自定义Apache返回的错误页面

配置特定的错误页面可防止不必要的信息泄露

加固方法:
image

@AI0TSec AI0TSec added the Apache label Jul 1, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant