sendmail¶i¶¥³]©w
2006/03/08
°Ñ¦Ò¤å¥ó:
http://www.ofb.net/~jheiss/sendmail/tlsandrelay.shtml
http://www.imacat.idv.tw/tech/sslcerts.html

sendmail relay³]©w
¥Ø«eª©¥»ªºsendmail ,¦]¬°¦w¥þªº¦]¯À(Á×§K¦¨¬°§£©U¶l¥ó¥D¾÷),¨Ã¤£À°¨ä¥¦¥D¾÷relay¶l¥ó,¦ý¬O³o¼Ë·|³y¦¨¤½¥q¦P¤¯µLªk¦b¤½¥q¥~(roaming users)(°ÊºAIP)·QÂǥѤ½¥q¥D¾÷¨Ó¶Ç°e¶l¥ó.

1.¨Ï¥ÎSMTP AFTER POP3¥~±¾µ{¦¡(sendmail¹w³]¨Ã¤£´£¨Ñ¥ô¦ó¤èªk)
­ì²z:
¤@¯ëªº¨Ï¥ÎªÌªº¬yµ{¬O¥ý¦¬«H->¼g«H->°e«H(¤]´N¬O¥ýpop3¦Asmtp),·í¦¬«H(pop3)¦¨¥\¤§«á·|IJµo¥~±¾µ{¦¡§ï¼g relay¸ê®Æ®w,¤¹³\¸ÓIP ¶Ç°e¶l¥ó,¦b³]©wªº®É¶¡«á¸ÓIPªº¶Ç°e¶l¥óªºÅv­­·|³Q¨ú®ø,¥~±¾µ{¦¡±N·|§R°£relay¸ê®Æ®w¸ÓIP¤¹³\relayªº³]©w,³oºØ§@ªk¥²¶·­×§ïpop3ªº(¥»¤å¤£¤¶²Ð³]©w)
2.¨Ï¥Îsendmail¤º«Ø¥\¯à,(«á¨Ó¥[¤Jªº)
­ì²z:
smtp¨Ï¥ÎªÌ±K½XÅçÃÒ


sendmail.cf¨ä»¡©ú(«Ü­«­n)

dnl # The following allows relaying if the user authenticates, and   disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
dnl #
dnl define(`confAUTH_OPTIONS', `A p')dnl
dnl #
dnl # PLAIN is the preferred plaintext authentication method and used by
dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do
dnl # use LOGIN. Other mechanisms should be used if the connection is not
dnl # guaranteed secure.
dnl # Please remember that saslauthd needs to be running for AUTH.
dnl #
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl #
dnl # Rudimentary information on creating certificates for sendmail TLS:
dnl #     cd /usr/share/ssl/certs; make sendmail.pem
dnl # Complete usage:
dnl #     make -C /usr/share/ssl/certs usage
dnl #
define(`confCACERT_PATH',`/usr/share/ssl/certs')
define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
#¥H¤U¬O¤¹³\¨Ï¥ÎªÌÅçÃÒ¨Órelay¶l¥ó,¦ý¦pªG¨Ï¥Î plaintextÅçÃÒ¦ý¨S¦³¨Ï¥ÎTLS«h¥\¯à½Ð¤£­n¨Ï¥Î³o­Ó¥\¯à


¦pªG­n§A­n¨Ï¥ÎLOGIN¤d¸U¤£­n¨Ï¥Î³o­Ó¶µ¥Ø

¨Ï¥Îdefine (`confAUTH_OPTIONS', `A')´N¦n¤F,¦]¬°¥¦·|­­¨î¥u¦³½s½X¤~¥i¥H¨Ï¥Î
PLAINÅçÃÒ¤èªk¨Ï¥Î¦bMozilaMail /Evolution
LOGINÅçÃÒ¤èªk¨Ï¥Î¦bOutlook Express


½Ð°O¦ísaslauthd¥²¶·³Q°õ¦æ,¤~¯à¨Ï¥ÎAUTH
#©w¸q«H¥ôªºÅçÃÒ¾÷¨î

#©w¸qÅçÃÒªº¾÷¨î



¦pªG­n¨Ï¥ÎTLS½Ð¨Ï¥Î¤U­±©R¥O
cd /usr/share/ssl/certs;make sendmail.pem
§¹¾ãªº¥Îªk
make -C /usr/share/ssl/certs usage
#¤U­±³]©w¾ÌÃÒ,keyµ¥³]©w

SMTP AUTH (RFC 2554)
sendmail­ì¤£¤ä´©smtp auth ¦pªG­n¨Ï¥Î³o­Ó¥\¯à§A¥²¶·¨Ï¥ÎCyrus SASL³o¬O¤@­Ó¥i©â´«ªºÅçÃÒªºµ{¦¡¤¶­±
¦b°e«H®É¨Ï¥Îoutlook express ªºÅçÃÒ(LOGIN),mozilla, netscape¨Ï¥ÎPLAIN
ÅçÃÒ®Ésendmail·|¦Vsaslauthd¦æµ{¨Ó¬dÃÒ
#§Ú¬O¨Ï¥ÎFC3/4¦]¦¹¹w³]Cyrus SASL³£¤w¸g½sͦbsendmail
1./etc/sysconfig/saslauthd
# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/var/run/saslauthd

# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled to use.
MECH=pam
#MECH=shadow¦n¹³¤]¥i¥H
# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=

2./usr/lib/sasl2/Sendmail.conf
pwcheck_method:saslauthd
3.±Ò°Êsaslauthd
 service saslauthd start
(¦pªG¥H«á­n¶}¾÷¦Û°Ê±Ò°Êsaslauthd ,chkconfig saslauthd --level 2345 on )
4.vi /etc/mail/sendmail.mc
¦U¥[¤JLOGIN
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
5.m4 sendmail.mc > sendmail.cf
6.vi /etc/mail/sendmail.cf ±NLOGLEVEL=13¼W¥[/var/log/maillog °O¿ý°T®§
7.service MailScanner restart
8.¬d¬Ý°T®§/var/log/maillog ,¦pªG¨S¦³¿ù»~
9.´ú¸Õ:
[root@dns1 ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 dns1.ocean-pioneer.com ESMTP Sendmail 8.13.1/8.13.1; Fri, 3 Feb 2006 13:20:11 +0800
ehlo test
250-dns1.ocean-pioneer.com Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
10.Outlook Express ³]©w(¤u¨ã->±b¤á-¦øªA¾¹)
oe_login

#¸g¥Ñ¤W­zªº³]©w«á§Aªºsendmail¤v¸g¥i¥H¶Ç°e¶l¥ó,¦ý¹ê¦b¬O¤£¦w¸Ë,¦]¬°¦pªG¬Oª½±µ¨Ï¥Î LOGIN/PLAIN(©ú½X) «Ü®e©ö¨Ã§O¤H¨ú±o±K½X,µM«á¨Ï¥Î§Aªº¥D¾÷¨Ó¶Ç©U§£¶l¥ó,¦]¦¹¥²¶·¥[¤JTLS½s½X

TLS©MSSL
ssl¬O¥Ø«e³Ì±`¨Ï¥Î¨Ó¥[±Kªº¤è¦¡,¥¦¥i¥HÀ³¥Î¦bsmtp,pop3,httpµ¥µ¥¦b¶Ç¿é­±ªº¥[±K,²Ó¸`½Ð°Ñ¦Ò¨ä¥¦±M®Ñ¤¶²Ð,³oùØ¥u¤¶²Ð°ò¥»Æ[©À
SSL¬Oª½±µ¨Ï¥Î¥t¤@­Ó³s±µ°ð¨Ó±µ¨ü³s½u,¦ÓTLS«h¬O¨Ï¥Î­ìªA°Èªº³s±µ°ð,¦b­ìµ{¦¡ªº©R¥O¥[¤JSTARTTLS,­Y­n±Ò°Ê½s½X³s½u«h¨Ï¥ÎSTARTTLS¨Ó¶i¤J½s½X³s½u,¦]¦¹´î¤Ö¤F¤@­Ó³s±µ°ð¨Óµ¥«ÝªA°È
¤Z¬O¥Î¨ìTLS,SSLx509¾ÌÃÒªº³]©w§A¤@©w­n·|
#TLS¥i¥HÀ³¥ÎSENDMAIL¦b¨â¤è­±
sendmail <-> sendmail  -¥Ø«e«Ü¤Ö¤H­­¨î¥u¦¬³z¹LTLSªº«H(¦b³oùؤ£½Í)
mail clinet -> sendmail  -CAÅçÃÒ¦¨¥\ªº¸Üverify=OK¥i¥Hrelay¶l¥ó
¦b¤W­zªºsendmail.mc¤¤§t¦³¤U­±¥|­Ó³]©w,§Ú­Ì±N¨Ï¥Îx.509¨Ó«Ø¥ß¤U­±ªº³]©w
define(`confCACERT_PATH',`/usr/share/ssl/certs')
define(`confCACERT',`/usr/share/ssl/certs/ca -bundle.crt')-¤W¼h¾ÌÃÒ,¥Î¨ÓÅçÃÒ¥Î
define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')-¥»¾÷¾ÌÃÒ
define(`confSERVER_KEY', `/usr/share/ssl/certs/sendmail.pem')-¨pkey
define(`confCLIENT_CERT',`/etc/mail/certs/myhost-msp.crt')
define(`confCLIENT_KEY',`/etc/mail/private/myhost-msp.key')
SERVER/CLIENT¬O¦³¤À§Oªº
define(`confDONT)BLAME_SENDMAIL',`GroupReadablekeyFile')

¦b«Ø¥ß¦n¤F¾ÌÃÒ(½Ð°Ñ·Ó:ªþ¥ó),¨Ã³]©w¦n¸ô®|
m4 sendmail.mc > sendmail..cf
­×§ï LogLevel=12 (¼W¥[°£¿ùªº°O¿ý)
­«·s±Ò°Êsendmail
´ú¸Õ³s½u
[root@dns1 ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 dns1.ocean-pioneer.com ESMTP Sendmail 8.13.1/8.13.1; Fri, 3 Feb 2006 13:20:11 +0800
ehlo test
250-dns1.ocean-pioneer.com Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP

¦pªG¥¿½T«hSTARTTLS·|¥X²{¦behlo ¤§«á,¦pªG¨S¦³¥X¨Ó¬d¬Ý/var/log/maillog
Outlook Express tls³]©w
oe ssl
#ª`·N·í/etc/mail/access¦³©Úµ´REJECT/DROP®É,¬OµLªk¶i¤J«áÄòªºssl/smtp auth·|ª½±µ³Q©Úµ´±¼
°²³]¤º®e¦p¤U:
dynamic.hinet.net       REJECT
dynamic.apol.com.tw     REJECT
dynamic.so-net.net.tw   REJECT
dynamic.ttn.net         REJECT
dynamic.giga.net.tw    REJECT
dynamic.tfn.net.tw      REJECT
¤W­zªººô°ì±Nª½±µ³Q©Úµ´±¼,¦]¦¹§A¥²¶·¥h±¼

ªþ¿ý1: SASLÅçÃÒªº¤èªk
passwd
/etc/passwd . ²³æªº³]©w¿ï¶µ "pwcheck_method"¬° "passwd".

shadow
/etc/shadow  ¦pªG¦øªA¾¹¨Ï¥Î SASL¨Ï¥Î rootªº¨­¥÷¨Ó°õ¦æ (¦pSendmail) ¨S¦³°ÝÃD:¥u­n³]©w"pwcheck_method" ¿ï¶µ¬° "shadow". µM¦Ó, ¦³³\¦hdaemons ¦]¦w¥þªº­ì¬G,¨Ã¤£¬O¥H rootªº¨­¥÷¨Ó°õ¦æ, ¦pCyrus imapd.¬°¤F³o¨Ç¦øªA¾¹Àˬd±K½X, ¥¦­Ì»Ý­n¤@­Ó helper µ{¦¡¥Hroot¨Ó°õ¦æ, ©Î»Ý­n¯S§OªºÅv­­¨ÓŪ¨ú /etc/shadow. ³Ì²³æªº¤èªk¬Oµ¹¤©³o­Ó¦øªA¾¹Åª¨ú /etc/shadow ªºÅv§Q,¨Ò¦p¥[¤J cyrus user ¨ì "shadow" ¸s²Õ¤¤µM«á³]©w "pwcheck_method"¬° "shadow".

¤]¥i¯à¼g¤@­Ó¯S§Oªº PAM ¼Ò²Õ,¾Ö¦³¥²¶·ªºÅv­­ .

kerberos_v4
Kerberos v4, ¦pªG¦b½sĶ´Á¶¡¦³³]©w, ¥i¥H±Ò°Ê¯Â¤å¦r±K½XÀˬd³]©w"pwcheck_method" ¨ì "kerberos_v4". ³o¬O¤£¦Pªº®æ¦¡ KERBEROS_V4 ¾÷¨î°Q½×¦p¤U---³]©w¿ï¶µ¦p¤U.
pam
PAM, ¥i©â´«¦¡ªºÅçÃÒ¼Ò²Õ, ¬O¹w³]¨Ï¥Î¦bSolaris©M Linux. ¥¦¥i¥H³]©wÀˬd±K½X¦b¤£¦Pªº¤èªk:³z¹L Radius, ³z¹L NIS, ³z¹L LDAP,©Î ¶Ç²Î /etc/passwd ÀÉ®×. ¦pªG§A§Æ±æ¨Ï¥Î PAM¨ÓÅçÃÒ©MCyrus SASL library ´M§ä PAM library·í¦b½sͮɳ]©w, ¥¦¬O¹w³] (©Î³]©w "pwcheck_method" ¬° "PAM"). ¥¦¨Ï¥Î PAM ªA°È¦WºÙ (¨Ò¦p, Sendmail¨Ï¥Î "smtp" ©M Cyrus imapd ¨Ï¥Î "imap").

PAM »{ÃÒ¹ïSASL ¥u¼vÅT plaintext ÅçÃÒ. ¤£¼vÅT¨ä¥¦¾÷¨î, ©Ò¥H­­¨î¨Ï¥Î PAM ¦b¨ä¥¦¾÷¨î¬O¤£¹ïªº.

sasldb
Àx¦s±K½X¦bSASL±K½X¸ê®Æ®w, ¬Û¦Pªº¸ê®Æ®wÀx¦s±K½X¤Î¤À¨Éªº¤èªk. ¥¦ªº­ì«h©ÊªºÀuÂI¬O·N¨ýµÛpasswords ¨Ï¥Î¤À¨É±K½X¾÷¨î±N·|¦P¨B¥Î plaintext password mechanisms.µM¦Ó, ¨t²Î¹w³]¤£¨Ï¥Î sasldb.

ª`·N³]©wplaintext passwords ¦b¸ê®Æ®wsasldb¤¤,§A»Ý­n³]©w "saslpasswd" . "saslpasswd" ¨Ï¥Î¬Û¦P³]©w¹³¥ô¦ó SASL ¦øªA¾¹.«Ø¥ß /usr/lib/sasl/saslpasswd.conf ¥]§t³o¤@¦æ "pwcheck_method: sasldb" ¨Ó "saslpasswd" ¨Ó«Ø¥ß plaintext secrets¦bÃB¥~¥¿±`ªº±K½X.

#SASLªº¦n³B
¥i¥H¸ó¥D¾÷ÅçÃÒ,¤@¯ëªºÅçÃÒ¤èªk¥u¯à³æ¾÷ÅçÃÒ,¨Ã¥B¥i¥H¿ï¥Î¤W­zªº¾÷¨î
#sasldb ¥²¶·¨Ï¥Îsaslpasswd¨Ó¥[¤J¨Ï¥ÎªÌ¦WºÙ¤Î±K½X

ªþ¿ý2:¨Ï¥ÎAuth login½d¨Ò
S:220 smtp.com ESMTP Sendmail 8.13.1/8.13.1; Fri, 3 Feb 2006 14:51:4 5 +0800
C: ehlo test
S:250-smtp.com Hello test [192.168.0.32], pleased to meet you
S:250-ENHANCEDSTATUSCODES
S:250-PIPELINING
S:250-8BITMIME
S:250-SIZE
S:250-DSN
S:250-AUTH LOGIN PLAIN
S:250-DELIVERBY
S:250 HELP
C:AUTH LOGIN
334 VXNlcm5hbWU6
# telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 bbs.cj.mis.yzu.edu.tw ESMTP Sendmail 8.12.6/8.12.6; Tue, 29 Apr 2003
ehlo localhost
250-bbs.cilab.mis.yzu.edu.tw Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
AUTH LOGIN
334 VXNlcm5hbWU6          -Usernameªºbase64½s½X
[¶K¤W base64 ½s½X«áªº User Name]
334 UGFzc3dvcmQ6            -Passwordªºbase64½s½X
[¶K¤W base64 ½s½X«áªº User Password]
235 2.0.0 OK Authenticated <-- ¥X²{³o¦æªí¥Ü»{ÃÒ¦¨¥\
quit



#base64½s½Xªº¨ú±o,§Ú¨Ï¥Îpython
>>> import base64
>>>base64.b64encode('¦r¦ê')                 #½s½X
>>>base64.b64decode('¦r¦ê')                 #¸Ñ½X
#©Ò¥H¨Ï¥Îlogin¤@¼Ë«Ü®e©ö³Q¯}¸Ñ,¬°¤F¦w¥þªº­ì¬G,¦]¦¹§Ú­Ì»Ý­n¥[¤JTLS/SSL

SSL¾ÌÃÒ¤Îkey «Ø¥ß
¥Ñ©ófc3©Mfc4ªºopensslªº¦w¸Ë³]©wÀɪº¥Ø¿ý¤£¤@¼Ë½Ðª`·N,¥H¤U¥HFC3¬°¥D,½Ð®Ú¾Ú¦Û¤vÀô¹Ò¨Ó­×§ï
fc3 -/usr/share/ssl
fc4-/etc/pki/tls
  1. ­×§ïopenssl.cnf ¨ä¤¤
    dir = /usr/share/ssl
    dir = /etc/pki/tls
  2. ®Ú¾Ú°Ñ¦Ò¤å³¹«Ø¥ß/etc/ssl ¥Ø¿ý,¨ä¹ê¥i¥H¨Ï¥Îln -s /etc/ss /usr/share/ssl
    «Ø¥ßºô°ìCAcert
  3. «Ø¥ß¨pkey
       openssl genrsa -des3 -out /etc/ssl/private/myrootca.key 2048
  4. ¶ñ¼g¾ÌÃÒ­n¨D
       openssl  req -new -key /etc/ssl/private/myrootca.key -out /tmp/myrootca.req
  5. ñµo¾ÌÃÒ
       openssl x509 -req -days 7305 -sha1 -extfile /etc/ssl/openssl.cnf -extensions v3_ca -signkey /etc/ssl/private/myrootca.key -in /tmp/myrootca.req -out /etc/ssl/certs/myrootca.crt
  6. ­«½Æ3,4,5(±Mªùµ¹OE¨Ï¥Î)
        mkdir /etc/mail/private
        mkdir /etc/mail/certs
       chgrp smmsp /etc/mail/private
       chmod  o-rwx /etc/mail/private
       «Ø¥ß¨pkey: openssl genrsa -out /etc/ssl/private/myhost-msp.key 2048
       «Ø¥ß¾ÌÃÒ­n¨D:openssl  req -new -key /etc/ssl/private /myhost-msp.key -out /tmp/myhost-msp.req
    ñµo¾ÌÃÒ openssl x509 -req -days 3650 -sha1 -extfile /etc/ssl/openssl.cnf -extensions v3_req -CA /etc/ssl/certs/myrootca.crt -CAkey /etc/ssl/private/myrootca.key -in /tmp/myhost-msp.req /etc/mail/certs/myhostmsp.crt