我正在尝试配置我的 proxmox 服务器的防火墙和重定向。目的是阻止一切,打开基本服务工作所需的端口,最后将某些端口重定向到虚拟机。
在这种特殊情况下,我使用 Proxmox 创建了一个 NAT 虚拟机并在其上安装了 Apache。从虚拟机我可以访问外部世界(例如,apt-get update 可以工作)。但是当我尝试从外部访问 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 规则集中配置一件事。您想要将端口转发到特定的 IP 和端口,但不使用任何 FORWARD 规则。将流量转发到虚拟机所需的规则应该是。
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
附注:不要使用大写变量名称。其次:编写 bash 脚本时始终引用变量。