1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

xinetdでポートフォワーディングしてnginxで受け取る

Last updated at Posted at 2015-02-03

環境 CentOS 6.6

xinetd ... inetdの代替として開発された、インターネットスーパーサーバー。インターネットスーパーサーバーとは、特定のインターネット接続要求を待ち受け、アクセスに応じて各サービスを起動するもの。例えばftpへのアクセスがあった時点でftpサーバーを立ち上げるといったことができる。

nginx ... よく使われている httpd サーバー。

今回は、「1024以下のポートはroot権限がなければリッスンできない」というlinuxのセキュリティ的な仕様を回避するため、xinetdを使って 80番ポート -> 8000番ポート(nginx待ち受け)へのポートフォワーディングを行う。

  1. xinetd をインストール。
    (はじめにすでにinetdやxinetdが入ってないか、動いてないか確認すること。ps aux | grep inetd で何かプロセスが動いていたら怪しい。)
    yum -y install xinetd

  2. xinetd を設定。
    xinetdのサービス別コンフィグファイルは、デフォルトだと /etc/xinetd.d/* に保存される。この設定は /etc/xinetd.conf で変更できる。

vi /etc/xinetd.d/nginx

以下のコンフィグを今回書き込んだ。
詳しいディレクティブの説明は http://linuxjm.sourceforge.jp/html/xinetd/man5/xinetd.conf.5.html を参照。

service nginx
{
  disable = no #スイッチ。yesかnoで指定。
  type = UNLISTED #ソフトが/etc/servicesとして登録されていない場合はこれをUNLISTEDとして指定しなければ動かない。
  socket_type = stream
  protocol = tcp # tcpかudp。
  wait = no #実行まで数秒待つ という設定もできる。
  user = root #サーバプロセスのuidを指定する。
  port = 80 #xinetdで受け付けるPort。
  redirect = 127.0.0.1 8000 #フォワード先のIPとPort。スペースで区切る。
  log_type = FILE /var/log/xinetdlog #ログファイル。
}

これで、Port 8000のnginx側へPort 80のアクセスが渡るようになった。
ただし、この方法だけではxinetdがX-Forwarded-Forを出力しない関係で、アクセス元の実体IPが隠蔽されすべて127.0.0.1扱いとなってしまう。
これを解決する手段は現在調査中だが、今回は開発サーバーの話なので特に問題にはならなかった。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?