我想使用 iptables 将我的 Debian Lenny 服务器设置为家庭网络的路由器,但目前尚未成功。下面是所需网络架构的图表
INTERNET - (eth0) Debian server + router (eth1) -- Netgear 5 port gigabit switch -- Clients
我有一个为内部网络运行的 DHCP 服务器和一个 DNS 服务器,但我在设置 iptables 时遇到了困难。我需要从外部打开端口 80 和 22(我可以稍后添加打开的其他端口)并从内部完全访问服务器。
任何帮助都将不胜感激,谢谢,RayQuang
答案1
这是我在与您的情况几乎相同的情况下使用并取得巨大成功的设置。我理解您的情况如下(如果我错了,请纠正我):
- LAN 上的客户端可以完全访问互联网。来自 LAN 客户端的传出连接被伪装成您的 ISP 为您的服务器/路由器提供的公共 IP 地址。
- LAN 上的客户端可以通过 LAN 连接接口 (eth1) 完全访问您的服务器。
- 所有传入的互联网流量(通过 eth0)都被阻止,但以下情况除外:(1)涉及预先存在的连接的流量,(2)绑定到 TCP 端口 22 或 80 的流量,或(3)ICMP ping 请求。
- TCP 端口 22 和 80 对互联网开放(通过 eth0)并由您的服务器处理。
- 您的服务器响应来自互联网的 ICMP ping 请求。
- 为了方便起见,我假设您的 LAN 网络地址范围是
10.10.10.0/24
。根据需要修改下面的脚本以使用您的实际地址。
首先,确保已打开 IP 转发。在 中/etc/sysctl.conf
,您应该看到以下内容:
net.ipv4.ip_forward=1
然后,按照以下脚本创建 netfilter 规则:
#!/bin/sh
IPT=/sbin/iptables
# Flush all chains, to start with a clean slate.
$IPT -F
$IPT -t nat -F
# Set filter Policies. By default, DROP everything.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# Set server INPUT rules.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth1 -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
# Set server OUTPUT rules.
$IPT -A OUTPUT -j ACCEPT
# Set router FORWARD rules.
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i eth1 -o eth0 -j ACCEPT
# Masquerade outgoing LAN traffic.
$IPT -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
这应该足以作为一个构建框架。
答案2
您需要一组如下规则:
$ sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forward SSH packets destined to port 22
$ sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp -m tcp --dport 22 -j allowed
# Forward HTTP packets destined to port 80
$ sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp -m tcp --dport 80 -j allowed
# NATing rules for SSH and HTTP
$ sudo iptables -A PREROUTING -d your_public_ip -p tcp -m tcp --dport 22 -j DNAT --to-destination your_private_ip:22
$ sudo iptables -A PREROUTING -d your_public_ip -p tcp -m tcp --dport 80 -j DNAT --to-destination your_private_ip:80
请注意,这些规则可能不是完整列表。但是,它将帮助您入门。另外,不要忘记启用 IP 转发!