Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

There is no supported one-command importer that converts an arbitrary iptables ruleset into UFW commands. A safe migration is an inventory-and-translation job: save the active IPv4 and IPv6 rules, classify host filtering separately from forwarding and NAT, recreate simple rules with UFW syntax, keep unsupported logic in UFW’s iptables-restore-compatible files, then test before enabling the firewall. Protect SSH before you activate UFW, because enabling it can flush existing chains and interrupt connections.

What conversion actually means

UFW (Uncomplicated Firewall) is a command-line frontend for common stateful host-firewall policies. It makes ordinary allow, deny, reject, rate-limit, logging, insertion, and deletion operations readable, but it is not a universal translator for every iptables table, match, target, or custom chain. The UFW manual describes the boundary directly: “ufw is not intended to provide complete firewall functionality via its command interface, but instead provides an easy way to add or remove simple rules.”

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Plan the migration as two layers:

  • UFW commands for straightforward INPUT and OUTPUT policy on the Linux host.
  • UFW rule files for NAT, gateway forwarding, custom chains, unusual matches, and table-specific behavior that the command interface cannot express.

iptables and nftables remain the better fit when the policy depends on granular conditions such as packet-size or time-of-day matching, deep custom chains, or multi-layer inspection. nftables entered the mainline Linux kernel in version 3.13, released in 2014; the commands shown here concern UFW’s iptables-compatible interface, so validate syntax against the firewall backend installed on your distribution.

Prepare the host before changing anything

1. Save IPv4, IPv6, and table-specific state

Keep immutable copies of the active rules so you can audit what must be recreated and recover if a migration fails. Run the following as root or with sudo:

sudo iptables-save > ~/iptables.v4.rules
sudo ip6tables-save > ~/iptables.v6.rules
sudo iptables -S > ~/iptables.v4.filter.txt
sudo ip6tables -S > ~/iptables.v6.filter.txt
sudo iptables -t nat -S > ~/iptables.v4.nat.txt
sudo ip6tables -t nat -S > ~/iptables.v6.nat.txt

The *-save files preserve restore-compatible syntax; the -S listings are easier to read while you classify rules. If your system uses other tables, export those as well, for example with iptables -t mangle -S or iptables -t raw -S.

2. Identify how you reach the machine

Record the management interface, SSH port, source addresses used by administrators, and whether a console or out-of-band recovery path exists. If the server is managed over SSH, open a second session before making changes. A second session lets you correct a rule while the first connection remains available.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

3. Preview every planned UFW change

UFW can show the commands it would apply without changing the live firewall:

sudo ufw --dry-run allow 22/tcp
sudo ufw --dry-run allow proto tcp from 203.0.113.10 to any port 22

Use a dry run for each non-trivial rule and inspect the resulting syntax before you enable UFW.

Inventory and classify the existing rules

Do not translate lines in their original order until you know which traffic path each line controls. Put every rule in one of these categories:

iptables location or purpose What it controls Migration destination
INPUT Connections terminating on this host Usually a UFW host rule such as ufw allow, deny, or reject
OUTPUT Connections initiated by this host UFW outbound rules and an intentional outgoing default
FORWARD Packets routed through the machine ufw route allow|deny|reject, forwarding policy, and kernel forwarding settings
nat Address translation, port forwarding, and masquerading UFW rule files, normally before.rules or the corresponding IPv6 file
raw, mangle, or other tables Packet marking, connection tracking exceptions, and specialized processing Rule files or the existing iptables/nftables configuration
Custom chains and unusual matches Reusable or highly specific decision logic Rule files if compatible, otherwise retain direct firewall management

Also record the default policies, interface names, address ranges, comments, counters, and any rule that depends on a prior custom chain. A superficially similar UFW rule can have a different result if its interface, direction, address family, or position changes.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Translate ordinary iptables rules to UFW syntax

The following mappings cover common host-firewall patterns. Replace example addresses, ports, and interfaces with values from your inventory.

iptables pattern UFW command Important detail
iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo ufw allow 22/tcp Allows TCP connections to local port 22 from any source permitted by the other policy rules.
Allow SSH only from one address sudo ufw allow proto tcp from 203.0.113.10 to any port 22 Use the administrator’s real public or management address; include a separate IPv6 rule when required.
Reject or deny a service sudo ufw deny 23/tcp
sudo ufw reject 23/tcp
deny silently drops; reject returns a rejection to the sender.
Rate-limit SSH attempts sudo ufw limit ssh/tcp UFW applies its built-in connection-rate limit to the SSH service.
Allow HTTP only through one interface sudo ufw allow in on eth0 to any port 80 proto tcp The interface qualifier prevents the rule from applying to other interfaces.
Allow HTTPS with logging and a comment sudo ufw allow log 443/tcp comment 'HTTPS' The comment makes later review easier; logging volume should be considered on busy services.
Outbound rule sudo ufw allow out 53/udp Use out when the original rule belongs to OUTPUT rather than INPUT.

UFW also accepts protocol, source, destination, and interface qualifiers together. For example:

sudo ufw allow in on eth0 proto tcp from 198.51.100.0/24 to any port 443

If the application profile exists on the host, inspect it first:

sudo ufw app list

Then you can use a named profile, such as sudo ufw allow OpenSSH, instead of a numeric port. Profiles differ by distribution and installed packages, so do not assume a profile exists merely because the daemon is installed.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Preserve rule order, insertion, and deletion behavior

iptables evaluates chains in order. UFW maintains its own numbered rule list, so an equivalent rule placed earlier or later can change the outcome when rules overlap. Review the planned order with:

sudo ufw status numbered

Insert a rule at a specific position when a broad rule would otherwise match first:

sudo ufw insert 1 allow 443/tcp

Delete by number after checking the current list, or delete by repeating the rule specification:

sudo ufw delete 2
sudo ufw delete allow 443/tcp

Do not use a saved line number after another deletion; run status numbered again because the remaining numbers shift.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set deliberate default policies

iptables rules often rely on a chain’s default policy. Set UFW defaults explicitly instead of assuming they match the old firewall:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny routed

Choose each value for the machine’s role. A workstation, public web server, and router have different requirements. If the old rules intentionally blocked outbound traffic or allowed routed traffic, reproduce that behavior rather than applying a generic hardening recipe.

Convert FORWARD rules with ufw route

A rule for traffic traversing the host is not an ordinary host-service rule. Use the route form:

sudo ufw route allow in on eth1 out on eth0 from 192.168.1.0/24 to any
sudo ufw route deny in on eth1 out on eth0 to 10.0.0.0/8

These commands control forwarded packets between interfaces. They do not open a service listening on the firewall host itself.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Enable kernel forwarding

UFW’s route rules cannot work if Linux forwarding is disabled. In /etc/default/ufw, set the forwarding policy required by your design, for example:

DEFAULT_FORWARD_POLICY="ACCEPT"

In /etc/ufw/sysctl.conf, enable the relevant address family:

net/ipv4/ip_forward=1
net/ipv6/conf/all/forwarding=1

Use the IPv6 setting only when the machine routes IPv6. Apply the settings using your distribution’s normal sysctl procedure, then verify that the values are enabled before testing routed traffic.

Separate host and routed tests

Test a local service from a client that should reach the firewall’s own address, and test a forwarded flow from a client on the inside interface to a destination beyond the outside interface. A successful SSH connection to the gateway does not prove that forwarding or NAT works.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep NAT and masquerading in UFW rule files

UFW’s command interface does not provide a complete NAT configuration language. Ubuntu documents /etc/ufw/*.rules as files loaded with iptables-restore; before.rules and after.rules are intended for legacy iptables rules, network gateways, and bridge-related logic.

For example, a gateway that masquerades an internal IPv4 network might merge a stanza like this into the existing NAT section of /etc/ufw/before.rules:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT

This is an illustration, not a drop-in policy: substitute the actual inside subnet and egress interface, preserve any existing *nat section, and do not create duplicate table headers or COMMIT lines. Add corresponding IPv6 logic only when the original design uses IPv6 translation and the installed backend supports it.

Keep custom chains, unusual matches, packet marks, bridge rules, and table-specific entries in the appropriate before or after file when their syntax is compatible. Validate the files for the installed iptables backend before reloading UFW. If a rule cannot be represented reliably in iptables-restore, retain direct iptables/nftables management for that part instead of silently weakening the policy.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Enable UFW without locking yourself out

  1. Add management access first. For example, use a restricted SSH rule such as sudo ufw allow proto tcp from 203.0.113.10 to any port 22, or the correct management subnet. Add IPv6 access separately if administrators connect over IPv6.
  2. Review the complete list. Run sudo ufw status numbered and check incoming, outgoing, and routed defaults.
  3. Preview risky changes. Run sudo ufw --dry-run with each planned command, especially rules involving interfaces or routes.
  4. Enable from a console or a live second session. UFW can flush chains when enabled and may drop existing connections. Keep the second SSH session or console open until new connections have been tested.
  5. Activate and verify. Run sudo ufw enable, then inspect sudo ufw status verbose and sudo ufw status numbered.
  6. Reload after file edits. When you change before.rules or after.rules, reload UFW and check for syntax errors before declaring the migration complete.

If activation cuts off access, use the console or an existing session to run sudo ufw disable, restore the saved IPv4 and IPv6 rules with the appropriate iptables-restore commands, and correct the migration before trying again. Treat the saved files as recovery material, not as a substitute for testing.

Test both address families and every traffic path

A migration is complete only when the traffic that should work works and the traffic that should fail fails. Test from known clients rather than from the firewall host alone.

  • Connect to each intentionally exposed TCP or UDP service from an allowed source.
  • Attempt the same service from a source that should be blocked.
  • Check SSH from the normal administration address and, if applicable, over IPv6.
  • Test outbound services when OUTPUT policy is restricted.
  • Test each forwarded path, including return traffic, between the correct interfaces.
  • For a gateway, verify that the translated source address and external reachability match the old behavior.
  • Inspect sudo ufw status verbose and sudo ufw status numbered after each correction so you know which rule changed.

When IPv6 is enabled, an IPv4-only migration is incomplete: IPv6 clients can otherwise follow a different policy. Export, translate, and test the IPv6 rules independently.

Know when not to convert a rule

Keep the original iptables or nftables design when any of these are central to the security policy:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Several custom chains whose order and jumps are part of the logic.
  • Matches for packet size, time of day, marks, connection state combinations, or other conditions without a direct UFW equivalent.
  • Rules in raw, mangle, or specialized tables.
  • Complex DNAT, SNAT, port-forwarding, bridge, or multi-interface gateway behavior.
  • Inspection that spans multiple layers or depends on backend-specific nftables features.

UFW can coexist with file-based rules, but a split configuration needs clear ownership. Document which policy is managed by UFW commands, which lines live in before.rules or after.rules, and which service owns any remaining direct rules. Otherwise a later reload or package update can overwrite an assumption that was never recorded.

iptables, nftables, and UFW: choosing the right layer

Decision axis UFW Direct iptables or nftables
Common host allow/deny rules Readable commands, numbered review, simple insertion and deletion More verbose and operationally manual
Custom chains and granular matches Limited command interface; use rule files where compatible Full control over chains, matches, tables, and targets
Forwarded traffic Supported through ufw route plus forwarding policy and sysctl settings Direct control of FORWARD and related chains
NAT and gateway work Normally requires before.rules/after.rules and careful restore syntax Native, explicit NAT configuration
Migration risk Lower for ordinary host rules; unsupported behavior can be lost if translated blindly Preserves the existing model but has a steeper operational burden
Best fit Servers and workstations with straightforward stateful host policy Routers, bridges, high-granularity policies, and systems requiring specialized inspection

The practical choice is often mixed: express the host’s ordinary service policy in UFW, keep gateway and specialized rules in the rule files, and leave the entire configuration in direct iptables or nftables when the unsupported portion is the security-critical part.

Migration checklist

  • Saved active IPv4 and IPv6 rules, including NAT and non-filter tables.
  • Recorded SSH access, interfaces, management sources, defaults, and recovery access.
  • Separated INPUT, OUTPUT, FORWARD, NAT, raw, mangle, and custom-chain logic.
  • Translated only rules that have a clear UFW equivalent.
  • Added SSH access before enabling and previewed changes with --dry-run.
  • Used ufw route and enabled kernel forwarding for routed traffic.
  • Placed NAT and unsupported rules in validated before.rules or after.rules files.
  • Checked numbered order, comments, logging, and both IPv4 and IPv6 behavior.
  • Tested allowed, denied, outbound, forwarded, and translated traffic from known clients.
  • Kept the original saves and a console-based rollback path until the new policy had operated successfully.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.