Shorewall
Shoreline Firewall,更常被称为 “Shorewall”,是一个用于配置 Netfilter 的高级工具。
您可以使用一组配置文件中的条目来描述您的防火墙/网关需求。 Shorewall 读取这些配置文件,并在 iptables 工具的帮助下,配置 Netfilter 以满足您的需求。
Shorewall 可以用于专用防火墙系统、多功能网关/路由器/服务器或独立的 GNU/Linux 系统。 Shorewall 不使用 Netfilter 的 ipchains 兼容模式,因此可以利用 Netfilter 的连接状态跟踪功能。
安装
安装 shorewallAUR 或 shorewall6AUR 软件包。
配置
/etc/shorewall/shorewall.conf
中设置 LOGFILE="systemd"
,以便 shorewall show
命令能够工作。 [1]这些设置基于 Shorewall 网站上的双接口文档。
使用 shorewall 软件包附带的一些示例配置文件
# cp /usr/share/doc/shorewall/Samples/one-interface/* /etc/shorewall/ # If you have a desktop-type system with a single network interface # cp /usr/share/doc/shorewall6/Samples6/one-interface/* /etc/shorewall6/ # If you have a desktop-type system with a single network interface, pkg shorewall6 # cp /usr/share/doc/shorewall/Samples/two-interfaces/* /etc/shorewall/ # If you have a router with two network interfaces # cp /usr/share/doc/shorewall/Samples/three-interfaces/* /etc/shorewall/ # If you have a router with three network interfaces
/etc/shorewall/interfaces
更改 接口设置以匹配以太网设备使用的名称,并允许本地网络上的 DHCP 流量。 编辑 /etc/shorewall/interfaces
原始
net eth0 dhcp,tcpflags,nosmurfs,routefilter,logmartians loc eth1 tcpflags,nosmurfs,routefilter,logmartians
新的
net wan dhcp,tcpflags,nosmurfs,routefilter,logmartians loc lan dhcp,tcpflags,nosmurfs,routefilter,logmartians
/etc/shorewall/policy
更改 策略文件以允许路由器(本机)访问互联网。 编辑 /etc/shorewall/policy
原始
############################################################################### #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST loc net ACCEPT net all DROP info # THE FOLLOWING POLICY MUST BE LAST all all REJECT info
新的
############################################################################### #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST $FW net ACCEPT loc net ACCEPT net all DROP info # THE FOLLOWING POLICY MUST BE LAST all all REJECT info
/etc/shorewall/rules
DNS 查询由 dnsmasq 处理(实际上是转发),因此 Shorewall 需要允许这些连接。 添加 以下行到 /etc/shorewall/rules
# Accept DNS connections from the local network to the firewall # DNS(ACCEPT) loc $FW
/etc/shorewall/masq
从版本 5.0.14 开始,/etc/shorewall/masq 已被弃用,转而使用 /etc/shorewall/snat。 将以下行添加到 /etc/shorewall/snat 而不是修改 masq。
MASQUERADE 192.168.1.0/24 eth0
更改 网络接口为您连接到外部 (WAN) 网络的接口,并更改 IP 为您本地网络中使用的 IP。
eth0 192.168.1.0/24
SSH
可选: 如果您希望能够从互联网上的计算机 SSH 访问路由器,您可以添加以下行到 /etc/shorewall/rules
# Accept SSH connections from the internet for administration # SSH(ACCEPT) net $FW TCP <SSH port used>
端口转发 (DNAT)
- /etc/shorewall/rules : 这是一个 LAN 上 IP 为 10.0.0.85 的 Web 服务器的示例。 您可以通过 “外部” IP 的 5000 端口访问它。
DNAT net loc:10.0.0.85:80 tcp 5000
/etc/shorewall/stoppedrules
如果您的网络接口在 /etc/shorewall/interfaces 中使用了 eth1 以外的网络名称,您需要使用正确的名称更新 stoppedrules。
/etc/shorewall/shorewall.conf
当您完成上述更改后,通过更改其配置文件 /etc/shorewall/shorewall.conf
来启用 shorewall
原始
STARTUP_ENABLED=No
新的
STARTUP_ENABLED=Yes
有关更多信息,请参阅 shorewall.conf(5)。
启动
流量整形
阅读 Shorewall 流量整形/控制 指南。
这是一个配置示例
- /etc/shorewall/tcdevices : 这里定义您要整形的接口及其速率。 我有一个 ADSL 连接,具有 4MBit 下载/256KBit 上传的配置。
ppp0 4mbit 256kbit
- /etc/shorewall/tcclasses : 这里定义每个类别的最小 (rate) 和最大 (ceil) 吞吐量。 您将为每种类型的流量分配一个类别来进行整形。
# interactive traffic (ssh) ppp0 1 full full 0 # online gaming ppp0 2 full/2 full 5 # http ppp0 3 full/4 full 10 # rest ppp0 4 full/6 full 15 default
- /etc/shorewall/tcrules : 此文件包含流量类型及其所属的类别。
1 0.0.0.0/0 0.0.0.0/0 tcp ssh 2 0.0.0.0/0 0.0.0.0/0 udp 27000:28000 3 0.0.0.0/0 0.0.0.0/0 tcp http 3 0.0.0.0/0 0.0.0.0/0 tcp https
我将我的流量分成 4 组
- 交互式流量或 ssh:虽然它几乎不占用带宽,但如果由于 LAN 上的下载者而导致延迟,则非常烦人。 这将获得最高优先级。
- 在线游戏:不用说,当你的 ping 值很糟糕时,你无法玩游戏。 ;)
- 网页流量:可以稍微慢一点
- 其他一切:各种下载,它们是造成延迟的原因。