iptablesルールセットが原因でサーバーが応答を停止する

iptablesルールセットが原因でサーバーが応答を停止する

私はproxmoxサーバーのファイアウォールとリダイレクトを設定しようとしています。目標は、すべてをブロックし、基本サービスが動作するために必要なポートを開き、最後にいくつかのポートを仮想マシンにリダイレクトすることです。

この特別なケースでは、Proxmoxを使用してNAT仮想マシンを作成し、ここにApacheをインストールしました。仮想マシンから外部の世界にアクセスできます(たとえば、apt-getアップデートが機能します)。しかし、外部からApacheにアクセスしようとすると(例:http://my.server.ip「ブラウザから)トラフィックをリダイレクトしようとしている仮想マシンが応答しません。

私が達成したいリダイレクトは次のとおりです。 - パブリックIP、ポート80 - > VM、ポート80 - パブリックIP、ポート8080 - > VM、ポート8080 - パブリックIP、ポート443 - > VM、ポート443 - パブリックIP、ポート2201 - >仮想マシン、ポート22

以下は、ルールセットとして使用するスクリプトです。

#!/bin/bash

PUBLIC_IP=1.2.3.4
VM_SITEWEB=10.0.2.15

# Enable routing
sysctl net.ipv4.ip_forward=1


# Empty any existing rule
iptables -F
iptables -t nat -F

# Remove personnal chains
iptables -X
iptables -t nat -X

# Enable ESTABLISHED and RELATED communications, accepts answers
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Enable ping
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -m limit --limit 5/s -j ACCEPT

# Enable remote acccess through SSH
iptables -A INPUT -p TCP --dport ssh -j ACCEPT
iptables -A INPUT -p TCP --dport http -j ACCEPT

# ACCEPT DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

# Web output (HTTP & HTTPS)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Open ports for proxmox input
iptables -A INPUT -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
iptables -A INPUT -p tcp --dport 5999 -j ACCEPT
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT

# Allow loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


# Pre-route SSH from 2201 to VM
iptables -A INPUT -p tcp --dport 2201 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 2201 -j DNAT --to $VM_SITEWEB:22

# Route HTTP(S) to website VM
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to $VM_SITEWEB:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to $VM_SITEWEB:8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to $VM_SITEWEB:443


# Default policy = DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A FORWARD -j DROP
iptables -A INPUT -j DROP    
iptables -A OUTPUT -j DROP

誰もが私のスクリプトにどのような問題があるかを指摘できますか?

ベストアンサー1

iptablesルールセットで1つを構成していません。 FORWARDルールを使用せずにポートを特定のIPおよびポートに転送しようとしています。仮想マシンにトラフィックを転送するために必要なルールは次のとおりです。

iptables -A FORWARD -p tcp -s "$PUBLIC_IP" --sport 80 -d "$VM_SITEWEB" –dport 80 -j ACCEPT
iptables -A PREROUTING -t nat -p tcp -s "$PUBLIC_IP" --sport 80 –dport 80 -j DNAT –to "$VM_SITEWEB":80

注意:大文字の変数名を使用しないでください。 2番目:bashスクリプトを作成するときは、常に変数を引用してください。

おすすめ記事