我想使用iptables将我的Debian Lenny服务器设置为我的家庭networking的路由器,但到目前为止一直没有成功。 以下是所需的networking架构图
INTERNET - (eth0) Debian server + router (eth1) -- Netgear 5 port gigabit switch -- Clients
我有一个DHCP服务器和DNS服务器运行的内部networking,但我有困难的设置iptables。 我需要从外部打开端口80和22(我可以添加打开其他人),并从内部完全访问服务器。
任何帮助将非常感激,谢谢,RayQuang
这是一个我用过的设置,与你的设置几乎完全相同。 我理解你的情况如下(请纠正我,如果我错了):
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转发!