Shorewall

出自 ArchWiki

本文或章节可能需要与Iptables#前端合并

注意: 自标记以来未改进。(在Talk:Shorewall中讨论)

本文或章节需要扩充。

理由: 这主要是配置转储,没有解释为什么要这样配置。(在Talk:Shorewall中讨论)

Shoreline Firewall,更常被称为 “Shorewall”,是一个用于配置 Netfilter 的高级工具。

您可以使用一组配置文件中的条目来描述您的防火墙/网关需求。 Shorewall 读取这些配置文件,并在 iptables 工具的帮助下,配置 Netfilter 以满足您的需求。

Shorewall 可以用于专用防火墙系统、多功能网关/路由器/服务器或独立的 GNU/Linux 系统。 Shorewall 不使用 Netfilter 的 ipchains 兼容模式,因此可以利用 Netfilter 的连接状态跟踪功能。

安装

安装 shorewallAURshorewall6AUR 软件包。

配置

注意: 如果您使用 systemd 进行日志记录,请在 /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.service

流量整形

阅读 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 组

  1. 交互式流量或 ssh:虽然它几乎不占用带宽,但如果由于 LAN 上的下载者而导致延迟,则非常烦人。 这将获得最高优先级。
  2. 在线游戏:不用说,当你的 ping 值很糟糕时,你无法玩游戏。 ;)
  3. 网页流量:可以稍微慢一点
  4. 其他一切:各种下载,它们是造成延迟的原因。