내 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 규칙 세트에서 한 가지를 구성하지 않았습니다. 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
참고 사항: 대문자 변수 이름을 사용하지 마십시오. 둘째: bash 스크립트를 작성할 때 항상 변수를 인용하십시오.