How-To Alpine Wall
通用
本文档的目的是通过示例来说明 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 Wall 配置文件位于 /etc/awall/optional
每个这样的文件都称为策略。
从 0.2.12 及更高版本开始,awall 将在 /etc/awall/optional 和 /usr/share/awall/optional 中查找策略文件
您可以有多个策略文件(例如,为 HTTP、FTP 等设置单独的文件很有用)。
可以使用“awall [enable|disable]”命令启用或禁用策略。
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
内容 /etc/shorewall/interfaces
内容 /etc/shorewall/policy
内容 /etc/shorewall/masq
使用 AWall 的防火墙示例
现在我们将配置 AWall 以执行与上述 Shorewall 示例相同的操作。
创建一个名为 /etc/awall/optional/test-policy.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 (以伪装传出的流量)
激活/应用策略
保存策略后,您可以运行以下命令来激活防火墙设置
awall list # 列出可用的“策略”(此步骤是可选的) awall enable test-policy # 启用“策略” awall activate # 从“策略”文件生成防火墙配置并启用它(启动防火墙)
如果您有多个策略,在启用或禁用它们之后,您始终需要运行 awall activate 以更新 iptables 规则。
高级防火墙设置
假设您有 /etc/awall/optional/test-policy.json 以及“基本家庭防火墙”设置,您可以选择修改该文件以测试以下示例。
日志记录
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”定义)
如果您需要转发到不同的端口(例如 8080),您可以这样做
"dnat": [ {"in": "inet", "dest": "$STATIC_IP", "to-addr": "$APACHE", "service": "http", "to-port": 8080 } ]
创建您自己的服务定义
您可以将自己的服务定义添加到您的策略文件中
"service": { "openvpn": { "proto": "udp", "port": 1194 } }
继承服务或变量
您可以将策略导入到其他策略文件中,以继承服务或变量定义
"import": "myfirewall"
指定加载顺序
默认情况下,策略按字母顺序加载。
您可以使用关键字“before”和“after”更改加载顺序
"before": "myfirewall" "after": "someotherpolicy"
其他
帮助和调试
如果您遇到某种麻烦,您可能会发现一些命令在调试时很有用
awall #(不带参数)显示有关 awall 应用程序的一些基本帮助 awall dump # 转储区域和变量等定义 iptables -L -n # 显示 iptables
中的内容