我正在尝试制作一个 iptables 网关。我从托管公司订购了 3 台专用服务器,全部都配有双网卡。一台服务器已获得所有 IP 地址,并直接连接到互联网,另一台网卡连接到交换机,其他服务器也都连接到该交换机。我想设置 iptables,例如,当 IP 地址 50.0.2.4 进入我的网关服务器时,它会使用第二个网卡将所有流量转发到私有 IP 地址。这样,第二个网卡就可以做任何它需要做的事情,也可以做出响应。我还希望设置它,如果任何其他服务器需要通过互联网下载任何东西,它都可以这样做,并使用用于其传入流量的相同 IP 地址。
最后,我希望能够设置 DNS 和其他我可能没有考虑过的必要的网络内容。
答案1
我使用防火墙生成器为您组合了一个带有 NAT 的 iptables 模板。
网关机
- 外部接口:eth0(IP:50.0.2.4)
内部接口:eth1(IP:192.168.1.1
服务转发至 192.168.1.10:imap、imaps、pop、pops、smtp、smtps
- 服务转发至 192.168.1.20:http、https
内机1
- 接口:eth0(IP:192.168.1.10)
内机2
- 接口:eth0(IP:192.168.1.20)
IPTABLES="/sbin/iptables" # ================= 表“过滤器”,自动规则 # 接受已建立的会话 $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -m 状态 --状态 ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # ================= 表“nat”,规则集 NAT # # 规则 0(NAT) # echo“规则 0(NAT)” # $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -m 多端口 -d 50.0.2.4 --dports 143,993,110,995,25,465 -j DNAT --to-destination 192.168.1.10 # # 规则 1(NAT) # echo "规则 1 (NAT)" # $IPTABLES -t nat -A PREROUTING -p tcp -m tcp -m multiport -d 50.0.2.4 --dports 80,443 -j DNAT --to-destination 192.168.1.20 # # 规则 2(NAT) # echo "规则 2 (NAT)" # $IPTABLES -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j SNAT --to-source 50.0.2.4 # ================= 表“过滤器”,规则集策略 # # 规则 0(eth0) # echo "规则 0 (eth0)" # # 反欺骗规则 $IPTABLES -N In_RULE_0 $IPTABLES -A INPUT -i eth0 -s 50.0.2.4 -j In_RULE_0 $IPTABLES -A 输入 -i eth0 -s 192.168.1.1 -j In_RULE_0 $IPTABLES -A 输入 -i eth0 -s 192.168.1.0/24 -j In_RULE_0 $IPTABLES -A FORWARD -i eth0 -s 50.0.2.4 -j In_RULE_0 $IPTABLES -A FORWARD -i eth0 -s 192.168.1.1 -j In_RULE_0 $IPTABLES -A FORWARD -i eth0 -s 192.168.1.0/24 -j In_RULE_0 $IPTABLES -A In_RULE_0 -j LOG --log-level info --log-prefix “规则 0 -- 拒绝” $IPTABLES -A In_RULE_0 -j DROP # # 规则 1 (lo) # echo "规则 1 (lo)" # $IPTABLES -A INPUT -i lo -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -o lo -m state --state NEW -j 接受 # # 规则 2(全局) # echo "规则 2 (全局)" # # 允许 SSH 访问防火墙 $IPTABLES -N Cid4216X2697.0 $IPTABLES -A OUTPUT -p tcp -m tcp -m 多端口 --dports 80,443,143,993,110,995,25,465,22 -m 状态 --状态 NEW -j Cid4216X2697.0 $IPTABLES -A Cid4216X2697.0 -d 50.0.2.4 -j 接受 $IPTABLES -A Cid4216X2697.0 -d 192.168.1.1 -j 接受 $IPTABLES -A 输入 -p tcp -m tcp -m 多端口 --dports 80,443,143,993,110,995,25,465,22 -m 状态 --状态新 -j 接受 # # 规则 3(全局) # echo "规则 3 (全局)" # # 防火墙可以连接到任何东西 $IPTABLES -A 输入 -s 50.0.2.4 -m 状态 --状态新 -j 接受 $IPTABLES -A 输入 -s 192.168.1.1 -m 状态 --状态新 -j 接受 $IPTABLES -A OUTPUT -m state --state NEW -j 接受 # # 规则 4(全局) # echo "规则 4 (全局)" # # 所有其他尝试连接到 # 防火墙被拒绝并记录 $IPTABLES -N RULE_4 $IPTABLES -A OUTPUT -d 50.0.2.4 -j RULE_4 $IPTABLES -A OUTPUT -d 192.168.1.1 -j RULE_4 $IPTABLES -A 输入 -j RULE_4 $IPTABLES -A RULE_4 -j LOG --log-level info --log-prefix “规则 4 -- DENY” $IPTABLES -A RULE_4 -j DROP # # 规则 5(全局) # echo "规则 5 (全局)" # $IPTABLES -A 输入 -s 192.168.1.0/24 -m 状态 --状态新 -j 接受 $IPTABLES -A OUTPUT -s 192.168.1.0/24 -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -s 192.168.1.0/24 -m state --state NEW -j ACCEPT # # 规则 6(全局) # echo "规则 6 (全局)" # $IPTABLES -N RULE_6 $IPTABLES -A 输出 -j RULE_6 $IPTABLES -A 输入 -j RULE_6 $IPTABLES -A FORWARD -j RULE_6 $IPTABLES -A RULE_6 -j LOG --log-level info --log-prefix “规则 6 -- DENY” $IPTABLES -A RULE_6 -j DROP echo 1 > /proc/sys/net/ipv4/ip_forward