Hi everyone π !
This release significantly improves the security of the application by running on a read-only filesystem. Because of this major internal change, manual migration steps are required. The user data Docker volume paths have moved from /app to /data, and a tmpfs mount is now required for all writable directories. Find a sample docker-compose.yml template below and read the Migration docs for details on how the permissions changed. Also ensure you re-save the settings after the migration (See details below on why).
A big thanks to @adamoutler who rewrote the installation scripts and created a comprehensive pre-initialization check, enhancing the code-base with linting checks, created a devcontainer to speed-up development and various other additions.
This version also adds a PIHOLEAPI plugin that leverages the new v6 API for device retrieval from your PiHole instance. Thank you to @leiweibau for the bulk of the code from his PiAlert project.
Thanks also to @JVKeller for help with the bare-metal install.
As always, thank you to all translators: @GitSpoon , @maksim2005UKR , @mapi68 , "R" , @Atalanttore , "anton garcias", @YoSafeguard , @AlmaziikDev , "jeet moh", @Blueberryy , @p-bo , @bo3bdo , "Carlos M. Silva"
Minimum required docker-compose.yml template:
services:
netalertx:
container_name: netalertx
image: "ghcr.io/jokob-sk/netalertx" # π This has changed
network_mode: "host"
cap_drop: # π New line
- ALL # π New line
cap_add: # π New line
- NET_RAW # π New line
- NET_ADMIN # π New line
- NET_BIND_SERVICE # π New line
restart: unless-stopped
volumes:
- /local_data_dir:/data # π This folder contains your /db and /config directories and the parent changed from /app to /data
# Ensuring the timezone is the same as on the server - make sure also the TIMEZONE setting is configured
- /etc/localtime:/etc/localtime:ro # π New line
environment:
- PORT=20211
# π New "tmpfs" section START π½
tmpfs:
# All writable runtime state resides under /tmp; comment out to persist logs between restarts
- "/tmp:uid=20211,gid=20211,mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"
# π New "tmpfs" section END πΌ
See the Migration docs for details as the folders and files need to be owned by a 20211 user and group.
β Known issues:
- See open issues.
π Changelog
π Breaking changes
Sometimes I have to introduce breaking changes
- β° Reminder: Due to code refactoring in order to upgrade to this version from a version before
v25.5.24, you have to upgrade tov25.5.24before upgrading to this version). See the upgrades docs for details. - π Due to language string cleanup you will have to select your
UI_LANGagain and re-save your settings. - π Due to the format of the
SMTP_PASSsetting changes you will have to re-save your settings. - π The
TZ=Europe/Berlindocker variable was replaced by a more common approach mapping- v /etc/localtime:/etc/localtime:ro - π Due to security hardening the docker container volume locations changed, from
/appto/dataand a newtmpfsmount for all writable directories was added. See Migration docs for details.
Warning
- β οΈUPCOMING: The port of the sync nodes for the SYNC plugin will change to the value of the
GRAPHQL_PORTsetting. Both ports are currently supported, so please update your configuration to point to the new port in theSYNC_hub_urlandSYNC_nodessettings. - β οΈUPCOMING: If you have implemented external applications using the OLD API endpoints, please migrate to the NEW API endpoints.
πNew capabilities
ARPSCAN_DURATIONsetting to runARPSCANfor a longer time to try to discover IoT or similar devices #1172- Device name in page titles #1162
UI_DEFAULT_PAGE_SIZEsetting to change the default page size #1181NEWDEV_IP_MATCH_NAMEsetting to disable name discovery and matching based on IP if you don't have static IPs on your networkPIHOLEAPIplugin to connect to your PiHole instance via API #1282- Notifications now contain a link to the server in the footer as per the
REPORT_DASHBOARD_URLsetting #1267
β¨Fixes and Improvements
eventsnotifications enabled on theInternetroot node and using theSYNCplugin led to IP flipping #1207app.logline break fixLOG_LEVELnot respected #1217- Compound notification filters didn't work #1210
- The Device tile for
All devicesdidn't work properly #1238 SNMPDSCdidn't respect timeout settings #1231- Multi-edit preventing error if no devices selected #1219
SMTP_PASSdidn't allow for'quotes in passwords #1253- Devices with number-only names caused Network topology page error #1281
- You can now use the
--vlanparameter if you have bothNMAPDEVandARPSCANenabled #1264 - Performance optimizations of name lookups #1251
- Better invalid data handling of the
UNIFIAPIplugin #1224 - More robust args handling in the
NMAPplugin #1288 - Better SCHEDULE cron value validation #1306
π Current priorities
- High priority: Settings, Workflows and Plugins core improvements
- Low priority: UI (PRs welcome, but follow guidelines)
π Known issues
- See also π fixes below and the Issues tracker
If you have any debug info/suggestions regarding the above, please open a separate issue, thanks! π€
What's Changed
- fix: Support compound conditions in SafeConditionBuilder (Issue #1210) by @PreistlyPython in #1211
- Baremetal installer by @JVKeller in #1212
- Update timestamp format to use UTC timezone by @adamoutler in #1216
- Fix install script references in HW_INSTALL.md by @gonzague in #1213
- Update HW_INSTALL.md by @JVKeller in #1222
- Update README.md by @JVKeller in #1223
- Add script to regenerate the database from schema by @adamoutler in #1229
- Feat: Enterprise-Grade Security Hardening and Build Overhaul by @adamoutler in #1230
- Rename CONTRIBUTING to CONTRIBUTING.md by @AlmazzikDev in #1236
- Change branch back to main. by @JVKeller in #1237
- sync by @jokob-sk in #1244
- Hardening fixes by @adamoutler in #1235
- Security features overview by @adamoutler in #1247
- Easy permissions by @adamoutler in #1248
- Sync by @jokob-sk in #1249
- Fix typo in PiHole integration guide by @Tweebloesem in #1255
- update docker compose by @adamoutler in #1256
- BE: Remove GraphQL check from healthcheck by @jokob-sk in #1257
- BE: fix GRAPHQL_PORT by @jokob-sk in #1258
- BE: Devices Tiles SQL syntax error #1238 by @jokob-sk in #1260
- Next release by @jokob-sk in #1245
- Feat: make errors more helpful by @adamoutler in #1263
- Fix permissions on Synology by @adamoutler in #1268
- next_release by @jokob-sk in #1261
- sync by @jokob-sk in #1269
- sync by @jokob-sk in #1272
- Fix typo in Baseline Docker Compose - DOCKER_COMPOSE.md by @alexhk in #1278
- Pr 1279 by @jokob-sk in #1280
- Data and tmp standardization by @adamoutler in #1279
- Next release by @jokob-sk in #1271
- Fix: Fix for ports by @adamoutler in #1286
- Add missing .VERSION file by @adamoutler in #1287
- Add .VERSION to gitignore by @adamoutler in #1290
- Add VERSION file creation by @adamoutler in #1295
- Test fixes by @adamoutler in #1291
- Update Docker Compose documentation for volume usage by @adamoutler in #1296
- Improve CI code checks (URL path, Python syntax, linting, tests) by @adamoutler in #1289
- feat: docker-based testing by @adamoutler in #1299
- BE: linting fixes by @jokob-sk in #1300
- Replace crond with Supercronic, improve cron logging & backend restart behavior by @adamoutler in #1302
- ShellCheck Lint: Fix All Reported Issues in Service Scripts by @adamoutler in #1303
- Fix Hadolint Linting Issues Across Dockerfiles by @adamoutler in #1304
New Contributors
- @JVKeller made their first contribution in #1212
- @gonzague made their first contribution in #1213
- @AlmazzikDev made their first contribution in #1236
- @Tweebloesem made their first contribution in #1255
- @alexhk made their first contribution in #1278
Full Changelog: v25.10.1...v25.11.29