开启HSTS教程

HSTS简介

 

HTTP严格传输安全(英语:HTTP Strict Transport Security,缩写:HSTS)是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。

HSTS优点

HSTS可以用来抵御SSL剥离攻击。SSL剥离攻击是中间人攻击的一种,由Moxie Marlinspike于2009年发明。他在当年的黑帽大会上发表的题为“New Tricks For Defeating SSL In Practice”的演讲中将这种攻击方式公开。SSL剥离的实施方法是阻止浏览器与服务器创建HTTPS连接。它的前提是用户很少直接在地址栏输入https://,用户总是通过点击链接或[失效链接]3xx重定向,从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http[失效链接]://,达到阻止HTTPS的目的。
HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。
另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。

HSTS不足

用户首次访问某网站是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。

由于HSTS会在一定时间后失效(有效期由max-age指定),所以浏览器是否强制HSTS策略取决于当前系统时间。部分操作系统经常通过网络时间协议更新系统时间,如Ubuntu每次连接网络时,OS X Lion每隔9分钟会自动连接时间服务器。攻击者可以通过伪造NTP信息,设置错误时间来绕过HSTS。

 

 

浏览器支持

 

Chromium和Google Chrome从4.0.211.0版本开始支持HSTS

Firefox 4及以上版本

Opera 12及以上版本

Safari从OS X Mavericks起

Internet Explorer和Microsoft Edge从Windows 10开始支持

 

 

开启HSTS

1.需要先将HTTP强制跳转到HTTPS链接

2.Apache与Nginx需要添加在监听的443端口的配置文件.Vestacp是在snginx.conf里面.

 

Apache

 

编辑站点配置文件在443端口区修改为以下内容

 

 

Lighttpd

增加到 Lighttpd 配置文件:/etc/lighttpd/lighttpd.conf

 

 

Nginx

Nginx最为简单,在server_name下面另起一行增加即可

LNMP编辑你的网站目录下的: /usr/local/nginx/conf/vhost/xxx.com.conf

 

 

IIS

需要第三方组件:http://hstsiis.codeplex.com

 

修改好配置文件后,重启WEB服务器即可.

 

参数说明

其中:

  • max-age是必选参数,是一个以秒为单位的数值,它代表着HSTS Header的过期时间,通常设置为1年,即31536000秒。
  • includeSubDomains是可选参数,如果包含它,则意味着当前域名及其子域名均开启HSTS保护。
  • preload是可选参数,只有当你申请将自己的域名加入到浏览器内置列表的时候才需要使用到它。

 

HSTS Preload List

加入HSTS Preload List

打开:

https://hstspreload.org/

 

输入你的域名后点击“”Check HSTS preload status and eligibility

 

 

Ubuntu/Debian 彻底卸载Apache2

apache-logo

前面文中有提起卸载webmin等,这篇主要是彻底卸载apache,不然安装其他的面板可能会出现问题.

 

卸载Apache2

输入以下的命令进行卸载.

删除相关文件

卸载完毕后,删除一些原来的目录,记得备份相关文件

删掉/etc/apache2 文件夹:

删掉/var/www文件夹:

删掉/etc/init.d/apache2文件:

删掉libapache2-mod-jk文件:

为了删除的更干净,我们最好查找一些配置文件并删除.

删除关联,清理残留

 

 

输入完成上面的命令后基本可以删掉所有有关Apache的配置等.下面就可以重新安装或者安装其他的面板了.

 

在以前有详细写过如何卸载Mysql:https://www.xlboo.com/9654.html

Apache – RewriteCond: NoCase option for non-regex pattern ‘-f’ is not supported and will be ignored

 

发现Mylsq异常退出,查看了一下apache的日志发现有以下的问题:

 

解决方案

将 /.htaccess 文件中的

改为

即可.

 

Invalid command ‘php_admin_value’, perhaps misspelled or defined by a module not included in the server configuration解决办法

今天使用webmin升级的时候,发现apache没有启动,故启动出现以下的报错.

php-admin-v

 

出现这个问题呢 主要是服务器没有libphp5.安装即可解决

安装前记得要升级一下源

解決方法

Ubuntu

Debian

 

Centos

然后如同上面代码所示重启以下apache服务器修复

.htaccess下的301重定向

301:永久性重定向;302:暂时性重定向(有弊端)

1.重定向domain.com到www.domain.com

这种重定向旨在使域名唯一,是网站SEO必须要做的,后面重定向www.domain.com到domain.com也是出于同样的原因,只是形式不同。
打开.htaccess文件,加入以下规则。(下面的规则是针对主域名的,子域名要修改)

2.重定向www.domain.com到domain.com

3.重定向olddomain.com到www.newdomain.com

 

4.重定向olddomain.com to newdomain.com

5.重定向domain.com/file/file.php 到 otherdomain.com/otherfile/other.php

 

.htaccess重定向

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。国内的大多数虚拟主机就没有这个功能。我所知道的提供这个功能的有康盛世纪(就是Discuz的论坛服务商)[1]。
启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。
笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。
例子:

RewriteRule ^help/([\w]+)\.htm$ /help/$1.asp [NC]

URL RewriteRule – httpd.conf和.htaccess中的不同点

相信熟悉Apahce的人一定知道URL Rewrite。Apache的mod_rewrite模块,可以帮助人们构造出各种各样美化后的URL。在Apache中使用URL Rewrite,可以有多种方式:一种是直接在httpd.conf中添加相应rewriterule(重写规则),另一种是在网站根目录下的.htaccess中添加rewriterule(重写规则)。但是,需要注意的是,在这两个文件中添加到URL重写规则略有不同。而这些不同,对于不熟悉的人来说,很可能会困扰许久。

在Httpd.conf中:

(1)Request URI的开头必须以斜线开始;

(2)在寻找Cache文件的时候,必须在开头加上斜线;

(3)在使用-f或者!-f的时候,必须在开头加上斜线。

在.htaccess中,情况完全相反:

(1)Request URI的开头不能有斜线;

(2)在寻找Cache文件的时候,不能在开头加上斜线;

(3)在使用-f或者!-f的时候,不能在开头加上斜线。

简单而言,就是在httpd.conf中,重写前后的URL在使用绝对路径时需要添加斜线“/”,表示从网站根目录开始;而在.htaccess中,则不需要。以下两个简单的例子:

httpd.conf

 

.htaccess

 

.htaccess正则表达式

# 位于行首时表示注释。
[F] Forbidden(禁止): 命令服务器返回 403 Forbidden错误给用户浏览器
[L] Last rule(最后一条规则): 告诉服务器在本条规则执行完后停止重写URL
[N] Next(下一条规则): 告诉服务器继续重写,指导所有重写指令都执行过
[G] Gone(丢失): 命令服务器返回410 GONE(no longer exists)错误消息
[P] Proxy(代理): 告诉服务器通过mod_proxy模块处理用户请求
[C] Chain(捆绑): 告诉服务器将当前的规则和前面的规则进行捆绑
[R] Redirect(重定向): 命令服务器发出重定向消息,以便用户浏览器发出rewritten/modified(重写/修改)URL的请求
[NC] No Case(不区分大小写): 对客户端请求的URL不区分大小写
[PT] Pass Through(放行): 让mod_rewrite模块将重写的URL传回给Apache做进一步处理
[OR] Or(逻辑或): 用逻辑“或”将两个表达式连接在一起,如果结果为“真”,则会应用后继的相关规则
[NE] No Escape(禁用转义): 命令服务器在输出时禁用转义字符
[NS] No Subrequest(禁用子请求): 如果存在内部子请求,则跳过当前命令
[QSA] Append Query String(追加查询字符串): 命令服务器在URL末尾追加查询字符串
[S=x] Skip(跳过): 如果满足某指定的条件,则跳过后面第x调规则
[E=variable:value] Environmental Variable(环境变量): 命令服务器将值value赋给变量variable
[T=MIME-type] Mime Type(MIME类型): 声明目标资源所属的MIME类型
[] 匹配一个字符集合,例如[xyz]可以匹配x, y或者z
[]+ 例如[xyz]+会以任何顺序、次数匹配x,y,z的出现
[^] 字符^表示字符集的补集。[^xyz]将匹配没有x,y或者z的字符串
[a-z] 连字符(-)表示匹配从字母a到字母z的所有字符串
a{n} 指定字母a出现的次数为n次,满足该条件时匹配。例如x{3}仅与xxx匹配
a{n,} 指定字母a出现的次数至少为n次,例如x{3,}可以与xxx或者xxxx等匹配
a{n,m} 指定a出现的次数至少为n到m次。
() 用于将正则表达式分组,满足第一组正则表达式的字符串会被存储在变量$1中,以此类推。如果括号中的不是正则表达式,例如(perishable)?press 将能够匹配有或者没有perishable前缀的press
^ 位于行首。注意:和中括号中的[^]意义不同。
$ 位于行末
? 例如 monzas? 会匹配 monza 或者 monzas,而 mon(za)? 会匹配 mon 或者 monza。又如 x? 会匹配“空字符” 或者 一个x
! 逻辑非。例如“!string” 将会匹配除了“string”以外的所有字符串
. 表示任意字符串
– 命令Apache“不要”重写URL,例如“xxx.domain.com.* – [F]”
+ 匹配至少一个任意字符,例如G+匹配以G开头、并且后面至少有一个字符的字符串
* 匹配零个或多个字符,例如“.*”匹配任意字符串
| 逻辑“或”,与[OR]不同的是,它只匹配字符串,例如(x|y)匹配x或者y
\ 转义字符。可以转义左括号( 尖字符^ 美元符号$ 感叹号! 点. 星号* 管道符号| 右括号) 等
\. 转义为点字符(点字符在正则表达式中可以匹配任意字符)
/* 零个或多个正斜杠
.* 零个或多个任意字符(即,匹配任意字符串,包括空字符)
^$ 匹配“空字符”、“空行”
^.*$ 匹配任意字符串(仅限一行)
[^/.] 匹配既非“正斜杠”也不是“点”的任意字符
[^/.]+ 匹配第一个字符既非“正斜杠”也不是“点”,后继字符可以是“正斜杠”或者“点”的字符串
http:// 匹配“http://”
^domain.* 匹配以“domain”开始的字符串
^domain\.com$ 仅匹配“domain.com”
-d 测试字符串是否是已存在的目录
-f 测试字符串是否是已存在的文件
-s 测试字符串所指文件是否有“非零”值
HTTP协议重定向编码

301 – Moved Permanently 永久重定向
302 – Moved Temporarily 临时重定向
403 – Forbidden 屏蔽 没有权限访问此站。
404 – Not Found 找不到页面
410 – Gone DNS缓存问题 解决方法:cmd——>ipconfig/flushdns

Apache – 服务器安全设置

Apache是世界上占用率最大的web服务器软件,以安装、稳定而著称,默认安装后有一些限制较为宽松,可进一步设置加固其安全。
1.隐藏版本信息:

2.以低权限用户运行:

3.网站目录设定:

4.隐藏php版本,编辑php配置文件php.ini,添加或修改: