Google
 

Archive for November, 2006

2006-11
8

Mail server redundancy (2)

Filed under: Tech articles — admin @ 4:00 pm

[tag]mail server, moving, redundancy[/tag] 

This week I made a plan to achieve no interruption to mail service. In prevenient BLOG, I had descripted the steps to do it. But now I have another easy way to realize it. Just by DNS MX record.
1. Add a low preference MX record in DNS two days before changing IP address. Make the MX point to new ip address of mail server
2. At the moment of changing mail server IP address, remove original High preference MX records. Thus our mail server will use the new adding MX to receive and send mails without interruption.

As operations in the prevenient article, we of course can achieve the same resut. The following is detailed steps.
1. Install sendmail on linux platform, configure it acting as secondary MTA for our primary mail server
2.To prevent the famous error “loops back to me (MX problem)”, please note the “Cw” configuration and make it ponit to real MX host name.
3. In order to relay all mail to primary MTA(a.b.c.d), make sure that there is following settings in mailertable file.
   primary.domain   esmtp:[a.b.c.d]    note the [square brackets] 
4.in the file relay-domains , add primay.domain. It permits the primary.domain to be relayed.
5.Reboot the sendmail service when you change your configuation every time.

2006-11
3

Mail Server Redundancy

Filed under: Tech articles — admin @ 4:00 pm

[tag]mail server, 备份, redundancy[/tag] 

CNC网络城域网改造,公司IP要变更。为了不影响在DNS生效期间造成的MAIL server问题,特制定备份方案。
新的IP为4.3.2.1
1.在CTC DC准备一台有公网的机器1.2.3.4,上装sendmail,配置relay-domains: abc.com.  配置其自身的DNS domain abc.com的MX 记录为mail.abc.com A 4.3.2.1
2.在更改IP的前两天注册低优先级的MX记录mx.abc.com使其有A记录1.2.3.4
3.在切割之时更改abc.com的MX记录,使其指向新的IP
4.两天之后恢复正常,在这两天之内所有员工收发邮件可用4.3.2.1.但并不影响其它人给本公司员工发MAIL

2006-11
3

Sendmail relay规则及配置文件用法汇总(转贴)

Filed under: Tech articles — admin @ 4:00 pm

第一部分 mail relay规则详解一. 软件环境:Sendmail 8.9.3二. 默认情况下的relay规则  在默认情况下,也就是安装完系统(Sendmail服务器)不做任何设置的情况下,则只能在本机上收发邮件, 网络上(局域网或Internet)的任何其它主机不能向该SMTP服务器发送邮件,若希望能实现发送,则需满足下面的任何一个条件即可(不需要同时满足):1. 发送者身份属于“本地或者被允许的发送者”。
2. 接收者身份属于“本地或者被允许的接收者”。
  也就是说,不管是邮件的发送者还是邮件接收对象只要其中之一属于本地或被允许的时候,Sendmail邮件服务器才允许relay你的邮件。那么什么是“本地/被允许的发送者”呢?实际上只有一种,就是列在文件/etc/mail/relay-domains(默认安装后无此文件,你可以创建它)或者 /etc/mail/access中的域名或者IP地址行,如:

abc.com (/etc/mail/relay-domains)
abc.com relay (/etc/mail/access)

注:
a.我们假定某公司域名为abc.com
b.上面的两行含义相同,只是在不同的文件中所要求的语法不同而已,在/etc/mail/access文件中需要加上 relay.

===先讨论域名的情况:

  回到前面所说的何谓“本地/被允许的发送者”,如果在relay-domains/access文件中列出的是域名,则对发送者的IP地址先查找/etc/hosts文件(一般是如此,因为默认情况下对Linux服务器来说,查找DNS是先查找/etc/hosts文件看是否有此IP地址对应的主机域名,如无再做反向DNS查找,如果能够反向查找出来,且查找出来的主机的域部分属于上面两个文件中列出的域名,再对该主机名做正向DNS查找出的IP地址(主机的A记录)与发送者IP地址相同,则允许relay邮件,这表明发送者属于被允许的发送者。

  也就是说,先看/etc/host.conf文件中的定义,一般是这样: order hosts,bind multi on 其中的order行指明先查/etc/hosts,再找DNS数据库。

  现在举个例子: 如下图:

  在内部LAN上有一台windows PC,简称机器A,主机名为jephe.abc.com向一台连接内部LAN和Internet的一台Sendmail SMTP服务器,简称机器B发送邮件,地址分别为192.168.11.12 和 192.168.11.5 , SMTP服务器外部地址为1.2.3.4 专线连接Internet.假定该公司域名为abc.com,机器B既是SMTP服务器也是DNS服务器,在此我们不考虑防火墙的设置,即在内部LAN方向上所有的机器对于192.168.11.5内部网卡接口可以自由进入(允许所有的通过192.168.11.5来自/去往192.168.11.0/24网段的TCP/IP包)。

  如果在机器B的/etc/mail/relay-domains或者/etc/mail/access文件中有一行

abc.com 或者
abc.com relay

当A向B发送邮件时,若B能在它的/etc/hosts中找到一行如

192.168.11.12 jephe.abc.com
则允许A向B发送邮件,也就是接收从A发来的所有邮件,不管是去向哪里,因为这种情况符合第一种relay 规则,即发送者是被允许的发送者。此时不需要再查找DNS了,到此为止。邮件已经被接收。如果在/etc/hosts中找不到与192.168.11.12(发送者IP地址)对应的行,则再查找DNS,对192.168.11.12做反向解析,如果能在反向DNS数据库中找到对应192.168.11.12的主机记录,且找出来的主机名再从DNS中正向查找若两者一致,则允许relay,跟上面的情况一样,属于第一种被允许的relay规则。

  如: 在DNS数据库中找到192.168.11.12对应的DNS主机名为jephe.abc.com. 且又在@abc.com域的DNS中查找到对应于主机jephe的A类记录地址为192.168.11.12,则满足条件。发送者属于本地域,即被允许的发送者。

  需要注意的是,必须正反向解析都需要能解析且一致才行,否则不允许relay,且会在/var/log/maillog中 记录一行警告信息说”may be forged”(可能被伪造的)

  但也并非所有记录”may be forged”信息到/var/log/maillog文件中的情况都不允许relay,也有的情况下 虽然记录了一条警告消息说”may be forged”,但邮件仍然被接收了,是在下面的情况下:

例如:

在B机上/etc/mail/relay-domains中有下面两行
abc.com
yahoo.com
[注:在此不再累述关于/etc/mail/access,因为前面已经说了在/etc/mail/relay-domains 中的一行如
abc.com
相当于/etc/mail/access中一行
abc.com relay

  故在下文中不再累述,只提/etc/mail/relay-domains或者/etc/mail/access.]

  若A向B发送邮件到 someone@yahoo.com . 在B机的/etc/hosts中没有相应的对应于192.168.11.12的记录行。且在B机(DNS服务器)上不能对IP地址192.168.11.12做反向查找,或者能做反向查找如查找出来为 jephe.abc.com但在正向查找(对abc.com域的主DNS数据库中查找对应于主机jephe的A记录)中没有对应于主机jephe的A记录,或者有但找出来的IP地址不是192.168.11.12的话。但是。接收者是someone@yahoo.com,域yahoo.com在/etc/mail/relay-domains中。则还是允许relay。但就会记录警告消息may be forged到/var/log/maillog文件中,这种允许属于第二种mail relay规则:接收者是被允许的接收者。因此,只要是正反向DNS不一致总会记录该警告消息到maillog中。 Sendmail不是单纯地查看反向DNS解析,而后正反都要匹配,否则不relay,为什么如此?在后面我们会举例说明。

  由此我们引出

===什么是“本地的或者被允许的接收者”?

这个比较简单,也就是接收者的email地址的域部分被列在/etc/mail/relay-domains或者/etc/mail/access 文件中,如上面的情况,发到@yahoo.com域的任何接收者都被允许接收。注意一个范围问题,如果发送者的域名(根据前面说的/etc/hosts或者正反向DNS一致的解析)被列在这两个文件中,则该发送者可以发送给任何人的邮件,都能被接收,但若不是这种情况,则只能发送到接收者的 email地址的域名在这两个文件中的那些接收者。后者的情况接收对象的范围要比前者小。

  再引出另一个值得注意的问题,就是在文件relay-domains或者access中列出的域名既是针对发送者来说的,也是针对接收者而言的。对于发送者来说,检查/etc/hosts,和正反向DNS,对于接收者而言,仅检查接收者邮件地址的域部分。

  还有,对于第二种mail relay规则,还多一种情况,即:

  若接收者的域名部分被列在/etc/sendmail.cw中,则该接收者也属于本地接收者。(默认情况下,sendmail.cw是在/etc下,当然你也可以直接更改/etc/sendmail.cf中的sendmail.cw路径)然后检查别名文件aliases (具体路径靠你的定义)去扩展别名。

举个例子:

  假若公司abc.com在北京,上海和深圳有分公司,总部在北京,放一台mail 服务器在北京电信局,且其它各分公司,上海,北京,深圳都各自用专线连到当地的ISP。所有外部进入发到someone@abc.com的邮件都首先经过存放在北京电信局的mail.abc.com 邮件主机,在该邮件服务器上的/etc/sendmail.cw中有一行abc.com,则发到@abc.com的邮件经过mail.abc.com时检查别名文件aliases.

  若有三行如下:

shuser:shuser@sh.abc.com
bjuser:bjuser@bj.abc.com
szuser:szuser@sz.abc.com

则发到shuser@abc.com,bjuser@abc.com和szuser@abc.com的邮件分别被别名为 shuser@sh.abc.com,bjuser@bj.abc.com和szuser@sz.abc.com,然后分发到各分公司的Sendmail SMTP 邮件服务器。

注意:Sendmail检查别名文件是不停地做检查直到不能再做为止。具体是这样的,象上面的文件中的的三行,如果mail.abc.com收到一封信是shuser@abc.com,发现abc.com在sendmail.cw中,则接收该邮件(为什么?因为接收者的email地址的域部分在sendmail.cw文件中则是本地接收者,relay规则第二点)本地接收者则检查别名文件,别名到shuser@sh.abc.com,然后再把别名出来的email地名域部分,现在是 sh.abc.com,与sendmail.cw中的列出的域比较,若仍符合则继续别名下去直到不能符合条件为止。

  现在引出一个问题就是注意不要使得别名检查循环下去,象上面的情况下,若加sh.abc.com到sendmail.cw中则出现别名检查循环而出错。 现在,经过别名之后如何再发送邮件呢?一般的发送邮件过程是这样的:

  若上面的服务器mail.abc.com收到一封发到shuser@abc.com的信,则先经过别名为shuser@sh.abc.com后

1. Sendmail请求DNS给出主机sh.abc.com的CNAME记录,如有,假若CNAME到shmail.abc.com,则再次请求 DNS查找看是否有shmail的CNAME记录,直到没有为止
2. 现在我们假定没有任何CNAME记录存在,仍然是shuser@sh.abc.com.则Sendmail请求DNS给出sh.abc.com的 MX记录,并得到一个这样的记录: sh MX sh.abc.com
3. Sendmail请求DNS给出sh.abc.com的A记录(IP地址),返回值为1.2.3.4
4. 与1.2.3.4建立SMTP连接,然后发送邮件.。

  前面说明了在/etc/mail/relay-domains或者/etc/mail/access中有域名的情况,若只有IP地址呢? 若

192.168.11.12 或者
192.168.11.12 relay

  则直接就是单纯地指发送者机器的IP地址. 可以是内部网段的保留地址

A类: 10.0.0.0–10.255.255.255 (10.0.0.0/8)
B类: 172.16.0.0-172.31.255.255 (172.16.0.0/12)
C类: 192.168.0.0–192.168.255.255 (192.168.0.0/16)

也可以是外别真实IP地址,如果如此,由直接允许一个拨号上来的真实IP地址relay邮件。

  注意下面的两个问题:

问题1: 公司对移动用户的考虑.

  在上面的图二中的左边部分实际就是图一.以图一为例.假若上海公司某员工不在公司里时,用笔记本拨上海电信163上网,该员工不能简单地设置发送邮件服务器为sh.abc.com(1.2.3.4).既使你的Outlook Express中设置的邮件地址为jephe@abc.com .为什么?

  因为Sendmail根本不检查你的发送者邮件地址,而是你拨号上来的IP地址,但是你拨号上来的IP地址是动态随机分配的,而且由该IP地址反向解析出来的域名是ISP的域名,不是@abc.com ,实际上,在你拨号上来得到一个IP地址后向sh.abc.com发送邮件时,建立到1.2.3.4的25端口的TCP连接时,Sendmail只知道你的IP地址, 然后在应用层收到数据后反向检查DNS查找该IP地址对应的域名,但是它是ISP的域名.与你的组织毫无关系. 而且大多数ISP没有为拨号IP地址段设置反向DNS查找记录.

  故对那些拨到ISP的公司员工,需要用公司的服务器作为发送邮件服务器的话,公司的邮件服务器没法配置 使得仅仅允许公司的员工做它做为发送邮件服务器,没法仅仅relay公司的在外的需拨到ISP的员工的信. 当前的解决办法:

a. 公司设置自己的拨入服务器,仅仅公司员工可以用自己的用户名和密码拨入后发送邮件.
b. SMTP-After-POP3方法, 修改POP3程序,拨到ISP后先收一次自己的信,POP3检测到收信者IP地址后 再动态地加这个IP地址到relay-domains或者access文件中,允许relay默认半个小时.
c. sendmail 8.10加入了SMTP用户认证功能,发送邮件时提示输入用户名和密码后允许relay.

问题2: 为什么必须正反向解析一致,为什么may be forged?

  假若一黑客组织操纵了一个ISP机构,如果你的Sendmail仅仅检查反向DNS解析出来的域名,如是你的公司域名 则允许relay mail的话,则被黑客集团操纵的ISP机构可以把其所拥有的IP地址段在自己的反向DNS数据库中设置反向解析出来的域为你的公司域名,然后你的sendmail不加区别地relay它.认为该ISP的用户为自己的本地/被允许的发送者,则后果可想而知.

  上面介绍了Sendmail控制mail relay的几个文件:

sendmail.cw
access
relay-domains
aliases

总结一下:
>

条件一: 发送者是被允许的发送者:

  这要看文件/etc/mail/relay-domains或者/etc/mail/access两文件中列出的域名和IP地址行, 对IP地址,就检查发送者的IP地址是否允许,若不符合,且有域名在里面,则检查/etc/hosts和正反向DNS 解析看是否有对应记录,看反向解析出来的域名是否符合条件.

  条件二: 本地/被允许的接收者. 同样地是要看/etc/mail/relay-domains或者/etc/mail/access文件,看接收者邮件地址的域部分是否列在上述两文件中,另外还多一项检查文件就是sendmail.cw,列在该文件中的域名被认为是本地接收者. 检查别名文件进行扩展.

  其它情况都拒绝relay.

第二部分 sendmail 配置文件

  为了解释所有的配置文件,下面列出的M4源文件enable了所有的本书提到的配置文件如下:

========================
include(`../m4/cf.m4)
define(`confDEF_USER_ID,“8:12)
OSTYPE(`linux)
undefine(`UUCP_RELAY)
undefine(`BITNET_RELAY)
define(`confAUTO_REBUILD)
define(`confTO_CONNECT, `1m)
define(`confTRY_NULL_MX_LIST,true)
define(`confDONT_PROBE_INTERFACES,true)
define(`PROCMAIL_MAILER_PATH,`/usr/bin/
procmail)
define(`ALIAS_FILE,`/etc/mail/aliases) define(`confPRIVACY_FLAGS,`authwarnings,
needmailhelo,
noexpn,novrfy)
FEATURE(`smrsh,`/usr/sbin/smrsh)
FEATURE(`mailertable,`hash -o /etc/mail/
mailertable)
FEATURE(`virtusertable,`hash -o /etc/mail/
virtusertable)
FEATURE(`domaintable,`hash -o /etc/mail/
domaintable)
FEATURE(`genericstable,`hash -o /etc/mail/
genericstable) GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain)
FEATURE(allmasquerade)
FEATURE(masquerade_envelope)
MASQUERADE_AS(mydomain.com)
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
FEATURE(local_procmail)
MAILER(procmail)
MAILER(smtp)
FEATURE(access_db)
FEATURE(`blacklist_recipients)
===========================
所有的配置文件如下:
/etc/mail/mailertable
/etc/mail/domaintable
/etc/mail/genericstable
/etc/mail/genericsdomain
/etc/mail/virtusertable
Linux联盟
收集整理
 

2006-11
3

PIX FO License

Filed under: Tech articles — admin @ 4:00 pm

The other days I encountered one problem with cisco PIX 515E. Every 24 hours the FW box would rebooted automatically. At last I found its caused by the license. CISCO license about PIX series has three type. R(restricted),UR(unrestricted),FO(failover).Its our PIX FO license that caused the reboot. So just upgrading  the license can solve it.

26 queries. 0.531 seconds. Powered by WordPress