xinetd(アクセスコントロールのために)

inetdでもtcp_wrappersと組み合わせて使うことで、十分実用には耐えられると思います。
しかし、インストールルートが制限されるなどの弊害もあります(tcp_wrappersの制限)
なので、うちみたいに追加のソフト群をtcp_wrappersの管理外(/opt以下)においてしまう場合、
アクセスコントロールができなくなります。

tcp_wrappers(hosts.alow/hosts.deny)を使いながら変則的なインストールでも制御できるように、
細かい設定が可能で自由度が高いxinetdを導入してみましょう。

まぁ、最初に作った理由は「sshdをtcp_wrappersを経由して起動させるため」だったんですけどね。
さらに言うと、binaryにxinetdがついているんです。tcp_wrappersに対応していないけど・・・orz
「細かい設定が可能」
たとえば、
xinetd単体で(tcp_wrappersを使わなくても)アクセス制御ができる。
サービスを提供する時間を個別に設定できる。
1ファイル1サービス単位での管理ができるので管理が簡単。
などなど、inetdの機能を拡張した感じといえばいいのかな?
設定の簡単さで言えばinetdの場合が多いですが(行頭のコメント記号をはずすだけとか)、
コメント行だらけでわかりにくい点もあります。
まぁ、使いやすいほうで良いんじゃないかな?(本当か?

やること一覧
	・インストール設定ファイルの生成〜調整Manpage of XINETDスーパーサーバーの切り替え

関連ページ
	・tcp_wrappers(アクセスコントロールのために)



インストール

事前準備
標準でインストールされるxinetd.confを削除する。

	# rm /etc/xinetd.conf
tcp_wrappersの機能を取り込んでアクセス制限を行う場合、
事前にtcp_wrappersをインストールする必要がある。
インストール手順はtcp_wrappersを参照。


xinetd-2.3.14.tar.gzを探してくる。
xinetd
で、ユーザーのホームディレクトリにFFFTPで送る(wgetでも良いけど)
例のあれ
	$ tar xvfz xinetd-2.3.14.tar.gz
	$ cd xinetd-2.3.14
	$ ./configure --prefix=/usr --with-libwrap=/usr/lib/libwrap.a
		

option説明など
--with-libwrap=tcp_wrappersのライブラリを取り込む

$ make # make install
おまじない
	# cd /usr/sbin
	# strip -p itox xinetd
「--with-libwrap」
他のサイトでは=以下のpass指定はいらないように書いている所がありますが、本当のところは「わかりません」
まぁ、一応、./configure --helpには--with-libwrap=PATHと書いてあるのでパスは指定したほうがいいでしょう。

設定ファイルの生成〜調整

設定ファイルの生成

	# /usr/sbin/xconv.pl </etc/inetd.conf> /etc/xinetd.conf
xinetd.confに取り込まれているin.telnetdとin.ftpdを分離・編集して再配置(改行コードに注意)
	まぁ、ここはそのままでも実害はない。
	説明するの面倒だから、省略(を
xinetd.confの修正
	# vi /etc/xinetd.conf
		(変更)
		┃# 	log_type    = FILE /var/log/servicelog
		┃	log_type    = SYSLOG AUTH
		(追加)
		┃includedir /etc/xinetd.d
設定ファイル置き場の作成
	# mkdir /etc/xinetd.d
細かい設定ファイルの書き方は参考や他のサイトのほうが詳しい。
sshの設定例なら、opensshのところにある。
「/usr/sbin/xconv.pl </etc/inetd.conf> /etc/xinetd.conf」
別に「<」と「>」でくくっているわけじゃないよ?
このコマンドの意味は、
xconv.pl(perlスクリプト)に標準入力の代わりに/etc/inetd.conf(の内容)を使います。
で、その結果を標準出力(画面)の代わりに/etc/xinetd.confに出力します。
という意味です。
わかりやすく書くと・・・
( /usr/sbin/xconv.pl </etc/inetd.conf ) >/etc/xinetd.conf
となるのかな?
「<」は標準入力の変更を、「>」は標準出力の変更を行うコマンドです。

スーパーサーバーの切り替え

起動スクリプトの作成

	inetdの起動スクリプトを元に作成する。
		作成手順
		  1.inetdの文字列をxinetdに置き換える
		  2.checkportmap () { 〜 } までをコメントアウト(または、削除)
		  3.startとrestartの所にあるcheckportmapをコメントアウト(または、削除)
		   まぁ、上記手順で作った起動スクリプトも置いておくけど・・・保障はしないよ?
			xinetd起動スクリプト(xinetd.tar.gz) md5sum crc32:73B422FF
起動スクリプトを使える状態にする
	FFFTPで/etc/init.dにアップ(viで書いた人は mv xinetd /etc/init.d/ )
	# chmod 755 /etc/init.d/xinetd
注意
以下の作業では端末は閉じないこと。
最悪、玄箱が操作不能になります。
スタンドアロンのsshがあればそっちから操作できると思うけど・・・

inetdの停止
	# /etc/init.d/inetd stop
xinetdのテスト(起動|再起動|停止)
	# /etc/init.d/xinetd start
	# /etc/init.d/xinetd restart
	# /etc/init.d/xinetd stop
xinetdの起動
	# /etc/init.d/xinetd start
telnet/ftpの接続テストを行う。
接続確認をしたら起動設定の変更を行う。
inetdの自動起動を停止
	# mv /etc/rc.d/rc2.d/S20inetd /etc/rc.d/rc2.d/K20inetd
xinetdが自動起動するようにする
	# ln -s /etc/init.d/xinetd /etc/rc.d/rc2.d/S20xinetd
	# ln -s /etc/init.d/xinetd /etc/rc.d/rc0.d/K20xinetd
	# ln -s /etc/init.d/xinetd /etc/rc.d/rc6.d/K20xinetd
再起動(自動起動するかテスト)
	# shutdown -r now
	(再起動後)
	$ ps ax | grep inetd | grep -v "grep"
「スーパーサーバー」
昔は何でもかんでもinetd/xinetd経由で起動させることができた・・・
って言うか、そうすることが基本だったみたいだけど、
今はスタンドアロンで動作させるようのが基本になってきているみたい。
私がインストールしたものの中でinetd/xinetd経由で起動できるのがほとんど無かった。
っていうことだけ、だけどね。


戻るなら押せ!