連載
» 2001年09月18日 00時00分 UPDATE

ゼロから始めるLinuxセキュリティ(2):ホストレベルセキュリティの総仕上げ (1/3)

今回は、前回から行っているホストレベルのセキュリティ対策を完成させる。Linuxでファイアウォールを構築するには、まずホストレベルのセキュリティが重要になる。セキュリティホールだらけのファイアウォールなど何の役にも立たないからだ。

[大貫大輔,株式会社ラック/不正アクセス対策事業本部]

サービスのアクセス制御

 前回に続き、ホストレベルのセキュリティ対策を行います。セキュリティ対策に「絶対」というものはありません。可能な限りの対策を施しましょう。

 デフォルトで起動されるすべてのサービスに制限なくアクセスさせるのは危険です。サービスについては、特定のネットワークあるいはホストからのアクセスのみを許可するようにすべきです。例えば、メンテナンス用にtelnetを使うのであれば、パスワードが適切に設定されていたとしてもアクセスは制御する必要があります。

 そこで、アクセス制御の方法を説明します。アクセス制御には、xinetdのみで行う方法と、TCP_Wrapperを併用する方法の2種類があります。それぞれについて見ていきましょう。

xinetdでのアクセス制御

 Red Hat Linux 7.1Jは、xinetdを採用しています。前回、xinetd自身にアクセス制御機能があると説明しました。ここでは、その具体的な設定方法を紹介します。

 Red Hat Linux 7.1Jのxinetdは、/etc/xinetd.d以下にサービスごとに設定ファイルを用意します。アクセス制御を行う際は、制御したいサービスのファイルに制御条件を追加します。

only_from   = 192.168.0.0/24

 only_fromというパラメータは、アクセスを許可するネットワークあるいはホストを指定します。上記の設定は、「192.168.0.0/24からのアクセスのみを許可」することを意味します。「特定のホスト、ネットワークからの接続を拒否」するにはno_accessというパラメータを使います。192.168.1.1というホストからの接続を拒否するなら、

no_access   = 192.168.1.1

とします。

 /etc/xinetd.d/telnetのサンプルファイルを以下に挙げるので、参考にしてください。

service telnet 
{ 
    disable        = no 
    protocol        = tcp 
    socket_type     = stream 
    wait            = no 
    user            = telnetd 
    server          = /sbin/in.telnetd 
    only_from       = 192.168.0.0/24 
}
disable サービスを無効化:yes
無効化しない:no
protocol プロトコル:/etc/protocolsのプロトコルを指定
socket_type ソケットタイプ:stream(TCP)、dgram(UDP)、rawなど
wait 単一のスレッドとする:yes
単一のスレッドとはしない:no
user telnetdを起動するユーザー名
server サービス:サービスを実行するプログラム名(絶対パス)
only_from 接続を許可するネットワークアドレス
表1 各パラメータの説明(一部)

コラム:xinetdでアクセスログを取る方法

 不審なアクセスの有無などを監視できるように、アクセスログを取得しておきましょう。そのためには、/etc/xinetd.confを以下のように修正します。

defaults 
{ 
    instances       = 15 
    log_type        = FILE /var/log/servicelog 
    log_on_success  = HOST PID EXIT DURATION 
    log_on_failure  = HOST RECORD 
}

 変更後、xinetdを再起動してください。


TCP_Wrapperを用いたアクセス制御

 telnetサービスがxinetdやinetdを介して呼び出されることは前回説明しました。xinetdあるいはinetdから呼び出されたとき、tcpdが介入して接続の許可/不許可を判断し、許可であればtelnetサービスが起動されます。不許可であれば接続を拒否します。

 TCP_Wrapperの設定は、hosts.allowhosts.denyという2つのファイルに記述されています。これらのファイルを編集することで設定を変更します。

 以下では、例として次のような方針で設定を編集します。

  • telnetサービスに対し、192.168.0.0/24からのアクセスを許可
  • FTPサービスに対し、192.168.1.10/32からのアクセスを許可
  • 上記以外のアドレスからのtelnet、FTPサービスへのアクセスを拒否

 まず、viなどを使って/etc/hosts.allowファイルを編集します。

# vi /etc/hosts.allow

 /etc/hosts.allowはアクセスを許可する条件を指定します。次の2行を追加します。

in.telnetd : 192.168.0.0/255.255.255.0
in.ftpd : 192.168.1.10

 これに伴い、/etc/inetd.confファイル(inetdの場合)、/etc/xinetd.dディレクトリ内のtelnetftpファイル(xinetdの場合)を変更する必要があります。

●xinetdの場合

 telnet、ftpファイルそれぞれのserverの行を次のように修正します。

server      = /sbin/tcpd

 さらに、次の2行を追加します。

flags       = REUSE NAMEINARGS
server_args = /sbin/in.telnetd
telnetファイル
flags       = REUSE NAMEINARGS
server_args = /sbin/in.ftpd
ftpファイル

●inetdの場合

 inetdの場合は、/etc/inetd.confを以下のように修正します。

telnet     stream  tcp nowait  root    /sbin/in.telnetd  in.telnetd

                 ↓

telnet     stream  tcp nowait  root    /sbin/tcpd  /sbin/in.telnetd

 FTPの行も同様に修正します。

 次に/etc/hosts.denyの設定です。このファイルは、アクセスを拒否する条件を指定します。

# vi /etc/hosts.deny

 /etc/hosts.denyでは、あらゆるネットワーク/ホストからの接続を拒否するため、次の2行を追加します(編注)。

in.telnetd : ALL
in.ftpd : ALL
編注:/etc/hosts.allowと/etc/hosts.denyでは、/etc/hosts.allowの方が優先度は高い。よって、まず/etc/hosts.denyで全サービスへのアクセスをALL(全ホスト/ネットワーク)で拒否し、/etc/hosts.allowで許可するホスト/ネットワークのみを指定するのがセオリーとなる。

コラム:TCP_Wrapperのログ取得法

 TCP_Wrapperでログを取りたい場合は以下の作業を行います。まず、TCP_Wrapperインストール時にMakefileを編集し、FACILITYの行を次のように変更します。

FACILITY=LOG_LOCAL1

 さらに、/etc/syslog.confを編集します。

local1.info             /var/log/tcp_wrapper.log

 touchコマンドを使い、/var/log/tcp_wrapper.logファイルを作成します。

# touch /var/log/tcp_wrapper.log

 最後にsyslogにハングアップシグナルを送ります。


       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。