Domain 说说域名

       Domain Name是互联网的重要一环,没有搜索引擎的话,Domain就是进入网站的第一步。Domain就是一个网站的标识,也体现一个网站的内容。比如slinuxer.com。前面也说过了光有域名是不行的,要经DNS转换为IP才能访问。人记不住IP,就使用域名了。

      域名大法好,每个人都用ok.com,不是混乱了吗。这时候ICANN(Internet Corporation for Assigned Names and Numbers),由他管理域名。然后由Domain name registrar提供给广大人民群众注册域名。国内有名的像万网新网等等,但这都不是事。。注册域名还是去国外好,比如GoDaddy(全球最大),为什么呢?因为国内有点不愉快,比如威峰这事。当晚我就把域名转出了,实在不敢了。而且国内域名注册商比较坑。。。谁用谁知道。

     域名各种各样,我觉得还是注册顶级域名好。比如com,org,net。cn的绝对不要,但如果是为了增值不是为了用,当然可以试试。投资域名有可能一不小心就发了。看这贵的吓尿的域名。开个玩笑。

      然后是域名的常识。注册了域名后,会发现各种术语,像ACTIVE,REGISTRAR-LOCK,PENDINGDELETE等等(全部列表),这相当于域名的生命周期。可以参考ICANN的gtld的生命周期图来理解。但是这里没有clientHold这样的,这个是跟EPP有关,跟域名注册商有关的协议。clientHold是指域名被注册商从DNS中移除了,再也解析不了了。这个就等于网站废了,但注册商也只能做到这点,不能删除域名。还有很多相关代码,就随便看看。

       域名还有一个蛋疼的地方是whois,谁都可以查相关域名的所有权和联系人信息,以及子域名。所以有了whois保护,但是要付钱。。有一个跟域名有关的一个纷争(我如何失去价值$50000的twitter帐号),所以保护自己的信息还是很重要的。

      有了域名,就要搞DNS,这里就不谈了。

链接:

  1. 域名生命周期
  2. IANA, IANA WHOIS,WHOIS

CDN 内容分发网络

      CDN (Content delivery network) 是为了负载均衡,以及加速访问设计的分发网络。CDN拥有很多节点,大部分位于骨干网。可以根据访问者的IP确定哪个节点适合该访问者访问。因此CDN跟Cache有很大区别。大致工作原理如下所示。

cdn

为了验证这个机制,分别在美国和中国主机上查询DNS,结果如下。

中国:cpu32

美国:cpu33

       CDN不仅可以加速访问,还可以分析流量,防止DDos攻击等等。像个人用户这些功能足够了。CDN是一项贵族服务,都是大网络公司,像sina,baidu的在用。幸亏有incapsula,提供了免费的CDN服务,当然有一定限制。而且他会在页面上加一个广告。这个虽然很容易去除,但我觉得应该留着,他们提供了这么棒的服务,怎么能不支持一下。我就不说怎么设置,这是傻瓜步骤。需要注意的地方就是,不要把后台页面也放在CDN里,解决方法是后台页面另外取个域名。还有百度有个加速乐,可惜要域名备案,自由的互联网怎么能容忍这种事,果断抛弃。不过可以用来测试网站

我就对比一下没有经过优化的情况下,使用CDN和不使用CDN的区别(测试点在中国)。不敢乱搞,内存小,容易宕机。

cpu35

变化还是蛮大的。注意并发太高,小服务器可能会贵。今天一下刷了好多来访。。

后来我把php缓存为html,这样内存压力小很多,可以测试更多节点。如下图所示。www没有经过CDN,blog经过CDN。明显载入时间变短。

cdncompare

链接:

  1. 中国站点测试工具
  2. pingdom17ce监控宝
  3. incapsula 配置

SMTP 匿名邮件

SMTP(Simple Mail Transfer Protocol),是传输邮件的协议。大概流程如下图所示。
SMTP(From wikipedia)
发件人MUA(Mail User Agent)通过SMTP协议将要发送的邮件传输给MSA(Mail Submission Agent),然后通过MTA(Mail Transfer Agent)将邮件转发。中间可能经过几个Relay,是邮件最终到达目的MDA(Mail Delivery Agent ),收件人就可以通过IMAP,POP3等获取邮件。
SMTP现在也可以实现加密,防止信息泄漏。但是他坑爹的地方是可以实现匿名发送。不想看下去的话,使用这个Fake Mailer,冒充奥巴马给自己发封邮件,或者google fake mail。这个事情就很不有趣了。为了深入了解一下他的工作原理,我就尝试看看RFC 821吧。然后用软件实现一个自己的SMTP MTA。
首先可以使用python,简单实现一个本地的SMTP。使用smtpd,以及源代码。找一个免费的relay,比如jangosmtp。就可以实现转发。分别在两个终端运行下面python代码,可以实现转发。完整代码见github

还可以使用google服务转发邮件,只有30天免费我就不尝试了。也可以建一个真正的邮件服务器 (我用的是sendmail,感觉配置更简单),但是真正的邮件服务器很可能被其他邮件服务商拒收。有很多因素会导致邮件被拒。总得来说有一下几点

  1. 静态ip
  2. ip不在垃圾邮件黑名单
  3. dns反向解析,要找ISP干活。但是很多VPS就提供了反向解析,如digital ocean

满足以上几点就可以开始建一个自己的Mail Server了。

  1. 配置域名。 在DNS记录里加MX记录。然后在digitalocean(我的VPS提供商)里的控制面板更改主机的名字,与主域名(domain.com)相同。然后在修改主机的hosts , hostname,分别修改为domian.com。
  2. 检测是否成功。在随便哪里的终端运行:
  3. 安装sendmail。apt直接来。sendmail建立服务器linode指南。我反正直接安装就好了。为了显示自己的域名,我设置了一下域名
  4. 尝试一下,输入发送邮件的命令,然后登录相应邮箱看看是否显示为你的域名发送。

如果到这结束就不好玩了。我的目的是fake mail。我要匿名,假冒,当然是开玩笑啊,你看4月1日快到了。。。也很容易。打开邮箱,发现是joker发的。剩下的恶作剧只能靠你想象了。不仅如此,今天(2014.04.27)我发现email还有reply to 的功能,所以又是一个钓鱼法。

由于SMTP关于utf-8的处理比较麻烦,命令行发送中文邮件(英文容易被当成垃圾邮件)比较捉机。所以python有上场了,如上的sendmail.py只要把1025端口改成25,就可以发送中文邮件了。所以如果知道一个人的关系库,那很容易就能欺骗到他,这个弱点一定要好好防范。
还有不用的时候最好关掉,防止被别人利用,把你的ip变成垃圾邮件的ip就不好办了。
所以为什么SMTP能实现匿名发送邮件呢?主要原因是转发机制,只要我有一个MTA,我可以投递到任何一个邮箱服务器,这个邮箱服务器可以是目的邮箱服务器,也可以是中间服务器。然而这些服务器就不可能对谁发送的做验证了。服务器能做的只是检测你的MTA是不是垃圾邮件服务器,只能检测你的MTA是否有资格发送邮件,就是上面说的3个条件。他不可能看看你的邮件服务器里有哪些用户。说到底,邮件里的FROM,只是个头衔,没有任何意义。
既然这么大个漏洞,为什么影响不是那么大呢?主要原因是MTA不是每个人都能建的(有VPS就好办多了)。然后就算你建了这么个匿名服务器,然后发送大量匿名邮件,没过几天,你的ip和域名就列入黑名单了。所以目前为止影响不是很大。
有用链接:

  1. pymotw
  2. How To Use Google’s SMTP Server