Linux:使用iptables在两个网络之间路由流量

好的,所以这是一个奇怪的网络设置,但我试图让互联网从一个网络到另一个网络.
headless server ((((( wireless router (other network)-----internet
       |
       |
router (my network) ))))) wireless computers
   |   |   |
wired computers

所以,基本上,我有一个无头的Linux盒子,我想设置为我的网络(eth0)和其他网络(wlan0)之间的路由器.我应该能够配置其他所有内容,但我对iptables不是很有经验.

我之前在两个有线网络之间做过同样的事情,但我从来没有记下规则.

解决方法

实际上,你并不需要基本路由的iptables – iptables可以帮助你过滤和NAT(以及其他东西).

您可以激活数据包转发:

sysctl -w net.ipv4.conf.all.forwarding=1

将net.ipv4.conf.all.forwarding = 1添加到/etc/sysctl.conf以使设置保持不变.

如果您在服务器上进行过滤(可以使用iptables -nvL进行检查 – 如果FORWARD链的策略为ACCEPT,则表示您未进行过滤),则需要添加规则以允许在网络之间转发数据包:

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

如果你没有过滤但想要(顺便说一下,你也应该看看@Red Tux的评论,认情况下过滤并只允许最小值)这是一个很好的做法.添加以前的规则加上这个:

iptables -P FORWARD DROP

这会更改策略,以便丢弃所有不匹配任何规则的数据包.

此外,如果您想要真正的安全性,您也应该过滤INPUT链.此链处理来自您的路由器的请求,其目标IP与其自己的目标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仅来自有线网络中的设计主机(注意警告),允许环回接口上的所有流量(某些软件需要)并丢弃所有其余流量.

正如您所看到的,您只能通过使用-p tcp | udp –dport N来允许某些端口.您应该考虑在FORWARD链上执行此操作以提高安全性.

相关文章

insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...