Contents
1.Postfix : インストール/設定
Postfix は、sendmail に代わるMTA (Mail Transport Agent)として開発されたソフトウェアで、sendmail との互換性が高く、安全、メンテナンスが容易、速い、などの特徴を兼ね備えたメールサーバーです。
また、Postfix はメールを送信するSMTP サーバーとしての機能しか無いため、後述でメール受信のPOP サーバーのインストールを別途行います。
1.1 インストール
Postfix をインストールして SMTPサーバーを構築します。SMTP は 25/TCP を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# apt -y install postfix sasl2-bin # 一般的な構成設定の選択を求められるが、後で手動設定するため [No Configuration] を選択 +------+ Postfix Configuration +-------+ | General type of mail configuration: | | | | No configuration | | Internet Site | | Internet with smarthost | | Satellite system | | Local only | | | | | | <Ok> <Cancel> | | | +--------------------------------------+ |
1.2 設定ファイル編集
①main.cf 編集
1 |
# cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# vi /etc/postfix/main.cf # 78行目:コメント解除 mail_owner = postfix # 94行目:コメント解除しホスト名指定 myhostname = mail.korodes.com # 102行目:コメント解除しドメイン名指定 mydomain = korodes.com # 123行目:コメント解除 myorigin = $mydomain # 137行目:コメント解除 inet_interfaces = all # 185行目:コメント解除 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # 228行目:コメント解除 local_recipient_maps = unix:passwd.byname $alias_maps # 270行目:コメント解除 mynetworks_style = subnet # 287行目:自ネットワーク追記 mynetworks = 127.0.0.0/8, 192.168.11.0/24 # 407行目:コメント解除 alias_maps = hash:/etc/aliases # 418行目:コメント解除 alias_database = hash:/etc/aliases # 440行目:コメント解除 home_mailbox = Maildir/ # 576行目:コメントにしてその下に追記 #smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_banner = $myhostname ESMTP # 650行目:追記 sendmail_path = /usr/sbin/postfix # 655行目:追記 newaliases_path = /usr/bin/newaliases # 660行目:追記 mailq_path = /usr/bin/mailq # 666行目:追記 setgid_group = postdrop # 670行目:コメント化 #html_directory = # 674行目:コメント化 #manpage_directory = # 679行目:コメント化 #sample_directory = # 683行目:コメント化 #readme_directory = # 送受信メールサイズを10Mに制限 message_size_limit = 10485760 # メールボックスサイズを1Gに制限 mailbox_size_limit = 1073741824 # 最終行へ追記 # SMTP-Auth 設定smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject |
設定反映有効化
1 2 |
# newaliases # systemctl restart postfix |
②master.cf 編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# vi /etc/postfix/master.cf # submissionとsmtpsについて、一部コメントアウトする submission inet n - y - - smtpd -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes # smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes |
設定反映有効化
1 2 |
# newaliases # systemctl restart postfix |
2. Dovecot : インストール/設定
Dovecot はメール受信(POP)をするためのサーバーです。
DovecotをインストールしてPOP/IMAPサーバーを構築します。POP は 110/TCP, IMAP は 143/TCP を使用します。
2.1 インストール
①Postfix に SASL機能が提供できるように Dovecot を設定
1 |
# apt -y install dovecot-core dovecot-pop3d dovecot-imapd |
②設定ファイル「dovecot.conf」編集
1 2 3 4 |
# vi /etc/dovecot/dovecot.conf # 30行目:コメント解除 listen = *, :: |
③設定ファイル「10-auth.conf」編集
1 2 3 4 5 6 7 |
# vi /etc/dovecot/conf.d/10-auth.conf # 10行目:コメント解除し変更(プレーンテキスト認証も許可する) disable_plaintext_auth = no # 100行目:追記 auth_mechanisms = plain login |
④設定ファイル「10-mail.conf」編集
1 2 3 4 |
# vi /etc/dovecot/conf.d/10-mail.conf # 30行目:Maildir形式に変更 mail_location = maildir:~/Maildir |
⑤設定ファイル「10-master.conf」編集
1 2 3 4 5 6 7 8 9 |
# vi /etc/dovecot/conf.d/10-master.conf # 96-98行目:コメント解除し追記 # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } |
⑥再起動
1 |
# systemctl restart dovecot |
3. メールユーザーアカウント登録
メール用のユーザーアカウントを登録します。
OS上のユーザーアカウントでメールも利用する場合の設定です
OS上のユーザーアカウントでメールを利用する場合は、追加の設定は不要で OSユーザーを登録するのみです
①メールクライアントインストール
1 |
# apt -y install mailutils |
②メールボックスは Maildir を参照するよう設定
1 |
# echo 'export MAIL=$HOME/Maildir/' >> /etc/profile.d/mail.sh |
③OSユーザー [例:hoge] を追加
1 2 |
# adduser hoge パスワード : ****** |
④メールの送信テスト
追加したユーザーアカウントでログインし、メールの送信テストをします。
自身にテストメール送信 [mail (ユーザー名)@(ホスト名)]
1 2 3 4 5 6 7 8 9 |
# su - hoge $ cd ~ $ mail hoge@localhost # Cc の宛先 Cc: # 件名 Subject: Test Mail # 本文 This is the first mail. ← # 本文を終了する場合は Ctrl + D キー |
受信メール確認
1 2 3 |
$ mail "/home/hoge/Maildir/": 1 message 1 new >N 1 hoge 13/450 Test Mail |
4. メールサーバーPostfixに ClamAV適用
Postfix と Clamav を連携させて 送受信メールをリアルタイムスキャンできるように設定します。
Clamav はインストール済みを前提としています。
Amavisd および Clamav Daemon をインストールして Clamav Daemon を起動します。
①インストール
1 |
# apt -y install clamav-daemon amavisd-new |
②ウィルススキャン有効化
1 2 3 4 5 |
# vi /etc/amavis/conf.d/15-content_filter_mode # コメント解除してウィルススキャン有効化 @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); |
③自身のドメイン名を登録
1 |
# echo 'korodes.com' > /etc/mailname |
④設定ファイル「main.cf」編集
1 2 3 4 |
# vi /etc/postfix/main.cf # 最終行へ追記 content_filter=smtp-amavis:[127.0.0.1]:10024 |
⑤設定ファイル「master.cf」編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# vi /etc/postfix/master.cf # 最終行へ追記 smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 |
⑥再起動
1 |
# systemctl restart clamav-daemon amavis postfix |
⑦Thundwebirdやnpopで確認
送受信メールには以下のようなヘッダが付加されます。もしウィルスが検知された場合は削除され、クライアントには配送されません。
5. メールサーバーPostfixにspamassassin をインストール
①インストール
1 2 3 |
# apt-get update # apt-get upgrade # apt-get install spamassassin |
「 /etc/mail/spamassassin/local.cf 」があるので追加設定をせずデフォルトで使ってみたいと思います。
②スパムメール保存用 Maildir の作成
スパムメール保存用のディレクトリ「.Spam」を Maildir 形式で作成します。
作成には対象のユーザ(例としてhoge)で行います。
対象のユーザでログインする。
1 2 3 4 |
# su - hoge $ cd ~ $ cd Maildir $ /usr/bin/maildirmake.dovecot .Spam Maildir |
③Procmail の前準備
Procmail がサーバ機にインストールされているかをチェックします。
1 |
# apt list procmail |
インストールされていれば、以下の結果が返ってきます。
procmail/bionic,now 3.22-26 amd64 [installed]
Procmail へのパスを以下のコマンドで調べます
1 |
# which procmail |
Procmail へのパスが表示されます。
/usr/bin/procmail
④Procmail の設定
メールフィルタの全体をつかさどる「 /etc/procmailrc 」に記述すると全ユーザに適応されます。
各ユーザ個別のメールフィルタファイルである「 /home/<username>/.procmailrc 」に記述するとそのユーザのみにフィルタが適応されます。
今回は全ユーザに適応させるために「 /etc/procmailrc 」に記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# vi /etc/procmailrc # パスを設定 PATH=/bin:/usr/bin:/usr/local/bin # メールボックスの設定 MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ # Procmailのログファイル出力先を指定 LOGFILE=$MAILDIR/procmaillog # ロックファイルのパスを指定 LOCKFILE=$HOME/.lockmail # メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動します :0fw *!^X-Spam.* |spamassassin # メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納します :0 * ^X-Spam-Status: Yes $MAILDIR/.Spam/ |
⑤Postfix の設定
1 2 3 |
# vi /etc/postfix/main.cf # 最終行に追記 mailbox_command = /usr/bin/procmail |
⑥SpamAssassinの起動、Postfixの再起動
1 2 |
# systemctl start spamassassin # systemctl restart postfix |
⑦確認
自分のドメイン宛にメールを送信。
メールのヘッダーに以下のような記述があれば設定が正常に行われています。
以下のヘッダーはスパムメールと判定された場合の記述です。
・・省略・・・ X-Spam-Flag: YES X-Spam-Checker-Version: SpamAssassin 2.64 (2004-01-11) on mail.example.com X-Spam-Report: * 0.1 HTML_60_70 BODY: Message is 60% to 70% HTML * 0.0 HTML_MESSAGE BODY: HTML included in message ・・省略・・・ X-Spam-Status: Yes, hits=8.2 required=5.5 tests=CLICK_BELOW, FORGED_RCVD_NET_HELO,HTML_60_70,HTML_FONTCOLOR_UNSAFE, HTML_IMAGE_ONLY_08,HTML_LINK_CLICK_HERE,HTML_MESSAGE,QENCTXT autolearn=no version=2.64 X-Spam-Level: ******** ・・・省略・・・ |
メールヘッダー中に上記の「X-Spam-***」の記述があればSpamAssassinは正常に動作しています。
「 X-Spam-Status: Yes 」があれば、そのメールはスパムメールだと判定されています。
逆に「 X-Spam-Status: No 」ならば通常のメールとして判定されています
⑧スパムメールの学習
SpamAssassin にはメールの学習機能があり、判定の精度を高めることができます。
1 2 3 |
# /usr/bin/sa-learn --spam /home/*/Maildir/.Spam/cur Learned from 89 message(s) (80 message(s) examined). ←80通のメールをスパムとして学習 |
⑨通常のメールの学習
1 2 3 |
# /usr/bin/sa-learn --ham /home/*/Maildir/cur Learned from 157 message(s) (35 message(s) examined). ←35通のメールを普通のメールととして学習 |
⑩メール判定の自動実行
メール判定スクリプトを作成し、Cron に登録します。
保存場所は「 /usr/local/bin 」、ファイル名は「 spam-learns.sh 」とします。
スクリプトを保存した後は、「 chmod 750 spam-learns.sh 」として実行可能なアクセス権を与える。
1 2 3 4 5 6 7 8 9 10 11 12 |
# vi /usr/local/bin/ spam-learns.sh #! /bin/sh # スパムメールの学習 /usr/bin/sa-learn --spam /home/*/Maildir/.Spam/cur # 通常のメールを学習 /usr/bin/sa-learn --ham /home/*/Maildir/cur # スパムメール保存ディレクトリの中身を強制的に消去 /bin/rm -f /home/*/Maildir/.Spam/cu |
1 |
# cd /lib/systemd/system |
1 2 3 4 5 6 7 8 9 10 |
# vi spam-learns.service [Unit] Description=demo sample node.js program [Service] Type=simple ExecStart= /usr/local/bin/spam-learns.sh Restart=always [Install] WantedBy=multi-user.targe |
1 2 |
# crontab -e 0 4 * * * /usr/local/bin/spam-learns.sh ← 追記 |
1 |
# systemctl enable spam-learns |