web-dev-qa-db-ja.com

iptablesは80を8080にリダイレクトしますが、パブリック8080アクセスをブロックします

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

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

アプリケーションサーバーのリスナーを変更したくない(ポート80を使用する場合、これにはアプリサーバーを実行しているユーザーの昇格されたアクセス許可が必要なようです)。ポート8080のリスナーは、パケットの送信元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

21
lazidar

これを実現するために私が見つけた1つの方法は、マングルテーブルの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
21
Vince

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

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

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
4
dkorz