xinetdは、リクエストに応じて設定されているデーモンを立てる優れたサービスです。
xinetdで主に提供可能なサービスとしては、telnet,ssh,ftp,popperそしてfinger等があります。
ここでは、xinetdを使って様々なプロトコルに応用可能な透過Proxyを構築します。
xinetd redirect(透過プロクシ)を利用すると、
外部のIPが発信したリクエストに対して、あたかもxinetdが動いているIPを持つ
サーバーがリクエストしたように見せかける事が可能です。(
踏み台利用)
応用例として私が実際に使っているのは,外部からxinetdサーバーを踏み台としたSMTP送信です。
私が外部の如何なる場所でインターネット接続をして居ようが、どんなOSを使っていようが、
自分のプロバイダのSMTPを利用することが可能なのです。
利用できるのはSMTPだけではありません。
POP,SMTP,WWWなど、いろいろと応用可能です。
+-------------------+
| | |
外部 |---(port:25)--->| xinetd server |--->(smtp.your.isp.co.jp:25)
| | |
+-------------------+
下記の内容で
/etc/xinetd.d/proxy-smtp ファイルを作成します。
service smtp
{
disable = no
socket_type = stream
wait = no
user = root
redirect = smtp.your.isp.co.jp 25
}
redirectの行には、代理で取得する最終目的地のホスト名(又はIPアドレス)
とポートを 明示します。
リクエストを受信したsmtp.your.isp.co.jpは、自社ユーザーからのリクエストだと
思いこみ、何の迷いもなく如何なるsmtp転送も許可してくれます。
smtpをredirectするのは良いのですが、既にxinetdサーバーと
同じIPアドレスで smtpサービスが稼働している場合、
ポート番号が重なってしまうため この手法でのリダイレクトは行えません。
そこで、xinetdで隠しportをredirect用にオープンすることにより、
この問題を解決できます。
また、ポートスキャンなどに引っかからない為に最初から
隠しPORTを利用するのも良いかもしれません。
+-----------------+
| | |
外部 |---(port:9999)--->| xinetd server |--->(smtp.your.isp.co.jp:25)
| | |
+-----------------+
下記の内容で
/etc/xinetd.d/proxy-smtp ファイルを作成します。
service proxy-smtp
{
disable = no
socket_type = stream
wait = no
user = root
redirect = smtp.your.isp.co.jp 25
}
service行に注意してください。 proxy-smtpは規定外のサービス名なので、
xinetdは噛んでくれません。
そのため、
/etc/servicesファイルにproxy-smtpサービスのエントリを追加します。
...
tproxy 8081/tcp
tproxy 8081/udp
jetdirect 9100/tcp
mandelspawn 9359/udp
proxy-smtp 9999/tcp
proxy-smtp 9999/udp
kamanda 10081/tcp
kamanda 10081/udp
amandaidx 10082/tcp
...