Apache防御与加固
1、安全配置
Apache的不同版本和安装方式,配置文件名称不同,有的为apache2.conf,有的为httpd.conf,可以根据版本确认。在apache的配置文件中可能包含多个配置文件。
如若找不到某个配置,可以搜索,例如:grep -r "Server Tokens" /etc/apache2/
(搜索该目录下所有文件中是否含有该字符串,加上-n可以显示行号)
cat /etc/apache2/apache2.conf
2、目录权限
cat /etc/apache2/apache2.conf
其中Directory主要配置目录的权限,规定了目录的特性、配置文件覆盖情况、目录访问权限。
----------- Options: 设置目录特性
ALL:所有特性有效(缺省状态)
None:所有目录特性无效
FollowSymLinks:允许浏览器访问文档根目录外的文档
ExecCGI:允许目录下执行CGI程序
Indexes:允许浏览器在没有index.html时显示目录
------------AllowOverride:设置配置文件覆盖
None:.htaccess文件完全忽略
ALL:使用.htaccess文件内的指令覆盖规则
------------Require:目录访问权限(2.4版本)
require all denied:拒绝所有
require all granted:允许所有
require host xxx 允许某个IP/HOST
—在2.2版本的目录访问权限使用Order,Allow,Deny
全部禁止:Order Allow, Deny
Deny from All
全部允许:Order Deny, Allow
Allow from All
.htaccess:负责目录下的网页配置,如改变扩展名,404。详细
Require介绍
Require all granted #允许所有
Require all denied #拒绝所有
Require env env-var [env-var] ... #当设置了某个环境变量允许访问
Require method http-method [http-method]... #允许特定的HTTP方法(GET/POST/HEAD/OPTIONS)
Require expr expression #表达式为true时允许
Require user userid [userid]... #允许特定用户
Require group group-name [group-name]... #允许特定用户组
Require valid-user #所有有效用户都允许
Require ip 192.100 192.168.100 192.168.100.5 #允许特定IP或IP段,多个IP或IP段间使用空格分隔
Apache2.2以下:
Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory,Location,Files等),用来控制目录和文件的访问授权。
Order deny,allow
allow from all
deny from 222.100.20.50
#全部都可以通行
Order deny, allow
deny from 222.100.20.50
allow from all
#全部都可以通行
Order allow, deny
deny from 222.100.20.50
allow from all
#只有222.100.20.50不能通行
Order allow, deny
allow from all
deny from 222.100.20.50
#只有222.100.20.50不能通行
总结:总是以Order后的后边那个策略为准,忽略另一个。
禁止目录浏览
作用:为防止一些重要文件,例如网站源码、sql文件等被黑客下载进行代码审计,所以要禁止目录浏览。
cat /etc/apache2/apache2.conf
删除Indexes即可实现。(Indexes的含义就是当该目录下没有index.html时,显示目录结构)
配置目录权限
目标:根据具体的业务需求,以最小权限为原则,为网站目录设置一定的权限。
-
假设网站的目录和文件的所有者和所有组为apache、www
命令:chmod -R apache:www /home/apache/web (为网站目录设置用户和用户组)
-
设置网站目录权限为750,apache对目录拥有读写执行的权限,其他用户没有任何权限
find -type d -exec chmod 750 {} ;
-
设置网站文件权限为640,apache用户对网站文件有读写的权限,www用户组有读取文件的权限,其他用户无任何权限
find -not -type d -exec chmod 640 {} ;
-
如果其他目录需要特定权限,针对性赋予即可。
实例:禁止上传目录执行PHP脚本
cat /etc/apache2/apache2.conf
<Directory /var/www/html/upload>
<FilesMatch ".(php)$">
Require all Denied
</FilesMatch>
</Directory>
3、端口
对于内网的服务器而言,修改端口可以有效的增加黑客信息收集的成本
cat /etc/apache2/ports.conf
apache运行权限设置(用户和组必须存在)
最小权限原则,为apache设置一个最小的权限的用户来运行
cat /etc/apache2/apache2.conf
可以自定义一个较小权限的用户和组。
4、日志记录
日志作用:记录了所有web请求
可以分析出:1、正常业务(那些页面访问量比较大等) 2、分析流量大小 3、分析黑客攻击(来自哪个IP?等)
cat /etc/apache2/apache2.conf
在Apache2.4中,编辑apache2.conf
**1、**将日志中的debined的值,修改为
LogFormat “%h %{X-FORWARDED-FOR}i %I %u %t \”%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" combined
(combined是别名)
**2、**添加:ErrorLogFormat “[%t] [%I] [pid %P] %F: %E: [client %a] %M”
**3、**将LogLevel修改为notice
备注:combined可能在其他配置文件中引用,可以使用grep -rn “combined” /etc/apache2/ 进行搜素
LogLevel:控制登录到error_log的消息的数量。可能的值包括:7-调试(DEBUG)、6-信息(INFO)、5-通知(NOTICE)、4-警告(WARNING)、3-错误(ERR)、2-临界失败(CRIT)、1-警戒【必须 处理】(ALERT)、0-致命(EMERG)。
5、隐藏版本信息
作用:隐藏回显时暴露的apache和操作系统版本信息,可以有效增加黑客攻击的时间成本。
ServerTokens Prod #隐藏HTTP头部回显的版本信息
ServerSignature off #屏蔽回显错误中的敏感信息
找不到:grep -rn “” /etc/apache2/
cat /etc/apache2/conf-available/security.conf
ServerTokens Prod 显示“Server: Apache”
ServerTokens Major 显示“Server: Apache/2”
ServerTokens Minor 显示“Server: Apache/2.2”
ServerTokens Min 显示“Server: Apache/2.2.17”
ServerTokens OS 显示“Server: Apache/2.2.17(Unix)”
ServerTokens Full 显示“Server: Apache/2.2.17(Unix) PHP/5.3.5" (这是默认回显,也可自己指定)
6、限制消息的长度
LimitRequestBody 102400
#102400Bytes = 100KB
限制从客户端发送的HTTP请求正文的总大小
7、删除无用文件
-
删除缺省(默认)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*
8、DDOS防御
Timeout 10
KeepAlive On
keepAliveTimeout 15
AcceptFilter https data
AcceptFilter http data
9、关闭Trace功能
TraceEnable Off
Trace是http请求中的一个方法,用此方法服务器会将客户端请求的消息原样返回给客户端,用作测试。
curl -i -X OPTIONS http://192.168.0.110
10、自定义错误页面,防止敏感信息泄露
ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html
11、关闭CGI(如果不用)
把cgi-bin目录的配置和模块注释掉
在apache2.4版本:
cat /etc/apache2/conf-available/serve-cgi-bin.conf
老版本:
编辑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>