postgres)的密码,使用强密码(包含大小写字母、数字和特殊字符,长度不少于12位),避免使用默认密码。使用ufw(Uncomplicated Firewall)限制对PgAdmin的访问,仅允许特定IP地址或IP段(如公司办公IP、个人常用IP)访问PgAdmin服务;允许PgAdmin使用的端口(默认为5050,可根据需要修改为非标准端口,如5433)通过防火墙,阻止其他不必要的端口。
sudo ufw allow from 192.168.1.100 to any port 5050 # 允许特定IP访问
sudo ufw enable # 启用防火墙
sudo mkdir -p /etc/pgadmin4/ssl
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/pgadmin4/ssl/pgadmin.key -out /etc/pgadmin4/ssl/pgadmin.crt
/etc/pgadmin4/config_local.py,添加证书路径:SSL_CERTFILE = '/etc/pgadmin4/ssl/pgadmin.crt'
SSL_KEYFILE = '/etc/pgadmin4/ssl/pgadmin.key'
sudo chown root:pgadmin /etc/pgadmin4/ssl/pgadmin.key /etc/pgadmin4/ssl/pgadmin.crt
sudo chmod 640 /etc/pgadmin4/ssl/pgadmin.key /etc/pgadmin4/ssl/pgadmin.crt
sudo systemctl restart pgadmin4
https://<服务器IP>:5051(默认端口为5051),确认地址栏显示锁图标(表示HTTPS加密连接成功)。postgresql.conf,开启SSL并指定证书路径:ssl = on
ssl_cert_file = '/etc/postgresql/<版本>/main/server.crt'
ssl_key_file = '/etc/postgresql/<版本>/main/server.key'
pg_hba.conf,强制要求远程客户端通过SSL连接:hostssl all all 0.0.0.0/0 md5
sudo systemctl restart postgresql
编辑pg_hba.conf文件(通常位于/etc/postgresql/<版本>/main/),限制允许连接到数据库的用户和IP地址。例如,仅允许本地用户通过密码认证连接:
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
修改后重启PostgreSQL服务:
sudo systemctl restart postgresql
pg_read_all_data用于只读访问),点击“Save”。SELECT、INSERT),或创建角色(如data_reader)复用权限。admin账户或修改其密码,防止未授权访问。定期更新PostgreSQL数据库服务器和PgAdmin到最新稳定版本,修复已知安全漏洞。使用以下命令更新系统软件包:
sudo apt update && sudo apt upgrade -y
关注PgAdmin官方安全公告(如GitHub Releases页面),及时应用安全补丁。
/var/log/pgadmin/目录下,定期检查pgadmin4.log文件,关注异常登录、未授权操作等行为。postgresql.conf,开启详细日志记录:log_statement = 'all'
log_connections = on
log_disconnections = on
重启PostgreSQL服务后,日志将记录所有数据库操作,便于后续审计。定期备份PostgreSQL数据库,使用pg_dump工具创建完整备份或增量备份,将备份文件存储在安全位置(如异地服务器、云存储)。例如:
pg_dump -U postgres -h localhost -F c -b -v -f /backup/pgdb_backup.dump mydatabase
测试备份文件的恢复流程,确保在安全事件(如数据泄露、系统崩溃)发生时能够快速恢复数据。
postgresql.conf关闭未使用的功能:wal_level = replica # 仅保留必要的WAL级别
max_replication_slots = 0 # 禁用复制槽
server {
listen 443 ssl;
server_name pgadmin.example.com;
ssl_certificate /etc/letsencrypt/live/pgadmin.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pgadmin.example.com/privkey.pem;
location / {
proxy_pass http://localhost:5050;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}