dnscrypt 安全的dns

可以说DNS是整个Internet中,最薄弱的部分(虽然其他某些部分也不安全)。因为这个dns是UDP的,可以随便被修改,这样就会让你上冒牌网站了。想想就吓尿了。这也被我们伟大的墙利用了,当然这只是小手段。最近(2014.2.14)左右,youtube可以“直接”上了。瞬间让我看到了希望。习大大果然不同凡响。

为什么说是“直接”上呢?因为墙降低了手段,只用了DNS污染,只要DNS正确就能上youtube。这就方便多了,网速也很快。虽然我不怎么上youtube,但这是一种自由的象征。

不仅如此,如果你遭受了ARP攻击,而采用下面的DNS查询方式可以免于被DNS污染。可见安全的DNS是非常重要的,当然也是非常有意思的。

DNSCrypt 是由来已久的,目前有很多“free, DNSCrypt-enabled resolvers”,像opendns(我就用过这个,感觉很可以,所以就一直用着了。我就担心这些dns被墙掉)。而只有服务器也不行啊,需要工具与服务器交流。我使用的是dnscrypt-proxy。公开源码,可以自己编译。arch直接安装就好了。

完成以上这几个步骤,可以打开测试地址,默认的dns解析服务器是opendns的,配置文件是/etc/conf.d/dnscrypt-proxy,可以进行修改,具体man dnscrypt-proxy。

如果测试成功,就可以进行下一步,不行的话也试试下一步再重启。

光有DNSCrypt还不是完美的,因为他没有cache,每次有query他都会重新访问OpenDNS。这样效率就低了,可以看看有cache和没有cache的区别。

没有cache:

cpu8

有cache:

cpu9

我是用unbound解决这个问题的,当然还有代替工具powerdns这样的,但是用不来。

修改/usr/lib/systemd/system/dnscrypt-proxy.service, port 40。或者修改/etc/conf.d/dnscrypt-proxy,里面的DNSCRYPT_LOCALPORT=40。

准备完毕,可以开机启动服务。

最好重启一下。

最后有个问题,就是这里的53端口被监听了,我就不能建ap了,这个还不知道原理,以后再思考一下怎么解决。

链接:

gnupg(gpg) 加密文件

GnuPG是opengpg的开源实现,用来加密数据和验证签名。 集成很多密码协议,使用也比较简单。

首先来个开胃小菜:这是使用手动输入密码的AES对称加密协议来加密test.txt文件,默认输出为test.txt.gpg, 使用 -armor后可以让加密数据转化为ascii文本,便于传输。

接下去是正式gpg用法。具体可以 man gpg。

生成密钥:

会询问key的类型,长度等等,还有id和email一 一写上去。这里会要求输入passphrase,一定要注意安全。这个passphrase是整个系统中最薄弱的部分,man里也这样提到了,因为这个可以被brute crack。最后会提示多动动键盘什么的,估计要3分钟左右,这不是死机,实在产生足够随机的伪随机数。所以要多动键盘,运行一下其他任务什么的,如果不这样做,等待的时间更长。

使用下面的命令,就可以把key转换成ascii,可以email给好友,让他发加密的文件给你,增加安全性。或者直接把key上传到服务器,让其他人都能找到你的key。不要怀疑安全性。

 

有了key就可以加密解密了。有很多地方需要使用密码,密码不能太简单,也不能重复,忘记了就麻烦了,所以最好是记下来,记到哪呢? 我的做法是这样的。记到文件里,然后使用pgp加密,然后传到网盘啊什么地方的备份一下,要更新密码时再解密再加密。虽然效率低,但安全。如果你觉得密码单一不是问题的话,我可以给你看几个被拖库的数据库,看看你在不在里面。

key管理,可以直接使用gpg –edit-key user_id. 进入控制台后,有addkey delkey等命令,不详细说了,直接help就好了,别忘了save,否则什么有不会改变。下面是各个key后面字母的含义。

参考:

    1. 手动输入密码对称加密
    2. 什么是subkey
    3. 快速入门
    4. digital ocean 在vps上使用gnupg
    5. 增加熵
    6. archlinux GnuPG
    7. 字母含义
    8. 不错的指导
    9. 补充

 

ssh 无密码验证

    使用SSH也不是绝对安全的,因为不可能阻止别人暴力破解你的密码。如果密码过于简单,那更容易被攻击了。

    保护主机安全是使用VPS的必修课。大多数时候,我们都使用SSH来管理系统。这时如果密码很长很复杂,谁都不乐意,不仅是登录,每次sudo都要打密码(我可不会用root裸奔)。所以较好的解决方案是使用不那么复杂的密码,而登录不输密码。两全其美。

    1. 生成ssh密钥对:  ssh-keygen -t rsa
      默认key目录是~/.ssh   其中id_rsa是私钥不可以公开,id_rsa.pub是公钥可以随意公开,然后也是需要传给目标服务器的。
      cpu7
    2. 将公钥加入目标主机的~/.ssh/authorized_key
      这里方法就好多了,最简单的是先ssh过去,然后vim ~/.ssh/authorized_key,再粘帖。不管这么低端的,来几个酷炫的。 

      • scp -P 22 ~/.ssh/id_rsa.pub [ip]:id_rsa.pub然后再ssh到目标主机,执行 cat id_rsa.pub >> ~/.ssh/authorized_key
        还是麻烦啊。
      • cat ~/.ssh/id_rsa.pub | ssh -p 22 user@ip "cat >> ~/.ssh/authorized_keys"
        好了,输完密码就能成功配置,下次ssh就不需要再打密码了。这个方法牛X啊,ssh居然还有这种用法,完全不知道啊。
      • ssh-copy-id -p 22 user@ip  最简单的。。。

    到此,目标主机已经不用输密码就可以登录了。然后还有一些技巧可以提高安全性。修改ssh配置文件:

  1.  修改ssh的默认端口,默认为Port 22,可以修改为其他的,以后登录时加上-p 或者 -P
  2. 不允许密码登录。PasswordAuthentication no     (要时刻备份密钥,否则没了就跪了)
  3. 不允许root登录。PermitRootLogin no
  4. 上面是基本的,还有其他的自己适当调整

    另外android也有很好的ssh客户端,叫server auditor,支持无密码登录内置key生成工具,可以试一试,也可以防止丢了一个私钥,做个备份。

    参考链接: