設定したことを忘れないように書いてあります。
今どきはSSL証明書がほぼ必須となっているので、lets encryptを使ってサーバ証明書を作成した。
まずは、証明書の取得・更新を行うためのスクリプトであるcertbotを取得する。 上記のページからディストリビューションとサーバ種別を指定すると取得するための方法を示すpageが表示される。 Cent-OS 8では以下のように、wgetして適当なディレクトリに移動し、パーミッション/オーナを設定する。
# wget https://dl.eff.org/certbot-auto --2020-05-15 11:51:11-- https://dl.eff.org/certbot-auto dl.eff.org (dl.eff.org) をDNSに問いあわせています... 151.101.64.201, 151.101.0.201, 151.101.128.201, ... dl.eff.org (dl.eff.org)|151.101.64.201|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 79712 (78K) [application/octet-stream] `certbot-auto' に保存中 certbot-auto 100%[=================================================>] 77.84K --.-KB/s 時間 0.01s 2020-05-15 11:51:11 (6.88 MB/s) - `certbot-auto' へ保存完了 [79712/79712] # mv certbot-auto /usr/local/bin/certbot-auto # chown root /usr/local/bin/certbot-auto # chmod 0755 /usr/local/bin/certbot-auto
今までは、pound+ ApacheでWebを構成していたが、今どきはnginxだろうとリバプロを変更してみた。
インストールは普通にパッケージから。
$ sudo dnf -y install nginx
'/etc/nginx/nginx.conf'のserver定義はすべてコメントアウトし、'/etc/nginx/conf.d'に'virtual.conf'を作成。 以下の設定は、外部からは、www.example.comとwww.foo.example.netというfqdnでアクセスし、実態としては、 bar.example.netというサーバ上のポートベースのバーチャルホストに振り分ける。
server { server_name www.example.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://bar.example.net:8888/; } } server { server_name www.foo.example.net; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://bar.example.net:8080/; } }
リロードによる反映と、自動起動の設定を行う。
# systemctl reload nginx # systemctl enable nginx Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
リモートアドレスをログに残すように`/etc/httpd/conf/httpd.conf`のLogFormatを下記に変更する。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
専用のNASを買ってから、ほとんど使っていなかったサーバの共有フォルダに接続したらつながらない。 どうやらWindows 10 Fall Creaters UpdateからSMBv1がインストールされなくなったのが原因らしい(参考)。 とりあえず、smb.confにmin/max protocolの設定を入れると、publicには接続できるようになった。
[global] unix charset = UTF-8 dos charset = cp932 display charset = UTF-8 min protocol = SMB2 max protocol = SMB2
参考にしたページでは、maxまたはminだけで問題ないようだったが、私の環境では両方を記載しないと動作しなかった。
publicは認証無しで記載していたが、このままではなぜかhomeにアクセスできなくなってしまった。結果的にpublicの設定にguest onlyを入れることで、homeにアクセスできるようになった。
事情があって会社の旧環境を延命せざるを得なくなった。 サーバは用意されたが、OSが最新になり、いろいろ変更をしなければならない。 特に、ディストリビューションがRedHatに変わったのでいろいろ面倒だ。
面倒なことの一つに、namazuで作成していた全文検索システムが使えないこと。 文字コードがUTF8ベースとなったが、namazuはutf8に対応していないため、不整合が発生した。 elasticsearchに移行などもちらと考えたが、java入れるとか大変なので、namazuをutf8環境で使えるようになんとかすることにした。
ここを参考に、 もともとあるnamazu.cgiをnamazu2.cgiに変更し、新たにnamazu.cgiというwrapperを書いた。
しかしながら、リンク先のwrapperをそのまま使用すると、
#!/usr/bin/perl use CGI; use Text::Iconv; use CGI::Lite; use Encode::Guess qw/euc-jp/; my $cgi = new CGI; my $dec = Encode::Guess->guess($cgi->param('query')); my $url = $cgi->url; $url =~ s|/namazu.cgi|/namazu2.cgi|; my $new_query; if ( $dec->name eq 'utf8' ) { my $converter = Text::Iconv->new("UTF8", "EUC-JP"); $new_query = $converter->convert($cgi->param('query')); } else { $new_query = $cgi->param('query'); } my $uencode = url_encode($new_query); my $oParam = ""; foreach my $key ($cgi->param) { next if ( $key eq 'query' ); $oParam .= "&".$key."=".$cgi->param($key); } print "Location: ".$url."?query="."$uencode$oParam\n\n";
文字コードの判定などは他にもっと良い方法があるかもしれないが、とりあえず上記で問題無さそう。
cyrusは毎回アップデートのために問題が発生する。 たしかvine seedから入れたと思うので、入れたタイミングが悪いのだろう。
とりあえずインストールは正常に終わったように見えるが、/etc/init.d/cyrus-imapを起動すると、
cyrus fatal error: can't open old database Converting from /var/lib/imap/mailboxes.db (berkeley) to /var/lib/imap/mailboxes.db.flat (flat)などとメッセジーがでる。
head -c 17 /var/lib/imap/mailboxes.db | tail -c 13で確認してskiplistと出るようなら、skip-list形式なのにbarkeley形式から変換している可能性があると書いてあり、 その場合は、下記のようにしろとあったが、
/etc/init.d/imapd stop cd /var/lib/imap/ mv annotations.db annotations.db-skiplist /usr/lib/cyrus-imapd/cvt_cyrusdb /var/lib/imap/annotations.db-skiplist skiplist /var/lib/imap/annotations.db berkeley mv mailboxes.db mailboxes.db-skiplist /usr/lib/cyrus-imapd/cvt_cyrusdb /var/lib/imap/mailboxes.db-skiplist skiplist /var/lib/imap/mailboxes.db berkeley exitしかしながら、これでは解決せず。
なので、とりあえず、/var/lib/imap配下の、mailboxes.db annotations.db などを全て削除(リネーム)して立ち上げたところ新しいdbが作成されて立ち上がるようになった。
これで、コネクションは張れるになったが、こんどはcyrusに接続できない。
testsaslauthd -u <username> -p <password> 0: NO "authentication failed"上記のようにtestsaslauthdで確認すると、authエラーとなる。
過去にいろいろやった経緯から試したが不明。 authはpamに任せているので、telnet認証で入れるのにauthエラーになるのは何事?と、 いろいろ調べた結果、vineのsaslauthdがpamに対応していないことが問題の可能性がありそうだと判断。 saslauthd -vの結果は下記の通りで、対応しているように見えるのであるが。
$ saslauthd -v saslauthd 2.1.23 authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap/etc/sysconfig/saslauthdのMECH=pamを下記のようにshadowに修正したら、認証できるようになった。
# Directory in which to place saslauthd's listening socket, pid file, and so # on. This directory must already exist. SOCKETDIR=/var/run/saslauthd # Mechanism to use when checking passwords. Run "saslauthd -v" to get a list # of which mechanism your installation was compiled with the ablity to use. MECH=shadow # Additional flags to pass to saslauthd on the command line. See saslauthd(8) # for the list of accepted flags. FLAGS=
あっさり書いているが、これだけで3時間はかかった。そのあと、/etc/postfix/main.cfとmaster.cfを過去の通り修正。
でも、/var/log/maillogを見ると、下のようなlogかあるから、lmtpunixで配送されているような気がするのだが。Jan 6 15:11:01 argus postfix/qmgr[13831]: 39F839FC0: removed Jan 6 15:11:01 argus lmtpunix[3817]: execute
ただ、/var/lib/imap/のdbを削除したため、mailboxの構成とあわなく、メールボックスが見つかりませんと言われる。 であるから、mailboxの構成の修復が必要となった。
まずは、メール本体である/var/spool/imap/[a-z]/user以下にあるので、必要なものを念のためバックアップしておく。
次に、cyradmでcmコマンドによりメールボックスの作成を行う。
これでメールボックス自体は作成されたので、/var/spool/imapのディレクトリ構成と合うように、 mailクライアントであるshurikenからメールボックスのフォルダを作成してゆく。 時々、lsで/var/spool/imap/[a-z]/userのディレクトリ構成を見ながら同じ名前になっていることを確認して地道に作成したが、 これはcyradmからする方法もあるかもしれない。
すべてが完了したら、/usr/lib/cyrus/bin/reconstruct -r user.<mailbox>でメールボックスの修復を行う。 これでshurikenからメールを確認できるようになった(仕分けルールは全て消えた)が、/var/log/maillogをみると、何か操作するたびに
imap[13909]: SQUAT didn't find validity record imap[13909]: SQUAT failedのログが表示され続けている。インデックスが壊れているようなので、
sudo -u cyrus /usr/lib/cyrus-imapd/squatter -r user.<mailbox>で再作成して完了。