如何在Ubuntu上搭建一台安全的Apache Web服务器

如何在Ubuntu上搭建一台安全的Apache Web服务器,第1张

本教程假设你已有一台在运行的Ubuntu服务器,网络方面已设置好,而且可以通过SSH进行访问。

Apache2是许多安装的Linux发行版使用的默认Web服务器。它不是对所有环境来说唯一可用的Web服务器,也不是最佳的Web服务器,但是它适合许多使用场景。在安装过程中,系统可能会询问你哪个Web服务器要自动重新配置。选择“apache2”即可。

安装Apache2

使用下面这个命令,安装Apache2及其他库。

$ sudo apt-get -y install apt-get install apache2 apache22-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt libapache2-mod-suphp libopenssl-ruby libapache2-mod-ruby

更新时区(TimeZone)和检查正确时间

为了减小共享数据或镜像数据方面的混淆,所有服务器在运行时都应该尽可能接近同步状态。一些加密密钥管理系统需要准确的时间。最后,就企业服务器而言,《萨班斯-奥克斯利法案》(Sarbanes-Oxley)和《健康保险可携性及责任性法案》(HIPAA)的安全规则要求正确的时间戳机制。

$ sudo apt-get -y install openntpd tzdata

$ sudo dpkg-reconfigure tzdata

$ sudo service openntpd restart

禁止AppArmor冲突

虽然AppArmor这个套件的确提供了一层额外的安全,但在我看来,需要为每个系统创建自定义配置文件。这不是本教程所探讨的内容。所以眼下,我们会禁用AppArmor,防止与任何默认的配置发生冲突。

$ sudo /etc/initd/apparmor stop

$ sudo update-rcd -f apparmor remove

$ sudo apt-get remove apparmor apparmor-utils

注意:如果是生产环境下的Web服务器,不建议禁用AppArmor。如果有些人想创建自定义的AppArmor配置文件,请参阅官方说明文档(http://wikiapparmornet/indexphp/Documentation)。

阻止分布式拒绝服务(DDoS)攻击

DDoS攻击是一种分布式拒绝服务攻击。有一个Apache模块可以阻止这类攻击。

$ sudo apt-get -y install libapache2-mod-evasive

$ sudo mkdir -p /var/log/apache2/evasive

$ sudo chown -R www-data:root /var/log/apache2/evasive

把下面这个命令添加到mod-evasiveload的末尾处。

$ sudo nano /etc/apache2/mods-available/mod-evasiveload DOSHashTableSize 2048

DOSPageCount 20 # 请求同一页面的最大数量

DOSSiteCount 300 # 同一侦听器上同一客户端IP请求任何对象的总数量

DOSPageInterval 10 # 页面数量阈值的间隔

DOSSiteInterval 10 # 站点数量阈值的间隔

DOSBlockingPeriod 100 # 客户机IP被阻止的时间段

DOSLogDir “/var/log/apache2/evasive”

DOSEmailNotify admin@domaincom

阻止Slowloris攻击

还有一个Apache模块可以阻止Slowloris攻击,不过模块名称取决于你使用的Ubuntu的具体版本。如果是Ubuntu 1210或以后版本:

$ sudo apt-get -y install libapache2-mod-qos

然后,检查qosconf中的配置:

$ sudo nano /etc/apache2/mods-available/qosconf

## 服务质量方面的设置

# 处理来自多达100000个不同IP的连接

QS_ClientEntries 100000

# 只允许每个IP仅50条连接

QS_SrvMaxConnPerIP 50

# 活动TCP连接的最大数量限制在256条

MaxClients 256

# 当70%的TCP连接被占用时,禁用保持活动连接状态

QS_SrvMaxConnClose 180

# 最小请求/响应速度(拒绝阻塞服务器的慢速客户端,即slowloris保持连接开启,不提出任何请求):

QS_SrvMinDataRate 150 1200

# 并限制请求标题和主体(注意,这还限制了上传和发帖请求):

# LimitRequestFields 30

# QS_LimitRequestBody 102400

注意:如果你运行1204之前的Ubuntu版本,改而使用下面这个命令:

$ sudo apt-get -y install libapache2-mod-antiloris

检查antilorisconf中的配置

$ sudo nano /etc/apache2/mods-available/antilorisconf

# 每个IP地址处于READ状态的最大并行连接数量

IPReadLimit 5

阻止DNS注入攻击

Spamhaus这个模块使用域名系统黑名单(DNSBL),目的是为了阻止通过Web表单实现的垃圾邮件转发,防止URL注入攻击,阻止来自机器人程序的http DDoS攻击,通常保护服务器,远离已知的恶意IP地址。

$ sudo apt-get -y install libapache2-mod-spamhaus

$ sudo touch /etc/spamhauswl Append the config to apache2conf

$ sudo nano /etc/apache2/apache2conf

MS_METHODS POST,PUT,OPTIONS,CONNECT

MS_WhiteList /etc/spamhauswl

MS_CacheSize 256

重启Apache装入新模块

$ sudo service apache2 restart

现在Web服务器已安装完毕,并在正常运行。将Web浏览器指向你的域,即可看到证明你一切正常的默认消息。作为最后的检查机制,运行下面这个命令,看看你的服务器有没有任何错误信息。要是有错误信息,你需要上谷歌搜索一下,立马解决这些错误。

$ sudo tail -200 /var/log/syslog

1如何使得apache监听在特定的端口

修改httpdconf里面有关Listen的选项,例如:

Listen 8000

是使apache监听在8000端口

而如果要同时指定监听端口和监听地址,可以使用:

Listen 19217021:80

Listen 19217025:8000

这样就使得apache同时监听在19217021的80端口和19217025的8000端口

当然也可以在httpdconf里面设置:

Port 80

这样来实现类似的效果

2apache中如何限制http请求

消息主体的大小

在httpdconf里面设置:

LimitRequestBody n

n是整数单位是byte

cgi脚本一般把表单里面内容作为消息的主体提交给服务器处理所以现在消息主体的大小在使用cgi的时候很有用比如使用cgi来上传文件,如果有设置:

LimitRequestBody 102400

那么上传文件超过100k的时候就会报错

3如何使得apache对客户端进行域名验证

可以在httpdconf里面设置:

HostnameLookups on|off|double

如果是使用on,那么只有进行一次反查,如果用double,那么进行反查的后还要进行次正向解析,只有两次的结果互相符合才行,而off就是不进行域名验证

如果为了安全,建议使用double;为了加快访问速度,建议使用off

4如何在apache中设置session持续时间

在apache12以上的版本中,可以在httpdconf里面设置:

KeepAlive on

KeepAliveTimeout 15

这样就能限制每个session的保持时间是15秒session的使用可以使得很多请求都可以通过同个tcp连接来发送,节约了网络资源和系统资源

5如何使得apache只监听在特定的ip

修改httpdconf,在里面使用

BindAddress 19216801

这样就能使得apache只监听外界对19216801的http请求如果使用:

BindAddress

就表明apache监听所有网络接口上的http请求

当然用防火墙也可以实现

这个是我成功配置的经验

1安装apache_224-win32-x86-no_sslmsi到 d:\phpWeb\APACHE\

步骤:下一步下一步

2安装php-520-Win32zip 到 d:\phpWeb\php\

步骤:(1)解压压缩包到d:\phpWeb\php\

(2)找到php目录里的 phpini-dist 重命名为 phpini 并拷到 windows目录里

(3)将php目录里的 php5tsdll,libmysqldll 拷到 系统目录(system/system32)

3配置apache

步骤:(1)打开 d:\phpWeb\APACHE\conf\httpdconf 这个文件

(2)找到 DocumentRoot "D:/phpWeb/APACHE/htdocs" 将其改为你的WEB目录(可不改有时改了会出错)

(3)找到DirectoryIndex indexhtml这一行,在后面加入indexhtmlvar indexhtm indexphp

(4)找到#LoadModule ssl_module modules/mod_sslso这行,在后面加上一行:LoadModule php5_module d:/phpWeb/php/php5apache2_2dll

(5)找到AddType application/x-gzip gz tgz这行,在后面加上一行:AddType application/x-httpd-php php

4配置php

步骤:(1)找到c:\windows\phpini并打开 (刚才拷进去的)

(2)找到extension_dir = "/" 改为 extension_dir = "d:/phpWeb/php/ext"

(3)找到;extension=php_mysqldll将前面的;号去掉

(4)找到;sessionsave_path = 去掉前面;并设路径"d:/phpWeb/php/session_temp"并在该路径下新建文件夹session_temp

搭建步骤:

1、首先准备一下软件包,如下:

mysql-5022targz

httpd-2217targz

php-535targz

以上是LAMP搭建必备的安装包,可以去各个官方网站上下载,至于这里为什么选择源代码安装,当然rpm包也可以安装,选择源代码安装的目的就为了让我们更详细的了解LAMP其中复杂的配置过程。这三个安装包没有先后的安装顺序,先将以上三个包上出至Linux下的/usr/local/src目录下,并给予可执行权限。

2、安装mysql,在之前的博文中已经详细介绍了mysql rpm包的安装方法,这里要介绍mysql的源代码编译安装方式,进入已经部署好饿的Centos linux学习环境,通过命令ps -ef | grep mysql来查看是否有运行的mysql进程,然后可以通过一些命令来查找mysql是否已经安装,具体如下:

》groupadd mysql

》 useradd mysql -g mysql //创建mysql用户,并将用户指定至mysql组

》 tar -zxvf mysql-5022targz //解压到mysql-5022目录下

》/configure --prefix=/usr/local/mysql //这里是配置mysql的安装目录

》make

》make install //安装

》cp support-files/my-mediumcnf /etc/mycnf //待安装完成之后,将当前目录下的配置文件拷贝到系统配置文件下,并更名为mycnf

》cd /usr/local/mysql //切换到mysql安装目录下

》chown -R mysql //将该目录的用户权限全部更改为mysql用户

》chgrp -R mysql //将该目录的用户组全部更改为mysql用户组

》bin/mysql_install_db --user=mysql //将mysql目录的数据使用权限指定为mysql

》chown -R mysql var

》bin/mysqld_safe --user=mysql & //指定mysql用户启动mysql

》bin/mysqladmin -u root password 新密码 //执行这个命令用于设置或者更改数据库的密码

》cp /usr/local/src/mysql-5022/support-files/mysqlserver /etc/rcd/initd/mysql //这里将mysql的启动文件拷贝到系统的启动目录下

》chmod +x /etc/rcd/initd/mysql //给系统目录的mysql命令以可执行权限

》chkconfig --add mysql //将mysql启动添加到系统自启动列表下

当然这里还有另外一些方法来设置mysql自动启动,以上就是mysql源代码编译安装全过程,为了验证mysql安装是否成功,需要执行如下命令:

》/usr/local/mysql/bin/mysqld_safe --user=mysql & //启动mysql数据库服务

》/usr/local/mysql/bin/mysql -uroot -proot //进入并访问mysql数据,如果进入mysql数据库命令行,说明mysql数据库安装成功。

如图所示:

3、安装apache,命令行如下:

》tar -zxvf httpd-224targz

》cd httpd-224

》/configure --prefix=/usr/local/apache --with-mysql=/usr/local/mysql --enable-module=so --enable-shared=max //配置与mysql的关联,并启动动态连接库

》make

》make install

启动apache服务,如下图所示:

设置apache自动随操作系统启动,命令如下:

》echo "/usr/local/apache/bin/apachectl start" >> /etc/rclocal //将apache的启动程序命令放置系统启动文件下,当然mysql也可以这么设置

4、安装php,命令行如下:

》tar -zxvf php-522targz

》cd php-522

》/configure --prefix=/usr/local/php/ --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --enable-sockets //这里是配置php与apache、mysql的关联

》make

》make install

》cp phpini-development /usr/local/php/lib/phpini //这里需要注意的是,在新版的php配置文件将phpini-dist更改成phpini-development

》vi /usr/local/php/lib/phpini //这里需要将register_globals=Off更改on模式,还有时间格式改为本地

上述就是PHP的安装过程。

5、测试

安装完成以上个包之后,需要更改apache的配置文件,来达到解析php文件的目的

》vi /usr/local/apache/conf/httpdconf

通过“/”来查找到AddType application/x-gzip tgz,这里需要注意的是,不是带有的注意标记的#,在找到AddType application/x-gzip tgz的后面添加如图所示文件:

添加文件为AddType application/x-httpd-php php phtml,表示apache服务中可以解析php格式文件

接下来要检查apache目录下生成的php动态连接库文件,在目录/usr/local/apache/modules,找到是否存在 libphp5so文件

一系列安装结束之后,通过一个简单的php测试页面来测试LAMP环境搭建成功与否。

vi /usr/local/apache/htdocs/indexphp

内容为:

<php

phpinfo();

>

启动httpd

在浏览器上输入:http://ip/indexphp,里面分别显示php、apache和mysql的相关版本信息等内容。

什么是LAMP?

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案.

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何在Ubuntu上搭建一台安全的Apache Web服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情