Ubuntu 14.04服务器Apache禁止某些User Agent抓取网站

最近网站上,被某些爬虫占用了太大的资源,导致访问不畅,网上搜了一下禁止某些爬虫的办法。

下面这些方法需要同时实施才足够稳妥。

1.在网站根目录下修改或创建 .htaccess文件

注意,这个过滤条件需要添加到整个 .htaccess文件的头部,否则可能由于其他的过滤条件而跳过了这个过滤条件,导致某些情况下不生效。

2.修改 Apache2的配置文件

禁止某些 User-Agent的访问

注意:

中间不可用空格,否则无法成功生效。

3.网站根目录下面增加 robot.txt,禁止爬虫

4.对于使用 ProxyPass, ProxyPassReverse代理转发的情况

使用如下配置进行过滤

注意:

中间不可用空格,否则无法成功生效。

5.验证刚刚的服务器设置是否已生效

刚刚的设置完成后,我们需要修改浏览器的 User Agent,来验证一下我们的设置是否已经生效了。
Chrome-55.0为例, Windows下面按下 F12,在弹出的窗口中进行如下操作:

参考链接


服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

Apache-2.4使用ServerAlias实现同一个网站绑定多个域名(Ubuntu 14.04)

最近自己申请了多个域名,打算绑定到同一台服务器上面,网上搜索了一下,很多的答案是开多个主机的方式来处理,方式可以,但是比较繁琐,不如使用 ServerAlias来的方便。
ServerAlias:服务器别名,在 Apache中可以用于设置虚拟主机接收到个域名,也可以用于接收泛解析的域名。具体的设置方法如下:

可以看到如下的配置内容:

注意其中的 ServerAlias字段,就是指定多个域名同时指向的这个服务器的。中间用空格来区分。

注意上述的 ServerAlias中,包含 www字段的域名 www.mobibrw.com,跟不包含 www字段的域名 mobibrw.com声明了两次,目的是某些浏览器在进行域名认证的时候( HTTPS证书校验),采用的是全字匹配,导致尽管这两个实际上是指向同一个地址,但是这些浏览器会报告域名证书不正确。

同样道理,对于使用了 HTTPS的服务器来说,这个更重要

执行跟上述相同设置即可。
如果跟本站一样使用 Lets Encrypt颁发的 SSL证书的网站来说,修改完成配置后,需要重新申请一下证书。

Tomcat 7使用AJP协议导致AJP端口被意外暴露给外网

使用Ubuntu 13.10 Apache 2.2 通过 AJP 整合 Tomcat 7中的方法配置了通过 AJP协议来通过 Apache进行访问的代理。

但是最近发现 Tomcat有时候会崩溃掉。刚刚开始以为是正常的 OOM,后来分析日志,并没有找到相关的记录,反倒是发现如下内容:

于是感觉有些奇怪,因为 AJP协议应该不会发生非常频繁的通信协议错误问题。结果尝试从外网连接 TomcatAjp端口 8009,发现竟然可以通过 telnet连接成功!!说明端口意外暴露给了外网。

那么根据The AJP Connector中的介绍说明(注意 address部分),如果没有指定 IP地址的话,默认是绑定任意地址,这样就导致外网也可以访问这个端口。因此出于安全考虑,我们需要增加这个 address的设置,并且绑定到 127.0.0.1。最终结果如下:

而我在配置的时候,恰恰少设置了 address="127.0.0.1".这个这种错误有些低级啊。

Ubuntu 14.04系统Apache 2.4.7版本使用mod_headers过滤HTTP响应头中的WP-Super-Cache字段

服务器上面安装了 WP-Super-Cache后,服务器的响应报文中会自动增加一个 WP-Super-Cache字段,这个字段会暴露服务器的一些细节,而 WP-Super-Cache的设置中又没有找到去掉这个字段的设置选项,如下图:

WP-Super-Cache-Http-Response

比较简单的解决方法就是,使用 Apache2自带的 mod_headers模块,通过修改 .htacess配置文件的方式来去掉这个响应信息。
1.在网站目录下的 .htacess文件中增加如下语句

2.启用 mod_headers模块

3.重启 Apache2服务

Ubuntu 14.04主机优化加速mod_pagespeed安装使用

背景介绍


谷歌优化加速mod_pagespeed作为Apache HTTP Server的module,它能在服务网页请求的即时做出超过15种的优化调整,包括优化缓存,最小化客户端—服务器往返路程,压缩有效传输体积。
经过实验观察,mod_pagespeed最高能使页面加载时间压缩50%。
项目已经被迁移到了GitHub,链接地址为:https://github.com/pagespeed/mod_pagespeed

Apache mod_pagespeed安装方法


1.下载安装包

32位系统

64位系统

鉴于国内被和谐的情况,可以本站下载 64位Ubuntu点击这里 32位Ubuntu点击这里

2.安装

3.重启 Apache2

4.检查是否安装成功

5.潜在问题

安装这个插件之后,可能会导致页面在不同操作系统之间的显示错乱问题,目前 WordPress上会出现这种问题,应该是缓存导致的问题,因为 WordPress会根据系统,浏览器的不同来进行页面兼容处理,如果直接返回缓存数据,反而会出问题。目前暂时只能是禁用这个插件了。

另外,当主机的 CPU,内存有限的情况下,这个模块反而增加了系统开销,导致系统响应缓慢。有些 Javascript代码被优化后,会工作不正常,目前看来,对小网站来说副作用大于正面作用。

参考链接


主机优化加速mod_pagespeed和ngx_pagespeed安装使用

Ubuntu 14.04编译安装Apache 2.4.20

1.安装开发工具包

2.下载 Apache 2.4.20的源代码

3.安装 apr依赖库

4.安装 pcre

5.解压缩代码

6.配置并编译

参考链接


Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 的方式
Ubuntu 14.04下编译及配置apache2.4(python CGI)
How do I compile the latest apache2 on ubuntu using the original layout, configuration and configure options

Ubuntu 12.04升级到Ubuntu 14.04导致Apache2从2.2升级到2.4版本PHP服务器的重新修正

现象


服务器已经根据Ubuntu 12.04下安装配置Worker工作模式的Apache 支持PHP设置成了 Worker模式,但是当系统从 Ubuntu 12.04升级到 Ubuntu 14.04导致 Apache22.2升级到 2.4版本后,而 MPM模块被还原为 prefork模式,导致大量的 Apache2进程被创建出来,时间稍微一长,系统出现大量的 OOM记录,直到系统最后宕机。

Ubuntu 14.04下查看所有可用的 MPM模块,命令如下:

查看当前正在使用的 MPM模块,命令如下:

可以看到,目前正在使用的模块就是 prefork模块。

使用 apachectl -V | grep -i mpm可以更加清晰的打印出当前使用的模块

注意,在 Ubuntu 14.04下执行 apache2 -l命令与 Ubuntu 12.04下面的输出结果是不同的, Ubuntu 14.04下如果使用 prefork模块输出的信息如下:

默认情况下 Ubuntu 14.04中的 PHP默认是没有线程安全支持,如果使用 mpm_event支持的话,会提示如下信息:

修复方式


1.重新安装系统升级过程中可能会被移除的 PHP-FPM模块

2.关闭 Apache2内建的 PHP支持,开启Apache2的 FastCGI, PHP5-FPM支持

3.修改 PHP5-FPM的配置文件

找到

修改为:

注意,上面修改了四处地方, listen, listen.owner, listen.group, listen.mode
注意,如果提示如下错误:

则说明 listen.owner, listen.group, listen.mode这三行没有打开。
4.重启 PHP5-FPM服务

5.切换 Apache2Event-MPM模式

6.启用 Apache2cache, expire, gzip模块,加强服务器性能

7.卸载 libapache2-mod-php5,否则每次这个模块更新之后,都会导致 apache2被自动切换到 mpm_prefork模式

8.重启 Apache2服务

参考链接


Apache enable worker mpm
How to enable apache2-mpm-worker on ubuntu 13.10?
PHP-FPM not working on Apache2 (Failed to connect to FastCGI server)
Apache can't connect to php5-fpm
Apache 2.4 with php5-fpm

Ubuntu 14.04隐藏Apache-2.4的版本号与操作系统类型

一般情况下,软件的漏洞信息和特定版本,特定操作系统是相关的,因此,软件的版本号以及操作系统类型对攻击者来说是很有价值的。

在默认情况下,Apache会在返回信息中把自身的版本号,操作系统类型都显示出来,如下图:
Apache2-403

这样做会造成潜在的安全风险,导致不必要的攻击行为。

Ubuntu 14.04系统上隐藏 Apache-2.4的版本号与操作系统类型的方法如下:

把文件中的的 ServerTokens OS修改为 ServerTokens Prod, ServerSignature On修改为 ServerSignature Off,如下图所示:

apache2-security-conf

修改完成后,重启 Apache2的服务

修改后的结果如下图所示,已经没有系统类型信息了,仅仅返回了一个 403错误。

Apache2-404-Modify

如何在Ubuntu 12.04上部署免费的SSL证书(Let's Encrypt)

Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。
Let's Encrypt已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被Mozilla、Google、Microsoft和Apple等主流的浏览器所信任,你只需要在Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let's Encrypt安装简单,未来大规模采用可能性非常大。
Let's Encrypt虽然还在测试当中,但是市场需求非常大,已经有非常多的朋友迫不及待地安装并用上了Let's Encrypt。Let's Encrypt向广大的网站提供免费SSL证书,不管是对于网站站长、互联网用户,还是对整个Web互联网,都是非常有利的,它有利于整个互联网的安全。
本篇文章就来为大家讲解一下如何获取Let's Encrypt免费SSL证书,并附上Apache的SSL证书配置方法。

一、 安装Let's Encrypt免费SSL准备


1.Let's Encrypt官网:
官方网站:https://letsencrypt.org/
项目主页:https://github.com/letsencrypt/letsencrypt
2.安装Let's Encrypt脚本依赖环境:(这一部分可以跳过,因为官方提供的Let's Encrypt脚本会自动检测并安装)

 

二、获取Let's Encrypt免费SSL证书


1.获取Let's Encrypt免费SSL证书很简单,你只需要执行以下命令,就会自动在你的VPS上生成SSL证书和私钥。

如果只想生成证书,则最后一句使用如下命令(貌似我目前只能用下面的命令,用上面的命令会报错):

2.执行上述命令后,会弹出对话框,同意用户协议。

3.接着会提示让你关闭Nginx或者Apache。

4.Let's Encrypt需要用到80和443端口,所以你需要关闭那些占用这两个端口的应用。

5.当你看以下内容时,就表明你的Let's Encrypt免费SSL证书获取成功了。

注意: 目前阿里云的服务器域名解析不支持 DNS Certification Authority Authorization (CAA) Resource Record,导致在进行签名的时候返回如下错误信息:

目前还没有解决方法,具体的讨论参考 DNS query timeout #1610

目前根据提交给阿里云的工单,今天2016年1月26日已经正式支持了Let's Encrypt,目前验证,一切正常了。

三、证书续期


Let's Encrypt有多种方法来验证你是否是域名的所有人,而 acme-tiny这个小工具用的是最简单的方法,也就是利用 http文件验证。
简单来说,就是生成一个验证文件,放在 http://www.mobibrw.com/.well-known/acme-challenge/下,Let's Encrypt官方验证这个文件是否存在、内容是否正确。如果一切正确,说明域名是你所有。因此我们下面的脚本中会出现创建,删除 .well-known/acme-challenge/这个目录的动作。

1.生成证书自动化请求脚本

里面内容如下:

2.赋予脚本执行权限

3.脚本添加到计划任务,每隔60天执行一次

在文件的最后增加

4.查看是否添加成功

5.重启 cron服务

参考链接:


如何在Nginx上部署 Let's Encrypt 证书
Let's Encrypt 试用记
免费SSL安全证书Let's Encrypt安装使用教程(附Nginx/Apache配置)

Ubuntu 12.04 Apache2重启提示could not reliably determine the server's fully…问题解决

Ubuntu 环境,当apache2重启提示:

解决的问题是:

打开default文件后,在default文件顶端(第一行)加入:

重启 Apache2就不会提示上述错误了。

参考链接
Ubuntu Apache2重启提示could not reliably determine the server’e fully…问题解决