forked from Trietptm-on-Security/WooYun-2
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Apache安全配置.html
209 lines (124 loc) · 117 KB
/
Apache安全配置.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
<html>
<head>
<title>Apache安全配置 - zhangsan</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>原文地址:<a href="http://drops.wooyun.org/%e8%bf%90%e7%bb%b4%e5%ae%89%e5%85%a8/2727">http://drops.wooyun.org/%e8%bf%90%e7%bb%b4%e5%ae%89%e5%85%a8/2727</a></h1>
<p>
<h2>0x00 测试环境</h2>
<hr />
<p>centos6.5+apache2.2.15+php5.3.3</p>
<h2>0x01 php的运行模式介绍</h2>
<hr />
<p>php的运行模式分四种:</p>
<pre><code>1. CGI通用网关接口
2. fast-cgi常驻型的CGI
3. cli命令行运行
4. web模块模式
</code></pre>
<p>一般情况下,apache使用web模块模式运行php</p>
<h2>0x02 Apache运行原理介绍</h2>
<hr />
<p>Apache是基于模块化设计的,各个模块在系统启动的时候按需载入。Apache对于php的解析,就是通过众多Module中的php Module来完成的。</p>
<!--more-->
<p><img src="http://static.wooyun.org/201408/2014080322524877722.png" alt="2014080322524877722.png" /></p>
<p>所以,php加载成为了apache的一个模块,可以把apache和php当成一个整体看待。</p>
<p>当浏览器请求一个php文件时,我们可以理解为apache直接处理返回给浏览器结果,服务器上也只会有httpd进程,而不会有php进程。</p>
<p>apache的一些配置主要是通过httpd.conf来实现的,但是可以在httpd.conf中开启对.htaccess的支持,然后在.htaccess中进行配置。不过一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置。</p>
<h2>0x03 Apache安全配置方案</h2>
<hr />
<h3>1. 选择漏洞较少的apache版本,并打上安全补丁</h3>
<p>查看apache版本号:httpd -v</p>
<p>然后在sebug上搜索该版本号有什么漏洞,可根据提示提升版本或者打上补丁</p>
<h3>2. 关闭一些不使用的模块及功能</h3>
<p>可在LoadModule前加#,来注释掉一些不使用的模块</p>
<h3>3. 隐藏banner信息</h3>
<p>ServerTokens OS 修改为:ServerTokens Prod (在出现错误页的时候不显示服务器操作系统的名称)</p>
<p>ServerSignature On 修改为:ServerSignature Off(不回显apache版本信息)</p>
<h3>4. 删除默认网站及页面</h3>
<p>删除默认的页面,防止泄露服务器信息</p>
<h3>5. 可修改banner信息</h3>
<h3>6. 配置httpd.conf禁止目录浏览</h3>
<p>将Options Indexes FollowSymLinks改为Options -Indexes FollowSymLinks</p>
<h3>7. 配置httpd.conf设置默认文档</h3>
<p>DirectoryIndex index.html</p>
<h3>8. 合理配置apache的运行账户</h3>
<p>为apache单独建立一个运行账户及账户组,并在httpd.conf配置</p>
<pre><code>User apache
Group apache
</code></pre>
<h3>9. 合理控制apache运行账户对磁盘的写入,执行权限</h3>
<p>取消apache运行账户对网站目录的写入权限,上传目录除外,其他非网站目录尽量不给权限</p>
<h3>10. 合理控制apache运行账户对sh等的执行权限</h3>
<p>取消掉了运行账户对sh等的执行权限后能够防止webshell通过默认的sh执行命令</p>
<h3>11. 配置httpd.conf取消对上传目录的php执行权限</h3>
<pre><code><Directory "/var/www/html/aaa">
<FilesMatch ".(php|php5)$">
Deny from all
</FilesMatch>
</Directory>
</code></pre>
<h3>12. 配置httpd.conf限制禁止访问的文件夹,例如后台目录</h3>
<pre><code><Directory "/var/www/html/aaa">
Deny from all
</Directory>
</code></pre>
<h3>13. 配置httpd.conf限制一些特殊目录的特定ip访问,如内部接口等。</h3>
<pre><code><Directory "/var/www/html/aaa">
Order Deny,Allow
Deny from all
Allow from 192.168.1.111
</Directory>
</code></pre>
<h3>14. 配置httpd.conf限制一些文件类型的访问,如txt的日志</h3>
<pre><code><Files ~ ".txt$">
Order allow,deny
Deny from all
</Files>
</code></pre>
<h3>15.配置httpd.conf修改修改监听端口来防止一些内部系统被扫描</h3>
<p>这样可以防止一些直接扫描80端口的黑客</p>
<pre><code>Listen 12345
</code></pre>
<h3>16. 关闭对.htaccess的支持</h3>
<pre><code>AllowOverride All
</code></pre>
<p>改为</p>
<pre><code>AllowOverride None
</code></pre>
<h3>17. 配置httpd.conf记录访问日志</h3>
<h2>0x04 .htaccess常见配置方法参考</h2>
<hr />
<p>首先,不建议使用.htaccess,其次,使用.htaccess需要在httpd.conf中开启,最后,开始.htaccess支持后需要在httpd.conf中配置防止.htaccess文件被下载,下面介绍几个基本配置方法不全,更多的可以参考其他网站专门针对.htaccess 的配置方法。</p>
<h3>1. 定制目录的默认文档</h3>
<pre><code>DirectoryIndex index.html index.php index.htm
</code></pre>
<h3>2. 定制错误页面</h3>
<pre><code>ErrorDocument 404 errors/404.html
</code></pre>
<h3>3. 控制访问文件和目录的级别</h3>
<pre><code>order deny,allow
deny from all
allow from 192.168.0.0/24
</code></pre>
<h3>4. 防止列目录</h3>
<pre><code>Options -Indexes
</code></pre>
<h2>0x05 总结</h2>
<hr />
<p>其实一个web服务器的保护是分几个层次的(暂不考虑程序的漏洞):</p>
<h3>1. 隐藏自己</h3>
<p>要保护一个web服务器首先得学会隐藏自己,对于一些内部系统,如后台,内部接口等,我们可以通过改端口,限制ip等方式来不让黑客发现。</p>
<h3>2. 隐藏身份</h3>
<p>对于多数web系统来说,都是提供给外面的访问的,所以想隐藏自己其实是很难的。但是我们还是要学会隐藏身份,可以通过改banner,该返回信息来隐藏身份来加大黑客攻击的难度。</p>
<h3>3. 选用安全的版本及修补一些已知的漏洞</h3>
<p>其实前面两步都是很容易突破,然后获知一个web系统所使用的web服务器版本的,此时我们能做的就是选择一个少漏洞的版本,及打上安全补丁。</p>
<h3>4. 做好安全配置</h3>
<p>做好基础的安全配置,禁止目录浏览,设定默认文档,上传目录限制php执行等等,来阻挡黑客的入侵。</p>
<h3>5. 合理配置web服务进程账户的权限</h3>
<p>当黑客已经通过程序漏洞上传了一个webshell并且已经成功执行了,此时,就只能很好的配置服务进程的账户权限,包括磁盘的读取写入,特殊程序如sh的执行,等等,这样可以讲危害降到最低。</p>
<h3>6. 记录日志</h3>
<p>最后,当黑客已经光顾之后,我们也只能通过日志来分析,看问题出在哪里了。</p> </p>
</body>
</html>