Hi there,

For more than 6 years, OPNsense is driving innovation through modularising and hardening the open source firewall, with simple and reliable firmware upgrades, multi-language support, HardenedBSD security, fast adoption of upstream software updates as well as clear and stable 2-Clause BSD licensing.

21.1, nicknamed "Marvelous Meerkat", is the relentless continuation of open source dedication. The last 6 years were not always easy, but we are happy to be where we are now and have the community to thank for it.

New and improved are the firewall rules and NAT categories, the traffic graphs supporting IPv6 along with a visual refresh, intrusion detection rule management by policies, an alias for MAC addresses and NAT over IPsec with all phase 2 you could ever want. Last but not least, the serial image now supports UEFI as well.

For those wondering, the WireGuard plugin has been available since 2019 and receives continuous improvements by its maintainer and various users alike. And that is unlikey to change in the future. ;)

As we continue to deprecate custom configuration inputs for a number of reasons, Dnsmasq has been switched to a pluggable file-based approach[1] with Unbound to follow in the upcoming 21.7 series.

Download links, an installation guide[2] and the checksums for the images can be found below as well.

- Europe: https://opnsense.c0urier.net/releases/21.1/
- US East Coast: http://mirrors.nycbug.org/pub/opnsense/releases/21.1/
- US West Coast: https://mirror.sfo12.us.leaseweb.net/opnsense/releases/21.1/
- South America: https://mirror.venturasystems.tech/opnsense/releases/21.1/
- Australia: http://mirror.as24220.net/opnsense/releases/21.1/
- Full mirror list: https://opnsense.org/download/

Here are the full patch notes against 20.7.8:

- system: use authentication factory for web GUI login
- system: allow case-insensitive matching for LDAP user authentication
- system: removed unused gateway API dashboard feed
- system: removed spurious comma from certificate subject print and unified underlying code
- system: harden web GUI defaults to TLS 1.2 minimum and strong ciphers
- system: generate a better self-signed certificate for web GUI default
- system: allow self-signed renew for web GUI default (using "configctl webgui restart renew")
- system: allow subdirectories in NextCloud backup (contributed by Lorenzo Milesi)
- system: first backup is same as current so ignore it on GUI and console
- system: optionally allow TOTP users to regenerate a token from the password page
- system: set hw.uart.console appropriately
- system: reconfigure routes on bootup
- system: relax gateway name validation
- system: ignore disabled gateways in dpinger services
- system: choose a better bind candidate for IPv4 in dpinger
- interfaces: defer IPv6 disable in interface code to ensure PPP interfaces do exist
- interfaces: no longer assume configuration-less interfaces can reach static setup code
- interfaces: fix PPP links not linking to its advanced configuration page
- interfaces: read deprecated flag, allow family spec in (-)alias calls
- interfaces: fix address removal in IPv6 CARP case
- interfaces: pick proper route for 6RD and 6to4 tunnels
- interfaces: support 6RD with single /64 prefix (contributed by Marcel Hofer)
- firewall: support category filters for firewall and NAT rules[3] (sponsored by Modirum)
- firewall: add live log "host", "port" and "not" filters
- firewall: create an appropriate max-mss scrub rule for IPv6
- firewall: fix anti-spoof option for separate bridge interfaces
- firewall: display zeros and sort columns in pfTables (contributed by kulikov-a)
- firewall: relax schedule name validation
- reporting: prevent calling top talkers when no interfaces are selected
- reporting: cleanup deselected interface rows in top talkers
- dhcp: hostname validation now includes domain
- dhcp: use same logic as menu figuring out if DHCPv6 page is reachable from leases
- dhcp: correct DHCPv6 custom options unsigned integer field (contributed by Team Rebellion)
- dhcp: added toggle for disabling RDNSS in router advertisements (contributed by Team Rebellion)
- dhcp: removed the need for a static IPv4 being outside of the pool (contributed by Gauss23)
- dhcp: add min-secs option for each subnet (contributed by vnxme)
- dnsmasq: remove advanced configuration in favour of plugin directory
- dnsmasq: use domain override for static hosts
- firmware: disable autoscroll if client position differs
- firmware: remove spurious *.pkgsave files and offload post install bits to rc.syshook
- firmware: repair display of removed packages during release type transition
- firmware: add ability to run audits from the console
- firmware: show repository in package and plugin overviews
- intrusion detection: replace file-based policy changes with detailed filters
- ipsec: NAT with multiple phase 2[4] (sponsored by m.a.x. it)
- ipsec: prevent VTI interface to hit spurious 32768 limit
- ipsec: allow mixed IPv4/IPv6 for VTI
- openvpn: added toggle for block-outside-dns (contributed by Julio Camargo)
- openvpn: hide "openvpn_add_dhcpopts" fields when not parsed via the backend
- unbound: allow /0 in ACL network
- unbound: default to SO_REUSEPORT
- web proxy: add GSuite and YouTube filtering (contributed by Julio Camargo)
- mvc: do not discard valid application/json content type headers
- mvc: make sure isArraySequential() is only true on array input
- mvc: speed up processing time when over 2000 users are selected in a group
- mvc: add locking in JsonKeyValueStoreField type
- mvc: change LOG_LOCAL4 to LOG_LOCAL2 in base model
- images: use UFS2 as the default for nano, serial and vga
- images: support UEFI boot in serial image
- ui: add tooltips for service control widget
- ui: move sidebar stage from session to local storage
- ui: upgrade Tokenize2 to v1.3.3
- plugins: os-acme-client 2.3[5]
- plugins: os-bind 1.16[6]
- plugins: os-frr 1.21[7]
- plugins: os-maltrail 1.6[8] (contributed by jkellerer)
- plugins: os-smart adds cron jobs for useful actions (contributed by Jacek Tomasiak)
- plugins: os-telegraf 1.8.3 adds ping6 ability (contributed by DasSkelett)
- src: fix AES-CCM requests with an AAD size smaller than a single block
- src: introduce HARDEN_KLD to ensure DTrace functionality
- src: refine pf_route* behaviour in PF_DUPTO case for shared forwarding
- src: assorted upstream fixes for ipfw, iflib, multicast processing and pf
- src: netmap tun(4) support adds pseudo addresses to ethernet header emulation (contributed by Sunny Valley Networks)
- src: add a manual page for axp(4) / AMD 10G Ethernet driver
- src: fix traffic graph not showing bandwidth when IPS is enabled
- ports: dnsmasq 2.83[9]
- ports: igmpproxy 0.3[10]
- ports: nss 3.61[11]
- ports: openldap 2.4.57[12]
- ports: py-netaddr 0.8.0[13]
- ports: sudo 1.9.5p2[14]

The public key for the 21.1 series is:

    -----BEGIN PUBLIC KEY-----
    MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtiv4C8TPBnVAxUS+xW3W
    uYhAOuLCZPA6F22Qatit4PVHI7AzfLbGjCQFZqjO+HRPVCmeiyggQWE4ZBOQrhbq
    Em/NqmnDVos2rdGfEvp5miY4fstebtHI9CPv26QswgO7bsoJuCUoSmtGTbgNXyaF
    ueNYTSXNEpWu35tQS830NCLW5Y6elfK99gxmNChlGdlz0wchaSA+myR6xH+TUw8L
    D+87Tny/R2guC9Q0XnsKpKeOMxkNh0X3H0GsmcWmyV0rGAiMh6GuJXIN/yhNMkaD
    wuHomqxd1OAyGLz9BjDNRKZ+b+y0iVpEx3qsDWlradtf8sUKZHJ96lf0jCRhEPvl
    v1+QkAOzsauWBr3UtFbkKfHONpuwb5XVNgAJzFIRrnGhmWRXD7liiShOP4O+KBP1
    Dzxs/X0plXgX2hOgzMbtgCMj4M1sV5HhKUrwiyqBpoe5nESJVrQ/DxETwEZIFoHy
    hwQxd/DDp7uJmZlCkveuZeUAo7pfTUVchDpe2GB54bHEhIn3OES93PURMQtQxB12
    mubV52vcfvzLnbv5FL5lMK/cgl64ip2bRu1jcB3wsKrKcGyUbtYJQDnHpowWrs5h
    RdMHSfLyaC8ROMKhZmJTe141wr5p8d+NmgjlDblnNmUJ0jHVJeP0+RO/OcY/o3Zt
    2MxL1Yp2cUu2l1HEmyrCsIcCAwEAAQ==
    -----END PUBLIC KEY-----

Stay safe,
Your OPNsense team

    SHA256 (OPNsense-21.1-OpenSSL-dvd-amd64.iso.bz2) = 936301cb53c7c3474171a076594bb00a29827b4aa1c9aa8dac7519e447f7ec81
    SHA256 (OPNsense-21.1-OpenSSL-nano-amd64.img.bz2) = e5116c5037f4b4bbc68708e8f14ce023508ccf585164b778d6c158f170ea202f
    SHA256 (OPNsense-21.1-OpenSSL-serial-amd64.img.bz2) = 472c8568d8c4a54743b3a2b1bc720e83c04cc2c63d68df1376c207f25b98ae20
    SHA256 (OPNsense-21.1-OpenSSL-vga-amd64.img.bz2) = 44a930151472954626c237a1255712e6e7c542d7ac3c5317a74618d08ce36bbf