だめねこ飼育日誌 By suteneko
リネ2関連で検索して来たかたはこっちのwikiのほうがいいかも // プロフィール


2016-02-26 (Fri)

AWS上のdovecotでtcp wrapper

※※※やっぱりiptablesで行う方針にしたので、この日記の内容は途中で切れます&どこかに間違いがあるかもしれません※※※



imapとかの、パスワードを入力するサービスを使っていると、やっぱりアタックっていっぱい来ます。だから、接続元を日本国内に限った上で、不審なホスト (ブルートフォースアタックがあったホスト(侵入られてる?)とか) からのを落としたい。


家のサーバではdovecot+ipfw使って delegated-apnic-latest というファイルから変換していました。FWに相当するものはAWSにもあるんですが…何百行も書くの大変すぎる… (AWSのコマンドラインコンソール使えば解決するレベルの問題ではありますが)


というわけで、標準で入っている TCP Wrapper 経由でのアクセスということにしました。



そういう方針にする、って決めたはいいんですが、Amazon Linux の dovecot に対して ldd しても libwrap が見つからない。つまり TCP Wrapper 経由でアクセスできるようにコンパイルされていない。

あーもうどうしよう…


しばらく cyrus imap とか試した上で、やっぱり dovecot でいいや、移行めんどいし、ということにしました。



まずはAWSコンソールから、同じ設定の別マシンを作ります。セキュリティグループを自分のみしか繋げない設定にして、そちらでビルド作業をします。

また、怖いのでrootでの作業はしません。ホントはrpmbuild専用のユーザ(mockbuild)作るんですが、手を抜いて自ユーザでやっちゃうことにしました。



とりあえず yum から SRPMS を取ってきます。

$ yumdownloader --source yum
Loaded plugins: priorities, update-motd, upgrade-helper
(略)
Nothing to download

…なんだかしらんけど、無い、だと!? 拒否られた…Σ( ̄□ ̄;


調べてみたところ、どうも Amazon Linux では get_reference_source というコマンドを使うらしいです。blogによっては --aws-account-id を指定するとなっているものもありますが、現行バージョンでは不要の模様。

$ get_reference_source -p dovecot

Requested package: dovecot
Found package from local RPM database: dovecot-1:2.0.9-7.14.amzn1.x86_64
Corresponding source RPM to found package : dovecot-2.0.9-7.14.amzn1.src.rpm

Are these parameters correct? Please type 'yes' to continue: yes
Source RPM downloaded to: /usr/src/srpm/debug/dovecot-2.0.9-7.14.amzn1.src.rpm

というわけで、ダウンロードできました。コマンドは一般ユーザで実行できます。/usr/src/srpm ディレクトリが 1777 (sticky) になっているようです。



rpmbuild は入ってないので入れます。

$ sudo yum install rpm-build

設定

$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros


ファイルを取り出します

$ rpm -ivh /usr/src/srpm/debug/dovecot-2.0.9-7.14.amzn1.src.rpm

mockbuildユーザじゃないのでエラーが出ますが無視。

rpmbuildディレクトリに展開されるので

$ vi rpmbuild/SPECS/dovecot.spec

%configure に --with-libwrap を追加し、Requires: tcp_wrappers と BuildRequires: tcp_wrappers-devel を追加します。

そしてビルド

$ rpmbuild -bb ~/rpmbuild/SPECS/dovecot.spec 2>&1 | tee -a log.txt

1回目はBuild dependency入れてないので、エラーで終わります。必要なものを入れて再実行

で、完成です。



…なにか間違ったのか ldd dovecot しても libwrap が出てきませんでした。

iptables で設定する方針に変更したので、これ以上は追っていません。

本日のツッコミ