让多个 FreeBSD jail 共享同一套 MTA

• 本文约 499 字,阅读大致需要 1 分钟 | Security | #FreeBSD | #jail | #Postfix | #sendmail

FreeBSD从4.0版本开始提供了非常强大的虚拟化工具—-jail。对于许多应用来说,jail能够在确保应用程序之间的有效隔离的前提下,最大限度地发挥硬件性能(每个jail不会单独运行自己的内核),而在jail内部看来,则基本上与真正的服务器无异,且性能损失很小;通过内核提供的ABI模拟,jail能够提供FreeBSD早期版本,以及Linux 2.4.x或2.6.x的兼容能力。

许多传统的Unix应用程序假定系统中存在一个可用的MTA。FreeBSD中内建了sendmail,但在jail中配置sendmail会遇到一个比较麻烦的问题,即在jail中,127.0.0.1指代的是jail的IP地址而不是本地loopback设备。换言之,原本监听本地socket的MTA变成了监听jail对外的IP,这会是一个安全隐患。

个人在tarsier系统上采用的配置是:

  • 在主机上配置一个postfix,并令其监听本机的全部IP地址;
  • 在一个jail中运行邮件系统,并且确保在主机上的postfix不监听这个jail的IP上的25端口;
  • 在所有其他jail中,使用默认的sendmail,但在 /etc/rc.conf中裁减如下:
    sendmail_enable=“NO”
    sendmail_submit_enable=“NO”
    sendmail_outbound_enable=“NO”
    sendmail_msp_queue_enable=“YES”

如此,sendmail的"msp"服务会连接本机(127.0.0.1)上的25端口,这个端口由于主机上postfix的存在,而会由后者提供服务,从而解决了这个问题。