使用Let's Encrypt 给网站加 HTTPS

2017.03.27更新:/usr/bin/letsencrypt/usr/bin/certbot 替代,更新文章中所用到的命令。参考:Archlinux Let's Encrypt Wiki

Let's Encrypt 证书生成不需要手动进行,官方推荐 certbot 这套自动化工具来实现。3步轻松搞定:

  1. 下载安装 certbot (Let’s Encrypt项目的自动化工具)
  2. 创建配置文件
  3. 执行证书自动化生成命令

环境:
centos7 64位
nginx

一、安装certbot

$yum -y install certbot

#检查安装是否成功

$certbot --help

二、生成域名证书

这里使用的域名为 blog.haohtml.com, 网站根目录为 /data/wwwroot/haohtml/blog

#为一个已经存在的站点生成证书文件,一个证书可以多个域名共用,一次也可以生成多个域名谈证书(内容放在了同一个文件里),命令格式如下:
$certbot certonly --webroot -w /data/wwwroot/haohtml/htdocs -d www.example.com -d example.com -w /var/www/other -d other.example.net -d another.other.example.net

在终端里执行命令

$certbot certonly --webroot -w /data/wwwroot/haohtml/blog/ -d blog.haohtml.com

会看到以下输出信息:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blog.haohtml.com
Using the webroot path /data/wwwroot/haohtml/blog for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/blog.haohtml.com/fullchain.pem. Your cert
will expire on 2017-09-18. To obtain a new or tweaked version of
this certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

表示生成证书成功,证书目录为/etc/letsencrypt/live/blog.haohtml.com/,我们看以下此目录都有哪些文件

$ls -al /etc/letsencrypt/live/blog.haohtml.com/

cert.pem chain.pem fullchain.pem privkey.pem README
其中前四个文件均为连接文件

下面我们添加一个启用https的虚拟主机配置文件,内容如下

三、配置虚拟主机
添加一个blog.conf文件(nginx会加载指定目录下的所有,conf文件),内容如下(wordpress)

server {
    listen 443;
    server_name blog.haohtml.com;
    root /data/wwwroot/haohtml/blog;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/blog.haohtml.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.haohtml.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/blog.haohtml.com/chain.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security max-age=15768000;
    ssl_stapling on;
    ssl_stapling_verify on;


    location / {
            index index.html index.php index.htm index.shtml;
    }


    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;

    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php){
                rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
                rewrite (.*) /index.php;
    }

    location ^~ /.well-known {
        allow all;
        alias /data/wwwroot/haohtml/blog/.well-known/;
        default_type "text/plain";
        try_files $uri =404;
    }

    location ~* ^/(data|images|data|uploads)/.*\.(php|php5)$
    {
            deny all;
    }

    location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /data/wwwroot/haohtml/blog$fastcgi_script_name;
            include        fastcgi_params;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
            expires      30d;
    }

    access_log /var/log/httpd/blog/access.log;
    error_log  /var/log/httpd/blog/error.log;
}

四、重启Nginx,测试https是否生效

测试一下nginx配置文件是否存在错误

$/usr/local/nginx/sbin/nginx -t

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

$/usr/local/nginx/sbin/nginx -s reload

此时,打开域名 https://xxxxx 应该可以看到效果了

五、定时更新证书

由于 [Let’s Encrypt] 的证书目前有效期为3个月,过期后可以免费重新生成证书,可视为免费证书,只需要添加一个crond脚本即可.(好像每天生成证书有次数限制,一般也用不着如此频繁的操作)

将下行添加到 /etc/crontab文件里,并设定每三个月自动更新一次(脚本不确定是否正确)或者按月份写几个,每三个月为一个周期。

0 0 1 */2 * certbot renew

六、后期优化

由于我们以前网使用的是http访问,现在想平滑过度到https,而还要考虑到seo效果,如需要当用户访问http网站时让其自动转到https网站相对应的网址即可,nginx的配置如下:

server {
listen 80;
server_name www.abc.cn;
rewrite ^(.*) https://$server_name$1 permanent;
}

.用专业在线工具测试你的服务器 SSL 安全性
Qualys SSL Labs 提供了全面的 SSL 安全性测试,填写你的网站域名,给自己的 HTTPS 配置打个分。

参考:https://ksmx.me/letsencrypt-ssl-https/

DDOS攻击分析与预防专题

DDOS是英文Distributed Denial of Service的缩写,意即"分布式拒绝服务",DDOS的中文名叫分布式拒绝服务攻击,俗称洪水攻击。

DDoS攻击概念
DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了 - 目标对恶意攻击包的"消化能力"加强了不少,例如你的攻击软件每秒钟可以发送3,000个攻击包,但我的主机与网络带宽每秒钟可以处理10,000个攻击包,这样一来攻击就不会产生什么效果。 Continue reading

浅析DDOS攻击原理以及预防措施

一、阻断服务(Denial of Service)

在探讨 DDoS 之前我们需要先对 DoS 有所了解,DoS泛指黑客试图妨碍正常使用者使用网络上的服务,例如剪断大楼的电话线路造成用户无法通话。而以网络来说,由于频宽、网络设备和服务器主机等处理的能力都有其限制,因此当黑客产生过量的网络封包使得设备处理不及,即可让正常的使用者无法正常使用该服务。例如黑客试图用大量封包攻击一般频宽相对小得多的拨接或 ADSL 使用者,则受害者就会发现他要连的网站连不上或是反应十分缓慢。   Continue reading

ipfw 中文手册

IPFW(8) -- IP防火墙和流量整形的控制程序

名称:ipfw – IP防火墙和流量整形的控制程序

ipfw语法:

ipfw [-cq] add rule

ipfw [-acdefnNStT] [set N] {list | show} [rule | first-last ...]

ipfw [-f | -q] [set N] flush

ipfw [-q] [set N] {delete | zero | resetlog} [number ...]

ipfw enable

{firewall | altq | one_pass | debug | verbose | dyn_keepalive}

ipfw disable

{firewall | altq | one_pass | debug | verbose | dyn_keepalive}

ipfw set [disable number ...] [enable number ...]

ipfw set move [rule] number to number

ipfw set swap number number

ipfw set show

ipfw table number add addr[/masklen] [value]

ipfw table number delete addr[/masklen]

ipfw table number flush

ipfw table number list

ipfw {pipe | queue} number config config-options

ipfw [-s [field]] {pipe | queue} {delete | list | show} [number ...]

ipfw nat number config config-options

ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname

描述:

ipfw是FreeBSD下的一个用户界面,它用来控制ipfw防火墙和流量整形。

ipfw的配置,也叫做规则集,它是由一系列的规则组成的,这些规则的编号是从1到65535。通过ipfw的数据包可以来自协议栈的许多各个的地方(这主要依赖于数据包的来源和目的,某些数据包很可多次经过防火墙)。数据包在通过防火墙的时候,要和防火墙规则集逐条对比。如果发现匹配的规则,则执行相应规则的动作。 Continue reading

基于IP Filter的NAT透析

摘 要:本文依托cnfug开发的Floppy Firewall为平台,以嗅探器抓包分析结合相应的路由转发规分析IPFilter对数据报进行转发和NAT的机理,最终针对实际案例的需求提出解决方案。
关键词:NAT FreeBSD 嗅探器 TCP/IP
一、前言
如今很多企事业单位拥有自己的LAN,介入互联网的方案比较流行的方案是选用如图1-1的拓扑结构来构建网络。防火墙服务器充当过滤和转发数据报的中间代理,专用服务器安置在防火墙后面避免受到攻击。这类防火墙有硬件和软件之分,对于一个普通小型局域网来说,软件防火墙已经可以满足需求,而软件防火墙领域几乎是IPfw和IP Filter的天下,它们的功能非常强大,安装也非常容易,考验防火墙管理员的主要是如何配置防火墙的rules,现在在网上可以很容易地找到如何配置 rules的文献,但是很少有介绍其工作机理的资料,本文将以一个基于IP Filter防火墙的实际案例来分析这些rules的工作机理,并将其运用到实际案例中解决特殊的需求问题。

图1-1 常用的拓扑结构 Continue reading

IP Filter Based Firewalls HOWTO

Brendan ConoboyErik Fichtner
$FreeBSD: src/share/examples/ipfilter/ipf-howto.txt,v 1.1.2.1 2002/04/27 20:04:18 darrenr Exp $

摘要:本文档向初学者介绍IP Filter防火墙软件,同时介绍一些设计防火墙的基本方法。

1.1声明

作者对因该文档所造成的破坏概不负责,该文档只是介绍基于ipfilter的防火墙。如果你觉得你采取的行动不太合适的话,你应该停止阅读该文档,请有资格的安全专家为你安装防火墙。

1.2 版权

除非其它情况,该文档版权属于每一个作者。部分或全部文档可以以各种介质复制和重新发布,只要你在所有的拷贝中保存版权声明。任何商业性质的发布应该通知文档的作者。
所有的翻译文档及其它衍生文档应该保留版权声明。

1.3 哪里可以获得重要文档

ipf官方网站:http://coombs.anu.edu.au/~avalon/ip-filter.html
文档的最新版本可以在这找到:http://www.obfuscation.org/ipf/ Continue reading

使用FreeBSD构建流量控制防火墙

概述

利用FreeBSD内核支持的BRIDGE、IPFIREWALL以及DUMMYNET选项,可以建立基于FreeBSD的透明流量控制防火墙(桥接模式),起到限制流量和包过滤的功能。

准备

可以在任何FreeBSD的兼容硬件上构建流量控制防火墙,但是基于性能和管理上的考虑,建议:

使用Intel PII450以上的处理器

使用至少128MB RAM

使用高性能10/100Mbps自适应网络适配器

如果多于一组桥接设备,建议使用双处理器系统

另外准备一块单独的网络适配器用于管理 Continue reading

FreeBSD下获取同一网段下所有机器MAC地址的办法

机房有机器中毒,发arp包,通过arpspoof虽然可以解决,也可以找到中毒机器的mac地址,但在机房设备不足的情况下,很难查到mac地址对应的IP。
然后我们可以通过一个循环,使用arping来对整个子网下面的机器发一个包,这样就可以在arp下面查看到相应的mac缓存,进而得到对应的IP地址。
1:首先安装bash

cd /usr/ports/shells/bash2
make install clean

ln -s /usr/local/bin/bash /bin

我习惯把bash ln到/bin下,当然你也可以不做这一步。

2:安装arping

cd /usr/ports/net/arping
make install clean

3:新建个shell Continue reading

利用 FreeBSD 组建安全的网关

作者:iceblood
E-Mail: iceblood@163.com
写作日期:2002-03-03
FreeBSD在网络服务器的领域里占有一席之地,不管是在高端应用,还是小型企业里,使用FreeBSD做服务器都是不错的选择,但是如何才能建立一个安全的网络呢?
首先我们来做一个这样的假设,某公司有两台服务器,需要建立一个以FreeBSD为平台的网关,并且还能提供电子邮件、DNS、WEB等服务,看起来好象这是一个很简单的事情,然而要建立一个安全性高的却不简单,在此我将为大家介绍如何去做,首先我凭着自己对FreeBSD的熟练程度,做了以下设计:
Internet
______|_____
|                                |
|        Gateway      |
------------|-------
____________|______________
___|____                            ____|____
|                   |                           |                   |
|     LAN     |                           |    WWW   |
-------------                            ------------
以上是我为该公司设计的网络结构图,首先我们来分析一下这个图,由于Gateway是一个与Internet直接连接的服务器,糟受的攻击自然也是最多的,所以也是最危险了。而且由于该服务器担任着公司的网关,该服务器只要一出问题,也将影响到全公司。为了稳定性、安全性,我考虑该服务器要跑的服务越少越好。服务越少,那么漏洞出现的可能性也越少。而WWW服务器由于放在了Gateway里面,受Gateway的保护,所以一般来说遭受的攻击比较少,所以一般可以满足足够多的服务,但是这些服务怎么样才能让Internet上的人访问呢?这就会在下面我们详细介绍了。 Continue reading

用IPFW实现BSD防火墙(转载)

FreeBSD操作系统本身带有二种内置的IP信息包检查机制:ipfw和ipfilter。在创建决定允许哪些信息包进入系统、哪些信息包会被拒之系统门外的规则集方面,二种机制各有自己独特的语法。在这里,我们将讨论如何使用ipfw配置系统的防火墙。

在能够使用ipfw防火墙机制之前,我们需要在FreeBSD的内核配置文件中添加一些选项,并重新编译内核。如果不太清楚如何编译FreeBSD的内核,请参阅相关的手册http://www.51docs.net/FreeBSD-Manual/kernelconfig-building.html

可供ipfw使用的选项有好几个,我们首先从讨论LINT开始。在这里,我通过使用“/”符号进行搜索,以便能够快速地发现恰当的小节:

cd /usr/src/sys/i386/conf
more LINT
/IPFIREWALL

# IPFIREWALL和ipfw软件,这二者就可以支持IP防火墙的构建。

IPFIREWALL_VERBOSE向系统的注册程序发送注册信息包,IPFIREWALL_VERBOSE_LIMIT限制一台机器注册的次数。注意:如果没有在启动时添加任何允许IP访问的规则,IPFIREWALL的缺省配置是禁止任何IP数据包进出系统的,这时你甚至不能访问网络中的其他机器。建议首次使用这一功能时在/etc/rc.conf中设置firewall_type=open,然后在对内核进行测试后再在/etc/rc.firewall仔细地调整防火墙的设置。IPFIREWALL_DEFAULT_TO_ACCEPT使得缺省的规则允许所有形式的访问。在使用这一变量时应该非常小心,如果黑客能够突破防火墙,就能任意访问你的系统。 Continue reading