【硬创邦】跟hoowa学做智能路由(八):防火墙/DMZ/UPNP

  
  在上一章,我们已经介绍了关于网络部分的配置,今天这章我们将深入介OpenWRT下的防火墙类功能。

在OpenWRT下防火墙的默认行为已经可以满足路由器的需要,一般情况下也无需修改,所以本章作为了解阅读即可。 如果想设置端口转发、uPNP等更多功能可以参考本章的配置方法进行设置。

OpenWRT内置防火墙介绍

OpenWRT下的NAT、DMZ、Firewall rules都是由配置文件“/etc/config/firewall”进行控制管理的。此文件可以使用UCI进行控制,也可以用vi编辑器直接修改。

而该文件最总会在/etc/init.d/firewall启动的时候由UCI进行解码并且生成iptables规则生效。因此使用者不需要了解iptables即可通过配置文件实现防火墙控制。

防火墙的修改生效,需要重启防火墙执行以下指令:

root@OpenWrt:/# /etc/init.d/firewall reload

或执行:

root@OpenWrt:/# /etc/init.d/firewall restart

查看当前iptables的已启用策略语法为:

root@OpenWrt:/# iptables -L

防火墙的基本设置

本节主要介绍了防火墙的基本策略和基本参数,其中默认值已经能很好的工作了,无需修改。

config defaults 防火墙默认参数表

键 值 必须设置 说明
input ACCEPT 是 设置INPUT链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝
output ACCEPT 是 设置OUTPUT链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝
forward REJECT 是 设置FORWARD链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝
syn_flood 1 是 是否启用防洪水攻击。 可选值: 0关闭,1启用
synflood_rate 字符串 否 设置SYN包传输洪水攻击检测比率值,默认为: 25 单位(包/秒)
synflood_burst 字符串 否 设置SYN包传输比率值识别洪水攻击,默认为: 50 单位(包/秒)
disable_ipv6 1 否 设置关闭掉IPv6的防火墙策略,可选值: 0忽略,1关闭

这部分参考值既是系统默认的即可,无需修改:

config defaults
option syn_flood 1
option input ACCEPT
option output ACCEPT
option forward REJECT
# Uncomment this line to disable ipv6 rules
# option disable_ipv6 1

config zone 用于WAN/LAN域(zone)的参数表

键 值 必须设置 说明
name 字符串 是 域,必须是唯一值,可选值: wan, lan
network 列表值 否 哪些接口被捆绑到这个域中,可选接口的名称,比如: lan, wan, wan6
input ACCEPT 否 设置INPUT链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝
output ACCEPT 否 设置OUTPUT链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝
forward ACCEPT 否 设置FORWARD链(chain)的过滤策略,可选值: ACCEPT 允许, REJECT 拒绝
masq 1 否 设置传输伪装,如果是WAN口必须为1
mtu_fix 1 否 设置MTU的MSS钳制,如果是WAN口请为1

这部分配置也不需要做修改,参考:

config zone
option name wan
list network 'wan'
list network 'wan6'
option input REJECT
option output ACCEPT
option forward REJECT
option masq 1
option mtu_fix 1

config zone
option name lan
list network 'lan'
option input ACCEPT
option output ACCEPT
option forward ACCEPT

config forwarding 路由转发参数表

键 值 必须设置 说明
src lan 是 设置转发来源
dest wan 是 设置转发目标

这部分配置也不需要做修改,参考:

config forwarding
option src lan
option dest wan

防火墙的规则

如果在你的路由产品中需要开放“允许WAN口访问设备的特定端口”,可以设置本规则(比如开放WAN口允许SSH登入,或允许WAN口访问设备的FTP),一般情况下无需设置。

防火墙规则在/etc/config/firewall中可以有任意数量的规则,这些规则定义了数据传输的动作和行为是被允许还是拒绝。

规则配置文件结构

config rule
option name '规则名称'
.....

config rule可选参数表:

键 值 必须设置 说明
name 字符串 是 设置当前这个rule的名称
target 字符串 是 设置防火墙动作,可选值: ACCEPT 许可, REJECT 拒绝, DROP 抛弃
src 字符串 否 数据源的zone域是哪个。可选值: wan / lan
src_ip 字符串 否 数据源的IP地址是哪个。
src_mac 字符串 否 数据源的MAC地址是哪个。
src_port 字符串 否 数据源的端口,可以是一个端口,或一个端口范围,但是必须同时指定了协议类型
proto 字符串 否 数据源的协议类型, 可选值: tcp, udp, tcpudp, udplit, icmp, esp, ah, sctp, 或all表示全部
dest 字符串 否 数据目标的zone域是哪个。可选值: wan / lan
dest_ip 字符串 否 数据目标的IP地址。
dest_port 字符串 否 数据目标的端口,可以是一个端口,或一个端口范围,但是必须同时指定了协议类型
family 字符串 否 数据的协议族,可选值: ipv4, ipv6, any

rule规则设置可以灵活,比如允许来自WAN口的ping,举例:

config rule
option name Allow-Ping
option src wan
option proto icmp
option icmp_type echo-request
option family ipv4
option target ACCEPT

比如,我们希望WAN口可以ssh到系统,那么举例:

config rule
option name wan-ssh
option src wan
option dest_port 22
option proto tcp
option target ACCEPT

在firewall配置中有大量rule可以参考各位去学习配置方法。默认情况下的规则设置已经足够作为路由器使用。

端口转发和DMZ

端口转发是路由产品中常见的配置,它允许使用者通过WAN口访问特定的端口转发给局域网的一台电脑设备(比如WAN口访问80端口(HTTP)将转发给局域网某台网站服务器)。

端口转发也是在防火墙配置/etc/config/firewall中定义redirect段策略实现的。所有匹配的来源数据将根据目标设置转发到目标主机上。

firewall配置中可以有多个redirect转发策略,默认是没有开放任何转发的,如果你需要转发请使用vi或UCI进行配置。

规则配置文件结构

config redirect
option name '名称'
....

config redirect可选参数表:

键 值 必须设置 说明
name 字符串 是 设置当前这个redirect的名称
src 字符串 是 转发源的zone域,一般转发都是转发从wan过来的访问
src_ip 字符串 否 转发源的IP地址指定
src_mac 字符串 否 转发源的MAC地址指定
src_port 字符串 否 转发源的端口指定
proto 字符串 否 转发源的协议类型, 可选值: tcp, udp, tcpudp, udplit, icmp, esp, ah, sctp, 或all表示全部
dest 字符串 是 转发目标的zone域
dest_ip 字符串 否 转发目标的IP地址指定
dest_mac 字符串 否 转发目标的MAC地址指定
dest_port 字符串 否 转发目标的端口指定

端口转发的可配置性十分灵活。比如我们将9020这个端口转发给内网一台服务器的80,举例:

config redirect
option name '9020-80'
option proto 'tcp'
option src 'wan'
option src_dport '9020'
option dest 'lan'
option dest_ip '192.168.1.100'
option dest_port '80'

将电脑192.168.1.2设置DMZ隔离区,举例:

config redirect
option src wan
option proto all
option dest_ip 192.168.1.2

安装UPnP

UPnP是一种对等即插即用网络协议,主要用于视频,音频领域的传输协议,对使用者来说,打开UPnP之后可以增加迅雷等下载软件的下载速度。

提示:UPnP服务开机启动会消耗一点CPU和内存资源。

第一步:安装必要的包

确保你的开发板已经连入互联网,并执行以下命令:

root@OpenWrt:/# opkg update
root@OpenWrt:/# opkg install miniupnpd

第二步:配置UPnP参数

UPnP的配置参数在/etc/config/upnp当中。

config upnpd config的配置参数:

键 值 必须设置 说明
enable_natpmp 1 是 开启NAT-PMP支持,1表示开启
enable_upnp 1 是 开启UPnP支持,1表示开启
secure_mode 1 是 安全模式,客户端只能给自己转发一个输入口
log_output 0 是 日志输出级别,0表示不输出日志,如果设置了将输出到syslog中
download 数字 是 允许来自wan口的数据输入带宽,单位是(KB/秒)。
upload 数字 是 允许输出到wan口的数据输入带宽,单位是(KB/秒)。
external_iface 字符串 是 外网的设备域,默认是wan
internal_iface 字符串 是 内网的设备域,默认是lan
port 数字 是 监听的端口
upnp_lease_file 文件名 是 的upnp客户端租用记录文件

config perm_rule许可设置配置参数:

键 值 必须设置 说明
action 字符串 是 设置是否许可:allow许可,deny不许可
ext_ports 字符串 是 外部端口范围
int_addr 字符串 是 IP地址,如果是0.0.0.0/0表示全部
int_ports 字符串 是 内部端口范围

在安装UPnP的时候已经生成的/etc/config/upnp默认配置,如果要修改请使用vi或UCI对起进行修改。

第三步:设置miniupnpd开机启动

root@OpenWrt:~# /etc/init.d/miniupnpd enable

设置完毕以后,下次开机即可驻留内存,使用/etc/init.d/miniupnpd start可以临时开启一次看看。

第四步:检测是否有效开启

root@OpenWrt:~# netstat -lnp|grep miniupnpd

如果查看到监听的端口,表示开启完成。

本章到这里就结束了,下章开始,我们将了解OpenWRT作为普通路由器的其它设置部分,包括时区、SSH远程登入服务等。感谢大家的耐心学习!

最后,大家现在可以开始提问,在雷锋网(公众号:雷锋网)文章评论、公众号「宅客」:letshome、QQ群:196302618、邮箱:DIYRouter#163.com都可以提交,问题我将会在下章的时候统一解答。需要提醒下,我并不是高手,我回答问题有三个原则:1、我会的我直接回答 2、我不太会的我看着回答 3、我不会的我瞎忽悠 所以我给的答案是否正确需要大家自行判断。

  
 
  本文作者:孙冰

本文转自雷锋网禁止二次转载,原文链接
上一篇:大数据分析平台产品对比之MaxCompute(原ODPS)篇


下一篇:智能安防进入快速发展期 万亿市场等待开启