メール送信用のサーバー (SMTP サーバー) を, Postfix により構築します。
$ sudo apt-get install postfix |
mail_owner = postfix # ホスト名の設定 myhostname = mail.ems.jp # ドメインの無いアドレスに付加する値の設定 myorigin = ems.jp # ローカル配送するドメインを指定 mydestination = $myhostname, ems.jp, war.jp # メール中継が可能な IP アドレスを制限 mynetworks = 192.168.0.0/24, 127.0.0.0/8 # ".domain"情報のないアドレスに文字列 ".$myorigin" を付加しない append_dot_mydomain = no # メールのスプールディレクトリの指定 mail_spool_directory = /var/spool/mail # メールボックスファイルの最大サイズ(単位は bye。 0 は無制限) mailbox_size_limit = 51200000 # 送信メールの最大サイズ(単位は byte。 0 は無制限) message_size_limit = 10240000 # ヘッダをチェックするファイルの場所を指定 header_checks = regexp:/etc/postfix/header_checks |
# 中継するSMTPサーバーを指定 relayhost = chuukei.ems.jp |
/^Received:.*192\.168\..*/ IGNORE /^Received:.*127\.0\.0\.1.*/ IGNORE |
$ sudo /etc/init.d/postfix restart |
$ sudo /etc/init.d/postfix check ←/etc/postfix/main.cfの文法チェック |
$ dig ems.jp MX |
root: abc, xyz |
abc: abc@hoge.test.com |
$ sudo postalias /etc/aliases |
$ telnet 192.168.0.1 25 ←telnet コマンドで25番ポートに接続 Trying 192.168.0.1... Connected to 192.168.0.1. Escape character is '^]'. 220 mail.ems.jp ESMTP Postfix helo mail.ems.jp ←サーバーへ挨拶 250 mail.ems.jp mail from:root@ems.jp ←メールの送信元 250 2.1.0 Ok rcpt to:xxx@test.test ←メールの送信先(中継拒否) 550 <xxx@test.test>: User unknown in local recipient table rcpt to:root@ems.jp ←メールの送信先 250 2.1.5 Ok data ←内容の書き込み開始を宣言 354 End data with <CR><LF>.<CR><LF> subject:test ←表題 abc ←本文 DEF . ←ビリオドで本文の終了 250 Ok: queued as 487582C4037 quit ←メールの送信 221 Bye Connection closed by foreign host. |
$ cd /tmp $ openssl req -new -out csr.pem |
Generating a 1024 bit RSA private key .......................++++++ ............++++++ writing new private key to 'privkey.pem' Enter PEM pass phrase:[パスワードを入力] Verifying password - Enter PEM pass phrase:[パスワードを再入力] ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Miyagi Locality Name (eg, city) []:Sendai Organization Name (eg, company) [Internet Widgits Pty Ltd]:Self Organizational Unit Name (eg, section) []:[リターンキーを押す] Common Name (eg, YOUR name) []:192.168.0.1 Email Address []:[リターンキーを押す] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:[リターンキーを押す] An optional company name []:[リターンキーを押す] |
$ sudo openssl rsa -in /tmp/privkey.pem -out /etc/ssl/private/server.key |
$ sudo usermod -G ssl-cert postfix |
$ cd /usr/lib/ssl/misc/ $ sudo openssl ca -out /etc/ssl/certs/server.crt -infiles /tmp/csr.pem |
default_days = 365 |
$ openssl x509 -fingerprint -noout -in /etc/ssl/certs/server.crt |
SMTP 認証 (SMTP-AUTH) を, STARTTLS (25 番ポート) を使用した pam によるユーザ認証によって,実現します。
$ sudo apt-get install sasl2-bin |
START=yes |
$ sudo /etc/init.d/saslauthd restart |
$ sudo testsaslauthd -s smtp -u abc -p [abcの平文パスワード] 0: OK "Success." ←このように表示されたら大丈夫 |
pwcheck_method: saslauthd mech_list: plain login |
mail_owner = postfix myhostname = mail.ems.jp myorigin = ems.jp mydestination = $myhostname, ems.jp, war.jp mynetworks = 192.168.0.0/24, 127.0.0.0/8 append_dot_mydomain = no mail_spool_directory = /var/spool/mail mailbox_size_limit = 51200000 message_size_limit = 10240000 header_checks = regexp:/etc/postfix/header_checks # TLS は有効 smtpd_use_tls = yes # サーバー証明書 smtpd_tls_cert_file = /etc/ssl/certs/server.crt # 秘密鍵 smtpd_tls_key_file = /etc/ssl/private/server.key # SMTP 認証は有効 smtpd_sasl_auth_enable = yes # SMTP 認証の Outlook への対応 broken_sasl_auth_clients = yes # メールリレー許可の条件(ホワイトリスト方式) smtpd_recipient_restrictions = permit_sasl_authenticated, permit_auth_destination, reject |
$ sudo /etc/init.d/postfix restart |
mail_owner = postfix myhostname = mail.ems.jp myorigin = ems.jp mydestination = $myhostname, ems.jp, war.jp mynetworks = 192.168.0.0/24, 127.0.0.0/8 append_dot_mydomain = no mail_spool_directory = /var/spool/mail mailbox_size_limit = 51200000 message_size_limit = 10240000 header_checks = regexp:/etc/postfix/header_checks smtpd_use_tls = yes smtpd_tls_cert_file = /usr/share/ssl/certs/server.crt smtpd_tls_key_file = /usr/share/ssl/private/server.key smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_auth_destination, reject # メール受信許可の条件(ブラックリスト方式) smtpd_client_restrictions = permit_mynetworks, check_client_access regexp:/etc/postfix/access_client, reject_unknown_client, permit |
# 許可するアドレス /^61\.115\.197\.9[0-1]$/ OK /^64\.56\.166\.8[0-1]$/ OK /^210\.155\.68\.186$/ OK /^220\.213\.226\.141$/ OK /^210\.174\.207\.38$/ OK /^210\.188\.236\.215$/ OK # 拒否するアドレス /^[^\.]*[0-9][^0-9\.]+[0-9]/ REJECT /^[^\.]*[0-9]{5}/ REJECT /^([^\.]+\.)?[0-9][^\.]*\.[^\.]+\..+\.[a-z]/ REJECT /^[^\.]*[0-9]\.[^\.]*[0-9]-[0-9]/ REJECT /^[^\.]*[0-9]\.[^\.]*[0-9]\.[^\.]+\..+\./ REJECT /^(dhcp|dialup|ppp|adsl)[^\.]*[0-9]/ REJECT |
$ sudo /etc/init.d/postfix reload |