时间:2022-12-24 14:01编辑:九州下载来源:www.wzjsgs.com
Qmail有一个名为rcpthosts(该文件名源于RCPT TO命令)的配置文件,其决定了是否接受一个邮件。只有当一个RCPT TO命令中的接收者地址的域名存在于rcpthosts文件中时,才接受该邮件,否则就拒绝该邮件。若该文件不存在,则所有的邮件将被接受。当一个邮件服务器不管邮件接收者和邮件接收者是谁,而是对所有邮件进行转发(relay),则该邮件服务器就被称为开放转发(open relay)的。当qmail服务器没有rcpthosts时,其是开放转发的。
设置自己服务器为非open relay的最简单的办法就是将你的邮件服务器的所有域名(若DNS的MX记录指向该机器,也应该包括该域名。例如你的机器有三个域名mail.linxuaid.com.cn、mail1.linuxaid.com.cn,而且linuxaid.com.cn的MX指向mail.linuxaid.com.cn,则qmail的rcphosts的应该包括mail.linuxaid.com.cn、mail1.linuxaid.com.cn和linuxaid.com.cn)。
但是这将导致你的本地客户也被拒绝使用你的服务器转发邮件,而要支持客户使用MUA来发送邮件,必须允许客户使用服务器转发邮件。qmail-smtpd支持一种有选择性的忽略rcpthosts文件的方法:若qmail-smtpd的环境变量RELAYCLIENT被设置,则rcpthost文件将被忽略,relay将被允许。但是如何识别一个邮件发送者是否是自己的客户呢?qmail并没有采用密码认证的方法,而是判断发送邮件者的源IP地址,若该IP地址属于本地网络,则认为该发送者为自己的客户。
这里就要使用ucspi-tcp软件包。在这里我们要使用该软件包的tcpserver程序。该程序的功能类似于inetd-监听进入的连接请求,为要启动的服务设置各种环境变量,然后启动指定的服务。
tcpserver的配置文件是/etc/tcp.smtp,该文件定义了是否对某个网络设置RELAYCLIENT环境变量。例如,本地网络是地址为192.168.10.0/24的C类地址,则tcp.smtp的内容应该设置如下: 127.0.0.1:allow,RELAYCLIENT="" 192.168.10.:allow,RELAYCLIENT="" :allow
这几个规则的含义是指若连接来自127.0.0.1和192.168.10则允许,并且为其设置环境变量RELAYCLIENT,否则允许其他连接,但是不设置RELAYCLIENT环境变量。这样当从其他地方到本地的25号连接将会被允许,但是由于没有被设置环境变量,所以其连接将会被qmail-smptd所拒绝。
但是tcopserver并不直接使用/etc/tcp.smtp文件,而是需要先将该文件转化为cbd文件:
___FCKpd___1nbsp;# tcprules tcp.smtp.cdb tcp.smtp.temp
然后再回头看在/service/qmail-smtpd目录下的run文件中有
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb
可以看到,tcpserver利用了/etc/smtp.cbd文件。若本地有多个网络,则需要这些网络都出现在/etc/tcp.smtp文件中。
这样就实现了允许本地客户relay邮件,而防止relay被滥用。
不得不说,这是一本内容非常之详实的书,对于想要学习在linux平台下开发的同学来说是至宝。
本书中文版分上下两册,两册是又不同的人来翻译的。我只想说上册译者的水平比下册译者水平高出太多了,下册翻译的个什么鬼,是没校对吧,错误连篇。
总体来说,书的内容非常好,但是下册的翻译太烂,推荐看英文原版。
学习内核不是件容易事,前面有很多前续课程要读。
1.C语言,推荐Theprogrammginclanguage被称为圣经的书,不过没有中文版,不过C语言不太难,而且读内核也不需要你对C有多深了解。学习到指针和结构体就够你用了。
2.数据结构,不懂这个想学是不可能的,推荐《数据结构》C语言版本。
3.操作系统,任何一个大学的教科书都可以。一定要看,虽然是纯理论。但不看这个,想看懂内核,那是不可能的。
4.微机原理,内核和底层相关,不知道微机原理是不行的。我学的时候书上是以INTEL8086为蓝本,非常简单。后来看内核时候,补充了80386以后出现的保护模式,非常复杂。但还是先看下老版的微机原理,先从简单的下手。
5.linux系统管理,推荐《linux系统管理手册》,被linux的作者推荐的系统管理书籍。 6,终于到内核了,我看的是《Linux内核代码情景分析》虽然有点老。但结合新的源代码,在了解机制后,代码实现上差距不大。
专业数据统计,95%的用户会因为[不安全]提示而放弃访问,从而给网站造成用户流失。问题就出在不安全的HTTP 明文传输协议上。2018年2月初,谷歌旗下Chrome浏览器宣布“封杀”HTTP协议的网站,并将这些网站标示为“Not Secure”(不安全)。
2023-03-03 21:141、do-while语句是一种后测试循环语句,即循环体中的代码执行后才会对退出条件进行求值。2、循环体内的代码至少执行一次。do-while的语法如下:do{ statement }while(expression)下面是一个例子:letxhs=0 do{ xhs+=2 }while(xhs<10)在上面的
2023-02-26 12:191、while语句是一种先测试循环语句,即先检测退出条件,再执行循环体内的代码。2、while循环体内的代码有可能不会执行。下面是 while 循环的语法:while(expression){ statement }实例leti=0 while(i<10){ i+=2 }在这个例子中,变量 xhs 从 0 开
2023-02-26 12:181、for语句也是先测试语句,只不过增加了进入循环之前的初始化代码.以及循环执行后要执行的表达式(loop-expression),语法如下:for(initialization;expression;loop-expression){ statement }下面是一个用例:letxhsLength=10 for(letxhs=0;xh
2023-02-26 12:17说明1、for-of语句是一种严格的迭代语句,用于遍历可迭代对象的元素。2、for-of循环将按照可迭代对象的next()方法产生值的顺序迭代元素。关于可迭代对象,请参考ES6系列的Iterator。如果尝试迭代的变量不支持迭代,for-of语句就会出错。语法:只
2023-02-26 12:16说明1、switch语句可用于所有的数据类型(在许多语言中,它只能用于数值),因此可以使用字符串甚至对象。2、条件值不一定是常量,或者是一个变量或者一个表达式。实例switch('helloxhsRookies'){ case'hello'+'xhsRookies&#
2023-02-26 12:15发布日期:2022-10-29人气:641
发布日期:2022-10-10人气:555
发布日期:2022-09-29人气:335
发布日期:2022-09-04人气:311
发布日期:2023-01-16人气:226
发布日期:2022-10-02人气:149
发布日期:2022-11-07人气:145