tcpserverとは?
TCPWrapperと同じく、アクセス制御を行なうプログラムです。但し、tcpserverはTCPWrapper
の機能をシンプルかつセキュアにしたものとなり、Dos(Denial of Service)攻撃に対しても十分
に対処できるように設計されています。セキュリティを高める意味でもtcpserverを利用すること
にしました。
| <tcpserverの特徴>
●サービス毎に同時接続数を設定できる。(DoS攻撃に強い)
●アクセス制御用のデータベースがハッシュ化されているため、複雑な制御でも
高速に処理できる。
●制御ルール(データベース)の変更がサービスの再起動なしで反映できる。
(inetdの場合は、"killall -HUP inetd"による再起動が必要。) | |
▲tcpserver設定手順へ
tcpserverのインストール
まず、最新版のtcpserverを入手してインストールします。
また、アクセス制御用データベースのcdbも同時にインストールします。
・wgetコマンドにより"ucspi-tcp"と"cdb"のダウンロードおよびインストール
|
[root#] wget https://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz ←ucspi-tcpのダウンロード
・・・・
[root#] tar zxvf ucspi-tcp-0.88.tar.gz ←アーカイブを展開
・・・・
[root#] cd ucspi-tcp-0.88 ←展開先へ移動
・・・・ [root#] make ←コンパイル
・・・・ [root#] make setup check ←ucspi-tcpのインストール
・・・・
[root#] wget https://cr.yp.to/cdb/cdb-0.75.tar.gz ←cdbのダウンロード
・・・・ [root#] tar zxvf cdb-0.75.tar.gz←アーカイブを展開 ・・・・ [root#] cd cdb-0.75 ←展開先へ移動 ・・・・ [root#] make ←コンパイル ・・・・ [root#] make setup check ←cdbのインストール
|
以上でダウンロードおよびインストールは完了です。
▲tcpserver設定手順へ
アクセス制御用のデータベース作成
アクセス制御用のルールファイルを作成します。
・ルールファイルおよびアクセス制御データベース用ディレクトリを作成 | [root#] mkdir /etc/tcpserver ←tcpserverのデータベース用ディレクトリを作成 |
・viエディタでルールファイルを作成 (以下はtelnet用ルールを作成) | [root#] vi /etc/tcpserver/telnet.rules ←telnet用のルールファイルを新規作成 |
| <telnet.rulesファイルの内容>
192.168.1.101:allow <-Address(192.168.0.101)は許可
:deny <-上記で許可したホスト以外は全て禁止(接続拒否) | |
※許可ホストを設定して、許可ホスト以外を拒否しています。
環境に合わせてルールファイルを作成します。
・作成したルールファイルより制御用データベースを作成 | [root#] tcprules /etc/tcpserver/telnet.rules.cdb /tmp/telnet.tmp < /etc/tcpserver/telnet.rules ↑上記コマンドでルールファイル(telent.rules)より制御用データベースが作成されます。
※"/tmp/telnet.tmp"ファイルはデータベースを更新するための一時ファイル |
上記コマンドにより、telnet.rules.cdbというファイル名で制御用データベースが作成されます。
※データベースを更新することによりデータベースが更新されます。
(別途、tcpserverを再起動する必要はありません。)
以上でアクセス制御用のデータベース作成は完了です。
▲tcpserver設定手順へ
tcpserver用の起動スクリプトを作成
tcpserver用の起動用スクリプトファイルを作成します。
※ここは、若干戸惑う部分かもしれません。
(起動スクリプトについては、若干書き方を覚える必要があります。)
・tcpserverの起動スクリプトを作成(例)
| </etc/rc.d/init.d/tcpserverファイルより抜粋>
#!/bin/bash
# source function library
. /etc/rc.d/init.d/functions
RETVAL=0
# See how we were called.
case "$1" in
start)
echo -n "Starting tcpserver daemon: "
daemon /etc/rc.d/init.d/tcpserver.sh ←tcpserverの起動ファイルを指定
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/tcpserver
;;
stop)
echo -n "Stopping tcpserver daemon: "
killproc tcpserver
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/tcpserver
;;
status)
status tcpserver
RETVAL=$?
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo $"Usage: tcpserver {start|stop|status|restart}"
exit 1
esac
exit $RETVAL | |
※環境に合わせて設定してください。
・起動ファイルの作成(例:サービス@telnet)
|
</etc/rc.d/init.d/tcpserver.shファイルより抜粋>
#!/bin/bash
/usr/local/bin/tcpserver -c 3 -u 0 -g 0 -x /etc/tcpserver/telnet.rules.cdb telnet /usr/sbin/in.telnetd &
|
tcpserverのコマンドオプション
オプション |
意味 |
-c |
最大同時接続数を指定 |
-u |
実行コマンドのUID |
-g |
実行コマンドのGID |
-x |
アクセス制御用データの指定 |
・起動スクリプトと起動ファイルのパーミッションを変更
| [root#] chmod 755 /etc/rc.d/init.d/tcpserver ←起動スクリプトのパーミッション変更
[root#] chmod 755 /etc/rc.d/init.d/tcpserver.sh ←起動ファイルのパーミッション変更 |
▲tcpserver設定手順へ
tcpserverの起動
まずは、inetd(TcpWrapper)で起動しているサービスを停止します。
・/etc/inetd.confファイルで該当サービスをコメントアウトします。
| </etc/inetd.confファイルより抜粋>
・・・
#ftp stream tcp nowait root /usr/sbin/tcpd in.proftpd ←ftp(proftpd)の起動
#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd ←telnetの起動
・・・
|
※先頭に#(コメント)を追加
・inetdの再起動
| [root#] killall -HUP inetd ←inetdの再起動 |
次に、tcpserverが起動スクリプトから自動的に起動するように設定します。
| [root#] chkconfig --add tcpserver ←tcpserverを起動時自動的に実行できるよう設定 |
最後に起動スクリプトを実行してtcpserverを起動します。
| [root#] /etc/rc.d/init.d/tcpserver start ←tcpserverを起動 |
以上の操作でtcpserverの設定は完了です。inetdとTCPWrapperを組み合わせるよりセキュアな
アクセス制限を行なうことが可能となります。
TCPWrapperで設定するより複雑に感じますが、セキュリティが高いほうがよいですよね。
ということで、telnetとproftpをtcpserverによるアクセス制御に変更することにしました。
▲tcpserver設定手順へ
Copyright(c) 2005, All Rights Reserved.