我有 rackspace 帐户并希望进行以下设置:
防火墙/网关
eth0-公共 IP(56.XXX)
eth1-私有IP(10.XXX)
Ubuntu 10.10。接受来自互联网的连接并将端口 80 路由到节点 1(10.xxx)
节点1
eth0-已禁用公共 IP(56.XXX)
eth1-私有IP(10.XXX)
Ubuntu 10.10。此服务器是 Web 服务器。
问题:
我反复搜索如何实现这一点,但不确定需要采取哪些步骤。Rackspace 将这些 IP 提供给我,我无法控制(此时)这些节点的 IP 是什么,但它们在 eth0 上都有一个公共 IP,在 eth1 上都有一个私有 IP。
如何成功转发来自防火墙/网关到节点1?
这是我的 iptables 设置
# Generated by iptables-save v1.4.4 on Fri Jun 17 18:09:39 2011
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [1:452]
:POSTROUTING ACCEPT [1:452]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.182.33.191:80
COMMIT
# Completed on Fri Jun 17 18:09:39 2011
# Generated by iptables-save v1.4.4 on Fri Jun 17 18:09:39 2011
*filter
:INPUT ACCEPT [154:11452]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [81:9672]
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Fri Jun 17 18:09:39 2011
答案1
您似乎在路由器的 POSTROUTING 表中缺少一个伪装!
这是我在华硕 EEEPC 上作为有线和无线网络路由器的转发规则的一个非常简化的版本。我不能保证这会起作用,因为我在这里在线编辑了它,但我希望它能有所帮助。一套完美的规则是一个非常复杂和独特的东西!我的 iptables 包含大约 25000 条可变规则,主要用于在高峰期阻止来自不受欢迎国家/地区的 25 端口垃圾邮件。
您应该添加更多规则,以将流量限制在必要的范围内。还要阻止传出流量,例如广播、dhcp、mDNS 等。端口 5353 上的 mDNS 是一个大问题。在 ISP 的内部网络上运行 tcpdump 会让您想知道实际流量究竟如何有空间移动!
我添加了一条规则来阻止令人恼火的 ssh 暴力攻击...:-)
为你的家庭 IP 地址添加一条规则,以防你看到你所在分支时覆盖所有其他地址,但在进行更改时,最好尝试定时测试并在 5 秒后恢复到工作配置,例如:
# ./testfirewall.sh; sleep 10;./firewall.sh
哦,路由器:
#!/bin/sh
IPT=/usr/sbin/iptables;
EXTIF=eth0;
INTIF=eth1;
EXTADDR=56.X.X.X;
NODEADDR=10.182.33.191;
HI_PORTS=1024:65535
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD DROP
# useful limit ssh attempts
$IPT -N SSH_Brute_Force
$IPT -A SSH_Brute_Force -m recent ! --rcheck --seconds 60 --hitcount 2 --rttl --name SSH -j RETURN
$IPT -A SSH_Brute_Force -j LOG --log-prefix "SSH Scan Reject: "
$IPT -A SSH_Brute_Force -j DROP
# dnat
$IPT -t nat -A PREROUTING -i $EXTIF -p tcp -d $EXTADDR --sport $HI_PORTS --dport 80 -j DNAT --to-destination $NODEADDR:80
# forward only established connections
$IPT -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# antispoof
$IPT -t filter -A FORWARD -i $EXTIF -s $EXTADDR -j DROP
$IPT -t filter -A FORWARD -i $EXTIF -s 127.0.0.1 -j DROP
# forward new connections to node1 on port 80
$IPT -t filter -A FORWARD -i $EXTIF -o $INTIF -p tcp -d $NODEADDR -m state --state NEW --sport $HI_PORTS --dport 80 -j ACCEPT
# forward all outgoing connections from node1 (need more rules to prevent broadcasts/leakage/bogons/igmp/some icmps etc in and out)
$IPT -t filter -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
# this appeared to be missing
$IPT -t nat -A POSTROUTING -o $EXTIF -s $NODEADDR -d 0/0 -j MASQUERADE
$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --dport 22 -m recent --set --name SSH -j SSH_Brute_Force
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --sport $HI_PORTS --dport 22 -j ACCEPT
#need to add this if you are sending mail
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m tcp --dport 113 -j REJECT --reject-with tcp-reset
在节点上,输入应该已经干净了:
#!/bin/sh
IPT=/usr/sbin/iptables;
EXTIF=eth0;
INTIF=eth1;
EXTADDR=56.X.X.X;
NODEADDR=10.182.33.191;
HI_PORTS=1024:65535
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD DROP
# useful limit ssh attempts
$IPT -N SSH_Brute_Force
$IPT -A SSH_Brute_Force -m recent ! --rcheck --seconds 60 --hitcount 2 --rttl --name SSH -j RETURN
$IPT -A SSH_Brute_Force -j LOG --log-prefix "SSH Scan Reject: "
$IPT -A SSH_Brute_Force -j DROP
$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --sport $HI_PORTS --dport 80 -j ACCEPT
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --dport 22 -m recent --set --name SSH -j SSH_Brute_Force
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --sport $HI_PORTS --dport 22 -j ACCEPT
结尾