2020年末のサーバ構築その2
2日前にサーバ構築の記事を書いたばかりですが、 結局やり直しです。 メールが受け取れない環境で公開すると、 内容に責任を持てないのではないかと感じたためです。 (しかし、まだメールサーバは復旧していません。)
環境
- ハードウェア:Raspberry Pi 4 Model Bを使用します。
- 月に1MBも転送しないサイトなので、あまり強いハードウェアは用いません。
- 安定性に問題があれば別の方法を検討します。
- OS:Ubuntu Server 20.04.1
設定手順
ディスク書き込み
今回は、microSDカードの制限を逃れるため、 USBマスストレージデバイスからの起動を使うことにしました。
手順はRaspberry Pi 4 Model B で USB ブート(1) - Qiita を参考にしました。
EEPROMのバージョンを確認(Raspberry Pi上で)
- raspbianで起動した状態で確認したところ既にSep 3 2020版になっていました。
イメージの取得(PC上で)
- Install Ubuntu on a Raspberry Pi 2, 3 or 4 | Ubuntu より、Raspberry Pi 4の64-bitと書かれたイメージをダウンロードしました。
書き込み(PC上で)
- ダウンロードしたファイルはxz圧縮されているので、伸張
sakai@myPC ~ % xz -kd ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz
- 伸張したファイルを書き込み
sakai@myPC ~ % cat ubuntu-20.04.1-preinstalled-server-arm64+raspi.img | sudo dd of=/dev/disk5 bs=134217728
- macOSなので、/dev/disknになっていたり
bs=
に接頭辞が使えなかったりしましたが、 適当に補正しました。 - disknの数字は「ディスクユーティリティ」でドライブの「情報を見」て、 「BSD装置ノード」の欄を見ることで確認できます。
- macOSなので、/dev/disknになっていたり
- ダウンロードしたファイルはxz圧縮されているので、伸張
ディスク内容の補正(Raspberry Pi上で)
- 引き続きRaspberry Pi 4 Model B で USB ブート(1) - Qiita を参考にしています。
- ext4ファイルシステムを安全に拡張するために、Linuxマシンが必要です。 (macOSでさえなければいけるかもしれない)
- 手元にLinux端末がRaspberry Piしかなかったのでこれを使いました。
- ディスクはまだ準備ができていないので、一旦raspbianで起動して作業を行います。
- ディスクをRaspberry PiにUSB接続
- パーティションをいじる(
ディスクパーティションとファイルシステムの拡張 - Qiita
を参考にしました。)
- パーティションマップの変更
pi@raspberrypi:~ $ sudo parted /dev/sda (parted) unit s # セクタ単位に変更 (parted) resizepart 2 -1s # 2番目のパーティションを最大サイズに拡張 (parted) quit
- Raspberry Piのディスクは大抵USB接続したディスクだけ
(メモリーカードはディスクとは別扱い)なので、
繋いだディスクは大抵/dev/sdaになります。
しかし、ディスクの取り違えを防ぐため、などとして正しいディスクを操作しているか確認しましょう。
(parted)print
- Raspberry Piのディスクは大抵USB接続したディスクだけ
(メモリーカードはディスクとは別扱い)なので、
繋いだディスクは大抵/dev/sdaになります。
しかし、ディスクの取り違えを防ぐため、
- ファイルシステムの拡張
pi@raspberrypi:~ $ sudo e2fsck -f /dev/sda2 pi@raspberrypi:~ $ sudo resize2fs /dev/sda2
- パーティションマップの変更
- マウント
pi@raspberrypi:~ $ mkdir /tmp/hdd_boot pi@raspberrypi:~ $ mkdir /tmp/hdd_root pi@raspberrypi:~ $ sudo mount /dev/sda1 /tmp/hdd_boot pi@raspberrypi:~ $ sudo mount /dev/sda2 /tmp/hdd_root
- vmlinuzを伸張
pi@raspberrypi:~ $ cd /tmp/hdd_boot pi@raspberrypi:/tmp/hdd_boot $ zcat vmlinuz | sudo dd of=vmlinux
- これを使うように設定
pi@raspberrypi:/tmp/hdd_boot $ sudo vi config.txt
[pi4]
セクションを置換。記すべき内容は RPI4 Direct USB Boot Ubuntu 20.04 - Raspberry Pi Forums の5)に記載されている。
- vmlinuxがvmlinuzに追従するように、スクリプトを配置
pi@raspberrypi:/tmp/hdd_boot $ sudo vi auto_decompress_kernel
- 新規ファイル。記すべき内容は前項の記事の6)に記載されている。
- これを実行させるように設定
pi@raspberrypi:/tmp/hdd_boot $ sudo vi /tmp/hdd_root/etc/apt/apt.conf.d/999_decompress_rpi_kernel
- 内容は前項の記事の8)に記載されている。
- 電源を切る
pi@raspberrypi:/tmp/hdd_boot $ sudo shutdown -h now
- microSDカードを抜き、Raspberry Piをモニタにつないで起動
SSH接続まで
- まずログインする。Ubuntu ServerのRaspberry Piイメージでは、デフォルトユーザが作成済み。
- ログインするとパスワード変更が始まるので、事前に決めておく。
- この手順ではキーレイアウト設定ができていないので、記号がまともに入力できない。
英数字のみで作っておくほうが安全。
Login: ubuntu Password: (見えないけど)ubuntu (自動でパスワード変更が始まる) 〈Current Password〉: (もう一度)ubuntu 〈New Password〉: 〈新しいパスワード〉 〈Retype Password〉: 〈もう一度入れる〉
- WiFiネットワークに接続
(「Ubuntu Server(Raspberry Pi)のWifi設定〜リモート接続 - Qiita」
を参考にしました。)
- Netplanの設定ファイルを編集
ubuntu@ubuntu:~$ vi /etc/netplan/51-wifi.yaml
- 次のようにしてIPアドレスを固定してWiFiに接続するように設定
network: wifis: wlan0: addresses: - 〈IPアドレス〉/24 gateway4: 192.168.0.1 nameservers: addresses: - 192.168.0.1 optional: true access-points: "〈SSID〉": password: 〈WiFiのパスワード〉
- 次のようにしてIPアドレスを固定してWiFiに接続するように設定
- 反映させる。
ubuntu@ubuntu:~$ sudo netplan generate
- 〜wlan0.service not foundというエラーが出た。
- 調べてみると、再起動すると直るらしいことがわかった。
(Ask Ubuntuの投稿を参考にしました。)
ubuntu@ubuntu:~$ sudo reboot 〈再起動の表示〉 Login: ubuntu Password: (先ほど作ったパスワード) ubuntu@ubuntu:~$ sudo netplan generate ubuntu@ubuntu:~$ sudo netplan apply
- 設定できた。もう少しマシな方法がありそうだけれど、まあいいか。滅多にやらないし。
- Netplanの設定ファイルを編集
- Ubuntu ServerのRaspberry Piイメージでは、デフォルトでSSHが起動しているので、
先ほど作ったパスワードでログインできる。
sakai@myPC ~ % ssh ubuntu@〈IPアドレス〉 〈サーバ証明書の確認〉 yes 〈パスワード〉 入力する ubuntu@ubuntu:~$
- パスワードを記号入りのものに変えておく。
ubuntu@ubuntu:~$ passwd Changing password for ubuntu. Current password: New password: Retype new password:
公開鍵認証の設定
一昨日に設定したときと 同じなので省略します。
Webサーバの設定
今回はコメント機能の復旧を後に回すので先にnginxだけ設定します。
インストール
ubuntu@ubuntu:~$ sudo apt install nginx (略) 続行しますか? [Y/n] 〈Enter〉
設定。UbuntuはDebian系なので 同じDebian系のRaspbianを使った一昨日の設定 と同様にできます。
pi@raspberrypi:~ $ sudo vi /etc/nginx/sites-available/〈設定名(半角英字など)〉
- 設定内容(後で追加するIssoの設定も追加しておきます)
server { listen 80; listen [::]:80; location ~ ^/isso/(.*)$ { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; uwsgi_param SCRIPT_NAME /isso; uwsgi_param PATH_INFO /$1; } root /var/www/〈設定名(半角英字など)〉; index index.html index.htm; server_name 〈ドメイン名〉; }
- 設定内容(後で追加するIssoの設定も追加しておきます)
追加設定。知らないサーバへの要求は無視します。
pi@raspberrypi:~ $ sudo vi /etc/nginx/sites-available/unknown
- 設定内容
server { listen 80 default_server; listen [::]:80 default_server; server_name _; location / { return 400; } }
- 設定内容
その設定を有効化
pi@raspberrypi:~ $ cd /etc/nginx/ ubuntu@ubuntu:/etc/nginx$ sudo ln -s ../sites-available/xxxx.xx sites-enabled/ ubuntu@ubuntu:/etc/nginx$ sudo ln -s ../sites-available/unknown sites-enabled/ ubuntu@ubuntu:/etc/nginx$ sudo systemctl reload nginx
DNSサーバの設定
前の設定で設定したDNSはサーバ間の連携のために 必要でしたが、今回はサーバは同一の機体にします。
それでも、メールサーバをテストするときにDNSサーバがあるほうが楽なので、 DNSサーバを設定します。
今回の用途(内側から参照するための、一部内容を書き換える必要のあるキャッシュDNS) にはdnsmasqが適していると思われるため、今回もdnsmasqを使います。
systemd-resolvedのスタブリゾルバを無効化 (Ubuntu 18.04 の systemd-resolved で local DNS stub listener の利用をやめる - Qiitaを参考にしました。)
- (systemd-resolvedはsystemdの拡張で、 参照するDNSサーバを柔軟に設定するためのもの。 スタブリゾルバ機能は、DNSサーバと同じプロトコルで待ち受け、 ここに設定されたDNSを見に行った結果を返す擬似的なDNSサーバとして動作する機能。)
- スタブリゾルバが動いていると、53番ポートが塞がって使えないので止める。
- 止めるための設定
ubuntu@ubuntu:~$ sudo vi /etc/systemd/resolved.conf.d/51-disable-stub.conf
- 内容は次の通り
[Resolve] DNSStubListener=no
- 内容は次の通り
- スタブリゾルバを使わずにDNSを見に行かせる設定
ubuntu@ubuntu:~$ sudo ln -sf ../run/systemd/resolve/resolv.conf
- systemd-resolvedに設定を反映
ubuntu@ubuntu:~$ sudo systemctl restart systemd-resolved
DNSを設定する前にホスト名を変更
- プロンプトに出るマシン名を設定しておく。
ubuntu@ubuntu:~$ ~~~~~~ ここ
- manのhostname(5)によれば、/etc/hostnameに書くことで設定できる。
vi /etc/hostname
- 元書いてあるのと同じように、マシン名だけ書いておけばOK
raspiu
- 元書いてあるのと同じように、マシン名だけ書いておけばOK
- 再起動すれば反映されるが、再起動しなくてもhostname(1)で設定できる。
ubuntu@ubuntu:~$ hostname raspiu
- SSHログインをやり直せば反映される。
ubuntu@ubuntu:~$ exit sakai@myPC ~ % ssh raspiu # この辺の設定は略。 ubuntu@raspiu:~$
- SSHログインをやり直せば反映される。
- プロンプトに出るマシン名を設定しておく。
dnsmasqをインストール
ubuntu@raspiu:~$ sudo apt install dnsmasq
dnsmasqを設定
ubuntu@raspiu:~$ sudo vi /etc/dnsmasq.d/local.conf
- 設定内容は以下の通り
# Never forward plain names (without a dot or domain part) domain-needed # Never forward addresses in the non-routed address spaces. bogus-priv # Set this (and domain: see below) if you want to have a domain # automatically added to simple names in a hosts-file. expand-hosts
- 設定内容は以下の通り
/etc/hostsに追記
〈IPアドレス〉 raspiu raspiu.airport
反映
ubuntu@raspiu:~$ sudo systemctl reload dnsmasq
このDNSサーバを見に行くように設定
ubuntu@raspiu:~$ sudo vi /etc/netplan/51-wifi.yaml
- nameservers / addresesを更新。
nameservers: addresses: - 192.168.0.7
- nameservers / addresesを更新。
メールサーバの設定
- パスワード認証なので、全面的にインターネットから接続可能にすることはお勧めできません。 25番ポートのみ開放すれば認証を試行できないので問題ないはずです。
証明書の発行
前回とほぼ同様ですが、 次の箇所を変更したので再掲します。
- local.cf → local.cnf
- SMTPサーバとIMAPサーバの証明書を共通化
証明書を作る
ubuntu@raspiu:~$ cd /etc/ssl ubuntu@raspiu:/etc/ssl$ sudo vi local.cnf
- local.cnfの内容:
[ req ] default_bits = 4096 encrypt_key = yes x509_extensions = extensions distinguished_name = req_distinguished_name [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ extensions ] nsCertType = server subjectAltName = @alt_names [alt_names] DNS.1 = xxxx.xx DNS.2 = raspiu DNS.3 = raspiu.airport
- 準備ができたので作る
ubuntu@raspiu:/etc/ssl$ sudo mkdir localcerts ubuntu@raspiu:/etc/ssl$ sudo openssl req -new -x509 -config local.cnf \ -newkey rsa:4096 -nodes -keyout private/server.key -days 730 \ -subj /C=JP/ST=Tokyo/CN=raspiu.airport/emailAddress=xxx@xxxx.xx/ \ -out localcerts/server.cer
- local.cnfの内容:
Postfixの設定
次のサイトを参考にしております。
- Dovecotとの連携について(main.cfの"rspamd"の行までとmaster.cf):Dovecotの公式サイト
- Rspamdとの連携について(main.cfの"rspamd"の部分):Rspamdの公式サイト
- 暗号化通信がされたかどうかを出力する設定:公式ドキュメントのsmtpd_tls_received_header
前回とほぼ同様ですが、 次の箇所を変更したので再掲します。
- Ubuntu上なので、aptを使ってインストールするように変更
- Rspamdとの連携をネットワーク経由に変更
- 証明書のパスを変更
Received:
ヘッダーにTLS状態を記録する設定を追加- /etc/postfix/virtualの設定内容が抜けていたので補完
まずaptを使ってインストール
ubuntu@raspiu:/etc/ssl$ sudo apt install postfix Postfix Configuration: 設定なし
設定ファイルの作成
ubuntu@raspiu:/etc/ssl$ cd /etc/postfix ubuntu@raspiu:/etc/postfix$ sudo cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf ubuntu@raspiu:/etc/postfix$ sudo vi main.cf
- 内容
### ### Local Configurations ### ### myhostname = raspiu.airport virtual_mailbox_domains = xxxx.xx virtual_alias_maps = hash:/etc/postfix/virtual virtual_transport = lmtp:unix:private/dovecot-lmtp strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_helo_required = yes smtpd_helo_restrictions = reject_non_fqdn_helo_hostname smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_recipient_restrictions = reject_unknown_recipient_domain, reject_non_fqdn_recipient, reject_unverified_recipient, reject_unauth_destination smtpd_tls_cert_file=/etc/ssl/localcerts/server.cer smtpd_tls_key_file=/etc/ssl/private/server.key smtpd_tls_security_level = may smtp_tls_security_level = may message_size_limit = 20480000 # rspamd smtpd_milters = inet:localhost:11332 milter_protocol = 6 milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} milter_default_action = accept # Print TLS connection information on the header. smtpd_tls_received_header = yes
- Debianのpostfixはデフォルトでchrootが有効。 (smtpdが乗っ取られても悪さできないように、smtpdからアクセスできるファイルを 特定ディレクトリ配下に制限してある。)
- smtpd_miltersをunixソケットにする場合、その配下にないと動かない。 色々と面倒なので、ネットワークソケット(inet:localhost:11332)を使う。
- master.cfも編集
ubuntu@raspiu:/etc/postfix$ sudo vi master.cf
- 追記内容は以下の通り
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname -o smtpd_tls_auth_only=yes -o smtpd_reject_unlisted_recipient=no -o smtpd_recipient_restrictions=reject_unknown_recipient_domain,reject_non_fqdn_recipient,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
- 内容
エイリアスを更新
ubuntu@raspiu:/etc/postfix$ sudo newaliases
postmasterやinfoを管理者に転送する設定
ubuntu@raspiu:/etc/postfix$ sudo vi virtual
- virtualの内容
postmaster xxx@xxxx.xx info xxx@xxxx.xx root xxx@xxxx.xx
- virtualのハッシュファイルを作成
ubuntu@raspiu:/etc/postfix$ sudo postmap virtual
- virtualの内容
Dovecotの設定
次のサイトを参考にしております。
- Postfixとの連携について:Dovecotの公式サイト
- Rspamdとの連携について:Dovecot antispam with Rspamd (part 2) — There is no spoon.
前回と同様ですが、 次の箇所を変更したので再掲します。
- aptを使うようにパッケージ名を変更
- 証明書のパスを変更
- 参考サイトと設定の記述順が違っていて見比べにくかったので修正
- sieveファイルのパスがずれていたので補正
インストール
ubuntu@raspiu:/etc/postfix$ sudo apt install dovecot-imapd dovecot-lmtpd dovecot-sieve
設定
ubuntu@raspiu:/etc/postfix$ cd /etc/dovecot/ ubuntu@raspiu:/etc/dovecot$ sudo vi local.conf
- local.confの内容
protocols = imap lmtp # Mail location mail_location = maildir:~/maildir mail_plugins = acl quota # Authentication auth_mechanisms = plain passdb { driver = passwd-file args = username_format=%u /var/vmail/auth.d/%d/passwd } userdb { driver = passwd-file args = username_format=%u /var/vmail/auth.d/%d/passwd } # Services service imap-login { inet_listener imap { address = 0.0.0.0 port = 143 } inet_listener imaps { address = 0.0.0.0 port = 993 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } } service imap { } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } user = $default_internal_user } service auth-worker { user = $default_internal_user } verbose_proctitle = yes # Protocols protocol lmtp { postmaster_address = postmaster@xxxx.xx # required mail_plugins = $mail_plugins sieve } protocol imap { mail_plugins = $mail_plugins imap_acl imap_quota mail_log notify } # Plugins plugin { quota = dict:user::file:%h/maildir/dovecot-quota quota_rule = *:storage=1GB quota_rule2 = Trash:storage=+10%% acl = vfile:/var/vmail/conf.d/%d/acls:cache_secs=300 } # for mail filtering plugin { sieve = ~/.dovecot.sieve sieve_dir = ~/sieve sieve_global_dir = /var/vmail/conf.d/%d/sieve sieve_before = /etc/dovecot/sieve/rspam_deliver.sieve } # TLS ssl_cert = </etc/ssl/localcerts/server.cer ssl_key = </etc/ssl/private/server.key
- 上記で使ったrspam_deliver.sieveを作る
ubuntu@raspiu:/etc/dovecot$ sudo mkdir sieve ubuntu@raspiu:/etc/dovecot$ sudo vi sieve/rspam_deliver.sieve
- rspam_deliver.sieveの内容は以下の通り
require "fileinto"; require "imap4flags"; if header :is "X-Spam" "Yes" { fileinto "Junk"; setflag "\\seen"; stop; }
- コンパイルしておく
ubuntu@raspiu:/etc/dovecot$ sudo sievec /etc/dovecot/rspam_deliver.sieve
- local.confの内容
Rspamdの設定
次のサイトを参考にしております。
前回とほぼ同様ですが、 次の箇所を変更したので再掲します。
- aptを使うように変更
- DKIMとARCの鍵を共通化
- Postfixとの連携をネットワーク経由に変更
インストール
ubuntu@raspiu:/etc/dovecot$ sudo apt install rspamd redis clamav-daemon clamav-freshclam ubuntu@raspiu:/etc/dovecot$ cd /etc/rspamd/
DKIMキーを生成(k210101:セレクタ名。日付などを使っておくと更新の時に楽なのでそうする。)
ubuntu@raspiu:/etc/rspamd$ sudo rspamadm dkim_keygen -s 'k210101' \ -d xxxx.xx -k local.d/dkim_priv.key \ | sudo dd of=/etc/rspamd/local.d/dkim_pub.key
- 秘密鍵のパーミッション設定
ubuntu@raspiu:/etc/rspamd$ sudo chown _rspamd:_rspamd local.d/dkim_priv.key ubuntu@raspiu:/etc/rspamd$ sudo chmod go-rwx local.d/dkim_priv.key
- 秘密鍵のパーミッション設定
DNSサーバにdkim_pub.keyの公開鍵を設定する。
- まず公開鍵を読み出す。
ubuntu@raspiu:/etc/rspamd$ cat local.d/dkim_pub.key
- 内容は以下のようになっている
k210101._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIG(略)" ) ;
- dnsmasqの設定ファイルを開く
ubuntu@raspiu:/etc/rspamd$ sudo vi /etc/dnsmasq.d/local.conf
- 次のように追記する
txt-record=k210101._domainkey.xxxx.xx,"v=DKIM1; k=rsa; p=MIG(略)"
- まず公開鍵を読み出す。
Rspamdの設定。(ファイル数が多いので/etc/rspamd/以下のパスで示す)
- local.d/antivirus.conf
clamav { attachments_only = false; servers = "/run/clamav/clamd.ctl"; }
- local.d/arc.conf
path = "/etc/rspamd/local.d/dkim_priv.key"; selector = "k210101"; use_esld = false;
- local.d/dkim_signing.conf
path = "/etc/rspamd/local.d/dkim_priv.key"; selector = "k210101"; use_esld = false;
- local.d/milter_headers.conf
extended_spam_headers = true; authenticated_headers = ["authentication-results","x-virus"]; extended_headers_rcpt = ["@xxxx.xx"] use = ["authentication-results","x-spam-level","x-virus"];
- local.d/redis.conf
servers = "127.0.0.1";
- local.d/statistic.conf
autolearn = [-5, 10]
- local.d/worker-controller.inc
bind_socket = "*v4:11334"; password = "$2$xxx$xxxxxxxxx"; enable_password = "$2$xxx$xxxxxxxxx";
- passwordの値は次のコマンドで生成する
ubuntu@raspiu:/etc/rspamd$ rspamadm pw Enter passphrase: $2$xxx$xxxxxxxxx
- passwordの値は次のコマンドで生成する
- local.d/worker-normal.inc
enabled = false;
- local.d/worker-proxy.inc
milter = yes; timeout = 120s; bind_socket = localhost:11332; upstream "local" { default = yes; self_scan = yes; }
- local.d/antivirus.conf
メールアカウントの作成
前回とほぼ同様ですが、 次の箇所を変更したので再掲します。
- Ubuntuにはmkpasswdコマンドが標準ではついてこないので、openssl-passwdに変更。
ディレクトリを作成
ubuntu@raspiu:/etc/rspamd$ sudo mkdir /var/vmail ubuntu@raspiu:/etc/rspamd$ cd /var/vmail ubuntu@raspiu:/var/vmail$ sudo mkdir -p auth.d/xxxx.xx ubuntu@raspiu:/var/vmail$ sudo mkdir -p xxxx.xx/xxx/maildir ubuntu@raspiu:/var/vmail$ sudo mkdir -p xxxx.xx/isso/maildir ubuntu@raspiu:/var/vmail$ sudo chown 5000 xxxx.xx/xxx/maildir ubuntu@raspiu:/var/vmail$ sudo chown 5000 xxxx.xx/isso/maildir
パスワードハッシュを作成
- openssl passwdコマンドで作る。
(参考:Unix & Linux Stack Exchangeの回答)
ubuntu@raspiu:/var/vmail$ openssl passwd -6 Password: Verifying - Password: $6$xxxx$xxxxxxxx
- openssl passwdコマンドで作る。
(参考:Unix & Linux Stack Exchangeの回答)
パスワードファイルを作成
sudo vi auth.d/xxxx.xx/passwd
- 内容は以下のようにする
xxxx@xxxx.xx:$6$xxxx$xxxxxxxx:5000:5000::/var/vmail/xxxx.xx/xxx::userdb_quota_rule=*:storage=1G isso@xxxx.xx:$6$xxxx$xxxxxxxx:5000:5000::/var/vmail/xxxx.xx/xxx::userdb_quota_rule=*:storage=1G mail address:password hash :*1 :*2:*3:home directory :*4:*5 *1: Used ID. *2: Group ID. *3: Comment/Full Name. 書くことがないので空欄 *4: Login Shell. システムにログインできるユーザのリストを書くためのpasswd(5)の 形式を使っているため枠が存在するが、書くことがないので空欄 *5: passwd(5)には無い枠。Dovecotのプラグイン設定。
- 内容は以下のようにする
起動させる
- インストール時点で自動起動の設定はされています。
再起動をかければ動くはずですが、動かなかった場合、ログなどを参照してアドリブでがんばります。
- systemdに対して出力した内容を見る。
systemctl status postfix systemctl status dovecot systemctl status rspamd systemctl status clamav-daemon
- 各ソフトウェアのログ
- /var/log/mail.log
- /var/log/rspamd/rspamd.log
- systemdに対して出力した内容を見る。
Webサーバの設定(コメント欄編:Isso)
Issoの公式の説明を参考にしております。
前回とほぼ同様ですが、 以下の点を変更しています。
- aptを使用した
- GitHubの最新版に変更した(pip版は壊れているため)
必要ツールをインストールする。
ubuntu@raspiu:/var/isso$ sudo apt install python3-virtualenv python3-dev npm \ uwsgi uwsgi-plugin-python3
virtualenvを準備する。
ubuntu@raspiu:~$ sudo mkdir /var/isso ubuntu@raspiu:~$ cd /var/isso ubuntu@raspiu:/var/isso$ sudo chown ubuntu:ubuntu ./
- virtualenvを作成して有効化
ubuntu@raspiu:/var/isso$ virtualenv env ubuntu@raspiu:/var/isso$ . env/bin/activate
- virtualenvを作成して有効化
virtualenvにIssoをインストールする
- gitリポジトリを取得
(env) ubuntu@raspiu:/var/isso$ git clone https://github.com/posativ/isso.git (env) ubuntu@raspiu:/var/isso$ cd isso
- bower、require.jsを取得
(env) ubuntu@raspiu:/var/isso/isso$ npm i bower jade uglify-js requirejs
- IssoのJavascriptをビルド
(env) ubuntu@raspiu:/var/isso/isso$ PATH=/var/isso/isso/node_modules/.bin:$PATH make init js
- virtualenvにインストール
(env) ubuntu@raspiu:/var/isso$ pip install ./isso
- gitリポジトリを取得
Issoの設定
(env) ubuntu@raspiu:/var/isso$ vi isso.conf
- 設定内容は以下の通り
[general] dbpath = /var/isso/data/comments.db host = http://xxxx.xx/ max-age = 15m notify = smtp [moderation] enabled = true [smtp] username = isso@xxxx.xx password = xxxx host = raspiu.airport port = 587 security = starttls to = xxx@xxxx.xx from = isso@xxxx.xx timeout = 10
- 設定内容は以下の通り
uWSGIの設定(この場所に置くことで自動起動設定も兼ねる)
(env) ubuntu@raspiu:/var/isso$ sudo vi /etc/uwsgi/apps-available/isso.ini
- 設定内容は以下の通り
[uwsgi] socket = 127.0.0.1:8080 master = true ; `nproc` = 4 on raspberry pi 4 processes = 4 cache2 = name=hash,items=1024,blocksize=32 ; spooler = /var/isso/mail plugin = python3 module = isso.run virtualenv = /var/isso/env env = ISSO_SETTINGS=/var/isso/isso.conf
- 有効化
(env) ubuntu@raspiu:/var/isso$ sudo ln -s ../apps-available/isso.ini /etc/uwsgi/apps-enabled/
- 設定内容は以下の通り
環境の準備
- SMTPサーバの証明書を受け入れるように、証明書を登録
(env) ubuntu@raspiu:/var/isso$ sudo cp /etc/ssl/localcerts/server.cer /usr/local/share/ca-certificates/server.crt
- パーミッション設定
(env) ubuntu@raspiu:/var/isso$ mkdir mail data (env) ubuntu@raspiu:/var/isso$ touch data/comments.db (env) ubuntu@raspiu:/var/isso$ sudo chown www-data:www-data data data/comments.db mail
- comments.dbが置かれているディレクトリが書き込み可能でないと、 書き込みの際にエラーになる(一時ファイルを作るため?)。 そこで間にdataディレクトリを挟んでいる。
- SMTPサーバの証明書を受け入れるように、証明書を登録
Issoの起動
(env) ubuntu@raspiu:/var/isso$ sudo systemctl restart uwsgi
終わりに
何かと障害の多いサイトですが、今後もよろしくお願いします。