UNIXな生活
更新:2003/11/19  
Linuxな生活  FreeBSDな生活
 Solarisな生活
 JAVAな生活
 Practical use
 掲示版
TCP_Wapperとxinetdによるサービスとアクセス制御

旧来からよく使用されているインターネットスーパーサーバにinetdがあります。
inetdは、設定されたあるサービスへの要求があった場合に、そのデーモンを起動する役割を担います。
(スタンドアローンデーモンの場合は、inetdは経由せず、デーモンそのものが要求を直接処理します。)
例えばftpなどの要求がクライアントから来たとします。
inetd経由では、クライアントの要求をinetdが受け付け、その次に、inetdがftpデーモンを起動します。
この時inetd経由でftpサービスを受け付ける場合は、/etc/inetd.confにftpの定義を記述しておきます。
アクセス制御を行いたい場合は、TCP_Wappersを使用し、特定のIPアドレスからのみ要求を受け付ける用にできます。
しかし、inetdは今程セキュリティーに気をつかう必要の無い時代に考えられた代物です。
*私がUNIX系OSをインストールすると、まずinetdを確認、いらないものはできるだけ止めていますし、そもそもFreeBSDなどでは、 inetd自体を停止して使用するようにしています。
そこで登場したのが、xinetdです。xinetdでは、TCP_Wappersで行っていたアクセス制御や、サービスに対する接続数の制限など inetdより細かい制御が可能になります。もちろんTCP_Wappersと併用することも可能です。
xinetd自体は、RedHatLinuxの7.*あたりから標準になってきましたし、最近のLinuxディストリビューションはxinetdを使用し ているでしょう。もちろんFreeBSDやSolarisでも使用することができます。

TCP_Wappers,xinetdの設定をするのに把握しておく必要があるのは、以下の設定ファイルです。
/etc/xinetd.conf-- ----xinetdの設定ファイル。
/etc/hosts.allow-- ---TCP_Wappersアクセス制御用(許可)ファイル。
/etc/hosts.deny-- ----TCP_Wappersアクセス制御用(拒否)ファイル。
/etc/service----- ----ネットワークサーバの種類とポートの定義ファイル。

TCP_Wappers
TCP_Wappersは以下のファイルでアクセス制御します。
hosts.deny------ アクセス拒否用
hosts.allow----- アクセス許可用

評価する順番は、
1.アクセス拒否ファイルに記述してある物は拒否
2.アクセス許可ファイルに記述してあるものは許可
3.記述の無いものは許可
*"1."に該当し、"2."に該当する場合は、"2."が優先されます。

設定は、"1."で全て拒否し、必要なものだけ"2."で定義する形になります。
各ファイルの記述方法は、
<service> : <host> : <command>
<service>=inetdやxinetdに記述してある<argument>を指定します。
<host>=ホスト名をFQDNで記述したり、IPアドレスなどで指定します。
<command>=特定のコマンドを発行できます、例えば、拒否したときにmailを送信するとか、、。

Tips.1
<host>の設定例。
<host>はいろいろな設 定方法があります。代表的なのは以下のとおり。

.domainNmae-------- このドメインに属するホストを対称にします。
hostname----------- ホスト名を指定します。DNSや/etc/hostsで名前引きができる必要があります・
192.168.0.10-------IP アドレスを指定します。
192.168.0.0/24------ 192.168.0.0/255.255.255.0に属するホストが対象になります。
ALL---------------- 全てのホストを対称にします。
127.0.0.1---------- ローカルホストを対称にします。
userName@192.168.0.15 --192.168.0.15ホストのユーザー:userNameのみ対称になります。

ほかにもありますが、このあたりを覚えて おけば、さしあたって困らない、かな?


では、実際の設定例です。
今回は、ProFTPDを対称に説明します。

1.まずは/etc/hosts.denyから。これは全て 拒否としておきます。
ALL:  ALL

2./etc/hosts.allowで許可の設定をしま す。
*ローカルホストは全て許可、ProFTPDをIPアドレス空間で指定。
ALL:  127.0.0.1
in.proftpd:  192.168.0.0/24

Tips.2
<service>の記述
<service>は、 /etc/servicesの記述では無く、inetdやxinetdの<argument>を指定します。
xinetdなら、設定ファイルに
server  =  /usr/sbin/in.proftpd
の記述がされていることになります。



xined
xinetdはinetdの代替として生まれて来ました。xinetdでは、以下のような機能を持っています。
IPによるアクセス制御
ドメインによるアクセス制御
サービスの提供時間
接続数の制限
ログ出力

従来のTCP_Wappers+inetdより、サービスの提供時間や接続数の制限など機能は豊富と言えます。
もちろん、TCP_Wappersと併用することも可能です。

xinetdの設定では、/etc/xinetd.confを 編集することで可能ですが、多くの場合、/etc/xinetd.d/以 下にサービスごとの設定ファイルを置くことが多いようです。
その場合、xinetd.confは、最小限の設定にとどめ、細かい制御は各サービスの設定ファイルに任せるといいでしょう。
では実際の設定例で。


今回もTCP_Wappers同様ProFTPDを例に説明します。
まずは、xinetdデーモンの設定ファイル、/etc/xinetd.confの設定例です。

/etc/xinetd.conf

defaults
{
    instances      = 100
    log_type       = SYSLOG authpriv
    log_on_success =HOST PID
    log_on_failure =HOST
}
includedir /etc/xinetd.d

instances        : 最大接続数を設定
log_type          : ログの出力方法を指定、authpriv=認証(private)
                      例えば、/var/log/xinetdlogにすると、独自にログを取れます。
log_on_success : サーバプログラム開始時のログ出力要素を指定
log_on_failure    : サーバプログラム開始失敗時のログ出力要素を指定
includedir         : サービスの設定ファイルを格納している場所を指定しています。
*指定できるロギングパラメータは、最後の'ロギングパラメータの値'を参照


次に、/etc/xinetd.d/にProFTPD用の設定ファイルを作成します。
今回は、わかりやすく'proftpd'というファイルを作成しました。

/etc/xinetd.d/proftpd

# default: on
# description: The Proftpd FTP Server
service ftp
{
     disable             = no
     socket_type         =stream
     wait                =no
     user                =root
     server              =/usr/sbin/proftpd
     log_on_success      +=DURATION USERID
     log_on_failure      +=USERID
     only_from           =192.168.0.0/24
     nice                =10
}

*代表的なパラメータ
service         : サービス名,/etc/serviceと同一名を使用すると、基本設定を引き継げます。
disable         : サービスのon/off,no=サービスon、yes=サービスoff
socket_type     : 通常はstreamで、
wait            : ウェイト状態
user            : サービスの実行ユーザー
server          : サービス起動コマンドやスクリプト
server_args     : サービスの起動パラメータ
log_on_success  : ログイン成立時、ログファイルの記録する方法。
log_on_failure  : ログイン拒否(未成立)時に、ログファイルの記録する方法。
nice            : 実行時のプロセス優先度
only_from       : アクセス許可のルールを指定。IPやドメインでの指定が可
no_access       : アクセス拒否のルールを指定。IPやドメインでの指定が可
access_time     : <=10:00-18:00> と指定すれば、10時-18時のみアクセス可

*ロギングパラメータの値 (/etc/inetd.confと共通)
log_on_success
DURATION : リモートシステムがサービスを使用した時間の長さを記録します
EXIT     : サービスの終了ステータスか停止シグナルを記録します
PID      : リクエストを受信したサーバーのプロセスIDを記録します

log_on_failure
ATTEMPT  : 接続の失敗を記録します
RECORD   : サービスを開始できなかった場合にリモートシステムに関する情報を記録します。
           このオプションを使用できるのは、loginやfingerなど、特定のサービスだけです
log_on_success & log_on_failure
HOST     : リモートホストのIPアドレスを記録します
USERID   : RFC1413で定義されている方法を使用したリモートユーザーを記録します

パラメータ値、記入の注意点)
パラメータ値を複数指定する場合は、スペースで区切って記入。



Producted by Tomoya Sakurai