实验的环境
LAMP环境:
操作系统: centos7.4
apache版本:httpd-2.4.10
PHP版本: php5.6.32
源码包存放位置:/usr/src
源码包编译安装位置:
apache: /usr/local/apache/
php:/server/php-5.4
mysql:/server/mysql-5.5/
1 隐藏apache版本信息
屏蔽apache版本等敏感信息
查看apache版本信息:
[root@yunzu63 ~]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Date: Thu, 25 Jan 2018 12:52:58 GMT
Server: Apache/2.4.10 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: “2d-432a5e4a73a80”
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html
[root@yunzu63 ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 25 Jan 2018 08:26:08 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Connection: Keep-Alive
ETag: “575e1f60-115”
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes0
[root@yunzu63 ~]# curl -I www.taobao.com
HTTP/1.1 302 Found
Server: Tengine
Date: Tue, 17 Nov 2015 02:22:06 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location: https://www.taobao.com/
Set-Cookie: thw=cn; Path=/; Domain=.taobao.com; Expires=Wed, 16-Nov-16 02:22:06 GMT;
1、我们在apache主配置文件httpd.conf中,找到包含httpd-default.conf的行,并解开注释
[root@yunzu63 ~]# vim /etc/conf/httpd.conf
475 #Include conf/extra/httpd-default.conf
为:
Include conf/extra/httpd-default.conf
注意:编译安装的情况下,只有此行解开注释了,后面的修改才能生效。
2)打开httpd-default.conf文件,修改如下两个地方
[root@yunzu63 ~]# vim /etc/httpd/extra/httpd-default.conf
改:
55 ServerTokens Full
65 ServerSignature On
为:
ServerTokens Prod
ServerSignature Off
注:
服务器标记产品
服务器签名
重启服务:
[root@yunzu63 ~]#systemctl restart httpd
测试:
[root@yunzu63 ~]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Date: Sat, 29 Aug 2015 09:07:00 GMT
Server: Apache
X-Powered-By: PHP/5.4.14
Content-Type: text/html
注:还是会出现信息:Server: Apache
提升:彻底让版本等敏感信息消失
要彻底将版本之类的信息进行改头换面,需要在编译之前做准备或者进行重新编译了。在重新编译时,修改源码包下include目录下的ap_release.h文件
[root@yunzu63 httpd-2.4.10]# pwd
/usr/src
[root@yunzu63 src]# rm -rf httpd-2.4.10
[root@yunzu63 src]# tar zxf httpd-2.4.10.tar.bz2
[root@yunzu63 src]# cd httpd-2.4.10
[root@yunzu63 httpd-2.4.10]# vim include/ap_release.h
改:
40 #define AP_SERVER_BASEVENDOR “Apache Software Foundation”
41 #define AP_SERVER_BASEPROJECT “Apache HTTP Server”
42 #define AP_SERVER_BASEPRODUCT “Apache”
43
44 #define AP_SERVER_MAJORVERSION_NUMBER 2
45 #define AP_SERVER_MINORVERSION_NUMBER 4
46 #define AP_SERVER_PATCHLEVEL_NUMBER 25
47 #define AP_SERVER_DEVBUILD_BOOLEAN 0
为:
#define AP_SERVER_BASEVENDOR “yunzu”
#define AP_SERVER_BASEPROJECT “web server”
#define AP_SERVER_BASEPRODUCT “web”
#define AP_SERVER_MAJORVERSION_NUMBER 8
#define AP_SERVER_MINORVERSION_NUMBER 1
#define AP_SERVER_PATCHLEVEL_NUMBER 2
#define AP_SERVER_DEVBUILD_BOOLEAN 3
注释:
#define AP_SERVER_BASEVENDOR “Apache Software Foundation” #服务的供应商名称
#define AP_SERVER_BASEPROJECT “Apache HTTP Server” #服务的项目名称
#define AP_SERVER_BASEPRODUCT “Apache” #服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER 8 #主要版本号
#define AP_SERVER_MINORVERSION_NUMBER 1 #小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 2 #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 3 #
注:上述列出的行,大家可以修改成自己想要的,然后编译安装之后,再对httpd-default.conf文件进行修改,对方就彻底不知道你的版本号了。
源码编译安装apache
[root@yunzu63 httpd-2.4.10]# pwd
/usr/local/src/httpd-2.4.10
[root@yunzu63 httpd-2.2.11]# yum install openssl-devel pcre-devel
[root@yunzu63 httpd-2.4.10]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --enable-deflate --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
注解:
--prefix=/usr/local/apache //指定程序安装路径
--sysconfdir=/etc/httpd //指定配置文件、或工作目录
--enable-so //开启基于DSO动态装载模块
--enable-ssl //开启支持ssl协议
--enable-cgi //开启cgi机制
--enable-rewrite //开启支持URL重写
--with-zlib //zlib是网络上发送数据报文的通用压缩库的API,在apache调用压缩工具压缩发送数据时需要调用该库
--with-pcre //支持PCRE,把pcre包含进程序中,(此处没指定pcre程序所在路径,默认会在PATH环境下查找)
--with-apr=/usr/local/apr //指定apr位置
--with-apr-util=/usr/local/apr-util //指定apr-util
--enable-mod eles=most //启动模块,all表示所有,most表示常用的
--enable-mpms-shared=all //启动所有的MPM模块
--with-mpm=event //指定默认使用event模块
编译:
[root@yunzu63 httpd-2.4.10]# make -j 4
安装:
[root@yunzu63 httpd-2.4.10]# make install
查看配置文件:
[root@yunzu63 httpd-2.4.10]# ls /etc/httpd/httpd.conf
/etc/httpd/httpd.conf
存放网站的根目录:
[root@yunzu63 httpd-2.4.10]# ls /usr/local/apache/htdocs/index.html
/usr/local/apache/htdocs/index.html
修改默认首页内容:
httpd-2.4.10
启动apache:
配置apache 可以开机启动并且可以使用systemctl 命令启动apache服务器
[root@yunzu63 httpd-2.4.10]# vim /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=forking
EnvironmentFile=/etc/httpd/httpd.conf
ExecStart=/usr/local/apache/bin/apachectl
ExecRestart=/usr/local/apache/bin/apachectl restart
ExecStop=/usr/local/apache/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载unit文件:
[root@yunzu63 httpd-2.4.10]# systemctl daemon-reload
设置开机自动启动:
[root@yunzu63 httpd-2.4.10]# systemctl enable httpd
启动apache:
[root@yunzu63 httpd-2.4.10]# systemctl start httpd
测试:
[root@yunzu63 ~]# curl -I 192.168.1.63 #看不到apache版本相关内容了
[root@yunzu63 httpd-2.4.10]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Date: Thu, 25 Jan 2018 08:57:02 GMT
Server: web/8.1.2-dev (Unix)
Last-Modified: Thu, 25 Jan 2018 08:50:11 GMT
ETag: “e-56395de1913d7”
Accept-Ranges: bytes
Content-Length: 14
Content-Type: text/html
接下来再次修改:
[root@yunzu63 ~]# vim /etc/httpd/httpd.conf
475 #Include conf/extra/httpd-default.conf
为:
Include conf/extra/httpd-default.conf
2、打开httpd-default.conf文件,修改如下两个地方
[root@yunzu63 ~]# vim /etc/httpd/extra/httpd-default.conf
改:
55 ServerTokens Full
65 ServerSignature On
为:
ServerTokens Prod
ServerSignature Off
重启服务:
[root@yunzu63 ~]# systemctl restart httpd
测试:
[root@yunzu63 ~]# curl -I http://192.168.1.63/
HTTP/1.1 200 OK
Date: Sat, 29 Aug 2015 09:55:31 GMT
Server: web
Last-Modified: Sat, 29 Aug 2015 09:37:36 GMT
ETag: “6d086-3a-51e6ff35dba19”
Accept-Ranges: bytes
Content-Length: 58
Content-Type: text/html
查看运行apache的默认用户
我们通过更改apache的默认用户,可以提升apache的安全性。这样,即使apache服务被攻破,黑客拿到apache普通用户也不会对系统和其他应用造成破坏。这里创建的apache用户,将用于对子进程和线程的控制。
[root@yunzu63 httpd-2.4.10]# lsof -i :80
注:默认使用daemon用户是安全的。
[root@yunzu63 ~]# ps -axu | grep httpd
[root@yunzu63 ~]# id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp)
[root@yunzu63 ~]# grep daemon /etc/passwd
daemon❌2:2:daemon:/sbin:/sbin/nologin
[root@yunzu63 ~]# useradd -M -s /sbin/nologin apache
-M:不要自动建立用户的登入目录。
编辑apache配置文件,修改默认的用户。
[root@c64-web /]# vim /etc/httpd/httpd.conf
161 User daemon
162 Group daemon
为:
User apache
Group apache
[root@yunzu63 httpd-2.4.10]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 54066 root 4u IPv6 64673 0t0 TCP *:http (LISTEN)
httpd 54083 apache 4u IPv6 64673 0t0 TCP *:http (LISTEN)
httpd 54084 apache 4u IPv6 64673 0t0 TCP *:http (LISTEN)
httpd 54085 apache 4u IPv6 64673 0t0 TCP *:http (LISTEN)
apache目录及文件权限设置, 不能给777权限
在生产环境的网站架构中,我们应把资源文件的权限做好配置。
例:用户上传的图片及附件等和程序做好分离。这样才能更方便我们做好授权,保证apache服务和整个服务器安全。
这里我们设置apache的网站目录属主和属组是daemon:
[root@yunzu63 ~]# ll -sd /usr/local/apache/htdocs/
drwxr-xr-x 2 root root 24 1月 25 15:53 /usr/local/apache/htdocs/
[root@yunzu63 ~]# chown daemon. /usr/local/apache/htdocs/ -R
[root@yunzu63 ~]# ll -sd /usr/local/apache/htdocs/
drwxr-xr-x 2 daemon daemon 24 1月 25 15:53 /usr/local/apache/htdocs/
保护apache日志:设置好apache日志文件权限
对日志的授权,我们要将属主和属组都设置为root:
[root@yunzu63 ~]# ll -sd /usr/local/apache/logs/
drwxr-xr-x 2 root root 58 1月 25 17:29 /usr/local/apache/logs/
[root@yunzu63 ~]# ll /usr/local/apache/logs/
注:由于apache日志的记录是由apache的主进程进行操作的,而apache的主进程又是root用户启动的,所以这样不影响日志的输出。这也是日志记录的最安全的方法