Everything you can do in the web console can also be done with commands: the same settings, the same pending changes, the same commit. The command line is useful when a page does not open, over a slow connection, for repeating a change on a second firewall, and for scripts.

At a glance:

Where How
In the web console The terminal button in the top bar (on every page), or System › Command line for a full page
Over SSH ssh admin@<firewall address> from the management network
At the firewall itself The console menu, item 1, Command line

You sign in with your Korthveil account, as in the web console. There is no operating-system shell: only the commands in this guide.

The terminal from the top bar: show system
The terminal from the top bar: show system

1. Two modes

Mode Prompt What for Who
Operational admin@korthmain> Look at the firewall's state, run tests Every account
Configure admin@korthmain# Change settings, then commit them Superuser and administrator accounts

The prompt shows which firewall you are on (its name, here korthmain). In a failover pair, check it before you change anything.

configure enters configure mode; exit goes back. Changes you made stay pending until you commit or discard them.

2. Keys and help

Key or word What it does
? Lists what can come next at this point, with a short description
Tab Completes the word; pressed again, lists the choices
Up / Down The previous and next commands
Ctrl-C Clears the line
Ctrl-D Leaves (on an empty line)
help The built-in guides and the commands of this mode
help start, help configure, help commit, help lists, help examples Short built-in guides
help <command> One command's words, for example help show

On a phone or tablet, the buttons under the terminal do the same: Tab, ?, the arrows, Copy all, Copy commands, Paste, Clear, Font, Larger and Full screen.

help: the built-in guides and the commands
help: the built-in guides and the commands
? after show: what can come next
? after show: what can come next

3. Operational commands: look and test

These change nothing. Every account can use them.

Command What it shows or does
show system Product, version, hostname, operating system, kernel, uptime, CPU, load, memory, time
show version The Korthveil version only
show interfaces Every port: link, addresses, traffic
show interfaces <port> One port in detail, for example show interfaces enp1s0
show routes The routing table; show routes ipv4 or show routes ipv6 for one family
show sessions Connections through and to the firewall (50 by default; limit 1–1000)
show sessions address 192.168.2.50 Only connections to or from that address; also port 443, protocol udp, limit 200
show services The core services and whether they run
show modules The add-ins: on or off, and their health
show log The system log, newest last (50 lines); lines 200 (1–1000), unit rampartd, match dhcp narrow it. match searches the last 5,000 entries
show revisions The commit history: number, time, who, from where, comment; count 50 for more (1–500)
show configuration The running (committed) settings; add a path for part of them, for example show configuration system
show user The account you are signed in with, and its role
ping <address or name> Sends 4 echo requests; count 10 (1–10), ipv4 or ipv6, interface enp2s0
traceroute <address or name> The path to a host, hop by hop; ipv4, ipv6, interface
lookup <name> Resolves a name with the firewall's own DNS; ipv4 (A only) or ipv6 (AAAA only)
test-port <address> <port> Tries a TCP connection, for example test-port 192.168.2.10 443
show isolated Devices without internet now (Isolate), with the time left, who and why
show backup-internet The backup internet connection (a phone plugged in by USB): standby or in use for IPv4 and IPv6, since when, why, and the phones plugged in now (with what to do on a phone that does not share its connection yet)
show dns-forwarder The DNS forwarder (dnsmasq): off (and whether the DNS resolver answers instead), or running with its upstream servers, the addresses it listens on, how many DHCP client names it answers, and its cache and upstream counters
ask <question> Asks the AI assistant about this firewall (add-in); ask new … starts a new conversation
configure Enters configure mode
exit or quit Leaves the command line

These two act at once, without a commit, and are written to the audit log. Superuser, administrator and operator accounts can use them:

Command What it does
isolate <MAC or address> Takes the device off the internet for 10 minutes. The LAN, the other local networks and the firewall stay reachable. minutes 30 (1–1440) and reason "bedtime" are optional. Isolating it again sets a new end time
release <MAC> Ends an isolation now
show interfaces and show routes ipv4
show interfaces and show routes ipv4
ping and lookup from the firewall itself
ping and lookup from the firewall itself

4. Configure mode: change settings

The settings form a tree, the same one the web console edits. Each word goes one level down; the last word is the value.

Command What it does
set <path> <value> Sets a value; creates a list entry when the name is new
set <path> [ v1 v2 ] Adds values to a list of values
set <path to a secret> Leave the value out: you are asked for it twice, without it showing on screen
delete <path> Removes a setting, a list entry, or a whole section
delete <path> <values> Removes only those values from a list of values
show The pending settings at this point; show <path> for one part
show | set The same, as set commands you can copy and paste
edit <path> Works below a path; the [edit …] line shows where you are
up / top One level up / back to the top
compare What a commit would change: - removed, + added
commit check Checks the pending changes and changes nothing
commit Applies the pending changes, all or nothing
commit comment "text" The same, with a note in the revision history
commit confirmed 5 Applies them and rolls back after 5 minutes unless you type confirm
confirm Keeps a commit confirmed
discard Throws away all pending changes
rollback <revision> Loads an earlier revision as pending changes; then commit
run <command> Runs an operational command without leaving, for example run show interfaces
exit Back to operational mode; pending changes stay pending

Named entries (ports, zones, rules, objects) take their name as the next word:

Entries without a name use their number: set routing static 1 gateway 192.168.10.254. This also works for lists inside add-in settings, for example the DNS resolver's upstream servers: set modules dns-filter settings forward servers 3 address 1.1.1.2. The next free number adds an entry; show … | set prints the numbers to use.

The pending changes are shared with the web console. A change made with set appears in the console's pending changes, and the other way round. Either side can commit it.

configure, set, compare, commit check, and discard
configure, set, compare, commit check, and discard

Commit safely

Use commit confirmed 5 for anything that could cut off your own access: addresses, gateways, zones, management access, the web console's port. If you lose the connection, the firewall undoes the change by itself after five minutes. When everything still works, type confirm.

A commit that has problems is refused, and nothing changes. Each problem is listed with the setting, what is wrong, and usually a fix or a "did you mean". Errors must be fixed; warnings and info lines are advice and do not stop the commit.

commit confirmed, confirm, and the revision history
commit confirmed, confirm, and the revision history

5. Filters: narrow down any output

Add | and a filter to any command:

Filter What it keeps
| match TEXT Lines containing TEXT (upper and lower case alike)
| except TEXT Lines not containing TEXT
| count Only the number of lines
| last N The last N lines
| set Settings as set commands (after show)
| json Settings as JSON (after show)

Filters can be chained: show log lines 300 | match dhcp | last 5.

show configuration | set prints commands that rebuild the configuration, without passwords or keys. Paste them into configure mode on another firewall.

show configuration … | set, and a chained log filter
show configuration … | set, and a chained log filter

6. Everyday recipes

Task Commands
Rename this firewall configure · set system hostname korthmain · commit
A static address on a port set interfaces enp2s0 ipv4 mode static · set interfaces enp2s0 ipv4 addresses 192.168.2.4/24 · commit confirmed 5 · confirm
A gateway on a port set interfaces enp1s0 ipv4 gateway 192.168.2.1 · commit confirmed 5 · confirm (static ports only; a DHCP port gets its gateway from DHCP)
http:// forwards to https:// set system webUI httpRedirect true · commit
DNS servers set system dns servers [ 9.9.9.9 2620:fe::fe ] · commit
A backup upstream DNS provider set modules dns-filter settings forward servers 3 address 1.1.1.2 · set modules dns-filter settings forward servers 3 tlsName security.cloudflare-dns.com · commit (or Network › DNS resolver › Add upstream)
Time zone set system time timezone America/Chicago · commit
Turn an add-in on or off set modules dhcp enabled true (or false) · commit
Remove an empty zone delete zones MGMT · commit
Undo the last change run show revisions · rollback <the revision before> · commit
Throw away what you typed discard
Is the internet reachable? ping 9.9.9.9 · lookup repo.klokur.com
Who is connected to a device? show sessions address 192.168.2.50
No internet for a device for 30 minutes isolate 192.168.2.62 minutes 30 reason "homework" · show isolated · release <its MAC> to end early
Why did a service stop? show services · show log unit rampartd lines 100

7. Scripts over SSH

The exit status is 0 when everything worked and 1 when a command failed.

8. Access and safety

Troubleshooting

You see Meaning What to do
error … addresses and gateway apply only to static mode That port gets its address by DHCP Check show interfaces <port>: you may be on the other firewall of a pair, or on the wrong port
the configuration has errors The commit was refused; nothing changed Fix the lines marked error, or discard
Run 'confirm' by 16:35 or the change rolls back A commit confirmed is waiting Type confirm when everything still works
Note: there are uncommitted changes You left configure mode with pending changes They stay pending; commit or discard them later
incomplete command or ambiguous A word is missing or too short Press ? to see what can come next
limit is a number from 1 to 1000, not "x" (or lines, count, port) A number is out of range or not a number Use a number in the range shown
"…" is not understood here; usage: … A word the command does not know Follow the usage shown
no answer from …, no address found for …, port … is not reachable The test ran and failed; the lines above say why (for example Network is unreachable for IPv6 without an IPv6 internet connection) Check the route, DNS, or the remote device
SSH refuses the connection SSH is off, or you are not on the management network Turn it on under System › Command line › Access, or use the terminal in the web console