24

iptablesポート 80 のリクエストをポート 8080 のアプリケーション サーバー (GlassFish) にリダイレクトするいくつかのルールがあります (SSL ポートも同様ですが、簡単にするために省略しています)。

私たちが持っているものは正常に動作しますが (個人的には問題はありません)、ポート 8080 は、誰かが URL で指定したい場合、外部に対しても開かれています。ポート 8080 を外界からのアクセスから遮断し、80 のみを開放することが義務付けられています。

アプリケーション サーバーのリスナーを変更したくありません (ポート 80 を使用する場合、アプリ サーバーを実行しているユーザーの権限を昇格する必要があるようです)。ポート 8080 のリスナーは、パケットの送信元 IP をアプリケーションは、アプリケーションへのリクエストを監査します (つまり、送信元 IP アドレスをローカル IP アドレスに変更することはできません)。

現在のiptables構成は以下です。ポート80からリダイレクトされたパケットのソースIPを保持しながら、パブリックインターネットから8080をブロックする方法があるかどうかは誰にもわかりませんか?

よろしくお願いします。


    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP

    # allow establishment of connections initialised by my outgoing packets
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    # accept anything on localhost
    iptables -A INPUT -i lo -j ACCEPT

    ################################################################
    #individual ports tcp 
    ################################################################
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    #drop everything else
    iptables -A INPUT -j DROP

    ################################################################
    #Redirection Rules
    ################################################################
    # redirection rules (allowing forwarding from localhost)
    iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

    # redirection http
    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

4

3 に答える 3

23

これを達成するために私が見つけた 1 つの方法は、mangle テーブルの PREROUTING チェーンで MARK ターゲットを使用することです。

ブロックするパケットにタグを付けるルールを追加します。

iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1

次に、ポート 8080 を許可する前に、これを DROP マーク付きパケットに追加します。

iptables -A INPUT -m mark --mark 1 -j DROP
于 2012-07-03T19:32:41.930 に答える
4

これを少し違った方法で処理しました。上記のように 443 を 3000 に転送しましたが、3000 も 443 に転送しました。次に、3000 のトラフィックを許可しますが、443 のトラフィックをブロックします。443 のトラフィックをフィルタリングする場合、最初はポート 3000 からのみ送信する必要があります。

私は ufw を使用しているので、そのツールを使用してフィルター ルールを入力しました。に nat ルールを追加しました/etc/ufw/before.rules

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3000

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 443
于 2012-10-12T02:38:37.267 に答える