How-To Alpine Wall: Difference between revisions
Prabuanand (talk | contribs) (updated instructions based on https://lists.alpinelinux.org/~alpine/devel/%3CaVhxrpww1wvEmBWB%40imp.flyn.org%3E#%3C7f95fffb-67ed-2ea8-95e0-e4794363bed9@alpinelinux.org%3E) |
Prabuanand (talk | contribs) (additional changes by rewording sentence based on email from W. Michael Petullo <mike@flyn.org>) |
||
| Line 1: | Line 1: | ||
[https://git.alpinelinux.org/awall/about/ Alpine Wall User Guide] is the official source for details about the syntax. The purpose of this page is to illustrate Alpine Wall (AWall) by example. This page explains AWall from the viewpoint of a Shorewall | This guide shows how to configure a firewall using Alpine Wall (awall), a Linux firewall configuration tool, providing various benefits over plain iptables. [https://git.alpinelinux.org/awall/about/ Alpine Wall User Guide] is the official source for details about the syntax. | ||
The purpose of this page is to illustrate Alpine Wall (AWall) by example. This page explains AWall from the viewpoint of {{pkg|Shorewall}}, a firewall configuration tool used in many applications. This comparison is meant to help readers who are familiar with Shorewall learn AWall. You should follow the AWall configuration examples. Use the Shorewall examples as contextual references, or ignore them, if unfamiliar with Shorewall. | |||
== Installation == | == Installation == | ||
| Line 33: | Line 35: | ||
* services ''(like {{Path|/usr/share/shorewall/macro.HTTP}})'' | * services ''(like {{Path|/usr/share/shorewall/macro.HTTP}})'' | ||
== Basic home firewall == | == Basic home firewall configuration == | ||
The below | The examples below show how to configure a basic home firewall using AWall. Note that AWall Policy files differ substantially from Shorewall's policy files in syntax and layout. | ||
=== Shorewall configuration === | === Shorewall configuration === | ||
Let's suppose you have the following Shorewall configuration | Let's suppose you have the following Shorewall configuration files in {{Path|/etc/shorewall/}}, which you want to convert to a [[#AWall configuration|configuration for AWall]]. {{cat|/etc/shorewall/zones|inet ipv4 | ||
loc ipv4}} | loc ipv4}} | ||
| Line 53: | Line 55: | ||
=== AWall configuration === | === AWall configuration === | ||
The equivalent AWall configuration that does the same thing as the above Shorewall example is given below. | The equivalent AWall configuration that does the same thing as the above [[#Shorewall configuration|Shorewall example]] is given below. | ||
Create a new file called {{Path|/etc/awall/optional/home-policy.json}} and add the following content {{Cat|/etc/awall/optional/home-policy.json|<nowiki> | Create a new file called {{Path|/etc/awall/optional/home-policy.json}} and add the following content {{Cat|/etc/awall/optional/home-policy.json|<nowiki> | ||
| Line 72: | Line 74: | ||
{ "out": "inet" } | { "out": "inet" } | ||
] | ] | ||
}</nowiki> | }</nowiki>}} | ||
}} | |||
The above configuration will: | The above configuration will: | ||
* Create a description of your ''Policy'' | * Create a description of your ''Policy'' | ||
| Line 86: | Line 88: | ||
=== Activating/Applying a Policy === | === Activating/Applying a Policy === | ||
After saving the ''Policy'' you can run the following commands to activate your firewall settings | After saving the ''Policy'' you can run the following commands to activate your firewall settings. | ||
{{cmd|awall list | To listing available 'Policy(s)' {{cmd|# awall list}} | ||
awall enable | To enable the 'Policy' created in the previous section:{{cmd|# awall enable home-policy}} | ||
To generate firewall configuration from the 'Policy' file and enable it i.e start the firewall: {{Cmd|# awall activate}} | |||
If you have multiple policies, after enabling or disabling them, you need to always run ''awall activate'' in order to update the iptables rules. | If you have multiple policies, after enabling or disabling them, you need to always run {{Codeline|'''awall activate'''}} in order to update the iptables rules. | ||
== Advanced configuration == | == Advanced configuration == | ||
Assuming you have your {{Path|/etc/awall/optional/home-policy.json}} with your "Basic home firewall" settings, you could choose to modify that file to test the below examples. | Assuming you have your {{Path|/etc/awall/optional/home-policy.json}} with your "Basic home firewall" settings, you could choose to modify that file to test the below examples. You could also create new files in {{Path|/etc/awall/optional/}} for testing some of the below examples. | ||
AWall already has a "service" definition list for several services like HTTP, FTP, SNMP, etc. '' in the file {{Path|/usr/share/awall/mandatory/services.json}})'' | |||
{{ | {{Note|If you are adding the sample content given in this section to an already existing policy file, then make sure you add "," signs where they are needed!}} | ||
=== Logging === | === Logging === | ||
| Line 105: | Line 109: | ||
You could add the following row to the "policy" section in your ''Policy'' file in order to see the dropped packets. | You could add the following row to the "policy" section in your ''Policy'' file in order to see the dropped packets. | ||
<pre>{ "in": "inet", "out": "loc", "action": "drop" }</pre> | <pre>{ "in": "inet", "out": "loc", "action": "drop" }</pre> | ||
=== Port forwarding === | === Port forwarding === | ||
Let's suppose you have a local web server (192.168.1.10) that you want to make accessible from the "inet".<br> | Let's suppose you have a local web server (192.168.1.10) that you want to make accessible from the "inet".<br> | ||
With Shorewall you would have a rule like this in your {{ | With Shorewall you would have a rule like this in your {{Cat|/etc/shorewall/rules|<nowiki>#ACTION SOURCE DEST PROTO DEST PORT(S) SOURCEPORT(S) ORIGINALDEST | ||
< | DNAT inet loc:192.168.1.10 tcp 80</nowiki>}} | ||
#ACTION SOURCE DEST PROTO DEST | |||
DNAT inet loc:192.168.1.10 tcp 80 | |||
</ | |||
Lets configure our AWall ''Policy'' file likewise by adding the following content. | Lets configure our AWall ''Policy'' file likewise by adding the following content. | ||
| Line 137: | Line 135: | ||
* "variable" section where we specify some IP-addresses | * "variable" section where we specify some IP-addresses | ||
* "filter" section where we do the actual port-forwarding (using the variables we just created and using some preexisting "services" definitions) | * "filter" section where we do the actual port-forwarding (using the variables we just created and using some preexisting "services" definitions) | ||
If you need to forward to a different port (e.g. 8080) you can do: | If you need to forward to a different port (e.g. 8080) you can do: | ||
| Line 158: | Line 154: | ||
} | } | ||
</pre> | </pre> | ||
=== Inherit services or variables === | === Inherit services or variables === | ||
| Line 183: | Line 178: | ||
== See also == | == See also == | ||
* [https://git.alpinelinux.org/awall/about/ Alpine Wall User Guide] | * [https://git.alpinelinux.org/awall/about/ Alpine Wall User Guide] | ||
* [[Zero-To-Awall]] | * [[Zero-To-Awall]] | ||
* [https://www.cyberciti.biz/faq/how-to-set-up-a-firewall-with-awall-on-alpine-linux/ How To Set Up a Firewall with Awall on Alpine Linux] | * [https://www.cyberciti.biz/faq/how-to-set-up-a-firewall-with-awall-on-alpine-linux/ How To Set Up a Firewall with Awall on Alpine Linux] | ||
[[Category:Firewall]] | [[Category:Firewall]] | ||
Revision as of 16:21, 24 January 2026
This guide shows how to configure a firewall using Alpine Wall (awall), a Linux firewall configuration tool, providing various benefits over plain iptables. Alpine Wall User Guide is the official source for details about the syntax.
The purpose of this page is to illustrate Alpine Wall (AWall) by example. This page explains AWall from the viewpoint of Shorewall, a firewall configuration tool used in many applications. This comparison is meant to help readers who are familiar with Shorewall learn AWall. You should follow the AWall configuration examples. Use the Shorewall examples as contextual references, or ignore them, if unfamiliar with Shorewall.
Installation
Install the awall package by running the following command:
# apk add iptables awall
Note that awall requires iptables but works with both backends nftables and legacy iptables. It does not interact with nftables directly.
Configuration
The easier method for performing initial steps for running awall:
# awall activate
The above command has special handling for the first run, when firewall is not yet enabled in the kernel. It performs the below manual steps and also updates the default runlevel and files in /etc/conf.d
Use the below commands for performing initial setup manually.
- To update /etc/iptables:
# awall translate
- To start the OpenRC services for iptables and load modules and rules for IPv4 and IPv6
# rc-service iptables start # rc-service ip6tables start
Configuration files
Your Alpine Wall configuration files go in /etc/awall/optional. From version 0.2.12 and later, Awall will look for Policy files in both the former and /usr/share/awall/optional
Each such file is called a Policy.
You may have multiple Policy files. It is useful to have separate files for eg. HTTP, FTP, etc.
The Policy(s) can be enabled or disabled by using the command:
# awall [enable|disable]
An AWall Policy can contain definitions of:
- variables (like /etc/shorewall/params)
- zones (like /etc/shorewall/zones)
- interfaces (like /etc/shorewall/interfaces)
- policies (like /etc/shorewall/policy)
- filters and NAT rules (like /etc/shorewall/rules)
- services (like /usr/share/shorewall/macro.HTTP)
Basic home firewall configuration
The examples below show how to configure a basic home firewall using AWall. Note that AWall Policy files differ substantially from Shorewall's policy files in syntax and layout.
Shorewall configuration
Let's suppose you have the following Shorewall configuration files in /etc/shorewall/, which you want to convert to a configuration for AWall.
Contents of /etc/shorewall/zones
Contents of /etc/shorewall/interfaces
Contents of /etc/shorewall/policy
Contents of /etc/shorewall/masq
AWall configuration
The equivalent AWall configuration that does the same thing as the above Shorewall example is given below.
Create a new file called /etc/awall/optional/home-policy.json and add the following content
Contents of /etc/awall/optional/home-policy.json
The above configuration will:
- Create a description of your Policy
- Define zones
- Define policy
- Define snat (to masqurade the outgoing traffic)
snat means "source NAT". It does not mean "static NAT".
Activating/Applying a Policy
After saving the Policy you can run the following commands to activate your firewall settings.
To listing available 'Policy(s)'
# awall list
To enable the 'Policy' created in the previous section:
# awall enable home-policy
To generate firewall configuration from the 'Policy' file and enable it i.e start the firewall:
# awall activate
If you have multiple policies, after enabling or disabling them, you need to always run awall activate in order to update the iptables rules.
Advanced configuration
Assuming you have your /etc/awall/optional/home-policy.json with your "Basic home firewall" settings, you could choose to modify that file to test the below examples. You could also create new files in /etc/awall/optional/ for testing some of the below examples.
AWall already has a "service" definition list for several services like HTTP, FTP, SNMP, etc. in the file /usr/share/awall/mandatory/services.json)
Logging
AWall will (since v0.2.7) automatically log dropped packets.
You could add the following row to the "policy" section in your Policy file in order to see the dropped packets.
{ "in": "inet", "out": "loc", "action": "drop" }
Port forwarding
Let's suppose you have a local web server (192.168.1.10) that you want to make accessible from the "inet".
With Shorewall you would have a rule like this in your
Contents of /etc/shorewall/rules
Lets configure our AWall Policy file likewise by adding the following content.
"variable": {
"APACHE": "192.168.1.10",
"STATIC_IP": "1.2.3.4"
},
"filter": [
{ "in": "inet",
"dest": "$STATIC_IP",
"service": "http",
"action": "accept",
"dnat": "$APACHE"
}
]
As you can see in the above example, we create a
- "variable" section where we specify some IP-addresses
- "filter" section where we do the actual port-forwarding (using the variables we just created and using some preexisting "services" definitions)
If you need to forward to a different port (e.g. 8080) you can do:
"dnat": [
{"in": "inet", "dest": "$STATIC_IP", "to-addr": "$APACHE", "service": "http", "to-port": 8080 }
]
Create your own service definitions
You can add your own service definitions into your Policy files:
"service": {
"openvpn": { "proto": "udp", "port": 1194 }
}
Inherit services or variables
You can import a Policy into other Policy files for inheriting services or variables definitions:
"import": "myfirewall"
Customize policy loading order
By default policies are loaded on alphabetical order. The load order can be changed with the keywords "before" and "after":
"before": "myfirewall" "after": "someotherpolicy"
Troubleshooting
If you end up in some kind of trouble, you might find some commands useful when debugging:
awall # (With no parameters) Shows some basic help about awall application
awall dump # Dump definitions like zones and variables
iptables -L -n # Show what's in iptables