しばらく VPS@DTI のエントリープランで運用していたのですが、OpenVZ ゆえの制約やしがらみがあったので、KVM ベースの VPS サービスを提供している OVH.com に引っ越すことにしました。
選択したプランは、VPS SSD 1 です。月額料金は 3.49 ドルと私の知る限り、一番安い VPS サービスです。また、6か月以上の契約では、プロモコード(vps30go)を使うと30%引きになったりすることがあり、この場合、月額 2.5 ドルほどと激安です。
リージョンはカナダを選択しました。他のブログでも紹介されていましたが、私の環境では、レイテンシーが 180 ミリ秒前後と国内の VPS の10倍ほどとなっています。SSH で若干反応のラグがあるものの、気になるほどではありません。
今回のサーバー構成は、以下の通りです。
【ハード】
・OpenStack KVM
・1 vCore 2.4 GHz
・2 GB RAM
・10 GB SSD Local RAID 10
【ソフト】
・OS:CentOS Linux 7.2.1511
・httpd 2.4.6 (Apache2.4.6)
・PHP 5.4.16
・MariaDB 5.5.47
・Postfix 2.10.1 (Patched VDA)
・Postfix Admin 2.93
・Dovecot 2.2.10
・amavisd-new 2.10.1
・spamassassin 3.4.0
・clamav 0.99.1
Step1 : 基本環境の整備
システムの文字コードの設定
1 2 |
sudo localectl set-locale LANG=ja_JP.UTF-8 localectl |
システムのタイムゾーンの変更
1 |
sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime |
ホスト名の変更
1 |
sudo vi /etc/hostname |
1 |
hogehoge.fugafuga.net |
ファイヤーウォールの設定
CentOS7から実装されたFirewalldではなく、iptablesを採用
1 2 |
sudo yum remove -y firewalld sudo yum install -y iptables-services |
設定の確認
1 |
sudo iptables -nL |
すべてルート権限で実行
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 |
iptables -P INPUT ACCEPT iptables -F iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -i lo -j ACCEPT # SSHへの接続を1時間あたり20回、試行回数10回に制限 iptables -A INPUT -p tcp -m tcp -m conntrack -m hashlimit --dport 22 --ctstate NEW -j ACCEPT --hashlimit-upto 20/hour --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ssh iptables -A INPUT -p tcp -m tcp -m conntrack --dport 25 --ctstate NEW -j ACCEPT iptables -A INPUT -p tcp -m tcp -m conntrack --dport 80 --ctstate NEW -j ACCEPT iptables -A INPUT -p tcp -m tcp -m conntrack --dport 443 --ctstate NEW -j ACCEPT # SMTPsへの接続を1時間あたり20回、試行回数10回に制限 iptables -A INPUT -p tcp -m tcp -m conntrack -m hashlimit --dport 465 --ctstate NEW -j ACCEPT --hashlimit-upto 20/hour --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name smtps # Submissionへの接続を1時間あたり20回、試行回数10回に制限 iptables -A INPUT -p tcp -m tcp -m conntrack -m hashlimit --dport 587 --ctstate NEW -j ACCEPT --hashlimit-upto 20/hour --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name submission # IMAPsへの接続を1時間あたり30回、試行回数20回に制限 iptables -A INPUT -p tcp -m tcp -m conntrack -m hashlimit --dport 993 --ctstate NEW -j ACCEPT --hashlimit-upto 30/hour --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name IMAP iptables -A INPUT -p tcp -m tcp -m conntrack --dport 10000 --ctstate NEW -j ACCEPT # 外部からのSQL接続を許可する場合 iptables -A INPUT -p tcp -m tcp -s 183.181.165.49 -m conntrack --dport 3306 --ctstate NEW -j ACCEPT # POP3接続 利用不可(非暗号化)破棄 iptables -A INPUT -p tcp -m tcp --dport 110 -j DROP # IMAP接続 利用不可(非暗号化)破棄 iptables -A INPUT -p tcp -m tcp --dport 143 -j DROP # POP3S接続 利用不可(使わない)破棄 iptables -A INPUT -p tcp -m tcp --dport 995 -j DROP # ルールにあてはまらない着信パケットは常に遮断 iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited # 転送パケット 常に遮断 iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited # ポリシーのセット iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT |
設定の保存及び適用等
1 2 3 |
service iptables save systemctl restart iptables systemctl enable iptables |
保存された設定の確認
1 |
cat /etc/sysconfig/iptables |
スワップファイルの作成
ディスク容量が少ないので、今回は1GBのスワップを割り当て
1 2 3 4 |
dd if=/dev/zero of=/swapfile bs=1M count=1024 sudo chmod 600 /swapfile sudo mkswap /swapfile swapon /swapfile |
再起動するとスワップの割り当てがリセットされるので、恒久的に適用されるように以下のファイルを編集
1 |
sudo vi /etc/fstab |
1 |
/swapfile swap swap defaults 0 0 |
webminのインストール
1 |
sudo vi /etc/yum.repos.d/webmin.repo |
1 2 3 4 |
[webmin] name=Webmin Distribution Neutral baseurl=http://download.webmin.com/download/yum enabled=1 |
1 2 |
sudo rpm --import http://www.webmin.com/jcameron-key.asc sudo yum install -y webmin |
Webminに接続を許可するホストの制限
1 |
sudo vi /etc/webmin/miniserv.conf |
1 |
allow=localhost *.fugafuga.net |
管理ユーザーの作成
1 2 3 |
useradd hogehoge passwd hogehoge usermod -G wheel hogehoge |
wheel グループのユーザーのみ sudo コマンドを実行できるように設定する
1 |
sudo visudo |
1 2 |
# 実行時にパスワードを求める場合は、以下の行をコメントアウトを外す %wheel ALL=(ALL) ALL |
1 2 |
# 実行時にパスワードを求めない場合は、以下の行をコメントアウトを外す %wheel ALL=(ALL) NOPASSWD: ALL |
wheel グループのメンバーのみ root になれるように設定する
1 |
sudo vi /etc/pam.d/su |
1 |
auth required pam_wheel.so use_uid |
wheel グループのメンバーのみ su コマンドで root になれるように設定する
1 |
sudo vi /etc/login.defs |
1 |
SU_WHEEL_ONLY yes |
SSH の設定
接続を許可するホストの設定
1 |
sudo vi /etc/hosts.allow |
1 2 |
sshd : .fugafuga.net sshd : .hogehoge.net |
許可されたホスト以外からの接続を拒否する
1 |
sudo vi /etc/hosts.deny |
1 |
sshd : all |
sshのルートログイン禁止等
1 |
sudo vi /etc/ssh/sshd_config |
1 2 3 4 5 6 7 8 |
# PermitRootLogin の値を no にする PermitRootLogin no # PermitEmptyPasswords の値を no にする PermitEmptyPasswords no # 特定ユーザーのパスワードログインの禁止(公開鍵認証) Match User fugafuga PubkeyAuthentication Yes PasswordAuthentication no |
sshホストキーの再生成
1 2 |
sudo rm -f /etc/ssh/ssh_host_* sudo service sshd restart |
SELinuxの無効化
1 2 3 4 5 6 |
# 状態確認 getenforce # 一時無効化 sudo setenforce 0 # 恒久設定 sudo vi /etc/selinux/config |
1 2 3 |
SELINUX=disabled #または SELINUX=permissive |
yum リポジトリの追加
EPELリポジトリのインストール
1 |
sudo yum install -y epel-release |
Scientific Linux のリポジトリの追加
1 |
sudo vi /etc/yum.repos.d/sl.repo |
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 |
[sl] name=Scientific Linux $releasever - $basearch #baseurl=http://ftp.scientificlinux.org/linux/scientific/$releasever/$basearch/os/ # http://ftp1.scientificlinux.org/linux/scientific/$releasever/$basearch/os/ # http://ftp2.scientificlinux.org/linux/scientific/$releasever/$basearch/os/ # ftp://ftp.scientificlinux.org/linux/scientific/$releasever/$basearch/os/ baseurl=http://ftp.jaist.ac.jp/pub/Linux/scientific/$releasever/$basearch/os/ #mirrorlist=http://ftp.scientificlinux.org/linux/scientific/mirrorlist/sl-base-6.txt #mirrorlist=http://ftp.jaist.ac.jp/pub/Linux/scientific/mirrorlist/sl-base-6.txt enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sl file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sl6 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cern [sl-security] name=Scientific Linux $releasever - $basearch - security updates #baseurl=http://ftp.scientificlinux.org/linux/scientific/$releasever/$basearch/updates/security/ # http://ftp1.scientificlinux.org/linux/scientific/$releasever/$basearch/updates/security/ # http://ftp2.scientificlinux.org/linux/scientific/$releasever/$basearch/updates/security/ # ftp://ftp.scientificlinux.org/linux/scientific/$releasever/$basearch/updates/security/ baseurl=http://ftp.jaist.ac.jp/pub/Linux/scientific/$releasever/$basearch/updates/security/ #mirrorlist=http://ftp.scientificlinux.org/linux/scientific/mirrorlist/sl-security-6.txt #mirrorlist=http://ftp.jaist.ac.jp/pub/Linux/scientific/mirrorlist/sl-security-6.txt enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sl file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sl6 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cern [sl-source] name=Scientific Linux $releasever - Source baseurl=http://ftp.scientificlinux.org/linux/scientific/$releasever/SRPMS/ http://ftp1.scientificlinux.org/linux/scientific/$releasever/SRPMS/ http://ftp2.scientificlinux.org/linux/scientific/$releasever/SRPMS/ ftp://ftp.scientificlinux.org/linux/scientific/$releasever/SRPMS/ enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sl file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sl6 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cern |
Step2 : ウェブ環境の構築
Apache 2.4.6 + PHP 5.4.16 + MariaDB 5.5.47 のインストール
1 2 3 4 |
sudo yum install -y httpd php mariadb-server \ php-mysql php-mbstring php-gd \ mod_ssl mod_security \ php-xml php-mcrypt php-intl php-ldap |
PHPのタイムゾーンの設定
1 |
sudo vi /etc/php.ini |
1 |
date.timezone = Asia/Tokyo |
自動起動の設定
1 2 3 4 5 6 |
# MariaDBの起動と自動起動設定 sudo systemctl start mariadb sudo systemctl enable mariadb # Apacheの起動と自動起動設定 sudo systemctl start httpd sudo systemctl enable httpd |
Step3 : Postfix 2.10.1のVDAパッチ適用済みrpmの作成と適用
ビルド環境の構築
1 2 |
sudo yum install -y rpm-build wget gcc \ libdb-devel zlib-devel openldap-devel cyrus-sasl-devel pcre-devel mysql-devel openssl-devel |
ソースの入手
Postfix のSRPMの入手
1 |
yumdownloader --source --enablerepo=sl-source postfix |
VDA Patchの入手
1 |
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.1.patch |
ソースファイルの展開
1 |
sudo rpm -ihv postfix-2.10.1-6.el7.src.rpm |
パッチの適用
1 2 |
mv postfix-vda-v13-2.10.1.patch rpmbuild/SOURCES/ vi rpmbuild/SPECS/postfix.spec |
1 2 3 4 |
44行目 Release: 6_VDA%{?dist} ← _VDAを追加 45行目 Epoch: 3 ← Epoch番号を増やす 86行目 Patch12: postfix-vda-v13-2.10.1.patch ← Patch12としてVDAパッチを追加 147行目 %patch12 -p1 -b .VDA ← Patch12の適用行を追加 |
1 2 3 4 5 6 |
# ビルドの実行 rpmbuild -ba --clean rpmbuild/SPECS/postfix.spec # Postfix のアップデート sudo rpm -Uhv rpmbuild/RPMS/x86_64/postfix-2.10.1-6_VDA.el7.centos.x86_64.rpm # 確認 postconf | grep virtual_maildir_ |
念のためyumで上書きアップデートされないように
1 |
sudo vi /etc/yum.conf |
1 |
exclude=postfix* |
Step4 : メール環境の構築
Dovecot 2.2.10 + amavisd-new 2.10.1 + spamassassin 3.4.0 + clamav 0.99.1 のインストール
1 2 3 |
sudo yum install -y dovecot dovecot-mysql amavisd-new spamassassin \ clamav-server-systemd clamav-update \ dovecot-pigeonhole pypolicyd-spf |
VirtualMailBoxを扱うユーザーの作成
1 2 |
sudo groupadd -g 10000 vmail sudo useradd -g 10000 -u 10000 vmail |
VirtualMailBoxのユーザー管理用DBの作成
1 2 3 4 |
mysql -p CREATE DATABASE postfix; CREATE USER 'postfix'@'localhost' IDENTIFIED BY '********'; GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost'; |
Postfix の設定
mySQL関連のファイルの作成
1 |
sudo vi /etc/postfix/mysql_virtual_alias_maps.cf |
1 2 3 4 5 6 7 |
user = postfix password = ******** hosts = localhost dbname = postfix table = alias select_field = goto where_field = address |
1 |
sudo vi /etc/postfix/mysql_virtual_domains_maps.cf |
1 2 3 4 5 6 7 8 |
user = postfix password = ******** hosts = localhost dbname = postfix table = domain select_field = domain where_field = domain additional_conditions = and active = '1' |
1 |
sudo vi /etc/postfix/mysql_virtual_mailbox_maps.cf |
1 2 3 4 5 6 7 |
user = postfix password = ******** hosts = localhost dbname = postfix table = mailbox select_field = maildir where_field = username |
1 |
sudo vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf |
1 2 3 4 5 |
user = postfix password = ******** hosts = localhost dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1' |
設定ファイルの編集
1 |
vi /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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
myhostname = hogehoge.fugafuga.net mydomain = fugafuga.net myorigin = $myhostname inet_interfaces = all #inet_protocols = all inet_protocols = ipv4 #mydestination = $mydomain, $myhostname, localhost.$mydomain, localhost mydestination = $myhostname, localhost mynetworks = 127.0.0.0/8 home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP Unknown # VRFYコマンドの使用を禁止する disable_vrfy_command = yes # MailBoxの最大サイズの指定 # メールボックスがMaildir形式のためこの設定は無視されますが「message_size_limit」との兼ね合いのため設定しておきます mailbox_size_limit = 204800000 # 受信メールサイズの制限「mailbox_size_limit」より少ない値を設定してください #message_size_limit = 5120000 message_size_limit = 20480000 # 接続元の制限(スパムメール対策) smtpd_client_restrictions = check_client_access hash:/etc/postfix/access reject_rbl_client zen.spamhaus.org reject_rbl_client bl.spamcop.net reject_rbl_client all.rbl.jp reject_non_fqdn_sender reject_unknown_sender_domain # 別途 hash:/etc/postfix/access.dbの作成が必要 # sudo postmap /etc/postfix/access ←これを実行してDB作成 # エンベロープアドレス(MAIL FROM)による制限(スパムメール対策) smtpd_sender_restrictions = reject_rhsbl_sender zen.spamhaus.org reject_unknown_sender_domain # SASL認証を有効化 smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname # anonymousでの認証はとおさない smtpd_sasl_security_options = noanonymous # Dovecot SASL ライブラリを指定 smtpd_sasl_type = dovecot # Dovecot SASL ライブラリの認証ソケットファイル /var/spool/postfix/ からの相対パスで記述 smtpd_sasl_path = private/auth # 古いバージョンの AUTH コマンド (RFC 2554) を実装した SMTP クライアントとの相互運用性を有効にする broken_sasl_auth_clients = yes # 認証を通過したものはリレーを許可する(permit_sasl_authenticated) smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination check_policy_service unix:private/policy-spf # TLSを有効化 smtpd_tls_security_level = may # サーバ証明書と秘密鍵を指定 smtpd_tls_CAfile = /etc/pki/tls/certs/hogehogeCA.crt smtpd_tls_cert_file = /etc/pki/tls/certs/hogehoge.crt smtpd_tls_key_file = /etc/pki/tls/private/hogehoge.key # メール送信時にMTA間の通信の暗号化を試みる smtp_tls_CAfile = /etc/pki/tls/cert.pem smtp_tls_security_level = may smtp_tls_loglevel = 1 # SSLで使用できるプロコトルの制限 smtp_tls_protocols = !SSLv2, !SSLv3 smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_protocols = !SSLv2, !SSLv3 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 # TLSログレベルの設定 # 0:出力しない 1:TLSハンドシェイクと証明書情報 2:TLSネゴシエーションの全て smtpd_tls_loglevel = 1 # 接続キャッシュファイルの指定 smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache # キャッシュの保持時間の指定 smtpd_tls_session_cache_timeout = 3600s # Virtual Domain w/MySQL local_transport = local #virtual_transport = virtual virtual_transport = dovecot dovecot_destination_recipient_limit = 1 virtual_mailbox_base = /home/vmail virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_alias_domains = $virtual_alias_maps virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_uid_maps = static:10000 virtual_gid_maps = static:10000 virtual_minimum_uid = 10000 # Quota w/VDA Patch virtual_maildir_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_overquota_bounce = no virtual_trash_count = no # amavisd-new フィルタを通す content_filter=smtp-amavis:[127.0.0.1]:10024 |
1 |
sudo vi /etc/postfix/master.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 |
# 以下の行のコメントアウトをはずす smtp inet n - n - - smtpd # -o receive_override_options=no_address_mappings submission inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject #追加 # -o receive_override_options=no_address_mappings smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject #追加 # -o receive_override_options=no_address_mappings #----末尾に追加 ここから---- 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 -o receive_override_options=no_address_mappings dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient} policy-spf unix - n n - 0 spawn user=nobody argv=/usr/bin/python /usr/libexec/postfix/policyd-spf /etc/python-policyd-spf/policyd-spf.conf #----末尾に追加 ここまで---- |
アクセステーブルDBを作成。これをしないと”warning: hash:/etc/postfix/access is unavailable. open database /etc/postfix/access.db: No such file or directory””warning: hash:/etc/postfix/access: table lookup problem”というログを吐いて、外部からのメールをリジェクトしてしまいます。
1 |
sudo postmap /etc/postfix/access |
Dovecot の設定
sqlへ接続するためのファイルを作成
1 |
sudo vi /etc/dovecot/dovecot-sql.conf.ext |
1 2 3 4 5 6 7 8 9 10 11 12 |
driver = mysql connect = host=localhost dbname=postfix user=postfix password=******** default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT concat('/home/vmail/domains/', maildir) AS home, \ 10000 AS uid, 10000 AS gid, \ CONCAT('*:bytes=', mailbox.quota) AS quota2_rule, \ CONCAT('*:bytes=', domain.quota*1024000) AS quota_rule \ FROM mailbox,domain WHERE username = '%u' AND mailbox.active = '1' \ AND domain.domain = '%d' iterate_query = SELECT username FROM mailbox |
quotaで使用するディクショナリーの作成
1 |
sudo vi /etc/dovecot/dovecot-dict-quota.conf.ext |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
connect = host=localhost dbname=postfix user=postfix password=******** map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages } |
Dovecotの主設定ファイルの編集
1 |
sudo vi /etc/dovecot/dovecot.conf |
1 2 |
# 以下の行がコメントアウトされてたらコメントアウトをはずす !include_try local.conf |
個別設定ファイルの記載が影響しないように修正
1 |
sudo vi /etc/dovecot/conf.d/10-auth.conf |
1 2 3 4 |
# ↓コメントアウト #auth_mechanisms = plain # ↓コメントアウト #!include auth-system.conf.ext |
念のためコメントアウト
1 |
sudo vi /etc/dovecot/conf.d/10-ssl.conf |
1 2 |
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem #ssl_key = </etc/pki/dovecot/private/dovecot.pem |
いろいろなところに分散している設定事項の集約
1 |
sudo vi /etc/dovecot/local.conf |
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# debug関係 auth_debug_passwords = no auth_verbose = no auth_debug = no ## dovecot.conf protocols = imap pop3 sieve listen = * ## 10-auth.conf disable_plaintext_auth = yes #auth_mechanisms = plain auth_mechanisms = plain login cram-md5 #!include auth-system.conf.ext #!include dovecot-sql.conf.ext passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } passdb { driver = pam } userdb { driver = passwd } ## 10-mail.conf mail_location = maildir:/home/vmail/%d/%n first_valid_uid = 10000 first_valid_gid = 10000 namespace inbox { separator = . prefix = # 接頭辞 INBOX.とか location = maildir:/home/vmail/%d/%n/maildir inbox = yes # デフォルトメールボックスの作成 # auto = no # 使わない # auto = create # 自動作成はするが、自動追加はしない # auto = subscribe # 自動作成して、追加する mailbox Trash { auto = subscribe special_use = \Trash } mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Sent { auto = subscribe special_use = \Sent } mailbox Junk { auto = subscribe special_use = \Junk } mailbox virtual/All { auto = no special_use = \All } } ## 10-master.conf service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } # Sive Setting unix_listener auth-client { group = postfix mode = 0660 user = postfix } unix_listener auth-master { group = vmail mode = 0660 user = vmail } user = root # Sive Setting ここまで } service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } } ## 10-ssl.conf #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem #ssl_key = </etc/pki/dovecot/private/dovecot.pem ssl_cert = </etc/pki/tls/certs/hogehoge.crt ssl_key = </etc/pki/tls/private/hogehoge.key ssl_ca = </etc/pki/tls/certs/hogehogeCA.crt ssl_verify_client_cert = yes # SSLで使用できるプロコトルの制限 ssl_protocols = !SSLv2 !SSLv3 ##15-lda.conf protocol lda { mail_plugins = $mail_plugins sieve quota postmaster_address = postmaster@localhost hostname = mail.localhost auth_socket_path = /var/run/dovecot/auth-master log_path = /home/vmail/log/dovecot-lda-errors.log info_log_path = /home/vmail/log/dovecot-lda.log } ## 20-imap.conf protocol imap { imap_client_workarounds = delay-newmail tb-extra-mailbox-sep mail_plugins = $mail_plugins quota virtual imap_quota } ## 20-lmtp.conf protocol lmtp { mail_plugins = $mail_plugins sieve quota log_path = /home/vmail/log/dovecot-lmtp-errors.log info_log_path = /home/vmail/log/dovecot-lmtp.log } ## 20-managesieve.conf service managesieve-login { inet_listener sieve { port = 4190 } } service managesieve { } protocol sieve { managesieve_max_line_length = 65536 managesieve_implementation_string = dovecot log_path = /home/vmail/log/dovecot-sieve-errors.log info_log_path = /home/vmail/log/dovecot-sieve.log } ## 20-pop3.conf protocol pop3 { mail_plugins = quota pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } ## 90-plugin.conf dict { quota = mysql:/etc/dovecot/dovecot-dict-quota.conf.ext } plugin { #quota = maildir:User quota quota2 = dict:User quota::proxy::quota quota = dict:Domain quota:%d:proxy::quota } ## 90-sieve.conf plugin { #sieve = ~/.dovecot.sieve sieve = /home/vmail/%d/%n/.dovecot.sieve #sieve_dir = ~/sieve sieve_dir = /home/vmail/%d/%n/sieve sieve_global_dir = /home/vmail/etc/dovecot/sieve/global/ sieve_global_path = /home/vmail/etc/dovecot/sieve/default.sieve } |
デフォルトのsieveルールの作成
1 2 |
sudo mkdir -p /home/vmail/etc/dovecot/sieve/global sudo vi /home/vmail/etc/dovecot/sieve/default.sieve |
1 2 3 4 5 6 7 8 9 |
require ["fileinto"]; # rule:[SPAM1] if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; } # rule:[SPAM2] elsif header :matches "Subject" ["*Viagra*","Cialis"] { fileinto "Junk"; } |
1 |
sudo chown vmail. -R /home/vmail/etc |
amavisdの設定
1 2 |
touch /etc/amavisd/whitelist /etc/amavisd/blacklist sudo vi /etc/amavisd/amavisd.conf |
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 |
# $mydomain = 'example.com'; # a convenient default for other settings $mydomain = 'fugafuga.net'; # $log_level = 0; # verbosity 0..5, -d $log_level = 1; # @local_domains_maps = ( [".$mydomain"] ); # list of all local domains @local_domains_maps = (1); #$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level $sa_tag_level_deflt = -5.0; #$sa_tag2_level_deflt = 6.2; # add 'spam detected' headers at that level $sa_tag2_level_deflt = 7.0; #$sa_kill_level_deflt = 6.9; # triggers spam evasive actions (e.g. blocks mail) $sa_kill_level_deflt = 100; #$sa_spam_subject_tag = '***Spam*** '; $sa_spam_subject_tag = ''; $subject_tag_maps_by_ccat{+CC_VIRUS} = [ '[警告:このメールにはウイルスが含まれています] ' ]; #$final_virus_destiny = D_DISCARD; $final_virus_destiny = D_PASS; #$final_spam_destiny = D_DISCARD; #!!! D_DISCARD / D_REJECT $final_spam_destiny = D_PASS; # qr'^\.(exe-ms|dll)$', # banned file(1) types, rudimentary # [ qr'^\.(rpm|cpio|tar)$' => 0 ], # allow any in Unix-type archives # qr'.\.(pif|scr)$'i, # banned extensions - rudimentary # qr'.\.(exe|vbs|pif|scr|cpl)$'i, # banned extension - basic #ホワイトリスト、ブラックリストを追加 @whitelist_sender_maps = ( read_hash('/etc/amavisd/whitelist') ); @blacklist_sender_maps = ( read_hash('/etc/amavisd/blacklist') ); |
spamassassinの自動アップデート
1 |
sudo vi spamassassin-update |
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 |
#!/bin/bash # SpamAssassin設定ファイル最新版ダウンロード cd /etc/mail/spamassassin wget -qN http://www.flcl.org/~yoh/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 # スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ # echo "rewrite_header Subject ***SPAM***" >> local.cf # SpamAssassin再起動 #/etc/rc.d/init.d/spamassassin restart > /dev/null # amavisd再起動 #/etc/rc.d/init.d/amavisd reload > /dev/null fi cp user_prefs user_prefs.org |
1 2 3 |
chmod +x spamassassin-update sudo sh ./spamassassin-update sudo mv spamassassin-update /etc/cron.daily/ |
ClamAV のアップデート
これをやっておかないと、サービスが起動しない
1 |
sudo freshclam |
Sophos Anti Virus (savscan) をスキャナとして使う
Sophos Anti Virus (savscan) を使う方法について、新しい記事を公開しています。
CentOS7 : amavisd-new 2.10.1 + Sophos Anti Virus (savscan)
各サービスの起動と自動起動設定
1 2 3 4 5 6 7 8 9 10 |
sudo systemctl start postfix sudo systemctl enable postfix sudo systemctl start dovecot sudo systemctl enable dovecot sudo service amavisd start sudo systemctl enable amavisd sudo service clamd@amavisd start sudo systemctl enable clamd@amavisd sudo systemctl start spamassassin sudo systemctl enable spamassassin |
コメント
Hello,
Do I need to insert something into mysql database?
Thank you for your comment.
I forgot to create a database.
I added “VirtualMailBoxのユーザー管理用DBの作成”.
Of course, you need to install PostfixAdmin etc. and create a mail account.
Good tutorial, thank you 🙂
Can you post the ssl certificate creation as example? i get this error
“..dovecot.conf: ssl_verify_client_cert set, but ssl_ca not”
no entropy for TLS key generation
i think you should add in /etc/postfix/master.cf
tlsmgr unix – – n 1000? 1 tlsmgr
Thank you for your comment.
I’m sorry.
I am extracting where to make changes.
“Tlsmgr unix – – n 1000? 1 tlsmgr” is the default value and is omitted.
I’m sorry. I am busy and have no time to make accurate.
For information on how to create a certificate please refer to other sites.