ポート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
これを実現するために私が見つけた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
私はこれを少し異なる方法で処理しました。 (上記のように)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