使用linux服务器作为networking的路由器

我想使用iptables将我的Debian Lenny服务器设置为我的家庭networking的路由器,但到目前为止一直没有成功。 以下是所需的networking架构图

INTERNET - (eth0) Debian server + router (eth1) -- Netgear 5 port gigabit switch -- Clients 

我有一个DHCP服务器和DNS服务器运行的内部networking,但我有困难的设置iptables。 我需要从外部打开端口80和22(我可以添加打开其他人),并从内部完全访问服务器。

任何帮助将非常感激,谢谢,RayQuang

这是一个我用过的设置,与你的设置几乎完全相同。 我理解你的情况如下(请纠正我,如果我错了):

  • 局域网上的客户端可以完全访问互联网。 来自LAN客户端的传出连接被伪装成由ISP提供给您的服务器/路由器的公共IP地址。
  • 局域网上的客户端可通过其连接到局域网的接口(eth1)完全访问您的服务器。
  • 除(1)涉及已有连接的stream量,(2)为TCP端口22或80绑定的stream量,或(3)ICMP ping请求之外,所有传入的Internetstream量(通过eth0)均被阻止。
  • TCP端口22和80对互联网开放(通过eth0)并由您的服务器处理。
  • 您的服务器响应来自Internet的ICMP ping请求。
  • 为了方便起见,我将假定您的LANnetworking地址范围是10.10.10.0/24 。 根据需要修改下面的脚本以使用您的实际地址。

首先,确保IP转发已打开。 在/etc/sysctl.conf ,你应该有这样的:

 net.ipv4.ip_forward=1 

然后,按照以下脚本创build你的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 

这应该足以构build一个框架。

你需要一组规则如下:

 $ 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转发!