ホームネットワーク日記

設定したことを忘れないように書いてあります。

2020.05.15
サーバ証明書の適用

Underconstraction

今どきは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
2020.05.14
nginxでリバースプロキシを構築する

今までは、poundApacheでWebを構成していたが、今どきはnginxだろうとリバプロを変更してみた。

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.

Apacheのログを変更する

リモートアドレスをログに残すように`/etc/httpd/conf/httpd.conf`のLogFormatを下記に変更する。

  • before
  •     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        
  • After
  •     LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        
2018.03.03
smbに接続できない

専用の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にアクセスできるようになった。

2015.03.31
NamazuをUTF-8環境で使う

事情があって会社の旧環境を延命せざるを得なくなった。 サーバは用意されたが、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";

文字コードの判定などは他にもっと良い方法があるかもしれないが、とりあえず上記で問題無さそう。

2013.01.06
Cyrus imapdのエラー

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
しかしながら、これでは解決せず。
cvt_cyrusdbを呼んでいるところをコメントアウトせよ。しても問題ないはず。
などとの書込があり、試したところ、確かに立ち上がる。

なので、とりあえず、/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>
で再作成して完了。