患得患失,投鼠忌器

矛盾啊,本来想在网上有一片自留地,可以随便写写什么,但偶尔又有些业界心得想分享,也写在这里,于是自留地变成了公园,很多人都来看。
被关注的多了,有些事就不好写出来了,因为是自己心底的秘密,不想被围观者看到。
患得患失,投鼠忌器,不敢写了。算了,那就不写吧,虽然很不健康,但我已经能忍受寂寞,就写在自己心底吧。

Posted in 默认分类 | Tagged , | 1 Comment

发一条Keep-Alive吧

3月初我跳槽了,然后一直很忙。不过还是来发一条消息,让大家知道我没有废弃这个博客。
欢迎关注我的新浪微博 http://weibo.com/julyclyde

Posted in 默认分类 | Tagged | 2 Comments

Postfix 特性被滥用,导致收到垃圾邮件一例

最近发现我们的 postmaster@$myorigin 经常收到垃圾邮件,而该垃圾邮件的来源是早在几个月前就列入 anti-spam.org.cn 的 RBL 中的。查了一下日志,发现对方发来的邮件被“部分拒收”,发给 postmaster@$myorigin 的那个投递成功了,发给一般地址的被服务器拒收。在 check_client_access 策略里,我把一个内网 IP 列入黑名单,然后 telnet 发信测试,这个问题竟然能稳定重现!我是不是发现 bug 了?

gdb 了半个下午,发现 postfix 中 smtpd_check.c 文件里有这么一段:

/*
* XXX Always say OK when we're probed with our own address verification
* sender address. Otherwise, some timeout or some UCE block may result
* in mutual negative caching, making it painful to get the mail through.
*/
#ifndef TEST
if (*recipient) {
if (canon_verify_sender == 0) {
canon_verify_sender = vstring_alloc(10);
rewrite_clnt_internal(MAIL_ATTR_RWR_LOCAL,
var_verify_sender,
canon_verify_sender);
}
if (strcasecmp(STR(canon_verify_sender), recipient) == 0)
return (0);
}
#endif

其中 canon_verify_sender 是个静态指针,在这一段被初始化之后,其指向的空间里就已经保存了一个字符串 postmaster@$myorigin。然后在第二句 if 之后就直接返回了,不继续进行 if 之后的那些反垃圾策略判断了。

然后看了一下 ADDRESS_VERIFICATION_README 文档,里面是这么说的:

By default, Postfix probe messages have a sender address “double-bounce@$myorigin” (with Postfix versions before 2.5, the default is “postmaster@$myorigin”). This is SAFE because the Postfix SMTP server does not reject mail for this address.

也就是说我活该收到垃圾邮件!好吧,那我改改 address_verify_sender 参数得了。

Posted in 默认分类 | Tagged , , | 2 Comments

最近中国电信湖南省网在垃圾邮件界异军突起啊

最近收到好几封垃圾邮件,根据 Received 头来看,是中国电信湖南省网的一个网段中的多个 IP 地址破解了别人的邮件密码之后,盗用别人的邮件账户发信的。跟中国电信 NMC 沟通了一下,他们说“已经通知客户杀毒”了。电信的这种态度,也不知道是懒得管,还是保护客户;反正他们通知客户之后还继续有类似的垃圾邮件发出来,源端也依然是那个网段。

被盗的账户有 hr@ 的,也有 sales@ 的,基本上都是文科职务名邮箱。只能感叹一下中国的高校教育啊,虽然把 Office 作为大学基础课程,让大家都学会打字和基本的文字处理工具了,但还没用把网络安全纳入基础教学范围,文科专业在这方面尤其欠缺。唉!

此事之后,我也查了一下自己公司的邮件服务器,竟然发现我们的服务器上也有一个账户被盗用。因为这个账户平时就是用于向网站注册用户发通知的,收件人不集中,我也就没太注意。今天偶尔用 postcat 看了一下邮件内容,发现竟然是垃圾邮件!!赶快改掉密码、通知发信人所在IDC(郑州景安、香港 HKCIX 交换中心)。不过这些垃圾 IDC 还不如中国电信,根本不给回复。随后我设置了 header_checks ,检测湖南来的垃圾邮件;又设置了 cron,把 SASL 日志里,非公司所属的 IP 地址找出来,定时发给 postmaster。

Posted in 默认分类 | Tagged , | Leave a comment

不能念叨啊,一念叨就出事——兼谈xen的network-bridge脚本问题

昨晚还说呢,如果今天一天没事,这周就算安全过去了,@sgub 和@chifeng 都告诫我说不能念叨这事,今天果然!

下午,同事远程关闭错了机器。重新开机之后,发现 xenbr0 网桥没有了。看了一下,是 /etc/xen/scripts/network-bridge 没成功运行造成的。这个脚本用默认路由所在的网卡做一个网桥,然后把虚拟机接在这个网桥上,以便使虚拟机能直接上网。但我们的服务器却有俩公网IP和俩默认路由,就把那个脚本搞糊涂了。

其实这俩默认路由是路由器上的同一个接口的两个 IP 地址,连 MAC 都一样的。我删除掉其中一个默认路由,再运行network-bridge 脚本,就成功了。

Posted in 默认分类 | Tagged , , , | Leave a comment

嗯,终于把车买回来了

从上学的时候,就很喜欢POLO。折腾了几年,终于“透支性消费”(据亚市研究报告)了一把,买了个顶配POLO回来。

首先是选店。sgub 师兄推荐页川瑞德,说是维修工遵守规范,用扭矩扳手。好吧,那就先选这个店。10月底谈价,10w66返3000节能减排优惠。11月底再谈,直接把节能减排优惠折算入车价,另外再优惠一点。11月25日签了贷款申请表,26日由页川瑞德4S店递交给银行。

选颜色,我首选的冰海蓝只有广恒信有两辆在途货源,其它店连在途货源都没有。但是广恒信是个奸商,谈贷款的时候,他们要另外收一笔所谓手续费。经向银行核实,此笔费用是4S店自己收的,跟银行没啥关系。另外节能减排的3000元以加油卡形式支付,又隐形赚客户一笔。本着打击奸商,表彰优秀店的原则,我取消了该店的御用资格,随即不再犹豫,决定了在页川店购买。

11月29日收到银行短信通知,初审通过。

11月30日,银行派人来家里当面签署协议。这里有个小插曲,银行来人要求我签署空白的协议和欠条,说如果我不签,就要专门跑一趟银行去签。为了避免麻烦,我还是签了,然后给我签署过的空白文件和银行来人的工牌一起拍了一张照片留存。

12月1日,银行短信通知审批通过。跟4S店的销售小吕打了个电话,约定周日去交首付款。

12月3日,家里赞助的2w7资金分两笔到位。妈妈说是填的存款单比钞票量少,所以后来又填了一张存款单。

12月5日,张鹏陪我到4S店交款、验货。代替小吕的另外一位销售吴姐请张鹏坐副驾驶位置,请我坐后排,因为习惯上让“手掌坐后排”,哈哈。验货时发现杯架锁死、两处油漆擦伤。回到业务室,又薅了个脚垫+后备箱垫当补偿,并且承诺补漆。

因为他们发票用完了,到12月9日才开了增值税发票,10日4S店代为办理了购置税和工商验证手续。

12月13日,我去店里监督补漆。接到4S店委托的大陆汽车俱乐部的通知,14日去学院路检测场。

12月14日,早晨到4S店集合,随队去学院路检测场办理手续。出店向南,路口掉头,走到页川斯达展厅路对面的时候,因燃油耗尽,汽车趴窝了。我迅速开了双闪警示灯,给店里销售打电话要求救援。吴姐很紧张,马上告诉我挂N档自己推到路边去。等的时候比较无聊,又把三角警示牌掏出来放后面了。过了一会救援人员到达,费力打开因为洗车而结冰的加油盖,灌了点油,还说前面还有一辆缺油趴窝的。然后我勉强把车开到中化道达尔西三旗加油站。我说想加97号,队长说93号足够了(后来发现车上带的2010版说明书写的燃油要求是93号或以上,而网上下载的PDF2008版本是“95或以上;93也行”),于是加了20升93号汽油。随后车队上省道213(八达岭高速的辅路)转向南,开往学院路。我是新手啊,不敢跟前车太近,怕撞上,还不能用保险修车,结果外人插入车队,我跟丢了!!等红灯的时候打开手机GPS导航,自主领航到达检测场门口,此时车队发现了我,从旁边开过去把我带进检测场。在检测场里,我前面的银色POLO车主是个很漂亮的姐姐,队长替她开入车位;轮到我的时候,就让我自己开了,我也不负众望,一次入位成功。接着就是等待办理手续,经历了开机舱盖、开天窗拍照、粘贴照片到检测登记表上等等。中间等的挺无聊,就聊天,发现旁边的银色POLO车主姐姐竟然就是那位缺油趴窝的车主。下午在店里接着聊天,发现我俩的销售顾问都是小吕。等办手续的人回来,又发现我俩的成交价都低于税务局定价了,需要补交购置税……

在店里,领取了行驶证、保险单、会员卡,把部分证件留给银行,又解锁了一下杯架,我就回去 了。Thank goodness,几次上路都很顺利的完成了。看来我的水平也不是很次。

12月23日,去学院路检测场领牌照,出示了行驶证和机动车登记受理凭证和驾照,说我没登记证,被银行扣押了,身份证也扣押。警官看了一下驾照:还是个外地的……然后就回去翻柜子了。翻出来之后又核对了一下证件就给我了。回4S店,王岩拿了个牌照框,带我去旁边饰品店拧了自攻螺丝。然后去东城地税局服务大厅,出示行驶证(直接无视出示登记证的规定)交了车船税,去机场生活区买了个副机长钥匙扣,就去公司了。晚上下班开回家。夜里洗过澡,给张鹏打了个电话,发现他还没订货,提醒他抓紧。过了一会,张鹏来电让我送他去店里……于是又多了一张Lavida的订单。呵呵

12月29日,给保险公司打电话报了车牌号,补全了保单信息。

Posted in 默认分类 | Tagged , , | 5 Comments

一种巨型网站的 DNS 服务器流量优化方案

中国的门户网站,只 NS 服务器就能产生不少网络流量呢;而且因为随时可能会更改域名指向,以切换服务器组,域名的 TTL 还不能太大,甚至有低于 RFC 规定的300秒的情况。

其实这类服务还是有很大的优化余地的。我们来比划一下 DNS 的解析过程:

  1. 访客的电脑向 ISP 的 DNS 提出解析请求
  2. ISP 的 DNS 向 root、gTLD/ccTLD 服务器提出请求,得到网站的域的 NS 地址及其 A记录
  3. ISP 的 DNS 向该域的 NS 服务器提出查询,得到最终结果,返回给访客

这里面其实只有第一步是必须的,无法优化的,而后面的粗流量完全可以缩小成涓涓细流。解决方法就是让各主流 ISP 的 DNS 作为知名网站的域的 hidden slave NS,直接从主 NS 服务器获得权威数据,向辖区的访客提供解析服务。这样,多次重复递归解析的巨大流量变成了 AXFR/IXFR 的小流量,主 NS 服务器的压力和网络流量也会大大减小。而 ISP 的 DNS 反正都是要为访客提供解析服务的,改变角色之后并没有增加任何压力,反而减少了流量指出,提高了响应速度。

技术上不是问题,问题是门户网站和 ISP 的态度,不知道双方是否有足够的诚意去合作。

Posted in 默认分类 | Tagged , | 5 Comments

电信通污染专线客户的 DNS 请求,真是太无耻了

今天上新浪微博,发现页面乱了,明显是 css 下载失败的现象。开 firebug 看到,下载 css 的步骤被 301 到北京网通的导航页面去了。顺手 dig 了一下那个文件所在的域名 timg.sjs.sinajs.cn,发现那个 IP 竟然和我公司的 IP 很接近,是电信通的!!直接访问那个 IP ,是 squid 的错误页面,页面尾部也没署名。这个现象和网通的 NXDOMAIN Redirect 的现象是不同的。

不过,为什么连电信通的缓存服务器都自动 301 到北京网通的导航页面去了呢?看起来他们也在用北京网通DNS,且北京网通 DNS 也无法解析新浪的域名。

继而发现,在自己的电脑上,不论向哪个 DNS  服务器查询,出来都是那个结果,且 TTL 不会降低,保持在300,还有个现象就是应答里没有AUTHORITY和ADDITION SECTION。这说明电信通在线路上做了 DNS 拦截,直接转到他们自己的 DNS 服务器去了。ssh 登录外面托管的服务器上,解析那个域名,给出的是一系列 CNAME 最后一个 A,那个 A 看着就顺眼,北京电报局的网段。

 

下午又看了一个视频,发现浏览器状态栏提示从 124.207.162.83 下载数据。这个 IP 地址和刚才解析新浪微博的那个假 IP 124.207.162.88 是同一个网段的。经过一番折腾(具体过程参见前一篇博客),终于发现 img.uu1001.cn 也被污染了。

我们奉劝这些小 ISP,没本事就别揽这么多专线接入生意,不要拿垃圾缓存服务器来糊弄客户,以为我们都是外行吗?

11月18日补记:经过昨天一天的投诉,今天终于取消了上述两个域名的污染。不过 img.kaixin001.com.cn 还有各门户网站的静态文件域名依然被污染。

Posted in 默认分类 | Tagged , | 4 Comments

其实SYSOP手段也不是万能的,今天被迫动了一下dnsmasq的源码

今天发现电信通拦截DNS请求,把热门流量导向其内部 squid 缓存服务器。今天主要发现有两个,一个是新浪微博的 css 文件所在的域名 timg.sjs.sinajs.cn 被指向了 124.207.162.88 ,另一个是……查看某个视频的时候,浏览器状态栏提示从 124.207.162.83 下载数据,跟新浪微博被拦截的域名指向同一个 IP 段。但是页面里并没有写是从哪个域名下载视频的。于是乎,我想从公司网关的 dnsmasq 上取得数据,却意外的发现 –log-queries 参数无效,开启该参数后,按文档说明发 USR1 信号给 dnsmasq ,syslog 里却没看到 cache dump。

找了一台 Debian 看了看,是可以的。于是我立即习惯性的阴暗的认为是 RedHat 的软件质量问题。找了一套原装正品源码,编译后发现行为也是一样的。无奈了,SYSOP 手段也不是万能的,只好开始看源码。

源码里搜索 log-queries 找到 getopt 这个步骤,找到其内部名字 OPT_LOG。然后在源码文件里找这个,发现了 cache.c 文件里的 cache_dump 函数中,关于 dump cache 功能的逻辑,这一句是这么写的:

if ((daemon->options & (OPT_DEBUG | OPT_LOG)))

回头找一下 OPT_DEBUG,发现是 –no-daemon 参数。也就是说,只有这俩参数同时用,才能 dump cache,这样不符合 manpage 的描述。于是把 OPT_DEBUG 去掉。编译再试,发现还是不行。又

在 src/cache.c 文件的 cache_dump 函数中,发现几句 my_syslog 函数的 log facilty 有问题,改掉,就 OK 了。btw:加语句调试的过程中,觉得这个 my_syslog 长得很像 fprintf。

重新回去放视频,dump cache,终于在日志里看到了这么一句:
[root@dl360g5 log]# tail -f messages|grep 124.207
Nov 16 17:02:39 dl360g5 dnsmasq[24252]: img.uu1001.cn                            124.207.162.83                 4F        Tue Nov 16 17:07:37 2010

已经报了bug。经与作者讨论,发现自己原文中关于 if 语句判断条件的内容是错误的,故修正。真正原因是 dnsmasq 把 cache dump 输出到了 LOG_DEBUG,而 CentOS 的 syslog 默认不记录 *.debug

124.207.162.88
Posted in 默认分类 | Tagged , , , , | 3 Comments

有人忘记在 ifcfg 里写 NETMASK 了,结果……

我的好兄弟、大学同学谢某人,在虚拟机里玩 RHEL+Oracle 的时候,遇到一个诡异的事情,就是 RHEL 开机后 IP 地址会自动变化。我原以为是他装 Oracle 的时候某个开机自动执行的命令更改了地址,所以就在开机的各 rc 脚本之间夹带执行一次 ifconfig 命令,发现在开机过程中 IP 地址始终都是没有变化的。持续 ping 该机器,发现在出现登录提示符后才 ping 不通,并且提示符后还出现了 iscsi-initiator 关于断开和 target 的网络连接的错误提示信息。

没办法,看日志吧。/var/log/messages 日志明明白白的写着:NetworkManger 认为长度为零的 IP prefix 是无效的,因此接管了该网卡,并按 Auto eth0 设置了该网卡。看了看 ifcfg 文件,里面果然是没写掩码。此时谢同学不服气的嚷嚷,说另一个虚拟机也是这么写的,就不会自动变 IP。过去看了一下,发现那边没启动 NetworkManager 服务。哈哈……

不过有个问题,ifconfig 命令对于不带掩码的 IP 地址,会自动按照 A/B/C 类别给予掩码,为什么 NetworkManager 不看网卡上已经设置上的掩码,而去看 ifcfg 呢?这果然是个奇怪的东西。另外:建议对 Linux 不熟悉的,使用 GUI/TUI 界面的工具设置参数。比如 RedHat 的 setup 命令就不错。

Posted in 默认分类 | Tagged , , , , | Leave a comment