设为首页 收藏本站
查看: 1400|回复: 0

[经验分享] Sendmail服务器搭建,Xinetd服务配置,尚观Day15

[复制链接]
累计签到:15 天
连续签到:1 天
发表于 2015-11-25 15:03:28 | 显示全部楼层 |阅读模式
  


第一、Sendmail服务器的搭建

1、软件包:
sendmail.i386<---邮件服务器端  MTA
sendmail-cf.i386<---邮件服务器的配置文件
sendmail-devel.i386<---邮件服务器端的开发包
sendmail-doc.i386<---帮助文档
m4.i386<---处理配置文件的工具
dovecot.i386<---pop邮件服务器端  MDA
procmail.i386<---负责把邮件分发到不同的用户邮箱(用户的邮件文件/var/mail/username)

2、配置Sendmail之前的准备

实验的环境:
sendmail服务器: 10.1.1.92
DNS服务器:10.1.1.67


a、设定好主机名字
hostname slave.upl.com
vim /etc/hosts
10.1.1.92 salve.upl.com  

b、设定邮件服务器的/etc/resolv.conf
vim /etc/resolv.conf
nameserver 10.1.1.67
c、给DNS服务器添加MX记录
vim /var/named/chroot/var/named/data/master.upl.com.zone  <---这是10.1.1.67 DNS服务器上的文件
IN      MX 0    slave.upl.com.
slave   IN      A       10.1.1.92

service named reload

验证是否生效:

[iyunv@mail ~]# nslookup
> set type=mx
> upl.com
Server:         10.1.1.67
Address:        10.1.1.67#53

upl.com mail exchanger = 0 slave.upl.com.  《---成功了

d、同时时间,让sendmail服务器时间正确

[iyunv@slave ~]# while :
> do
> ntpdate 10.1.1.1 > /dev/null  2>/dev/null
> sleep 30
> done &


2、配置sendmail服务器

配置文件目录:/etc/mail

access《--访问控制文件
access.db
local-host-names《--给服务器绑定多个域名
sendmail.cf《--sendmail运行时使用的主要配置文件
sendmail.mc《--配置的主要文件
virtusertable《--给服务器配置虚拟域名
virtusertable.db

/etc/aliases     《--给用户邮件设定别名
/etc/aliases.db

例子1:运行最简单的本地邮件服务器

service sendmail restart

[iyunv@slave mail]# netstat -ntl | grep 25
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN

使用:telnet 测试

[iyunv@slave mail]# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 slave.upl.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 6 Nov 2009 10:18:45 +0800
helo slave.upl.com
250 slave.upl.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
mail from:admin@google.com
250 2.1.0 admin@google.com... Sender ok   <---寄信人的地址,随便写
rcpt to:tom@slave.upl.com<--收件人的地址
250 2.1.5 tom@slave.upl.com... Recipient ok
data<---输入邮件内容
354 Enter mail, end with &quot;.&quot; on a line by itself
Good moning!        
.<---结束内容输入
250 2.0.0 nA62IjUS003044 Message accepted for delivery
quit
221 2.0.0 slave.upl.com closing connection
Connection closed by foreign host.

发送邮件的命令还有:
mail -s &quot;Just for test&quot;  mary@slave.upl.com < /etc/fstab

查看邮件是否发送tom用户
cat /var/mail/tom


例子2:让服务器监听所有地址的25端口

1、修改配置文件
搜索Addr关键字,按照下面的修改设定:
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

转换配置文件:
m4 /etc/mail/sendmail.mc  > /etc/mail/sendmail.cf

2、service sendmail restart

3、测试与验证

# netstat -ntl | grep 25
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN

# telnet 10.1.1.92 25
Trying 10.1.1.92...
Connected to slave.upl.com (10.1.1.92).
Escape character is '^]'.
220 slave.upl.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 6 Nov 2009 10:33:31 +0800


例子3:实现支持短域名形式和绑定别的域名
1、
vim /etc/mail/local-host-names
upl.com
hot.com

2、重启并验证

service sendmail restart

telnet 10.1.1.92 25
......
rcpt to: bean@upl.com
250 2.1.5 bean@upl.com... Recipient ok
......


例子4:邮件别名,支持群发,转发

1、/etc/aliases

mygod:  tom   --->  邮件发给 mygod@upl.com都会转发给 tom@upl.com
it:  tom,bean,mary  邮件发给 sales@upl.com  都会群发给 后面指定的用户


生成aliases.db文件:
newaliases


2、重启服务器验证
service sendmail

cat /etc/fstab | sendmail -v mygod@upl.com  <---介绍另一种发送邮件的命令
cat /etc/fstab | sendmail -v it@upl.com


例子5: 支持发送外部邮件,也就是把邮件发送到外部的地址

在配置前,使用另一台机器测试验证:
[iyunv@mail ~]# telnet 10.1.1.92 25
Trying 10.1.1.92...
Connected to station92.cluster.com (10.1.1.92).
Escape character is '^]'.
220 slave.upl.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 6 Nov 2009 11:41:25 +0800
helo slave.upl.com
250 slave.upl.com Hello station67.cluster.com [10.1.1.67], pleased to meet you
mail from:tt@upl.com
250 2.1.0 tt@upl.com... Sender ok
rcpt to:imtheone@vip.qq.com
550 5.7.1 imtheone@vip.qq.com... Relaying denied   《---中继拒绝

什么叫中继?
中继就是让你的邮件服务器能够把邮件发送到外面的网络

默认情况下,是拒绝其他登录过来的用户发送外部邮件 ,在上面的例子中,我是从10.1.1.67 登录到 10.1.1.92这台smtp服务器,只允许从 10.1.1.92 登录的用户才能发送外部邮件,因为从本地登录他认为是127.0.0.1登录的,那么到底哪个配置文件涉及到呢?---> /etc/mail/access


1、配置access

vim /etc/access

Connect:10.1.1                          RELAY  《---允许这个网段的客户发送外部邮件
Connect:10.1.1.20                       REJECT  《---拒绝10.1.1.20
Connect:10.1.2                          REJECT
Connect:10.1.2.20                       OK
TO:126.com                              REJECT  《--不允许发邮件到126.com
FROM:qq.comREJECT   <--发信人邮件地址不能是qq.com
10.1.1.99REJECT


2、生成数据文件:

makemap hash /etc/mail/access.db < /etc/mail/access
service sendmail restart


3、测试:
使用10.1.1.67 再次测试
telnet 10.1.1.92 25
.....
mail from:gg@upl.com
250 2.1.0 gg@upl.com... Sender ok
rcpt to:imtheone@vip.qq.com
250 2.1.5 imtheone@vip.qq.com... Recipient ok  <---可以了,原来是拒绝的
.....


例子6:实现SMTP验证
只要提供的正确的帐号和密码,就不再受到 /etc/mail/access.db规则影响

启动pop服务器:
service dovecot restart
chkconfig --level 35 dovecot on


1、修改配置文件
搜索MD5关键字,把下面两行注释去掉:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

搜索submission,把注释去掉:
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl


m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

2、安装验证支持软件包
yum install  cyrus-sasl*  -y

3、重启涉及的服务

service sendmail restart
service dovecot  restart
service saslauthd restart

chkconfig --level 35 sendmail on
chkconfig --level 35 saslauthd on
chkconfig --level 35 dovecot on

4、验证是否支持SMTP用户验证功能

a、方式一:
telnet 10.1.1.92 25
ehlo slave.upl.com
250-slave.upl.com Hello slave.upl.com [10.1.1.92], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN  《---出现这行关键字就说明支持SMTP验证
250-DELIVERBY
250 HELP

b、方式二:使用foxmail等客户端工具测试

@@@@@@测试发现,依旧不需要使用SMTP验证都可以成功发送邮件
但也可以使用SMTP密码验证的形式发送邮件
问题出现在哪?

原因:由于stmp验证默认只是在587端口监听,而默认的25端口是不需要验证的,而我们使用的foxmail等MUA客户端工具发送邮件的时候都是使用25端口的,所以就避开了密码验证,为了解决这个问题,应该这样作:


1、修改配置文件:
把下面这行注释掉:
dnl # DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

把下面这行打开,并且把submission修改成25或者smtp
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
修改为:
DAEMON_OPTIONS(`Port=25, Name=MSA, M=Ea')dnl


m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
service sendmail restart

2、验证:

使用 telnet测试验证功能:
[iyunv@dns mail_client]# telnet 10.1.1.92 25
Trying 10.1.1.92...
Connected to station92.cluster.com (10.1.1.92).
Escape character is '^]'.
220 slave.upl.com ESMTP Sendmail 8.13.8/8.13.8; Fri, 6 Nov 2009 14:38:12 +0800
helo sss
250 slave.upl.com Hello station20.cluster.com [10.1.1.20], pleased to meet you
mail from:gg@baidu.com
530 5.7.0 Authentication required
auth login
334 VXNlcm5hbWU6
dG9t
334 UGFzc3dvcmQ6
MTIz
235 2.0.0 OK Authenticated
mail from:gg@baidu.com
250 2.1.0 gg@baidu.com... Sender ok
rcpt to:bean@upl.com
250 2.1.5 bean@upl.com... Recipient ok
data
354 Enter mail, end with &quot;.&quot; on a line by itself
sdfffffffffffffffffffffff
.
250 2.0.0 nA66cCGx006337 Message accepted for delivery
quit

另一种就是使用foxmail验证


@@@@@@@@现在又有一个问题,就是telnet 127.0.0.1 25 进行发送邮件的时候也需要验证了,这样在写监控脚本的时候需要发本地邮件到管理员的时候就会失败,怎么解决?

解决方法:

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
DAEMON_OPTIONS(`Port=25, Addr=10.1.1.92, Name=MSA, M=Ea')dnl




另外的工具查看接收的邮件:
mutt -f pop://tom@upl.com



例子7:  邮件的虚拟帐号

1、vim local-host-names
hot.com
upl.com
google.com

2、 vim /etc/mail/virtusertable
接收地址转发到
tom@hot.com     bean
@google.com     tom 《---左边的接受地址出现的域名必须在local-host-names出现
bean@upl.com    l.t.b@126.com

makemap  hash virtusertable.db < virtusertable

3、测试

service sendmail restart

分别发送邮件到 tom@hot.com   dfgfg@google.com   bean@upl.com 看看邮件去哪了

别的一些用法
joe@upl.com     error:nouser 550 No such user here
jax@upl.com     error:5.7.0:550 Address invalid


=================================

第二、xinetd (扩展的网络服务守护进程)

作用:增强访问控制的功能,增强的日志记录功能

涉及的配置文件: /etc/xinetd.conf  <---全局配置


例子1:把vsftp托管给xinetd

1、编辑配置文件

service ftp
{
socket_type             = stream
protocol                = tcp
wait                    = no  <---no ,xinetd把接受到请求转发给vsftp之后,时候还继续监听
user                    = root <---运行服务的时候,进程的身份
server                  = /usr/sbin/vsftpd   <---服务器的进程路径
disable                 = no  <--- no ,启用这个托管设定
}


2、修给vsftpd的本身的配置文件
vim /etc/vsftpd/vsftpd.conf
listen=NO

3、重启服务并验证

service xinetd restart
验证
chkconfig --list
vsftp:          启用

netstat -ntlp | grep 21
tcp        0      0 0.0.0.0:21          0.0.0.0:*           LISTEN      6828/xinetd


例子1:把sshd托管给xinetd

man xinetd.conf
1、
service ssh
{
socket_type             = stream
protocol                = tcp
wait                    = no
user                    = root
server                  = /usr/sbin/sshd
server_args             = -i  
disable                 = no  <---启用这个托管配置
per_source              = 1 <---每个IP 只能最多建立一个连接
cps                     = 100 2 <---每秒最多接受100请求,超过了就停止接受新请求2秒钟
flags                   = IPv4  <---ipv4的标志
only_from= 10.1.1.0/24 <---只允许这个网段访问
no_access= 10.1.1.67  <---不允他访问
instances= 3 <---最多打开的实例数量,一个实例对一个连接
access_times            = 16:00-23:20  <---“营业时间”

}


2、把原来的服务sshd停止,并重新启动xinetd
service sshd stop
service xinetd restart


=============================================

第三、Tcpwrapper  <---tcp程序的保护外壳  client  <--- Tcpwrapper ---[ xinetd ] ---> server

查询哪些服务支持tcpwrapper

配置:
例子1:
/etc/hosts.allow
vsftpd: 10.1.1.0/255.255.255.0 EXCEPT 10.1.1.67
--> (理解成 :10.1.1.1~10.1.1.66 ,10.1.1.68~10.1.1.254)

/etc/hosts.deny
vsftpd:all

Tcpwrapper 首先读取hosts.allow文件,如果找到匹配的话就应用规则,如果找不到就继续找,最后找hosts.deny 如果都找不到的话,就默认允许连接


例子2:只禁止10.1.1.0/24网段的主机访问vsftpd,但10.1.1.20可以
/etc/hosts.allow

/etc/hosts.deny
vsftpd:10.1.1.0/255.255.255.0 EXCEPT 10.1.1.20

例子3:允许所有人访问,但不允许10.1.1.0/24访问,但又允许10.1.1.20

/etc/hosts.allow
vsftpd:ALL EXCEPT 10.1.1.0/255.255.255.0 EXCEPT 10.1.1.20

etc/hosts.deny
vsftpd:ALL


思考: 到底哪些程序支持Tcpwrapper保护呢?
[iyunv@slave ~]# which vsftpd
/usr/sbin/vsftpd
[iyunv@slave ~]# ldd /usr/sbin/vsftpd | grep wrap
libwrap.so.0 => /lib/libwrap.so.0 (0x00cc9000)  《--找到才说明它能受到tcpwraper保护

[iyunv@slave ~]# which sshd
/usr/sbin/sshd
[iyunv@slave ~]# ldd /usr/sbin/sshd | grep wrap
libwrap.so.0 => /lib/libwrap.so.0 (0x007ff000)


例子4:
vim /etc/hosts.deny  
sshd:10.1.1.67:spawn echo &quot;`date`&quot;  %c  %d >> /var/log/tcpwrapper.log
《---只要是10.1.1.67 登录就会拒绝,并且记录日志

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143509-1-1.html 上篇帖子: PHP+Sendmail,很多邮箱收不到信的问题 下篇帖子: IT忍者神龟之Sendmail复习笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表