今回は、前回から行っているホストレベルのセキュリティ対策を完成させる。Linuxでファイアウォールを構築するには、まずホストレベルのセキュリティが重要になる。セキュリティホールだらけのファイアウォールなど何の役にも立たないからだ。
前回に続き、ホストレベルのセキュリティ対策を行います。セキュリティ対策に「絶対」というものはありません。可能な限りの対策を施しましょう。
デフォルトで起動されるすべてのサービスに制限なくアクセスさせるのは危険です。サービスについては、特定のネットワークあるいはホストからのアクセスのみを許可するようにすべきです。例えば、メンテナンス用にtelnetを使うのであれば、パスワードが適切に設定されていたとしてもアクセスは制御する必要があります。
そこで、アクセス制御の方法を説明します。アクセス制御には、xinetdのみで行う方法と、TCP_Wrapperを併用する方法の2種類があります。それぞれについて見ていきましょう。
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 各パラメータの説明(一部) |
不審なアクセスの有無などを監視できるように、アクセスログを取得しておきましょう。そのためには、/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を再起動してください。
telnetサービスがxinetdやinetdを介して呼び出されることは前回説明しました。xinetdあるいはinetdから呼び出されたとき、tcpdが介入して接続の許可/不許可を判断し、許可であればtelnetサービスが起動されます。不許可であれば接続を拒否します。
TCP_Wrapperの設定は、hosts.allow、hosts.denyという2つのファイルに記述されています。これらのファイルを編集することで設定を変更します。
以下では、例として次のような方針で設定を編集します。
まず、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ディレクトリ内のtelnet、ftpファイル(xinetdの場合)を変更する必要があります。
●xinetdの場合
telnet、ftpファイルそれぞれのserverの行を次のように修正します。
server = /sbin/tcpd
さらに、次の2行を追加します。
flags = REUSE NAMEINARGS server_args = /sbin/in.telnetd
flags = REUSE NAMEINARGS server_args = /sbin/in.ftpd
●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
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にハングアップシグナルを送ります。
Copyright © ITmedia, Inc. All Rights Reserved.