Skip to content

KingBaseES 监听器安全配置

监听器概述

监听器是KingBaseES数据库的重要组件,负责接收客户端连接请求并建立数据库连接。监听器的安全配置直接影响数据库系统的安全性,不当的配置可能导致未授权访问、端口扫描攻击等安全风险。

监听器配置文件

监听器配置文件位置

KingBaseES监听器配置文件通常位于数据库安装目录的data目录下,文件名为kingbase.confpg_hba.conf。其中,kingbase.conf配置监听器的基本参数,pg_hba.conf配置客户端访问控制。

sql
-- 查看监听器配置文件位置
SHOW config_file;
SHOW hba_file;

监听器核心配置参数

sql
-- 查看当前监听器配置
SHOW listen_addresses;
SHOW port;
SHOW max_connections;
SHOW superuser_reserved_connections;

-- 修改监听器配置
ALTER SYSTEM SET listen_addresses = '127.0.0.1,192.168.1.100';
ALTER SYSTEM SET port = 54321;
ALTER SYSTEM SET max_connections = 500;

-- 重新加载配置
SELECT sys_reload_conf();

监听器安全加固

1. 限制监听地址

sql
-- 只监听本地地址
ALTER SYSTEM SET listen_addresses = '127.0.0.1';

-- 监听特定IP地址
ALTER SYSTEM SET listen_addresses = '192.168.1.100';

-- 监听多个IP地址
ALTER SYSTEM SET listen_addresses = '127.0.0.1,192.168.1.100';

-- 禁止监听所有地址(不推荐)
ALTER SYSTEM SET listen_addresses = '';

2. 修改默认端口

sql
-- 修改监听器端口
ALTER SYSTEM SET port = 54321;

-- 重启数据库使端口修改生效
-- sys_ctl restart -D /path/to/data

3. 配置端口访问控制

sql
-- 查看当前pg_hba.conf配置
SELECT * FROM sys_hba_file_rules;

-- 编辑pg_hba.conf文件,配置访问控制规则
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# 只允许特定IP访问
host    all             all             192.168.1.100/32         md5
# 只允许特定网段访问
host    all             all             192.168.1.0/24           md5
# 拒绝所有其他IP访问
host    all             all             0.0.0.0/0                reject

-- 重新加载pg_hba.conf配置
SELECT sys_reload_hba_conf();

监听器日志管理

配置监听器日志

sql
-- 查看监听器日志配置
SHOW log_connections;
SHOW log_disconnections;
SHOW log_line_prefix;

-- 启用连接日志
ALTER SYSTEM SET log_connections = on;
ALTER SYSTEM SET log_disconnections = on;
ALTER SYSTEM SET log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ';

-- 重新加载配置
SELECT sys_reload_conf();

分析监听器日志

bash
# 查看监听器日志文件位置
SHOW log_directory;
SHOW log_filename;

# 实时查看监听器日志
tail -f /path/to/logs/kingbase.log

# 统计连接次数
grep "connection received" /path/to/logs/kingbase.log | wc -l

# 查找失败的连接尝试
grep "authentication failed" /path/to/logs/kingbase.log

监听器安全监控

监控监听器状态

sql
-- 查看监听器状态
SELECT * FROM sys_stat_listener;

-- 查看当前连接信息
SELECT pid, usename, datname, client_addr, client_port, application_name, state
FROM sys_stat_activity;

-- 监控连接尝试
SELECT 
    client_addr,
    count(*) AS connection_attempts
FROM 
    sys_log
WHERE 
    message LIKE '%connection received%'
GROUP BY 
    client_addr
ORDER BY 
    connection_attempts DESC;

监听器性能监控

sql
-- 查看连接数统计
SELECT 
    state,
    count(*) AS connection_count
FROM 
    sys_stat_activity
GROUP BY 
    state;

-- 查看连接时间分布
SELECT 
    usename,
    datname,
    state,
    now() - query_start AS duration
FROM 
    sys_stat_activity
WHERE 
    state = 'active'
ORDER BY 
    duration DESC;

监听器故障处理

监听器无法启动

bash
# 查看监听器启动日志
tail -n 100 /path/to/data/kingbase.log

# 检查端口是否被占用
netstat -tuln | grep 54321

# 检查监听地址配置
cat /path/to/data/kingbase.conf | grep listen_addresses

# 检查防火墙设置
iptables -L -n | grep 54321

监听器连接失败

sql
-- 检查pg_hba.conf配置
SELECT * FROM sys_hba_file_rules;

-- 检查用户权限
SELECT * FROM sys_roles WHERE rolname = 'user_name';

-- 检查密码是否正确
-- 重置用户密码
ALTER ROLE user_name WITH PASSWORD 'new_password';

版本差异

KingBaseES V8 R6

  • 监听器配置相对简单
  • 支持基本的监听地址限制和端口配置
  • 支持pg_hba.conf访问控制
  • 监听器日志功能有限

KingBaseES V8 R7

  • 增强了监听器安全功能
  • 支持更细粒度的访问控制
  • 提供了更丰富的监听器监控视图
  • 增强了监听器日志功能
  • 支持监听器性能统计
sql
-- V8 R7新增:监听器详细状态视图
SELECT * FROM sys_stat_listener;

-- V8 R7新增:连接统计视图
SELECT * FROM sys_stat_connections;

-- V8 R7新增:监听器性能指标
SELECT * FROM sys_stat_bgwriter;

常见问题(FAQ)

1. 如何查看监听器是否正在运行?

bash
# 使用ps命令查看监听器进程
ps -ef | grep kingbase

# 使用netstat命令查看端口是否监听
netstat -tuln | grep 54321

# 使用sys_stat_listener视图查看(V8 R7)
SELECT * FROM sys_stat_listener;

2. 如何限制特定IP访问监听器?

sql
-- 方法1:修改listen_addresses参数
ALTER SYSTEM SET listen_addresses = '192.168.1.100';

-- 方法2:配置pg_hba.conf
# 在pg_hba.conf中添加
# host    all             all             192.168.1.0/24           md5
# host    all             all             0.0.0.0/0                reject

3. 如何修改监听器端口?

sql
-- 修改port参数
ALTER SYSTEM SET port = 54321;

-- 重启数据库使端口修改生效
-- sys_ctl restart -D /path/to/data

4. 如何查看监听器日志?

bash
# 查看日志文件位置
SHOW log_directory;
SHOW log_filename;

# 查看日志内容
tail -f /path/to/logs/kingbase.log

5. 如何处理监听器连接数达到上限?

sql
-- 增加最大连接数
ALTER SYSTEM SET max_connections = 1000;

-- 终止空闲连接
SELECT sys_terminate_backend(pid) FROM sys_stat_activity WHERE state = 'idle';

-- 优化应用程序,减少连接数

6. 如何防止监听器被暴力破解?

sql
-- 配置pg_hba.conf,限制IP访问
# host    all             all             192.168.1.0/24           md5
# host    all             all             0.0.0.0/0                reject

-- 启用连接速率限制
ALTER SYSTEM SET connection_rate_limit = 10;

-- 启用密码锁定机制
ALTER SYSTEM SET password_max_failed_login_attempts = 5;
ALTER SYSTEM SET password_lock_time = 30;

监听器安全最佳实践

1. 最小化监听范围

  • 只监听必要的IP地址,避免使用*监听所有地址
  • 对于不需要远程访问的数据库,只监听127.0.0.1
  • 对于需要远程访问的数据库,只监听特定的业务网段

2. 修改默认端口

  • 避免使用默认端口5432,修改为非标准端口
  • 端口号建议使用1024以上的高端口号
  • 修改端口后及时更新客户端连接配置

3. 严格的访问控制

  • 使用pg_hba.conf配置IP白名单
  • 对不同的数据库和用户设置不同的访问规则
  • 定期审查pg_hba.conf配置,移除不必要的访问规则

4. 启用详细的连接日志

  • 启用连接和断开连接日志
  • 配置详细的日志格式,包括用户、数据库、应用程序和客户端IP
  • 定期分析连接日志,发现异常连接尝试

5. 监控监听器状态

  • 定期监控监听器连接数
  • 设置连接数告警阈值
  • 监控长时间运行的连接
  • 及时处理异常连接

6. 定期安全审计

  • 定期检查监听器配置
  • 审计连接日志,发现异常连接
  • 定期进行渗透测试,发现安全漏洞
  • 及时修复监听器相关的安全漏洞

监听器安全审计脚本

1. 监听器配置审计

sql
-- 监听器配置审计报告
SELECT
    now() AS audit_time,
    (SELECT setting FROM sys_settings WHERE name = 'listen_addresses') AS listen_addresses,
    (SELECT setting::int FROM sys_settings WHERE name = 'port') AS port,
    (SELECT setting::int FROM sys_settings WHERE name = 'max_connections') AS max_connections,
    (SELECT setting::int FROM sys_settings WHERE name = 'superuser_reserved_connections') AS superuser_reserved_connections,
    (SELECT setting FROM sys_settings WHERE name = 'log_connections') AS log_connections,
    (SELECT setting FROM sys_settings WHERE name = 'log_disconnections') AS log_disconnections
FROM
    sys_stat_activity
LIMIT 1;

2. 访问控制审计

sql
-- pg_hba.conf配置审计
SELECT
    type,
    database,
    usename,
    address,
    netmask,
    auth_method
FROM
    sys_hba_file_rules
ORDER BY
    type, address;

3. 连接异常审计

sql
-- 连接异常审计
SELECT
    client_addr,
    count(*) AS failed_attempts
FROM
    sys_log
WHERE
    message LIKE '%authentication failed%'
    AND log_time > now() - interval '24 hours'
GROUP BY
    client_addr
ORDER BY
    failed_attempts DESC;

总结

监听器安全是KingBaseES数据库安全的重要组成部分,通过合理配置监听地址、修改默认端口、配置严格的访问控制、启用详细的连接日志、加强监听器监控和定期安全审计,可以有效提高监听器的安全性,防止未授权访问和恶意攻击。在实际生产环境中,DBA应根据业务需求和安全策略,制定适合的监听器安全配置方案,并定期审查和优化,确保数据库系统的安全性和稳定性。