本站已正式添加DNS CAA

DNS Certification Authority Authorization (DNS CAA)是通过为域名添加一条DNS CAA记录,来限制特定CA为该域名签发证书的一种方法,从而实现防止攻击者使用其他CA错误签发的证书进行中间人攻击。

现在支持DNS CAA的DNS服务供应商还不多,但从2017年9月8日起,所有CA将被要求检查并遵守域的CAA记录,到那个时候DNS CAA应该会快速普及。另一方面,SSL Labs早在今年年初就开始检测DNS CAA记录,虽然暂时还没有影响到评级,但没有添加CAA记录的域名会被标记为橙色警告。

本站现在添加的CAA记录有两条,分别为

prinice.org. IN CAA 0 issue “letsencrypt.org”
prinice.org. IN CAA 0 issue “comodoca.com”

也就是只允许Let’s Encrypt和COMODO两家CA为本域名签发证书。要了解更多DNS CAA的内容,可以参见本站另一篇文章:DNS Certification Authority Authorization (DNS CAA)简介和部署教程

DNS Certification Authority Authorization (DNS CAA)简介和部署教程

可能很多人对HTTP Public Key Pinning (HPKP)已经有所了解,也有少数网站已经开始部署HPKP用来防止攻击者使用CA错误签发的证书进行中间人攻击。但HPKP由于部署难度非常大,而且不合适的部署会影响网站的访问甚至弄垮一家公司,所以,HPKP的使用率一直不理想。DNS Certification Authority Authorization (DNS CAA)则用另一种实现方法解决了这个问题。

DNS CAA通过添加一条DNS CAA记录,限制可签发该域名证书的CA,从而实现防止攻击者使用其他CA错误签发的证书进行中间人攻击。相比HPKP,DNS CAA的实现更加简单方便,但缺点也很明显。HPKP可以根据需要,固定不同级别的证书,比如可以固定网站现有的证书来实现最高的安全性,也可以固定CA的中间证书,从而保证网站的可访问性,如果你高度信任CA的根证书,甚至还可以固定根证书。而DNS CAA却只能选择一家或几家信任的CA为其签发证书,效果类似于HPKP固定CA的证书。所以,相比HPKP的高部署难度,DNS CAA是一种非常好的折衷方案,并且,它可以和HPKP同时部署。

接下来讲讲如何部署DNS CAA。如果DNS服务提供商有提供CAA记录,那么非常简单,设置一条CAA记录即可,例如Let’s Encrypt的CAA记录。

example.org. CAA 0 issue "letsencrypt.org"

也可以增加以下内容,在发现攻击者使用CA错误签发的证书进行中间人攻击时发送邮件告知。

example.org. CAA 0 iodef "mailto:caa@example.org"

但是,现在支持CAA记录的DNS服务提供商还很少,我知道的只有Google Cloud DNS、DNSimple,不过随着Qualys SSL Labs增加对DNS CAA的检测,相信很快会有更多的DNS服务提供商会增加对CAA记录的支持。

如果要自己部署DNS服务来实现DNS CAA,目前BIND ≥9.9.6, PowerDNS ≥4.0.0, NSD ≥4.0.1, Knot DNS ≥2.2.0都已经对其提供较好的支持。

使用iptables-persistent自动加载iptables规则 (Debian)

以前写过一个将脚本写入/etc/network/ifpreup.d目录下来加载iptables规则的方法:开机自动加载iptables规则 (Debian)

但是有些主机商的系统并不能很好地支持这种方式,所以这次再写一篇用iptables-persistent来实现的方法。

值得注意的是,iptables-persistent不仅支持IPv4规则,也支持IPv6规则,功能非常全面,而且使用非常方便。下面重点讲讲如何进行配置,适用于Debian和Ubuntu。

首先配置好iptables规则,如有需要,同时配置好ip6tables规则。

然后安装iptables-persistent。

apt-get update
apt-get install iptables-persistent

安装过程中,交互安装程序会问你是否要导入已经配置的IPv4和IPv6规则,选是就直接导入生效了,非常方便。

那么以后如果要修改iptables或ip6tables的配置怎么办呢?其实也很简单,iptables-persistent的配置文件有两个,分别是/etc/iptables/rules.v4和/etc/iptables/rules.v6。

重新配置完iptables或ip6tables规则后执行以下命令就可以。

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

通过这种方法配置iptables更为简便和直观,更加推荐。

Debian开启BBR算法

Linux Kernel 4.9中,增加了一种全新的TCP拥堵控制算法——BBR,拥有着非常优秀的性能,同时也保证了和其他TCP拥堵控制算法的相容性。BBR的目的是要尽量跑满带宽,并且尽量不要有排队的情况。

由于Linux Kernel 4.9还未正式发布,现阶段Debian要使用BBR,比较简单的方法只有通过experimental源来安装。

虽然Linux Kernel 4.9已经正式发布,但还在Debian的sid源,现阶段Debian要使用BBR,比较简单的方法只有通过sid源来安装。

首先在/etc/apt/sources.list中添加experimental源,用文本编辑器在文件最后添加以下内容。

首先在/etc/apt/sources.list中添加sid源,用文本编辑器在文件最后添加以下内容。

deb http://httpredir.debian.org/debian experimental main
deb http://httpredir.debian.org/debian sid main

需要注意的是,apt-get默认不会安装experimental源的包,所以,用以下命令安装。

apt-get update
apt-get -t experimental install linux-image-4.9.0-rc8-amd64-unsigned
apt-get install linux-image-4.9.0-1-amd64-unsigned

然后重启,默认就是使用新的内核,你也可以选择将老的内核删除。默认的TCP拥堵控制算法不是BBR,还要通过配置文件开启。

创建一个/etc/sysctl.d/local.conf文件,写入以下内容。

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

然后输入以下命令使配置生效。

sysctl --system

再执行以下命令看下,如果结果里面有bbr说明已经成功开启。

sysctl net.ipv4.tcp_available_congestion_control

最后再输入以下命令,看到tcp_bbr模块就说明BBR已经启动。

lsmod | grep bbr

这样就搞定了,等Linux Kernel 4.9正式发布之后,开启就更简单了,Debian 9 (Stretch)正式版发布时应该会直接使用4.9或更新的内核,到时候直接开启就行。

Windows环境nslookup有返回ping不能解析解决方法

单位有几台Windows的电脑无法访问某些地址,用nslookup查看能够顺利返回DNS解析信息,但ping却无法解析。最后发现是DNS Client服务的问题,重启服务就可以解决,但具体原因不详,待进一步查找原因。因为是单位内网机器,补丁也不全,怀疑系统组件或配置被破坏,也可能是病毒影响。

其中一台电脑系统问题太多,最后直接重装系统并安装了全部的安全补丁解决,其他机器安装了全部的安全补丁后解决,看来还是内网安全漏洞导致蠕虫传播引起了这些问题。

用Windows部署内网网络服务的缺点

又一次深深地体会到,内网部署网络服务不要用Windows!

单位的Windows Server 2003服务器彻底让我抓狂,具体不想说了。感觉像我们这种单位还是用CentOS或者上RHEL比较靠谱。

这里就简单说说用Windows部署内网网络服务的缺点。

一个最直接的问题是,一般单位内部的客户机几乎清一色是Windows,并且基本上都是以Windows 7为主,还有大量的Windows XP。别说Windows XP已经停止安全更新服务,如果是内网,别指望每台Windows都能够按时打上安全补丁,而内网的每一台机器,包括服务器本身,通常也会因为防止信息泄露等理由而无法连接外网,国内普通的单位一般也不会部署自己的Windows更新服务器。

综合这些原因,如果内网的服务器用的是Windows操作系统,很容易形成一个从客户端到服务器的安全薄弱环节,每一台机器都有大量的安全漏洞。这时候,如果其中某一台客户端中了蠕虫病毒,很容易导致该蠕虫病毒在内网大范围的传播,而此时,如果服务器也是Windows操作系统,而且还没有修补相应的安全漏洞,很容易造成整个内网的部分服务故障,甚至是彻底瘫痪。而如果服务器是Linux等其他操作系统,即使同样没有及时修补安全漏洞,但因为内核的区别,通常客户机的任何病毒都不会入侵服务器,最多只是会影响内网的效率,而不会导致内网的服务故障和瘫痪。

最后想再说一句,内网的信息安全是很重要的,不是说Windows服务器不好,但如果在内网使用了Windows服务器,一定要及时部署安全更新,修补安全漏洞,如果真的因为某些原因不能连接外网,一定要部署内网的升级服务器,才能保障整个内网的稳定和安全。

开机自动加载iptables规则 (Debian)

Linux下的iptables非常强大,但配置了iptables规则之后每次重启规则就没了,其实,有个很简单的方法可以让iptables规则开机自动加载。本文的方法适用于Debian和Ubuntu,其他Linux应该也类似。

首先,配置好所有的iptables规则。

然后保存到一个文件中。

iptables-save > /etc/iptables

然后创建一个自启动文件,我习惯用vi,其实所有文本编辑器都行。

vi /etc/network/if-pre-up.d/iptables

在里面写如下内容。

#!/bin/sh
/sbin/iptables-restore < /etc/iptables

之后,赋予该自启动文件运行权限。

chmod +x /etc/network/if-pre-up.d/iptables

大功告成,非常简单!赶紧重启服务器验证一下吧,iptables策略应该已经可以开机自动加载了。