Product SiteDocumentation Site

4.12. tcpwrappers を使う

TCP wrappers were developed when there were no real packet filters available and access control was needed. Nevertheless, they're still very interesting and useful. The TCP wrappers allow you to allow or deny a service for a host or a domain and define a default allow or deny rule (all performed on the application level). If you want more information take a look at hosts_access(5) manual page.
Debian でインストールされるサービスの多くは:
  • tcp wrapper サービス (tcpd) を通して起動されるか、
  • libwrapper をコンパイル時に組みこまれています。
On the one hand, for services configured in /etc/inetd.conf (this includes telnet, ftp, netbios, swat and finger) you will see that the configuration file executes /usr/sbin/tcpd first. On the other hand, even if a service is not launched by the inetd superdaemon, support for the tcp wrappers rules can be compiled into it. Services compiled with tcp wrappers in Debian include ssh, portmap, in.talk, rpc.statd, rpc.mountd, gdm, oaf (the GNOME activator daemon), nessus and many others.
To see which packages use tcpwrappers [24] try:
  $ apt-cache rdepends libwrap0
tcpchk を走らせるときはこのことを考慮してください。wrapper ライブラリにリンクされているサービスを host.denyhosts.allow ファイルに追加することができますが、 tcpchk はこれらのサービスを発見できないと警告するでしょう。 というのも tcpchk/etc/inetd.conf を見て これらのサービスをさがすからです (マニュアルページはここでは完全に正確と いうわけではありません)。
ここで、小さなトリックがあります。たぶん利用可能なもののうち最小の侵入検知 システムでしょう。一般に、最初の抵抗線としてよいファイアウォールポリシーを、 2 番目の抵抗線として TCP wrapper を持つべきです。小さなトリックとは 拒否されているサービスが wrapper を呼ぶたびに root にメールを送る SPAWN [25] コマンドを /etc/hosts.deny に設定することです。
  ALL: ALL: SPAWN ( \
    echo -e "\n\
    TCP Wrappers\: Connection refused\n\
    By\: $(uname -n)\n\
    Process\: %d (pid %p)\n\
    User\: %u\n\
    Host\: %c\n\
    Date\: $(date)\n\
  " | /usr/bin/mail -s "Connection to %d blocked" root) &
注意: 上記の例は短時間に大量の接続を行うことによって簡単に DoS されます。大量の電子メールが送られるということはわずか数パケットを 送ることによって大量のファイル入出力を発生させられるということです。


[24] On older Debian releases you might need to do this:
  $ apt-cache showpkg libwrap0 | egrep '^[[:space:]]' | sort -u | \
        sed 's/,libwrap0$//;s/^[[:space:]]\+//'
[25] ここで大文字に注意してください。というのも、spawn では うまくいかないからです。