How-To Alpine Wall

来自 Alpine Linux

通用

本文档的目的是通过示例来说明 Alpine Wall (awall)。
我们将从 Shorewall 用户的角度解释 awall

awall 自 Alpine v2.4 起可用。
有关语法的详细信息,请参阅 Alpine Wall 用户指南

以下某些功能和示例假设您正在运行 awall 版本 0.2.12 或更高版本。
请通过运行以下命令确保您正在运行最新版本

apk update apk add iptables apk add -u awall apk version awall

注: 旧版本的 Alpine 可能也需要 ip6tables 软件包。

结构

您的 Alpine Wall 配置文件位于 /etc/awall/optional
每个这样的文件都称为策略

注: 0.2.12 之前的 awall 版本将仅在 /usr/share/awall/optional 中查找策略文件。
从 0.2.12 及更高版本开始,awall 将在 /etc/awall/optional/usr/share/awall/optional 中查找策略文件

您可以有多个策略文件(例如,为 HTTP、FTP 等设置单独的文件很有用)
可以使用“awall [enable|disable]”命令启用或禁用策略

注: awall 的策略文件不等同于 Shorewall 的 /etc/shorewall/policy 文件。

awall 策略可以包含以下定义:

  • 变量(例如 /etc/shorewall/params
  • 区域(例如 /etc/shorewall/zones
  • 接口(例如 /etc/shorewall/interfaces
  • 策略(例如 /etc/shorewall/policy
  • 过滤器和 NAT 规则(例如 /etc/shorewall/rules
  • 服务(例如 /usr/share/shorewall/macro.HTTP

先决条件

安装 awall 后,您需要加载以下 iptables 模块

modprobe ip_tables modprobe iptable_nat #如果使用 NAT

这只需要在 awall 安装后执行一次。

要使防火墙在启动时自动启动并自动加载所需的模块

rc-update add iptables rc-update add ip6tables

一个基本的家庭防火墙

我们将给出一个示例,说明如何将 Shorewall 的“基本家庭防火墙”转换为 AWall。

使用 Shorewall 的防火墙示例

假设您有以下 Shorewall 配置

内容 /etc/shorewall/zones

inet ipv4 loc ipv4

内容 /etc/shorewall/interfaces

inet eth0 loc eth1

内容 /etc/shorewall/policy

fw all ACCEPT loc inet ACCEPT all all DROP

内容 /etc/shorewall/masq

eth0 0.0.0.0/0

使用 AWall 的防火墙示例

现在我们将配置 AWall 以执行与上述 Shorewall 示例相同的操作。

创建一个名为 /etc/awall/optional/test-policy.json 的新文件,并将以下内容添加到文件中。

提示: 您可以将其命名为其他名称,只要您将其保存在 /etc/awall/optional/ 中并将其命名为 ???.json)
{
  "description": "Home firewall",

  "zone": {
    "inet": { "iface": "eth0" },
    "loc": { "iface": "eth1" }
  },

  "policy": [
    { "in": "_fw", "action": "accept" },
    { "in": "loc", "out": "inet", "action": "accept" }
  ],

  "snat": [
    { "out": "inet" }
  ]
}

以上配置将

  • 创建您的策略的描述
  • 定义区域
  • 定义策略
  • 定义 snat (以伪装传出的流量)
注: snat 表示“源 NAT”。它表示“静态 NAT”。
提示: AWall 有一个名为“_fw”的内置区域,它是“防火墙本身”。这对应于 Shorewall “fw”区域。

激活/应用策略

保存策略后,您可以运行以下命令来激活防火墙设置

awall list # 列出可用的“策略”(此步骤是可选的) awall enable test-policy # 启用“策略” awall activate # 从“策略”文件生成防火墙配置并启用它(启动防火墙)

如果您有多个策略,在启用或禁用它们之后,您始终需要运行 awall activate 以更新 iptables 规则。

高级防火墙设置

假设您有 /etc/awall/optional/test-policy.json 以及“基本家庭防火墙”设置,您可以选择修改该文件以测试以下示例。

提示: 您可以在 /etc/awall/optional/ 中创建新文件以测试以下一些示例

日志记录

AWall 将(自 v0.2.7 起)自动记录丢弃的数据包。
您可以将以下行添加到策略文件中的“policy”部分,以便查看丢弃的数据包。

{ "in": "inet", "out": "loc", "action": "drop" }
注: 如果您要将以上内容添加到已存在的文件中,请确保在需要的地方添加“,”符号!

端口转发

假设您有一个本地 Web 服务器 (192.168.1.10),您希望从“inet”访问它。
使用 Shorewall,您将在 /etc/shorewall/rules 中有一个这样的规则

#ACTION  SOURCE  DEST               PROTO  DEST    SOURCE    ORIGINAL
#                                          PORT(S) PORT(S)   DEST
DNAT     inet     loc:192.168.1.10  tcp    80

让我们配置我们的 AWall 策略文件,方法是添加以下内容。

  "variable": {
    "APACHE": "192.168.1.10",
    "STATIC_IP": "1.2.3.4"
    },

  "filter": [
    { "in": "inet", 
      "dest": "$STATIC_IP", 
      "service": "http", 
      "action": "accept", 
      "dnat": "$APACHE" 
      }
    ]

正如您在上面的示例中看到的,我们创建了一个

  • “variable”部分,我们在其中指定一些 IP 地址
  • “filter”部分,我们在其中进行实际的端口转发(使用我们刚刚创建的变量并使用一些预先存在的“services”定义)
注: 如果您要将以上内容添加到已存在的文件中,请确保在需要的地方添加“,”符号!
提示: AWall 已经为 HTTP、FTP、SNMP 等多种服务提供了“service”定义列表(请参阅 /usr/share/awall/mandatory/services.json

如果您需要转发到不同的端口(例如 8080),您可以这样做

"dnat": [
  {"in": "inet", "dest": "$STATIC_IP", "to-addr": "$APACHE", "service": "http", "to-port": 8080 }
]

创建您自己的服务定义

您可以将自己的服务定义添加到您的策略文件中

"service": {  
  "openvpn": { "proto": "udp", "port": 1194 }
  }
注: 您无法覆盖来自 /usr/share/awall/mandatory/services.json 的“service”定义
注: 如果您要将以上内容添加到已存在的文件中,请确保在需要的地方添加“,”符号!

继承服务或变量

您可以将策略导入到其他策略文件中,以继承服务或变量定义

"import": "myfirewall"

指定加载顺序

默认情况下,策略按字母顺序加载。
您可以使用关键字“before”和“after”更改加载顺序

"before": "myfirewall"
"after": "someotherpolicy"

其他

帮助和调试

如果您遇到某种麻烦,您可能会发现一些命令在调试时很有用

awall #(不带参数)显示有关 awall 应用程序的一些基本帮助 awall dump # 转储区域和变量等定义 iptables -L -n # 显示 iptables 中的内容

参见