我在我的 Debian 机器上使用以下 iptables 脚本:
#!/bin/sh
IPT="/sbin/iptables"
# Flush old rules, old custom tables
$IPT --flush
$IPT --delete-chain
# Set default policies for all three default chains
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
# Enable free use of loopback interfaces
$IPT -A INPUT -i lo -j ACCEPT
# All TCP sessions should begin with SYN
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP
# Accept inbound TCP packets
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT
# Accept inbound ICMP messages
$IPT -A INPUT -p ICMP --icmp-type 8 -s 0.0.0.0/0 -j ACCEPT
#VM Windows
$IPT -A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
$IPT -A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
$IPT -A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
$IPT -A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
$IPT -A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
$IPT -A FORWARD -i virbr0 -o virbr0 -j ACCEPT
$IPT -A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
$IPT -A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
$IPT -I FORWARD -o virbr0 -d 192.168.122.178 -j ACCEPT
$IPT -I FORWARD -o virbr0 -d 192.168.122.160 -j ACCEPT
$IPT -I FORWARD -o virbr0 -d 192.168.122.105 -j ACCEPT
$IPT -t nat -I PREROUTING -p tcp --dport 25300 -j DNAT --to 192.168.122.178:25300
$IPT -t nat -I PREROUTING -p tcp --dport 2222 -j DNAT --to 192.168.122.160:22
$IPT -t nat -I PREROUTING -p tcp --dport 26300 -j DNAT --to 192.168.122.105:26300
$IPT -t nat -A POSTROUTING -o virbr0 -j MASQUERADE
$IPT -A FORWARD -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i virbr0 -o eth0 -j ACCEPT
$IPT -A FORWARD -i virbr0 -o lo -j ACCEPT
我有 3 台虚拟机,使用 kvm 虚拟化。不知怎么的,我搞砸了我的 iptables 脚本。每次我尝试连接到端口 80/443 上的任何内容时,流量都会重定向到本地计算机。我知道这一点,是因为其中一台虚拟机是 Windows Server,而我当时正在运行 IIS。我尝试访问的每个网站都会重定向到本地运行的 IIS。奇怪的是,它似乎只重定向端口 80/443 上的传出流量。
答案1
编辑:如果您使用 libvirt,您应该首先使用那些管理机制,而不是这个答案。
您应该尝试几种方法来使您的 NAT 规则更加严格。
我的第一个猜测是你的 POSTROUTING 规则应该只是你的内部地址。
$IPT -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -o virbr0 -j MASQUERADE
此外,您应该进一步限制您的 PREROUTING 规则,以免反弹您的内部流量,例如
$IPT -t nat -I PREROUTING ! -s 192.168.122.0/24 -i virbr0 -p tcp --dport 25300 -j DNAT --to 192.168.122.178:25300