Debian GNU/Linux Wheezy上のDovecotでTCPWrapperを用いてアクセス制限する

追記:dovecot 2.Xではtcp_wrapper経由ではPOP3とPOP3Sを区別してアクセス制限することはできないみたい

やりたいこと。

  • 研究室内からはPOP3(110)でアクセス
  • 研究室外からはPOP3S(995)でアクセス

以前、QPopperを使っていたときはTCPWrapperを使って実現していたので今回もそうしようとしたら結構はまった。理由は、Wheezyのdovecot-coreはTCPWrapperを使えるようにコンパイルされていなかったため

wheezy-backportsを使えるように設定

揮発性のメモ:backportsを使うのとおりに設定。

Wheezy-Backportsのdovecot-coreをインストール

aptitudeだとバックポート使えないみたいなのでapt-getを使う。

% sudo apt-get install dovecot-core/wheezy-backports dovecot-pop3d/wheezy-backports

/etc/dovecot/conf.d/10-tcpwrapper.conf をコメントアウト

login_access_sockets = tcpwrap

service tcpwrap {
  unix_listener login/tcpwrap {
    group = $default_login_user
    mode = 0600
    user = $default_login_user
  }
}

グループ dovenull の作成

% sudu groupadd dovenull

dovecotの再起動

% sudo /etc/init.d/dovecot stop
% sudo /etc/init.d/dovecot start

アクセス制限の設定

/etc/hosts.deny ですべてのアクセスを拒否。

ALL: ALL

/etc/hosts.allow で特定のサービスへのアクセスを許す。サービス名をどう書くかはdovecot and tcpwrappersによると pop3, pop3s, imap, imaps でよいみたい。

ALL: LOCAL
pop3: 192.168.11.0/255.255.255.0 # 研究室内ネットワーク(192.168.11.XXX)からはPOP3へアクセス許可
pop3s: ALL # POP3Sへはどこからでもアクセス許可

追記:上記のpop3sの設定はdovecot 2.Xでは無視される。

設定を確認する。hosts.allowとhosts.denyがちゃんと記述されているかどうか。

% tcpdchk

研究室外のIPからPOP3にアクセスしてちゃんと禁止されているかをチェック。研究室内ならどうかもチェック

% tcpdmatch pop3 192.168.12.13
client:   address  192.168.12.13
server:   process  pop3
access:   denied

% tcpdmatch pop3 192.168.11.13
client:   address  192.168.11.13
server:   process  pop3
access:   granted