Skip to content

Commit fa31213

Browse files
committed
conf(node): default firewall to zone with single-node 5432 override
1 parent bb8382c commit fa31213

11 files changed

Lines changed: 60 additions & 62 deletions

File tree

README.md

Lines changed: 41 additions & 42 deletions
Large diffs are not rendered by default.

conf/demo/debian.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ all:
412412
# NODE_SEC
413413
#-----------------------------------------------------------------
414414
node_selinux_mode: permissive # set selinux mode: enforcing,permissive,disabled
415-
node_firewall_mode: zone # firewall mode: none (skip), off (disable), zone (enable & config)
415+
node_firewall_mode: zone # firewall mode: zone (default), off (disable), none (skip & self-managed)
416416
node_firewall_intranet: # which intranet cidr considered as internal network
417417
- 10.0.0.0/8
418418
- 192.168.0.0/16
@@ -421,7 +421,6 @@ all:
421421
- 22 # enable ssh access
422422
- 80 # enable http access
423423
- 443 # enable https access
424-
- 5432 # enable postgresql access (think twice before exposing it!)
425424

426425
#-----------------------------------------------------------------
427426
# NODE_TUNE

conf/demo/el.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ all:
419419
# NODE_SEC
420420
#-----------------------------------------------------------------
421421
node_selinux_mode: permissive # set selinux mode: enforcing,permissive,disabled
422-
node_firewall_mode: zone # firewall mode: none (skip), off (disable), zone (enable & config)
422+
node_firewall_mode: zone # firewall mode: zone (default), off (disable), none (skip & self-managed)
423423
node_firewall_intranet: # which intranet cidr considered as internal network
424424
- 10.0.0.0/8
425425
- 192.168.0.0/16
@@ -428,7 +428,6 @@ all:
428428
- 22 # enable ssh access
429429
- 80 # enable http access
430430
- 443 # enable https access
431-
- 5432 # enable postgresql access (think twice before exposing it!)
432431

433432
#-----------------------------------------------------------------
434433
# NODE_TUNE

conf/ha/safe.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,7 @@ all:
165165
repo_remove: true # remove existing repo on admin node during repo bootstrap
166166
node_repo_remove: true # remove existing node repo for node managed by pigsty
167167
#node_selinux_mode: enforcing # set selinux mode: enforcing,permissive,disabled
168-
node_firewall_mode: zone # firewall mode: none (skip), off (disable), zone (enable & config)
169-
168+
node_firewall_mode: zone # firewall mode: zone (default), off (disable), none (skip & self-managed)
170169
repo_extra_packages: [ pg18-main ] #,pg18-core ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
171170
pg_version: 18 # default postgres version
172171
#pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]

conf/ha/simu.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ all:
299299
#==========================================================#
300300
node_id_from_pg: true # use nodename rather than pg identity as hostname
301301
node_tune: tiny # use small node template
302+
node_firewall_mode: zone # default: trust intranet, expose selected public ports
302303
node_timezone: Asia/Hong_Kong # use Asia/Hong_Kong Timezone
303304
node_dns_servers: # DNS servers in /etc/resolv.conf
304305
- 10.10.10.10

conf/meta.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ all:
148148
#node_repo_modules: local # use this if you want to build & user local repo
149149
node_repo_remove: true # remove existing node repo for node managed by pigsty
150150
#node_packages: [openssh-server] # packages to be installed current nodes with the latest version
151+
node_firewall_public_port: [22, 80, 443, 5432] # expose 5432 for demo convenience, remove in production!
151152

152153
#----------------------------------------------#
153154
# PGSQL : https://pigsty.io/docs/pgsql/param

conf/vibe.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ all:
5858
node_repo_modules: node,infra,pgsql # add these repos directly to the singleton node
5959
node_packages: [ openssh-server, juicefs, restic, rclone, uv, opencode, golang, asciinema, tmux ]
6060
docker_enabled: true # enable docker service
61-
node_firewall_mode: none # change to 'zone' to enable firewall
62-
node_firewall_public_port: [22, 80, 443, 5432] # add custom public ports
61+
node_firewall_mode: zone # default: trust intranet, expose selected public ports
62+
node_firewall_public_port: [22, 80, 443, 5432] # expose 5432 for remote access, remove in production!
6363
#docker_registry_mirrors: ["https://docker.1panel.live","https://docker.1ms.run","https://docker.xuanyuan.me","https://registry-1.docker.io"]
6464

6565
#----------------------------------------------#

files/cmdb.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,9 +1380,9 @@ INSERT INTO pigsty.default_var VALUES
13801380
(226, 'node_pip_packages', '""', 'NODE', 'NODE_PACKAGE', 'string', 'C', 'pip packages to be installed in uv venv', NULL),
13811381

13821382
(230, 'node_selinux_mode', '"permissive"', 'NODE', 'NODE_SEC', 'enum', 'C', 'selinux mode: enforcing,permissive,disabled', NULL),
1383-
(231, 'node_firewall_mode', '"none"', 'NODE', 'NODE_SEC', 'enum', 'C', 'firewall mode: none (skip), off (disable), zone (enable & config)', NULL),
1383+
(231, 'node_firewall_mode', '"zone"', 'NODE', 'NODE_SEC', 'enum', 'C', 'firewall mode: zone (default), off (disable), none (skip & self-managed)', NULL),
13841384
(232, 'node_firewall_intranet', '["10.0.0.0/8","192.168.0.0/16","172.16.0.0/12"]', 'NODE', 'NODE_SEC', 'cidr[]', 'C', 'node trusted intranet cidr list', NULL),
1385-
(233, 'node_firewall_public_port', '[22,80,443,5432]', 'NODE', 'NODE_SEC', 'port[]', 'C', 'ports open to public in zone mode', NULL),
1385+
(233, 'node_firewall_public_port', '[22,80,443]', 'NODE', 'NODE_SEC', 'port[]', 'C', 'ports open to public in zone mode', NULL),
13861386

13871387
(240, 'node_disable_numa', 'false', 'NODE', 'NODE_TUNE', 'bool', 'C', 'disable node numa, reboot required', NULL),
13881388
(241, 'node_disable_swap', 'false', 'NODE', 'NODE_TUNE', 'bool', 'C', 'disable node swap, use with caution', NULL),

roles/node/README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ node (full role)
127127
| Variable | Default | Description |
128128
|----------------------|---------|-------------------------------------------------------------------|
129129
| `node_selinux_mode` | `enum` | set selinux mode: enforcing,permissive,disabled |
130-
| `node_firewall_mode` | `enum` | firewall mode: none (skip), off (disable), zone (enable & config) |
130+
| `node_firewall_mode` | `enum` | firewall mode: zone (default), off (disable), none (skip & self-managed) |
131131

132132

133133
### Packages
@@ -215,14 +215,15 @@ Some features have OS-specific implementations:
215215

216216
## Security Considerations
217217

218-
The default configuration prioritizes **convenience for development/testing**.
218+
The default configuration provides a baseline secure stance while keeping development convenient.
219219
For production environments, review and adjust the following:
220220

221221
| Setting | Default | Production Recommendation |
222222
|-----------------------------|-----------------|---------------------------------------------|
223223
| `node_admin_sudo` | `nopass` | Use `limit` or `all` for least privilege |
224224
| `node_selinux_mode` | `permissive` | Consider `enforcing` for critical systems |
225-
| `node_firewall_public_port` | includes `5432` | Remove PostgreSQL port from public exposure |
225+
| `node_firewall_mode` | `zone` | Keep `zone`; use `none` only if self-managed |
226+
| `node_firewall_public_port` | `[22, 80, 443]` | Add extra ports (e.g. 5432) only when required |
226227
| `vip_auth_pass` | auto-generated | Set explicit strong password |
227228

228229
**Recommended production settings**:
@@ -231,7 +232,7 @@ For production environments, review and adjust the following:
231232
node_admin_sudo: limit # Limited sudo commands without password
232233
node_selinux_mode: enforcing # Full SELinux enforcement
233234
node_firewall_mode: zone # trust intranet, expose 22 80 443 only
234-
node_firewall_public_port: [22, 80, 443] # Remove 5432 from public
235+
node_firewall_public_port: [22, 80, 443] # Minimal public exposure
235236
vip_auth_pass: '<strong-secret>' # Explicit VRRP authentication
236237
```
237238
@@ -242,7 +243,7 @@ Ensure your network is trusted or use a bastion host.
242243

243244
## Firewall Management
244245

245-
Enable firewall with `node_firewall_mode: zone`, then apply: `./node.yml -l <target> -t node_firewall`
246+
`node_firewall_mode` defaults to `zone` (trusted intranet + restricted public ports). Re-apply firewall rules with: `./node.yml -l <target> -t node_firewall`
246247

247248
> **Note**: Firewall rules are **additive only**. To remove rules, use manual commands:
248249

roles/node/defaults/main.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ node_pip_packages: '' # pip packages to be installed in uv venv
3434
# NODE_SEC
3535
#-----------------------------------------------------------------
3636
node_selinux_mode: permissive # set selinux mode: enforcing,permissive,disabled
37-
node_firewall_mode: none # firewall mode: none (skip), off (disable), zone (enable & config)
37+
node_firewall_mode: zone # firewall mode: zone (default), off (disable), none (skip & self-managed)
3838
node_firewall_intranet: # which intranet cidr considered as internal network
3939
- 10.0.0.0/8
4040
- 192.168.0.0/16
@@ -43,7 +43,6 @@ node_firewall_public_port: # expose these ports to public network in (zon
4343
- 22 # enable ssh access
4444
- 80 # enable http access
4545
- 443 # enable https access
46-
- 5432 # enable postgresql access (think twice before exposing it!)
4746

4847
#-----------------------------------------------------------------
4948
# NODE_TUNE

0 commit comments

Comments
 (0)