好吧,这是一个奇怪的networking设置,但我试图从一个networking到另一个互联网。
headless server ((((( wireless router (other network)-----internet | | router (my network) ))))) wireless computers | | | wired computers
所以,基本上,我有一个无头的Linux机器,我想要设置为我的networking(eth0)和其他networking(wlan0)之间的路由器。 我应该能够configuration一切,但我不是非常有经验的iptables。
我之前在两个有线networking之间做了同样的事情,但我从来没有写下规则。
实际上,你并不需要iptables来进行基本路由 – iptables可以帮助你进行过滤和NAT(以及其他的东西)。
您可以使用以下命令激活包转发
sysctl -w net.ipv4.conf.all.forwarding=1
将net.ipv4.conf.all.forwarding=1添加到/etc/sysctl.conf中以进行设置。
如果你在服务器上过滤(你可以用iptables -nvL来检查 – 如果FORWARD链的策略ACCEPT没有过滤),你需要添加规则来允许在networking之间转发数据包:
iptables -I FORWARD -i eth0 -o wlan0 -s wi.red.net.work/24 -d wire.less.net.work/24 -j ACCEPT iptables -I FORWARD -i wlan0 -o eth0 -s wire.less.net.work/24 -d wi.red.net.work/24 -j ACCEPT
如果你没有过滤,但想(你也应该,顺便说一下 – 参见@红Tux的评论,这是一个很好的做法,默认过滤,只允许最小值)添加以前的规则加上这一个:
iptables -P FORWARD DROP
这改变了策略,所有不符合任何规则的数据包都被丢弃。
另外,如果你想要真正的安全性,你也应该过滤INPUT链。 这个链处理来自你的路由器的请求,其目的地IP与它自己的一个匹配 – 也就是传入的连接(例如SSH)。 明智的违约是:
iptables -I INPUT -i eth0 -s allowed.admin.ip.here -p tcp --dport 22 -j ACCEPT iptables -I INPUT -i lo -j ACCEPT iptables -P INPUT DROP # make sure you've put your IP on the first rule before running this # or you'll lock you out of the server
这允许SSH只从有线networking中的devise主机(注意到警告),允许回送接口上的所有通信(由一些软件所需)并丢弃所有其余的通信。
正如你所看到的,你只能通过使用-p tcp|udp --dport N来允许一些端口。 您应该考虑在FORWARD链上进行此操作以提高安全性。