メールサーバ構築
元ネタ CentOSで自宅サーバ構築 ( http://centossrv.com/ )
Postfix + Amavisd-new + Clamd の組み合わせによる構成で構築
Postfixのインストール
yum -y install postfix
Postfixの設定を修正
最低限の main.cf 修正
vi /etc/postfix/main.cf myhostname = hostname.moritox.jp mydomain = moritox.jp myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP
Postfixだけでセキュリティを向上させる為に追記する。
vi /etc/postfix/main.cf smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $mydomain smtpd_delay_reject = yes disable_vrfy_command = yes allow_percent_hacks = yes swap_bangpath = yes allow_untrusted_routing = no smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, permit smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_sender_login_mismatch, reject_unknown_sender_domain, permit smtpd_recipient_restrictions = reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl-xbl.spamhaus.org, check_policy_service unix:private/policy, # SPFチェック用 check_policy_service inet:127.0.0.1:10023, # Postgrey用 permit strict_rfc821_envelopes = yes
TLS (SSL)用に main.cf を修正
vi /etc/postfix/main.cf smtpd_use_tls = yes smtpd_tls_cert_file = /etc/postfix/server.crt smtpd_tls_key_file = /etc/postfix/server.key smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
TLS (SSL)用に master.cf を修正( ”#” を削除する)
CentOS-4
vi /etc/postfix/master.cf smtps inet n n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes tlsmgr unix - - n 300 1 tlsmgr
CentOS-5
vi /etc/postfix/master.cf smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
アンチウィルス対策
ClamAVのインストール
clamdだけで関連パッケージもインストールされる
yum --enablerepo=rpmforge -y install clamd
CalmAV のアップデート
アップデートの時は3つを指定しないとアップデートのパッケージが存在してもインストールされない。
yum --enablerepo=rpmforge -y update clamd clamav clamav-db
Clamd設定を修正
vi /etc/clamd.conf #User clamav LocalSocket /var/run/clamav/clamd.sock #TCPSocket 3310
Freshclam設定を修正
vi /etc/freshclam.conf DatabaseMirror db.jp.clamav.net
Postfix と Clamd を連携させる。
Amavisd-new インストール
yum --enablerepo=rpmforge -y install amavisd-new
Amavisd-new設定を修正
vi /etc/amavisd.conf
$mydomain = 'moritox.jp'; # a convenient default for other settings
#$QUARANTINEDIR = "/var/virusmails";
#$virus_admin = "virusalert\@$mydomain"; # notifications recip.
#$sa_spam_subject_tag = '***SPAM*** ';
$final_spam_destiny = D_PASS;
### http://www.clamav.net/
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
Amavisd-new用に main.cf に追記する。
vi /etc/postfix/main.cf content_filter=smtp-amavis:[127.0.0.1]:10024
Amavisd-new用に master.cf 追記する。
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
SpamAssassin用の設定
CentOS-5 のみ下記ファイルを修正(#を削除)
vi /etc/mail/spamassassin/v310.pre loadplugin Mail::SpamAssassin::Plugin::TextCat
Spamassassin用の学習と設定ファイルのスクリプトは CentOSで自宅サーバ構築 内の物を使用する。
SpamAssassin日本語スパムメール対応の設定ファイルの取得スクリプト : spamassassin-update
スクリプトは実行権限を与えて、/etc/cron.daily/ の中に入れる。
vi spamassassin-update #!/bin/bash # TLEC(http://tlec.linux.or.jp/)よりSpamAssassin設定ファイル最新版ダウンロード cd /etc/mail/spamassassin wget -qN http://tlec.linux.or.jp/docs/user_prefs # 設定ファイル更新時のみSpamAssassin再起動 diff user_prefs user_prefs.org > /dev/null 2 >& 1 if [ $? -ne 0 ]; then cp user_prefs local.cf # スパム判断したメールを添付形式にしないように設定 echo "report_safe 0" >> local.cf # SpamAssassin再起動 /etc/rc.d/init.d/spamassassin restart > /dev/null fi cp user_prefs user_prefs.org # スパム判定スコアをTLEC版SpamAssassin設定ファイルの値に変更 amavisd_conf=`rpm -ql amavisd-new|grep etc|grep amavisd.conf` required_score=\ `grep required_score /etc/mail/spamassassin/local.cf|awk '{print $2}'` sa_tag2_level_deflt=\ `grep "\sa_tag2_level_deflt" $amavisd_conf|awk '{print $3}'|tr -d \;` if [ $required_score != $sa_tag2_level_deflt ]; then sed -i "s/sa_tag2_level_deflt.*/sa_tag2_level_deflt = $required_score;/g" \ $amavisd_conf /etc/rc.d/init.d/amavisd restart > /dev/null 2 > & 1 fi
受信したスパムメールをSpamAssassinに学習させるスクリプト : spamassassin-learn
スクリプトは実行権限を与えて、/etc/cron.daily/ の中に入れる。
vi spamassassin-learn #!/bin/bash PATH=/usr/bin:/bin for user in `ls /home/` do # 正常メール hammail=/home/$user/Maildir/cur # 正常メール学習 if [ -d "$hammail" ]; then # 正常メールをSpamAssassinに学習させる su $user -s "/bin/bash" -c "sa-learn --ham $hammail | \ logger -p mail.info -t 'sa-learn for $user'" fi # スパムメール spammail=/home/$user/Maildir/.Spam/cur # スパムメール学習 if [ -d "$spammail" ]; then # スパムメールをSpamAssassinに学習させる su $user -s "/bin/bash" -c "sa-learn --spam $spammail | \ logger -p mail.info -t 'sa-learn for $user'" fi done
Spamassasinのチェック後に振り分ける為のProcmailの設定
vi /etc/procmailrc SHELL=/bin/bash PATH=/usr/bin:/bin DROPPRIVS=yes MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ SPAM=$MAILDIR/.Spam/ LOGFILE=$HOME/.procmail.log #VERBOSE=ON # SpamAssassinによるスパムチェック # ※fetchmail取り込みメールのスパム検査未実施対処 :0fw *!^X-Spam- |/usr/bin/spamc # SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送 :0 *^X-Spam-Flag: YES $SPAM
受信したスパムメールの宛先フォルダーを作るスクリプト : spamfolder
このスクリプトを実行するとユーザーの Maildir 内に .Spam フォルダーが作成される。
SPFチェック
追加インストールする。
yum --enablerepo=rpmforge -y install perl-Mail-SPF
http://www.openspf.org/Software からPerlスクリプトをダウンロードする。
ダウンロード wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.007.tar.gz 解凍 tar zxvf postfix-policyd-spf-perl-2.007.tar.gz スクリプトファイルを所定の位置へ移動 mv postfix-policyd-spf-perl-2.007/postfix-policyd-spf-perl /usr/local/lib/
Postfixのmaster.cfを修正
vi /etc/postfix.master.cf policy unix - n n - 0 spawn user=nobody argv=/usr/bin/perl /usr/local/lib/postfix-policyd-spf-perl
Postfixのmain.cfを修正
vi /etc/postfix/main.cf smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_policy_service unix:private/policy policy_time_limit = 3600
Spam対策ツールのPostgreyを導入
Postgreyインストール
yum --enablerepo=rpmforge -y install postgrey
Postgreyが起動時に連動するように設定する。
OPTIONS の中に ”–inet=10023 -d” を追記する。
vi /etc/rc.d/init.d/postgrey OPTIONS="--whitelist-recipients=/etc/postfix/postgrey_whitelist_recipients --inet=10023 -d --unix=$SOCKET" (1行で記述)
Postfixと連携するようにPostfixの main.cf を修正
vi /etc/postfix/main.cf smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10023