shellスクリプト転送80ポートパケット

2250 ワード

Node.jsベースのWEBアプリケーションを開発するのは便利ですが、サービスポートの問題は卵が痛く、Linuxカーネルは一般ユーザーが1024より大きいポート番号しか使用できないことを規定しているため、一般ユーザーを使ってNode.jsサービスを実行すると80ポートを傍受できません
 
注意:ROOTユーザーを使用してNode.jsサービスを実行する手間を省くことはできません.これにより、予想できないセキュリティの問題が発生します.
しかし、HTTPのデフォルトポートとして80ポートを使用する習慣はMS時代から続いていますが、どうすればいいのでしょうか.ネット上ではNginXでリバースエージェントをするなどと滔々としていますが、実はそんなに大げさに言う必要はないと思います.ROOTユーザーを使って普通のポートと80ポートのデータ転送をすればいいだけです.iptables文を使うと次のようになります.

     iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port       
   

以上の文を使用するには、次の点に注意してください.
1.この文は一時的なもので、サーバが再起動すると無効になります.
2.このような文を実行した後、80ポートバインドを他のポートに転送したい場合は、まず使用します.
 
    
#
iptables --line-numbers --list PREROUTING -t nat

 

# , , , “ ”。
iptables -t nat -D PREROUTING


 
3.ArchLinuxを使用する子供靴たちは、カーネルがモジュール(iptablesかnatか?)に欠けているため、上記の文でバインド転送ポートを設定できない可能性があるため、カーネルまたはモジュールを再コンパイルする必要があることに注意してください.
以上の卵痛の問題で、自動削除記録と自動バインドを実現するためのスクリプトを書きました.
 

     #!/bin/bash 
    
# www.jbxue.com
if [ $# = 1 ]; then
    if [ $1 -ge 0 ]; then
        if [ $1 -le 65535 ]; then

 

            #Delete all old bindings
            for line_num in $(iptables --line-numbers --list PREROUTING -t nat|grep dpt:http|awk '{print $1}')
            do
                LINES="$line_num $LINES"
            done
            for line in $LINES
            do
                iptables -t nat -D PREROUTING $line
            done
            unset LINES

            #Make a new binding
            iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port $1
            echo "Port 80 is bound with $1 !"
            exit 1
        fi
    fi
fi
echo "Please input ONE PORT NUMBER!"


上記のコードをbind 80などのファイルとして保存し、実行権限を追加するだけで、次のコマンドを使用して、前のレコードを消去し、新しいポートをバインド転送します.
 
    
sudo bind80