このページはtcpserverの設定方法についてご紹介しています。tcpserverとは各サービスのアクセス制限を行なうことができます。DoS攻撃にも対策が施されており、より安全にアクセス制限を行なうことが可能です。

vinelinuxで自宅サーバー公開ロゴ
サイトマップ

>>Linuxで自宅サーバー公開(TOP) >>tcpserverの設定


tcpserverの設定


tcpserverの設定手順



※見たい項目をクリックすると説明にジャンプします。


 
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.