http://studio.s101.xrea.com/zu6.txt http://studio.s101.xrea.com/localhost.cfg プロバイダなどから Fetchmail (メールの受信) ↓ Postfix (メールサーバー) ↓ Procmail SpamAssassin & bsfilter (スパム・メールのフィルタリングと携帯への転送) ↓ メール・スプール ↓ Dovecot (IMAPサーバー) ↓ メールを読む SquirrelMail (Webメーラー) --- メールサーバー構築 使用するパッケージがインストールされているかの確認 # rpm -q sendmail postfix sendmail-8.13.4-2 postfix-2.2.2-2 # rpm -q dovecot dovecot-0.99.14-4.fc4 # rpm -q procmail procmail-3.22-16 # rpm -q spamassassin spamassassin-3.0.3-4.fc4 # rpm -q fetchmail fetchmail-6.2.5-7 --- Postfix (メールサーバー) Dovecot (IMAPサーバー) Procmail (メール振り分け) SpamAssassin & bsfilter (スパム対策) Fetchmail (メールの受信) の設定を行う。 *Step1 root権限に切り替え [d1@localhost ~]$ su - Password: *Step2 sendmailの停止 [root@localhost ~]# /etc/rc.d/init.d/sendmail stop sendmail を停止中: [ OK ] sm-client を停止中: [ OK ] *Step3 MTAの切り替え sendmail -> postfix CUI [root@localhost ~]# alternatives --config mta GUI [root@localhost ~]# system-switch-mail *Step4 Postfixの起動 [root@localhost ~]# /etc/rc.d/init.d/postfix start postfix を起動中: [ OK ] [root@localhost ~]# chkconfig postfix on [root@localhost ~]# chkconfig --list postfix postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off *Step5 Postfixの設定 [root@localhost ~]# vi /etc/postfix/main.cf 1. FQDN の設定を無効にする。ローカルでのみの使用の為。 #myhostname = host.domain.tld #myhostname = virtual.domain.tld default 2. 外部からのメール配送を受け付ける。 inet_interfaces = all #inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost #inet_interfaces = localhost localhost -> all 3. 届けられたメールが自分宛かどうかを判断するためのパラメータを設定する。 mydestination = $myhostname, localhost.$mydomain, localhost #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, # mail.$mydomain, www.$mydomain, ftp.$mydomain default relay_domains = $mydestination default 4. 信頼されたSMTPクライアントの設定をする。 #mynetworks_style = class mynetworks_style = subnet #mynetworks_style = host default mynetworks = 192.168.1.0/24, 127.0.0.0/8 add 5. メールボックス形式をMaildir形式にする。 #home_mailbox = Mailbox home_mailbox = Maildir/ Maildir/ を有効にする。 6. Procmailと連携を行う。 mailbox_command = /usr/bin/procmail add 7. バナーを非表示にする。 smtpd_banner = $myhostname ESMTP add バージョンによる脆弱性を利用されないようにするため。 8. メール受信最大サイズの設定をする。 message_size_limit = 10240000 mailbox_size_limit = 51200000 最後に追記。 message_size_limit (default: 10240000) mailbox_size_limit (default: 51200000) メールサーバのパフォーマンスの低下を防止するため。 9. スパム対策として、HELOコマンドの要求とVRFYコマンドの禁止を設定する。 smtpd_helo_required = yes disable_vrfy_command = yes 最後に追記。 HELO(EHLO)コマンドは、SMTPセッションの開始時に、SMTPクライアントが自身のホスト名を送信するコマンド。 スパムメールを送信するソフトにHELOコマンドを発行しないソフトがあるため。 VRFYコマンドは、有効なユーザまたはメールボックスを照会するためのコマンド。 有効なメールアドレスの情報が漏れてしまうのを避けるため。 10. ローカル受信者チェック local_recipient_maps = proxy:unix:passwd.byname $alias_maps 不明なユーザ宛のメールの受信を拒否する。 11. 接続制限 smtpd_client_restrictions = permit_mynetworks, reject_rbl_client relays.ordb.org, permit 最初に接続元のIPアドレスが $mynetworks に設定されたIPアドレスかどうかを確認。 設定されたIPアドレスの場合は、接続許可。設定されたIPアドレスで無い場合は、 次の「relays.ordb.org」に登録されているIPアドレスかどうかを確認。ORDBに登録 されている場合は接続が拒否される。登録されていない場合は permit により接続が許可される。 このメールシステムのインターネットホスト名。 myhostname (default: see "postconf -d" output) このメールシステムのインターネットドメイン名。 mydomain (default: see "postconf -d" output) ドメイン名で、ローカルで投函されたメールはそこから来たように見え、またローカルで投かんされたメールはそこに配送されます。 myorigin (default: $myhostname) このメールシステムがメールを受け取るネットワークインターフェースアドレス。 inet_interfaces (default: all) $local_transport メール配送 transport を使って配送されるドメインのリスト。 mydestination (default: $myhostname, localhost.$mydomain, localhost) このシステムがメールをリレーしようとする配送先のドメイン (およびそのサブドメイン)。 relay_domains (default: $mydestination) mynetworks パラメータのデフォルト値を生成する方法。 mynetworks_style (default: subnet) "よそ者" よりも多くの権限を持つ "信頼された" SMTPクライアントのリスト。 mynetworks (default: see "postconf -d" output) オプションのメールボックスファイルの local(8) ユーザのホームディレクトリからの相対パス名。 home_mailbox (default: empty) メールボックス配送に local(8) 配送エージェントが使う、オプションの外部コマンド。 mailbox_command (default: empty) SMTP グリーティングバナーで 220 状態コードの後に続くテキスト。 smtpd_banner (デフォルト: $myhostname ESMTP $mail_name) エンベロープ情報を含む、バイト単位のメッセージの最大サイズ。 message_size_limit (default: 10240000) local(8) の個々のメールボックスまたは maildir の最大サイズ、もしくはゼロ (制限なし)。 mailbox_size_limit (default: 51200000) リモートSMTPクライアントが SMTP セッションの最初で HELO または EHLO コマンドで自己紹介することを要求します。 smtpd_helo_required (default: no) SMTP VRFY コマンドを無効にします。これはEメールアドレス収集に使われるあるテクニックを止めます。 disable_vrfy_command (default: no) 知らないローカルユーザを拒否 local_recipient_maps (default: proxy:unix:passwd.byname $alias_maps) 時間単位ごとにクライアントがこのサービスに接続を試行することが許される最大の接続試行数。 smtpd_client_restrictions (default: empty) *Step6 Postfixの再起動 [root@localhost ~]# /etc/rc.d/init.d/postfix restart postfix を停止中: [ OK ] postfix を起動中: [ OK ] *Step7 Maildirディレクトリの作成 d1 ユーザ用の設定。 メールディレクトリを作成。 mkdir /home/d1/Maildir アクセス権を変更。 chmod 700 /home/d1/Maildir 所有者を変更。 chown -R d1:d1 /home/d1/Maildir [root@localhost ~]# mkdir /home/d1/Maildir [root@localhost ~]# chmod 700 /home/d1/Maildir [root@localhost ~]# chown -R d1:d1 /home/d1/Maildir *Step8 Procmailの設定 サーバ全体にフィルタを適用する。 [root@localhost ~]# vi /etc/procmailrc PATH=/bin:/usr/bin MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ LOGFILE=$MAILDIR/procmail.log LOCKFILE=$HOME/.lockmail # SpamAssassin :0fw |/usr/bin/spamc ##### # bsfilter :0 fw | /usr/local/bin/bsfilter --pipe --insert-flag --insert-probability ##### *Step9 Dovecotの設定 [root@localhost ~]# vi /etc/dovecot.conf 1. DovecotをIMAPサーバーにする。 #protocols = imap imaps pop3 pop3s protocols = imap add 2. メールボックスの形式を Maildir にする。 #default_mail_env = default_mail_env = maildir:~/Maildir add *Step10 Dovecotの起動 [root@localhost ~]# /etc/rc.d/init.d/dovecot start Dovecot Imap を起動中: [ OK ] [root@localhost ~]# chkconfig dovecot on [root@localhost ~]# chkconfig --list dovecot dovecot 0:off 1:off 2:on 3:on 4:on 5:on 6:off *Step11 SpamAssassinの起動 [root@localhost ~]# /etc/rc.d/init.d/spamassassin start Starting spamd: を起動中: [ OK ] [root@localhost ~]# chkconfig spamassassin on [root@localhost ~]# chkconfig --list spamassassin spamassassin 0:off 1:off 2:on 3:on 4:on 5:on 6:off *Step12 root権限から一般ユーザ権限に戻る [root@localhost ~]# exit logout *Step13 各ユーザのProcmailの設定 [d1@localhost ~]$ vi .procmailrc SHELL=/bin/bash PATH=/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/Maildir LOGFILE=$MAILDIR/procmail.log LOCKFILE=$HOME/.lockmail SPAMMER_FROM=$HOME/.spammer_from ////////////////////////////////////////////////// # 送信者のメールアドレスを抽出。 # Reply-To, Sender, From のどれかに見つかったら # 記述されていたメールアドレスを FROM に代入。 :0 *$ ! ^Reply-To: *\/[^ ].* *$ ! ^Sender: *\/[^ ].* *$ ! ^From *\/[^ ]+ { FROM = `formail -x From:` } :0 E { FROM = $MATCH } # 既知のスパマーからメールをJunkに移動 :0 * ? test -s $SPAMMER_FROM * ? echo "$FROM" | fgrep -iqf $SPAMMER_FROM $MAILDIR/.Junk/ ////////////////////////////////////////////////// # From:, Reply-To:, Sender:, From のどれかに # スパマーのメールアドレスが含まれていたらJunkに移動 :0 * ? test -s $SPAMMER_FROM * ? (formail -x From: -x Reply-To: -x Sender: -x From | fgrep -iqf $SPAMMER_FROM) $MAILDIR/.Junk/ ////////////////////////////////////////////////// # X-Spam が付いていない場合SpamAssassinに送る :0fw * !^X-Spam.* |/usr/bin/spamc # SpamAssassinでスパム判定されたメールをJunkに移動 :0 * ^X-Spam-Status: Yes $MAILDIR/.Junk/ ##### # bsfilterでスパム判定されたメールをJunkに移動 :0 * ^X-Spam-Flag: Yes $MAILDIR/.Junk/ # bsfilterでスパム判定されたメールをJunkに移動 :0 * ^X-Spam-Probability: *(1|0\.[89]) $MAILDIR/.Junk/ ##### # メール転送 :0 HBb * < 1000 * ! \ ! example@example.com [d1@localhost ~]$ vi .spammer_from foo@bar.com bar@foo.com *Step14 Fetchmailの設定 [d1@localhost ~]$ vi .fetchmailrc poll pop.example.or.jp protocol POP3 username yourname password pass fetchall [d1@localhost ~]$ chmod 600 .fetchmailrc *Step15 cronの設定 [d1@localhost ~]$ EDITOR=gedit crontab -e # 15分間隔で実行 */15 * * * * /usr/bin/fetchmail -s >/dev/null 2>&1 # 毎日午前2時に起動 0 2 * * * /usr/bin/sa-learn --spam --dir $HOME/Maildir/.Junk/cur/ >/dev/null 2>&1 # 毎日午前3時に起動 0 3 * * * /usr/bin/sa-learn --ham --dir $HOME/Maildir/.INBOX/cur/ >/dev/null 2>&1 __END__ --- Q. Dovecot 起動時に以下のように表示され起動できない。 Can't use SSL /dovecot.pem Permission denied A. SSL/TLS が不要であれば /etc/dovecot.conf ファイルを # Disable SSL/TLS support. ssl_disable = yes のように変更してください。SSL/TLS が必要であれば サーバー証明書等必要なファイルを作成してください。 --- Webサーバー構築 使用するパッケージがインストールされているかの確認 # rpm -q httpd httpd-2.0.54-10 --- Apache (Webサーバー) の設定を行う。 *Step1 root権限に切り替え [d1@localhost ~]$ su - Password: *Step2 Apacheの起動 [root@localhost ~]# /etc/rc.d/init.d/httpd start httpd を起動中: [ OK ] [root@localhost ~]# chkconfig httpd on [root@localhost ~]# chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off *Step3 Apacheの設定 [root@localhost ~]# vi /etc/httpd/conf/httpd.conf 1. DocumentRoot の設定。 DirectoryIndex で指定されたファイルがない場合に自動的に ディレクトリ内のファイル一覧を生成して応答するための設定。 .htaccess による認証を許可する。 Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all ↓ Options -Indexes FollowSymLinks AllowOverride AuthConfig Limit Order allow,deny Allow from all 2. LanguagePriority の設定。 配信するドキュメントについて、言語の優先順位を設定する。 LanguagePriority en ca cs da de el eo es et fr he hr it ja ko... ↓ LanguagePriority ja en ca cs da de el eo es et fr he hr it ko... 3. AddDefaultCharset の設定。 実際に配信するドキュメントで利用されるエンコーディングに合わせる。 AddDefaultCharset UTF-8 ↓ AddDefaultCharset shift_jis 4. ServerTokens ディレクティブの設定。 バナーの非表示 ServerTokens OS ↓ ServerTokens ProductOnly 5. ServerSignature ディレクティブの設定。 ServerSignature On ↓ ServerSignature Off 6. icons ディレクトリの設定。 Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all ↓ Options -Indexes MultiViews AllowOverride None Order allow,deny Allow from all *Step4 不要なディレクトリやファイルの削除 # rm -f /var/www/error/noindex.html # rm -f /etc/httpd/conf.d/welcome.conf マニュアルの削除 # rm -fr /var/www/manual # rm -fr /etc/httpd/conf.d/manual.conf *Step5 php.iniの編集。マルチバイトセッションを有効にする。 [root@localhost ~]# vi /etc/php.ini [mbstring] ;mbstring.language = Japanese ;mbstring.internal_encoding = EUC-JP ;mbstring.http_input = auto ;mbstring.http_output = SJIS ;mbstring.encoding_translation = Off ;mbstring.detect_order = auto ;mbstring.substitute_character = none; ;mbstring.func_overload = 0 ↓ [mbstring] ; デフォルトの言語を設定 mbstring.language = Japanese ; デフォルトの内部エンコーディングを設定 mbstring.internal_encoding = EUC-JP ; デフォルトのHTTP入力文字エンコーディングを設定 mbstring.http_input = auto ; デフォルトのHTTP出力文字エンコーディングを設定 mbstring.http_output = SJIS ; HTTP入力エンコーディング変換の設定 mbstring.encoding_translation = Off ; デフォルトの文字エンコーディング検出順序を設定 mbstring.detect_order = auto ; 代替文字のデフォルト値を設定 mbstring.substitute_character = none; ; マルチバイト対応版関数による既存関数のオーバーロード mbstring.func_overload = 0 /var/www/html http://localhost/ __END__ --- WebMail構築 使用するパッケージがインストールされているかの確認 # rpm -q squirrelmail squirrelmail-1.4.4-2 --- SquirrelMail (Webメーラー) の設定を行う。 *Step1 ディレクトリの移動と設定スクリプト実行をする。 [root@localhost ~]# cd /usr/share/squirrelmail/config [root@localhost config]# ./conf.pl *Step2 入力した文字が表示されない場合に設定する。 以下の設定を参考。 ============================== C Turn color off S Save data Q Quit :::::::::::::::::::::::::::::: C Turn color on S Save data Q Quit ============================== /// Change Command >> C Turn color off -> Turn color on *Step3 以下のように設定を変更する。(共通) /*----- デフォルト言語を日本語に設定 -----*/ #1-1 10. Languages を選択する。 Command >> 10 以下の設定を参考。 ============================== Language preferences 1. Default Language : en_US 2. Default Charset : iso-8859-1 3. Enable lossy encoding : false :::::::::::::::::::::::::::::: Language preferences 1. Default Language : ja_JP 2. Default Charset : iso-2022-jp 3. Enable lossy encoding : false ============================== #1-2 /// Change Command >> 1 [en_US]: ja_JP Command >> 2 [iso-8859-1]: iso-2022-jp #1-3 メインメニューに戻る。 Command >> R /*----- SquirrelMailのバージョンを非表示 -----*/ #2-1 4. General Options を選択する。 Command >> 4 以下の設定を参考。 ============================== 7. Hide SM attributions : false :::::::::::::::::::::::::::::: 7. Hide SM attributions : true ============================== #2-2 /// Change Command >> 7 Hide SM attributions (y/n) [n]: y #2-3 メインメニューに戻る。 Command >> R *Step4 以下のように設定を変更する。(特有) #1 2. Server Settings を選択する。 Command >> 2 #2 3. Update IMAP Settings を選択する。 Command >> A 以下の設定を参考。 ============================== General ------- 1. Domain : localhost 2. Invert Time : false 3. Sendmail or SMTP : Sendmail IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Secure software : uw 9. Delimiter : / B. Change Sendmail Config : /usr/sbin/sendmail H. Hide IMAP Server Settings :::::::::::::::::::::::::::::: General ------- 1. Domain : localhost 2. Invert Time : false 3. Sendmail or SMTP : SMTP IMAP Settings -------------- 4. IMAP Server : localhost 5. IMAP Port : 143 6. Authentication type : login 7. Secure IMAP (TLS) : false 8. Secure software : other 9. Delimiter : . B. Update SMTP Settings : localhost:25 H. Hide IMAP Server Settings ============================== #3 /// Change Command >> 3 1. Sendmail 2. SMTP Your choice [1/2] [1]: 2 Command >> A Command >> 8 [uw]: other Command >> 9 [/]: . *Step5 変更を保存する。 #1 S Save data を選択し、変更をセーブする。 Command >> S #2 Q Quit を選択し、終了する。 Command >> Q *Step6 Junkディレクトリの作成 http://localhost/webmail/ にアクセスし、Junkディレクトリを作成する ログイン名:d1 パスワード:****** #1 「フォルダ」をクリック。 #2 「フォルダを作成」に「Junk」と入力。 #3 「作成」ボタンをクリック。 #4 「リフレッシュ」をクリック。 #5 左メニューにJunkが新たに作成されているか確認。 http://localhost/webmail/src/configtest.php __END__ --- Q. 以下のように表示されログインできない。 SMTP (13) Permission denied A. ファイアーウォールの設定を見直してください。 よくわからない場合は、一度ファイアーウォールを無効にして ちゃんと動作するか確認してみてください。 --- テスト項目。 ・配送のテスト # host -t mx localhost ・メール送信テスト $ echo "This is a test message." | mail -s 'TEST' d1 $ mail d1 Subject: TEST This is a test message. . Cc: ・スパムメールテスト 本文に以下の文字列を書く。 XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X d1@localhost.localdomain root@localhost.localdomain --- 参考文献: 日経Linux編「Linux セキュア・サーバーの創り方」『日経BPパソコンベストムック』日経BP社、2005年 『日経Linux』日経BP社、2006年11月号 Fedoraで自宅サーバー構築 http://fedorasrv.com/ はじめての自宅サーバー構築 - Fedora/CentOS - http://kajuhome.com/ --- Broadcast message from root (pts/1) (Sun Nov 26 00:00:00 2006): The system is going down for reboot NOW!