rspamd の Web UIの URLを 書き換える

さて、前回の落穂拾いです。

ところが、実際 Apache に対して設定してみたのだけど 500 Internel Server Error が出て上手く行かなかったので、結局 rspamd 側の設定でポート開放して、 iptables でアクセス元を絞る形に。

[From rspamd の Web GUI にアクセスしてみる - Soukaku's HENA-CHOKO Blog]

rspamd の Web UI の書き換え、 FAQ 通りに設定したのに上手く行かなかったといういうのは、前回書いた通り。

/var/log/apache2/error.log を眺めると、

[Thu Apr 27 16:18:59.762601 2017] [proxy:warn] [pid 14798] [client xxx.xxx.xxx.xxx:55948] AH01144: No protocol handler was valid for the URL /rspamd/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

と出力されているので、改めてその内容でクグってみたところ、

こんなエラーが出た.Pを指定したのにapacheにproxyに関するモジュールが入っていなかったのが原因の様だった.proxy,proxy_httpをロードするようにしたら解決した.

[From mod_rewriteによるURLの書きかえ - yuu_nkjm blog(2014-04-13)]

と書かれているサイトがあったので、早速 mod_proxy 関連のモジュールを有効にしてみることに。

rspamd の Web GUI にアクセスしてみる

rspamd をアップデートしたことで、使えるようなった機能があるので、いろいろと試してみよう

アップデートだけで結構な分量になってしまったので、フィルタについては別エントリーにて。バージョン上がったことで追加された機能もあるようなので、そのあたりの話もおいおい書いてきたいですね〜。

[From rspamd と rmilter をアップデート - Soukaku's HENA-CHOKO Blog]

ということで、まずは Web GUI から

Web GUI を有効にしてみる

と言っても、実際のところデフォルトの設定の状態でも、Web GUI は待受ポート 11334 で起動していて、下のような形で待ち受けしています。ただ、そのままでは localhost からの接続要求しか受け付けてくれないので、外部からも見れるように設定を変える必要があるというわけです。

root@vps2:~# lsof -i:11334
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rspamd 13943 root 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13943 root 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13945 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13945 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13946 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13946 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13948 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13948 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13949 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13949 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)

手っ取り早いのは、 rspamd 自身が待ち受けしている 11334/tcp を localhost 以外からアクセスできるよう設定することなんだけど、それはそれで芸がないし、無制限にアクセスを許可するのもよろしくないので、rspam の FAQ の中にある WebUI questions の部分に記述されている httpd からリダイレクトさせる方法で。

ところが、実際 Apache に対して設定してみたのだけど 500 Internel Server Error が出て上手く行かなかったので、結局 rspamd 側の設定でポート開放して、 iptables でアクセス元を絞る形に。

rspamd と rmilter をアップデート

ここ 2 年半ぐらい、rspamd を使い続けているサーバ、動作上特に不満があるわけでもなかったのだけど、

以前、インストールメモをエントリーとしてあげていた、 rspamdrmilter の組み合わせ、なかなか調子良く動作してくれている。

[From rspamd + rmiter の組み合わせに、ClamAV を連携させてみた - Soukaku's HENA-CHOKO Blog]

2週間ほど前から、そのサーバが受信・配送したメールに Spam がチラホラ紛れ込んでくるようになったので、「こりゃ自前でフィルタ書かんと駄目かな~」と思いつつ、公式サイトをチェックしてしてみたら…。

Rspamd is also available in some versions of Debian and Ubuntu. However, we are looking for an active maintainer for rspamd in these ‘official’ repos, as now rspamd is terribly outdated there.

Please DO NOT use those packages, as they are no longer supported.

[From Downloads]

「パッケージ、アップデートされねぇなぁ、 sid なのに…」とは感じてたんですけどね、「メンテナ探してるんだけど、 Debian/Ubuntu の公式サイトで配布してるのは古いんで使わないでね。」という状況だったはつゆ知らず…。

ということでフィルタを書く前に、公式サイトに書いてある手順を元に、最新バージョンの rspamd / rmilter にアップデートしてみた。

ということで、以下作業手順とログ

まず、現時点で、インストール済みのバージョンは、以下の通り。

root@vps2:~# dpkg -l rspamd rmilter
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name               Version        Architecture   Description
+++-==================-==============-==============-=========================================
hi  rmilter            1.6.3          amd64          Another sendmail milter for different mai
hi  rspamd             0.9.9+b1       amd64          Rapid spam filtering system

公式サイトで見ると、 rspamd は 1.4.4 、rmilter は 1.10 が最新のようなので、随分とバージョンが上がってますね…。

ansible のお試しがてら、 Raspberry に Python MPI 環境を作ってみる

サーバを同一用途で複数台用意してある環境って、仕事関係ではフツーにある環境なわけですが、それらの設定変更となると、同じ手順を台数分だけ繰り返し。なるべく作業者のレベルに左右されないような手順を用意したとしても、稀に手順ミスってトラブルなんてことも起きちゃうわけですよ。
作業者しても、出来る限り楽したいですし、定型化可能な作業だったら、コマンド一発で対象全台に設定適用したり、必要なファイルを配布したり出来れば、余計な手順やミス発生のリスクも減らせて、万々歳。

というわけで、オープンソース界隈でも「構成管理ツール」と言われるものが、いくつか開発されているんですが、その中でも ansible が、最近はお薦めらしので、ちょっといじってみようかと思った次第。

Ansible seamlessly unites workflow orchestration with configuration management, provisioning, and application deployment in one easy-to-use and deploy platform.

[From Ansible Use Cases]

Ansible(アンシブル)は、レッドハットが開発するオープンソースの構成管理ツールである。構成管理に加え、オーケストレーションやソフトウェアデプロイメントの機能を持つ。

[From Ansible (ソフトウェア) - Wikipedia]

同じようなツールだと、 Chef や Puppet と言うものもあるようですが、

  • エージェントレスで、管理したい側へは ssh 接続出来れば良い

と、利用するまでの敷居が低い、というのもお薦めのポイントになっているようです。

とりあえず、ラズパイ Cluster (モドキ)を構成してみる準備

まずは構成

今のところ、Raspberry Pi3 は1台しかないので、それを管理対象に。それと別に管理サーバとして Debian sid を仮想マシンで準備して、ここに ansible をインストール、という非常にミニマムな構成です。

ansibleのテスト環境

図にも書いてある通り、ホントは何台も並べて、クラスタリングしたいんですけどね…。

これに関してはどっちかというと、親である自分のほうが複数台並べて Rasp Pi クラスタ組んでみたいという気持ちのほうが大きかったりしますけど、息子もプログラミング自体には興味があるようなので、作ったクラスタで一緒に遊ぶってのも出来るなぁ、とかとか。

[From 子供に PC を渡そうと思ってるんですけどね - Soukaku's HENA-CHOKO Blog]

ま、 ansible に慣れることが目的なので、このまま進めます。

HA8000の中古を手に入れるなど

ヤフオクも上手く立ち回れば、かなりの掘り出し物を手にすることが出来るわけですが、今回はホント上手くいったということで、HA8000/TS10 AK1 という日立の IA サーバの中古を入手することに成功しました。

2010 年後半に出たモデルですが、Xeon X3430 が載ってて、それに LSI Logic の MegaRAID SAS 2108 が載って RAID も組めるぜ〜、というのが、送料込みで 3,000 円以内で手に入ったんだから、これはもう小躍りするほかないという状況。あと、出品者側の説明にはなかった SCSI I/F と DAT72 ドライブが載ってたというオマケも付きましたし…。(ただ、媒体の容量的には DAT72 、微妙なんだよねぇ…。)

ここ二週ほど、ちまちまと動作の確認をしていたんですが、DVD-ROM ドライブが動作不良でメディアを認識出来ない状態だったこと以外は、特に問題なし。
USB - SATA 変換ケーブル経由で繋いだスーパードライブ使えば、OS インストールできるし、何故か余らせてた ECC 付き の DDR3 DIMM も難なく認識してくれたし、HDD もこれまた手持ちの SATA の 1TB のものをホットスワップベイに挿して問題なく認識してくれたので、手持ちのコマで通常利用可能な状態まで持っていけたというのも、(お財布的に)かなり助かったなぁ、と…。

この先、どうするか、ですが

そもそも、新しく機材を調達しようと思ったのは、 Mac mini や LIFEBOOK で動かしていた VirtualBox による実験環境を集約。これにより、 LIFEBOOK を用途的に浮かすことが出来れば、家族が使っている調子の悪い ThinkPad をそれで置き換えられるな、というのが発端。
そこになんともタイミング良く、今回入手した HA8000 がヤフオクに出品された、というわけ…。

結局、GoogleAnalyticsプラグインが悪さしていたようで

MySQL から MariaDB にリプレースしたら MovableType のダッシュボードにアクセスできなかった件、実際には管理画面だけでなく、ブログ内の記事検索なんかもうまく動かないという状況だったわけですが…。

"GoogleAnalytics::Provider" に対応する Perl モジュールは存在しているので、内部的に何か不整合があって、うまくアクセスできないという状況の模様。

MovableType と MariaDB の組み合わせでエラー? - Soukaku's HENA-CHOKO Blog

復旧させるために色々試行錯誤。仮想マシン上に Debian sid インストール。そこにトラブっているのとほぼ同等の環境準備して、新規に MovableType インストールしてみたり、テスト環境と本番の間で DB のエクスポート/インポート繰り返してみたり、とやっていたわけですが…。
ふと「MovableType を今とは別のディレクトリにインストールして、テンプレート類はコピー、設定ファイルの PATH だけ書き換えてみたら動くかも?」と思いついて、実際にやってみたところ、管理画面へのログイン成功!

MovableType と MariaDB の組み合わせでエラー?

MariaDB へリプレースして特に問題ないや~、と思っていたら、なぜか MovableType の管理画面へのアクセスができなくなった。

ブラウザでアクセスして、管理画面にログインしようとすると、

mt.cgi にアクセスするとエラー

Can't locate object method "is_ready" via package "GoogleAnalytics::Provider"
というエラーが出て先に進めない状態。

MovableType のインストールディレクトリのしたを探してみたら、

root@vps2:/var/www/MT5# find -name "*Provider*" -type f
./lib/MT/Stats/Provider.pm
./plugins/GoogleAnalytics/lib/GoogleAnalytics/Provider.pm

"GoogleAnalytics::Provider" に対応する Perl モジュールは存在しているので、内部的に何か不整合があって、うまくアクセスできないという状況の模様。

とりあえず、xmlrpc 経由で画像をアップロードしたり、エントリーを書いたりということは問題なく出来ているんで、mt.cgi だけの問題の模様。

さて、どうしたものかね…。
#切り分けのために、 MariaDB → MySQL という方向でのリプレースをやってみる、という手はあるが。

AVGをやめてSophos Anti-Virus for Linux を使ってみる

サイトへのアクセス統計をチェックしていると、7 年も前のエントリーを見に来て頂いてるのは有難いのですが、

ほんとに、ふとした思いつきで、AVG AntiVirusのLinux版を入れてみたので、備忘録的にメモ。
ClamAVが動いている環境ではあるのだけど、念のため複数のAnti Virusスキャナを動かしてみよう、という興味本位でのお試しではありますが・・・。

[From ふと思い立ったので、AVGを入れてみた - Soukaku's HENA-CHOKO Blog]

実際のところ、既に AVG 使ってなかったりしますし、 AVG 自体も Linux 用の無償版の公開を取りやめてしまっているので、改めて実情に合わせた新たなエントリーを起こしてみました。
今回の目的も、SMTP に対するウィルスチェックを行う、というものです。

今度は、 Sophos だ!

Linux で使えて無料、という条件だと Sophos Anti-Virus for Linux が該当するので、今回は Sophos を Amavis から呼び出してメールをチェックする形にします。

Linux へのインストールに関しては、以下のところを参考にしつつ、 設定を進めていきます。

今までLinuxの無償アンチウイルスソフトといえばClamAVが代表的でしたが5月18日にSophos Anti-Virus for Linuxに無償版が提供されることが発表され、選択肢が広がりました(個人利用に限りますが…)。
基本的な使い方をさらってみたのでメモしておきます。

[From Sophos Anti-Virus for Linuxを使う - 雑木林]

Sophos Anti-Virus for Linux の入手とインストール

まず、入手ですが、これはプロダクトの紹介ページにある"ダウンロード"のボタンをクリックして、氏名とメールアドレスの入力フォームに必要な情報を入力して、"送信"をクリック。

画面が切り替わったら、"ダウンロード"をクリック。

氏名とメールアドレスを入力ダウンロードへ進む

OpenDKIM が起動していなかったので、 systemd の設定を直した

何気なくサーバのログ眺めているときに、 /var/log/mail.info に気になるものを発見。

May  5 13:53:50 nexus01 postfix/smtpd[25332]: warning: connect to Milter service inet:[127.0.0.1]:54321: Connection refused
May  5 13:53:50 nexus01 postfix/smtpd[25332]: lost connection after CONNECT from nexus01.downtown.jp[127.0.0.1]
May  5 13:53:50 nexus01 postfix/smtpd[25332]: disconnect from nexus01.downtown.jp[127.0.0.1] commands=0/0

OpenDKIM が起動していなくて、メール処理時の DKIM による認証処理が、ここしばらくずっと止まっていた模様。(おそらく、数ヶ月単位で…。orz)

まずは切り分け

原因を突き止めねばらなんということで、まずは OpenDKIM の起動を試みるも、下のようなメッセージを吐くだけで、起動せず。

nexus01:~# service opendkim start
Job for opendkim.service failed because the control process exited with error code. See "systemctl status opendkim.service" and "journalctl -xe" for details.

メッセージ中にある通り、systemctl で OpenDKIM のステータスを見ると、 opendkim の起動がうまくいってないのが明らか。

nexus01:~# systemctl status opendkim.service | more
● opendkim.service - DomainKeys Identified Mail (DKIM) Milter
   Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since 木 2016-05-05 14:05:41 JST; 3s ago
     Docs: man:opendkim(8)
           man:opendkim.conf(5)
           man:opendkim-genkey(8)
           man:opendkim-genzone(8)
           man:opendkim-testadsp(8)
           man:opendkim-testkey
           http://www.opendkim.org/docs.html
  Process: 779 ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS (code=exited, status=64)
  Process: 776 ExecStartPre=/bin/chown opendkim.opendkim /var/run/opendkim (code=exited, status=0/SUCCESS)
  Process: 773 ExecStartPre=/bin/mkdir -p /var/run/opendkim (code=exited, status=0/SUCCESS)
 5月 05 14:05:41 nexus01 systemd[1]: Starting DomainKeys Identified Mail (DKIM) Milter...
 5月 05 14:05:41 nexus01 systemd[1]: opendkim.service: Control process exited, code=exited status=64
 5月 05 14:05:41 nexus01 systemd[1]: Failed to start DomainKeys Identified Mail (DKIM) Milter.
 5月 05 14:05:41 nexus01 systemd[1]: opendkim.service: Unit entered failed state.
 5月 05 14:05:41 nexus01 systemd[1]: opendkim.service: Failed with result 'exit-code'.

OpenDKIM 起動時に付与される $SOCKET や $DAEMON_OPTS は /etc/default/opendikim で定義されているので、

nexus01:~# grep -E "(DAEMON_OPTS|SOCKET)" /etc/default/opendkim
#DAEMON_OPTS=""
#SOCKET="local:/var/run/opendkim/opendkim.sock" # default
SOCKET="inet:54321" # listen on all interfaces on port 54321
#SOCKET="inet:12345@localhost" # listen on loopback on port 12345
#SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345

その内容に従ってコマンドラインで直接起動すると

nexus01:~#/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:54321

問題なく起動することが確認できたので、OpenDKIM 自身の設定がおかしいということではなくて、systemd 周りに原因がありそうだ、と。

ownCloudの「URLリンクでの共有」のURLをmod_rewriteで書き換えようとしてハマる(現在進行系)

sid 使いの辛いところといえば、あるパッケージのアップデートをしたら、違うパッケージが動かなくなる、というのが時々あったりすることなんですが、最近それでハマったのが ownCloud 。
PHP7 系のパッケージが sid に取り込まれた関係で、sid 向けにパッケージングされてた ownCloud (7.0.x) が「7.0.x は PHP7 では動きません。8.x にしてね。」的なメッセージを表示するようになったんで、結局 ownCloud の公式サイトで提供されている 9.0.0 の deb パッケージをインストール。(そっちでもハマったんだけど、それは別の機会に。)

さて、本題は、その ownCloud で「URLリンクでの共有」したファイルの URL を書き換えたい、ということなのだけど、これが一筋縄ではいかないようで、うまく出来てません。

ownCloud 自体、 7.0 系と 9.0 系、操作や表示といった部分では大きく変わった印象はないのだけど、 「URLリンクで共有」しているファイルに割り振られる URL の表記が随分と変更されてます。

7.0 系:https://www.downtown.jp/owncloud/public.php?service=files&t=5f4fa827b45854ee60832266a4b9ab96
9.0 系:https://www.downtown.jp/owncloud/index.php/s/sTN4t4d6JxQ0670

ということで、この新旧の URL をApache の mod_rewite で URL 書き換えようと、以下のように設定。

AllowEncodedSlashes     On
RewriteEngine           On
RewriteCond     %{REQUEST_URI}  /owncloud/public.php
RewriteCond     %{QUERY_STRING} ^service=files&t=5f4fa827b45854ee60832266a4b9ab96$
RewriteRule     ^.*$            /owncloud/index.php/s/sTN4t4d6JxQ0670           [R=301,L]

で、テストアクセスしてみると…。