postfix安全
一、postfix基础配置
环境:CA中心:server1.example.com 192.168.32.31
postfix server:station2.example.com 192.168.32.32
client:station3.example.com 192.168.32.33
1、安装
[root@station2 ~]# yum install postfix
[root@station2 ~]# alternatives --config mta
共有 2 个程序提供“mta”。
选择 命令
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix
按 Enter 来保存当前选择[+],或键入选择号码:2
#更改默认mta(即默认smtp服务器),将默认sendmail改成postfix
[root@station2 ~]# service sendmail stop
[root@station2 ~]# chkconfig sendmail off
[root@station2 ~]# service postfix start
[root@station2 ~]# chkconfig postfix start
#必须关闭sendmail服务,sendmail和postfix的协议端口均为25
2、相关文件说明
· 配置文件:/etc/postfix/main.cf:主配置文件,所以参数均在此配置
/etc/postfix/master.cf:控制所有进程(postfix共21个子进程)
· 配置工具:postconf :main.cf中所有选项均可通过postconf修改和显示
-d:显示默认配置
-e:修改配置
-n:显示非默认配置
postconf :显示所有配置(包含默认和非默认)
#一般通过postconf -d|grep parname >> /etc/postfix/main.cf的方式来添加当前main.cf中未有的参数,然后编辑
· 队列及相关目录说明(共5个主队列,相关目录路径:/var/spool/postfix/)
/incoming:进入mta的邮件(所有邮件在投递前都要经此目录)
/active: 活动邮件,邮件只是瞬间存在,一般为空
/deferred:临时不能投递的邮件
/corrupt:无法投递到对方的邮件,会每隔15分钟尝试重试一次
/hold:重试投递达到设定上限,不再投递的邮件
#postqueue -p:查看队列里是否有文件存在
#sendmail的所有队列目录/var/spool/mqueue
3、配置主配置文件main.cf
[root@station2 ~]# vi /etc/postfix/main.cf
myhostname = station2.example.com #主机名,可不定义,便于后面引用
mydomain = example.com #所在域域名,可不定义,便于后面引用
myorigin = $myhostname
#代表邮件出去时邮件的伪装,默认是statio2.example.com
myorigin = $mydomain
#代表邮件出去时邮件,伪装成example.com,对方收到该邮件时显示的邮件后缀这变成@example.com,如:默认[email protected],如果不加后缀直接以gest2001发送,则对方显示的邮件为[email protected]
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
#功能和sendmail中local-host-names功能一样,本机的别名。如果别人要给example.com内用户发送邮件,如[email protected]则必须mydestination = example.com
inet_interfaces = all #邮件监听接口
#完成以上配置,重启postfix即可正常收发邮件了
mynetworks = 127.0.0.0/8 192.168.32.0/24
#relay(邮件中继),定义可以使用此服务器收发邮件的客户端
二、postfix服务的安全
1、/etc/aliases:转发别名
[root@station2 ~]#postalias /etc/aliases
或[root@station2 ~]#newaliases #更新别名数据库
2、其他
disable_vrfy_command = yes #禁用vrfy以避免客户端查询邮件账户
smtpd_helo_required = yes #要求客户端开始连接smtpd服务时必须发送helo
in_flow_delay = 1s
#邮件发送速度,显示客户端可多长时间想邮件发送一次投递请求,用于防Dos攻击
local_destination_concurrency_limit = 2
#限制同一本地邮箱在同一时间最多接收的邮件数量,用于防Dos攻击
allow_percent_hack = no #邮箱不支持特殊字符串
3、访问控制文件(多用于垃圾邮件处理,等同于sendmail的/etc/mail/access)
[root@station2 ~]# vi /etc/post/main.cf
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access,
check_sender_access hash:/etc/postfix/access,
check_recipient_access hash:/etc/postfix/access
#/etc/postfix/access文件可以自己指定,不一定要为access
[root@station2 ~]# vi /etc/postfix/access
192.168.32.33 REJECT
#限制192.168.32.33无法使用此服务器进行邮件中继,则33无法想服务器发送邮件
[root@station2 ~]# postmap /etc/postfix/access #更新access数据库
4、DNS黑洞(DNS服务器上配置间sendmail中dns黑洞配置相同)
[root@station2 ~]# vi /etc/post/main.cf
smtpd_recipient_restrictions = reject_rbl_client station3.example.com
5、垃圾邮件处理(内容过滤)
[root@station2 postfix]# vi /etc/postfix/main.cf
mailbox_command = /usr/bin/procmail
#要支持邮件过滤必须开启procmail,sendmail默认开启procmail
header_checks = regexp:/etc/postfix/header_checks #限制邮件头
mime_header_checks = regexp:/etc/postfix/mime_header_checks #限制附件
body_checks = regexp:/etc/postfix/body_checks #限制邮件内容
[root@station2 postfix]# vi header_checks
/Subject:. *test mail/ REJECT bye,bye spam!!!
#限制邮件头含有test mail的拒绝并返回bye,bye spamm!!!信息给发件人
[root@station2 postfix]#vi mime_header_checks
/name=[^>]*.\(ade|adp|asd|bas|bat|chm|cmd|com|cpl|crt|dbx|dll|exe|hlp|hta|\
inf|ins|isp|lnk|mde|mdt|vb|vbe|vbs)/ REJECT attachment prohibited
#拒绝各种文件格式(后缀结尾)的附件,并反馈attachement prohibited给发件人
[root@station2 postfix]#vi body_checks
/Mail is now avalilable/ REJECT Go way
#拒绝含有Mail is now avalilable内容的邮件,并反馈Go way给发件人
三、支持SASL/TLS
1、编辑/etc/postfix/master.cf,开启sasl授权支持
[root@station2 postfix]# vi /etc/postfix/master.cf
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
2、启动相关服务
[root@station2 postfix]#service postfix restart
[root@station2 postfix]# /etc/init.d/saslauthd start #启动sasl认证服务
3、生成ssl(tls)加密证书(通过CA中心获取授权证书,CA中心配置见cryptography中ca配置)
[root@station2 postfix]# mkdir certs
[root@station2 postfix]# cd certs
[root@station2 certs]# (umask 077;openssl genrsa 1024 > postfix.key) #生成私钥
[root@station2 certs]# openssl req -new -key postfix.key -out postfix.csr
#生成公钥请求文件
[root@station2 certs]# scp postfix.csr server1.example.com:/etc/pki/CA/postfix.csr
#上传到CA中心,以便生成经CA中心签名的公钥
[root@server1 CA]# openssl ca -in postfix.csr -out postfix.crt
#CA中心根据请求文件生成经过签名的公钥
[root@server1 CA]# scp postfix.crt 192.168.32.32:/etc/postfix/certs/postfix.crt
[root@server1 CA]# scp my-ca.crt 192.168.32.32:/etc/postfix/certs/my-ca.crt
4、配置main.cf文件开启sasl认证和tls加密
[root@station2 postfix]# vi main.cf
smtpd_recipient_restrictions = permit_sasl_authenticated,
reject_unauth_destination
#允许sasl授权认证的客户访问;禁止未认证的客户访问
smtpd_use_tls = yes #开启stmpd的tls支持
smtpd_tls_cert_file = /etc/postfix/certs/postfix.crt #指定tls公钥
smtpd_tls_key_file = /etc/postfix/certs/postfix.key #指定tls私钥
smtpd_tls_CAfile = /etc/postfix/certs/my-ca.crt #指定CA的公钥
smtpd_tls_loglevel = 1 #开启tls日志
smtpd_sasl_auth_enable = yes #开启sasl授权认证
broken_sasl_auth_clients = yes #兼容老版sasl
smtpd_sasl_security_options = noanonymous #禁止匿名用户
5、测试sasl和tls
[root@station2 postfix]# service postfix restart
[root@station2 postfix]# telnet station2.example.com 25
250-STARTTLS #该行表示已经支持tls
250-AUTH PLAIN LOGIN #该行表示已经支持sasl
#测试tls和sasl功能是否开启
root@station2 postfix]# echo -en '\0guest2001\0guest2001'|openssl base64
AGd1ZXN0MjAwMQBndWVzdDIwMDE=
[root@station2 postfix]# telnet station2.example.com 25
auth plain AGd1ZXN0MjAwMQBndWVzdDIwMDE=
235 2.0.0 Authentication successful #出现此行表示sasl认证成功
#测试sasl认证是否成功