我正在尝试设置一个 dd-wrt 路由器作为一些定制的 arduino 设备的子网。
这个想法是让路由器的 LAN/WIFI 对 arduino 设备开放,并且只允许流量离开 WAN 端口到公司 LAN(如果它是用于控制服务器)。
我尝试应用以下规则:
echo“允许所有路由器连接” iptables -A 输入 -s 127.0.0.1 -j 接受 iptables -A 输出 -d 127.0.0.1 -j 接受 echo“允许所有 ping” iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT echo“允许所有 ntp(时间)” iptables -A OUTPUT -p udp --dport 123 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A 输入 -p udp --sport 123 -m 状态 --状态 ESTABLISHED -j 接受 回显“允许 DNS” iptables -A OUTPUT -p udp -d 10.80.91.2 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A 输入 -p udp -s 10.80.91.2 --sport 53 -m 状态 --状态 ESTABLISHED -j 接受 iptables -A OUTPUT -p tcp -d 10.80.91.2 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A 输入 -p tcp -s 10.80.91.2 --sport 53 -m 状态 --状态 ESTABLISHED -j 接受 回显“允许网络服务器” iptables -A OUTPUT -p tcp -d 10.80.91.2 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A 输入 -p tcp -s 10.80.91.2 --sport 80 -m 状态 --状态 ESTABLISHED -j 接受 echo“放弃其他一切” iptables -A 输入 -j DROP iptables -A 输出 -j DROP iptables -P 输入删除 iptables -P 转发删除 iptables -P 输出删除
不幸的是,每次我到达“iptables -A INPUT -j DROP”时,我都会失去与路由器的 telnet 连接,就像我之前设置的所有规则都被忽略一样。
这是我第一次使用 iptables,我在网上看到的所有信息似乎都表明我做得正确。
该路由器是 Linksys E2000,带有 DD-WRT v24-sp2(08/12/10)std-usb-ftp(SVN 修订版 14929)。
答案1
您尚未允许建立您在连接中使用的类型的连接。这就是为什么当您添加最后一行时连接断开的原因。
你可能想要这样一行:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
这表示防火墙应该允许已经建立且正在运行的连接。(即通过防火墙中的所有其他规则。)
话虽如此,您还需要一条规则来允许 ssh 进入,例如:
-A INPUT -s <source> -p tcp -m state --state NEW -m tcp --dport ssh -j ACCEPT
这告诉防火墙允许 ssh 连接开始。
希望这可以帮助。
PS 我必须检查,但您不应该使用“-P”行(最后三行),因为我认为它们会刷新表格。但我必须重新检查一下。