CentOS下Apache 2.x的安装、优化及安全设置
时间:2016-05-19 17:51 来源:linux.it.net.cn 作者:IT
Web服务器软件安装顺序:Mysql -->Apache(httpd) --> PHP
Apache下载地址:http://www.apache.org/dist/httpd/
解压后进入解压目录,执行:
./configure --prefix=/home/apache --enable-so --with-mysql=/home/mysql --enable-track-vars --enable-mods-shared=all --enable-cache --enable-disk-cache --enable-mem-cache --enable-rewrite --with-mpm=worker
make
make install
至此,Apache主程序安装完毕!Apache的主程序会被安装在/home/apache/ 下
安装完毕后,Apache并不会关机后自动启动,需要手工进行一些设置:
先将apachectl这个文件复制到/etc/init.d下,并更名为httpd
cp /home/apache/bin/apachectl /etc/init.d/httpd
然后编辑此文件,kate /etc/init.d/httpd
并在#!/bin/sh下加入以下几句
# add for chkconfig
# chkconfig: 2345 70 30
# descrīption: Activate/Deactive Apache Web Server
# processname: httpd
保存后退出。
2345是指apache的运行级别,即在2345这4种模式下都可以运行,234都是文本界面,5就是图形界面X
70是指apache的启动顺序号,如果别的程序的启动顺序号比70小,比如34,65,则需要等这些程序都启动以后,才启动apache。建议将apache的启动顺序排在mysql之后!
30是指系统关闭时,apache的停止顺序号。
最后执行 chkconfig --add httpd ,将apache的自启动文件加到rc.d下的对应目录下,只有这样,Linux才能正确完成开机自启动。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
为了优化Apache的性能,我们需要对worker.c这个模块进行配置。不同配置、不同流量的服务器需要有不同的设置方式,以达到性能最优化!
kate /home/apache/conf/httpd.conf
在底部加入以下选项(需要在<VirtualHost> ……</VirtualHost>之前)
<IfModule worker.c>
ServerLimit 20
#服务器允许配置的进程数上限。这个指令和ThreadLimit结合使用设置了MaxClients最大允许配置的数值。任何在重启期间对这个指令的改变都将被忽略,但对MaxClients的修改却会生效。
ThreadLimit 200
#每个子进程可配置的线程数上限。这个指令设置了每个子进程可配置的线程数ThreadsPerChild上限。任何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却会生效。默认值是"64".
StartServers 5
#服务器启动时建立的子进程数,默认值是"3"。
MinSpareThreads 50
#最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。
MaxSpareThreads 250
# 设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。 MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和
MaxClients 2000
# 允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。
ThreadsPerChild 100
#每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。
MaxRequestsPerChild 10000
#设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
#将MaxRequestsPerChild设置成非零值有两个好处:
#1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
#2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
</IfModule>
为了加快客户端的页面读取速度,我们需要安装配置mod_deflate这个网页压缩模块。该模块已被Apache 2.x内置,不需要重新安装,可直接在/home/apache/conf/httpd.conf里进行配置。
kate /home/apache/conf/httpd.conf
加入以下选项
#启用mod_deflate这个网页压缩模块
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
#以下三句是启用deflate的日志
#DeflateFilterNote ratio
#LogFormat "%v %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" (%{ratio}n) deflate
#CustomLog logs/deflate_log deflate
#以上三句是启用deflate的日志
<Location />
# 插入过滤器
SetOutputFilter DEFLATE
# Netscape 4.x 有一些问题...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 有更多的问题
BrowserMatch ^Mozilla/4.0[678] no-gzip
# MSIE 会伪装成 Netscape ,但是事实上它没有问题
BrowserMatch MSIE !no-gzip !gzip-only-text/html
# 不压缩图片
SetEnvIfNoCase Request_URI
.(?:gif|jpe?g|png)$ no-gzip dont-vary
# 确保代理不会发送错误的内容
Header append Vary User-Agent env=!dont-vary
</Location>
</IfModule>
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
为了防止恶意用户对Apache进行攻击,我们需要安装mod_security这个安全模块
mod_security 1.9.x模块的下载与安装
下载地址:http://www.modsecurity.org/download/index.html
建议使用1.9.x,因为2.x的配置指令与1.x完全不同,解压后进入解压目录,执行:
/home/apache/bin/apxs -cia mod_security.c
编译完成后,/home/apache/modules下会生成一个mod_security.so文件
然后kate /home/apache/conf/httpd.conf
加入以下选项(如果没有的话)
#启用mod_security这个安全模块
LoadModule security_module modules/mod_security.so (这一句通常会被自动加入)
<IfModule mod_security.c>
# 打开过滤引擎开关。如果是Off,那么下面这些都不起作用了。
SecFilterEngine On
# 把设置传递给字目录
SecFilterInheritance Off
# 检查url编码
SecFilterCheckURLEncoding On
# 检测内容长度以避免堆溢出攻击
#SecFilterForceByteRange 32 126
# 日志的文件和位置。一定要先建立好目录,否则apache重新启动的时候会报错。
SecAuditLog logs/audit_log
# debug的设置
#SecFilterDebugLog logs/modsec_debug_log
#SecFilterDebugLevel 1
#当匹配chmod,wget等命令的时候,重新定向到一个特殊的页面,让攻击者知难而退
SecFilter chmod redirect:http://www.sina.com
SecFilter wget redirect:http://www.sina.com
#检测POST数据,注意,请甚用这个开关,可能会导致一些post页面无法访问。详细的信息,请察看www.modsecurity.org的文档,其中有详细的post编码要求。
#SecFilterScanPOST Off
# 缺省的动作
SecFilterDefaultAction "deny,log,status:406"
# 重新定向用户
#SecFilter xxx redirect:http://www.sina.com
# 防止操作系统关键词攻击
SecFilter /etc/*passwd
SecFilter /bin/*sh
# 防止double dot攻击
SecFilter "../"
# 防止跨站脚本(CSS)攻击
SecFilter "<( | )*scrīpt"
# Prevent XSS atacks (HTML/Javascrīpt injection)
SecFilter "<(.| )+>"
# 防止sql注入式攻击
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
#重定向exe和asp请求
SecFilterSelective REQUEST_URI ".exe" "redirect:http://www.google.com"
SecFilterSelective REQUEST_URI ".asp" "redirect:http://www.google.com"
#下面是限制了upload.php文件只能用来上传jpeg.bmp和gif的图片
#<Location /upload.php>
#SecFilterInheritance On
#SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)"
#</Location>
#伪装服务器标识
SecServerSignature "Microsoft-IIS/6.0"
</IfModule>
保存后重启apache即可!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
为了防止Web服务器被DDoS攻击,我们需要安装mod_evasive这个防DDoS的模块
mod_evasive 1.10.x防DDoS模块的下载与安装
下载地址:http://www.zdziarski.com/projects/mod_evasive/
解压后进入解压目录,执行
/home/apache/bin/apxs -cia mod_evasive20.c
编译完成后,/home/apache/modules下会生成一个mod_evasive20.so文件
然后kate /home/apache/conf/httpd.conf
加入以下选项(如果没有的话)
#启用mod_evasive for Apache 2.x防DDoS模块
LoadModule evas
(责任编辑:IT)
Web服务器软件安装顺序:Mysql -->Apache(httpd) --> PHP Apache下载地址:http://www.apache.org/dist/httpd/ 解压后进入解压目录,执行: ./configure --prefix=/home/apache --enable-so --with-mysql=/home/mysql --enable-track-vars --enable-mods-shared=all --enable-cache --enable-disk-cache --enable-mem-cache --enable-rewrite --with-mpm=worker make make install 至此,Apache主程序安装完毕!Apache的主程序会被安装在/home/apache/ 下 安装完毕后,Apache并不会关机后自动启动,需要手工进行一些设置: 先将apachectl这个文件复制到/etc/init.d下,并更名为httpd cp /home/apache/bin/apachectl /etc/init.d/httpd 然后编辑此文件,kate /etc/init.d/httpd 并在#!/bin/sh下加入以下几句 # add for chkconfig # chkconfig: 2345 70 30 # descrīption: Activate/Deactive Apache Web Server # processname: httpd 保存后退出。 2345是指apache的运行级别,即在2345这4种模式下都可以运行,234都是文本界面,5就是图形界面X 70是指apache的启动顺序号,如果别的程序的启动顺序号比70小,比如34,65,则需要等这些程序都启动以后,才启动apache。建议将apache的启动顺序排在mysql之后! 30是指系统关闭时,apache的停止顺序号。 最后执行 chkconfig --add httpd ,将apache的自启动文件加到rc.d下的对应目录下,只有这样,Linux才能正确完成开机自启动。 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 为了优化Apache的性能,我们需要对worker.c这个模块进行配置。不同配置、不同流量的服务器需要有不同的设置方式,以达到性能最优化! kate /home/apache/conf/httpd.conf 在底部加入以下选项(需要在<VirtualHost> ……</VirtualHost>之前) <IfModule worker.c> ServerLimit 20 #服务器允许配置的进程数上限。这个指令和ThreadLimit结合使用设置了MaxClients最大允许配置的数值。任何在重启期间对这个指令的改变都将被忽略,但对MaxClients的修改却会生效。 ThreadLimit 200 #每个子进程可配置的线程数上限。这个指令设置了每个子进程可配置的线程数ThreadsPerChild上限。任何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却会生效。默认值是"64". StartServers 5 #服务器启动时建立的子进程数,默认值是"3"。 MinSpareThreads 50 #最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。 MaxSpareThreads 250 # 设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。 MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和 MaxClients 2000 # 允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。 ThreadsPerChild 100 #每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。 MaxRequestsPerChild 10000 #设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。 #将MaxRequestsPerChild设置成非零值有两个好处: #1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。 #2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。 </IfModule> 为了加快客户端的页面读取速度,我们需要安装配置mod_deflate这个网页压缩模块。该模块已被Apache 2.x内置,不需要重新安装,可直接在/home/apache/conf/httpd.conf里进行配置。 kate /home/apache/conf/httpd.conf 加入以下选项 #启用mod_deflate这个网页压缩模块 LoadModule deflate_module modules/mod_deflate.so <IfModule mod_deflate.c> #以下三句是启用deflate的日志 #DeflateFilterNote ratio #LogFormat "%v %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" (%{ratio}n) deflate #CustomLog logs/deflate_log deflate #以上三句是启用deflate的日志 <Location /> # 插入过滤器 SetOutputFilter DEFLATE # Netscape 4.x 有一些问题... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 有更多的问题 BrowserMatch ^Mozilla/4.0[678] no-gzip # MSIE 会伪装成 Netscape ,但是事实上它没有问题 BrowserMatch MSIE !no-gzip !gzip-only-text/html # 不压缩图片 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary # 确保代理不会发送错误的内容 Header append Vary User-Agent env=!dont-vary </Location> </IfModule> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 为了防止恶意用户对Apache进行攻击,我们需要安装mod_security这个安全模块 mod_security 1.9.x模块的下载与安装 下载地址:http://www.modsecurity.org/download/index.html 建议使用1.9.x,因为2.x的配置指令与1.x完全不同,解压后进入解压目录,执行: /home/apache/bin/apxs -cia mod_security.c 编译完成后,/home/apache/modules下会生成一个mod_security.so文件 然后kate /home/apache/conf/httpd.conf 加入以下选项(如果没有的话) #启用mod_security这个安全模块 LoadModule security_module modules/mod_security.so (这一句通常会被自动加入) <IfModule mod_security.c> # 打开过滤引擎开关。如果是Off,那么下面这些都不起作用了。 SecFilterEngine On # 把设置传递给字目录 SecFilterInheritance Off # 检查url编码 SecFilterCheckURLEncoding On # 检测内容长度以避免堆溢出攻击 #SecFilterForceByteRange 32 126 # 日志的文件和位置。一定要先建立好目录,否则apache重新启动的时候会报错。 SecAuditLog logs/audit_log # debug的设置 #SecFilterDebugLog logs/modsec_debug_log #SecFilterDebugLevel 1 #当匹配chmod,wget等命令的时候,重新定向到一个特殊的页面,让攻击者知难而退 SecFilter chmod redirect:http://www.sina.com SecFilter wget redirect:http://www.sina.com #检测POST数据,注意,请甚用这个开关,可能会导致一些post页面无法访问。详细的信息,请察看www.modsecurity.org的文档,其中有详细的post编码要求。 #SecFilterScanPOST Off # 缺省的动作 SecFilterDefaultAction "deny,log,status:406" # 重新定向用户 #SecFilter xxx redirect:http://www.sina.com # 防止操作系统关键词攻击 SecFilter /etc/*passwd SecFilter /bin/*sh # 防止double dot攻击 SecFilter "../" # 防止跨站脚本(CSS)攻击 SecFilter "<( | )*scrīpt" # Prevent XSS atacks (HTML/Javascrīpt injection) SecFilter "<(.| )+>" # 防止sql注入式攻击 SecFilter "delete[[:space:]]+from" SecFilter "insert[[:space:]]+into" SecFilter "select.+from" #重定向exe和asp请求 SecFilterSelective REQUEST_URI ".exe" "redirect:http://www.google.com" SecFilterSelective REQUEST_URI ".asp" "redirect:http://www.google.com" #下面是限制了upload.php文件只能用来上传jpeg.bmp和gif的图片 #<Location /upload.php> #SecFilterInheritance On #SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)" #</Location> #伪装服务器标识 SecServerSignature "Microsoft-IIS/6.0" </IfModule> 保存后重启apache即可! ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 为了防止Web服务器被DDoS攻击,我们需要安装mod_evasive这个防DDoS的模块 mod_evasive 1.10.x防DDoS模块的下载与安装 下载地址:http://www.zdziarski.com/projects/mod_evasive/ 解压后进入解压目录,执行 /home/apache/bin/apxs -cia mod_evasive20.c 编译完成后,/home/apache/modules下会生成一个mod_evasive20.so文件 然后kate /home/apache/conf/httpd.conf 加入以下选项(如果没有的话) #启用mod_evasive for Apache 2.x防DDoS模块 LoadModule evas (责任编辑:IT) |