IP封禁表存储了被封禁的IP地址信息,包括封禁时间、解封时间、封禁原因等。IP封禁是一种更严格的封禁措施,可以阻止特定IP地址的所有连接尝试。
表结构
| 字段名 | 类型 | 属性 | 描述 |
|---|---|---|---|
| ip | varchar(15) | 主键 | 被封禁的IP地址 |
| bandate | int(10) unsigned | 不为空 | 封禁日期 (Unix时间戳) |
| unbandate | int(10) unsigned | 不为空 | 解封日期 (Unix时间戳,0表示永久封禁) |
| bannedby | varchar(50) | 不为空 | 封禁操作者 |
| banreason | varchar(255) | 不为空 | 封禁原因 |
字段详解
ip
被封禁的IP地址,采用IPv4格式(如192.168.1.1)。这个字段是表的主键,每个IP地址在表中只能有一条记录。
示例值: "127.0.0.1", "192.168.1.1", "8.8.8.8"
注意: AzerothCore目前主要支持IPv4地址格式,不支持IPv6或CIDR格式的IP范围封禁。
bandate
IP地址被封禁的日期和时间,以Unix时间戳格式存储(从1970年1月1日UTC开始的秒数)。
示例值: 1609459200(2021年1月1日 00:00:00 UTC)
unbandate
IP地址预计解封的日期和时间,以Unix时间戳格式存储。如果设置为0,表示永久封禁。
示例值:
- 1612137600(2021年2月1日 00:00:00 UTC)- 临时封禁
- 0 - 永久封禁
bannedby
执行IP封禁操作的管理员或系统名称。通常是GM的角色名或账号名,也可以是自动封禁系统的标识。
示例值: "Admin", "GameMaster", "AnticheatSystem"
banreason
封禁IP地址的原因,用于记录为什么对该IP执行封禁操作。
示例值: "多次尝试暴力破解密码", "DDoS攻击", "代理服务器", "VPN"
使用示例
封禁IP地址
以下SQL语句将封禁IP地址192.168.1.1,为期7天:
INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason)
VALUES ('192.168.1.1', UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + (7 * 24 * 3600), 'Admin', '多次尝试暴力破解密码');
永久封禁IP地址
以下SQL语句将永久封禁IP地址192.168.1.1:
INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason)
VALUES ('192.168.1.1', UNIX_TIMESTAMP(), 0, 'Admin', 'DDoS攻击');
解封IP地址
以下SQL语句将解封IP地址192.168.1.1:
DELETE FROM ip_banned
WHERE ip = '192.168.1.1';
相关表
- account - 存储账号的基本信息
- account_banned - 存储被封禁的账号信息
常见问题
如何查看当前所有被封禁的IP地址?
使用以下SQL语句查询:
SELECT ip,
FROM_UNIXTIME(bandate) AS ban_date,
FROM_UNIXTIME(unbandate) AS unban_date,
bannedby,
banreason
FROM ip_banned
WHERE unbandate > UNIX_TIMESTAMP() OR unbandate = 0;
IP封禁和账号封禁有什么区别?
IP封禁和账号封禁的主要区别:
- IP封禁:阻止特定IP地址的所有连接尝试,无论使用哪个账号。这会影响使用该IP地址的所有用户,包括可能共享同一IP的无辜玩家。
- 账号封禁:只阻止特定账号的登录,不影响其他账号。被封禁的账号无法从任何IP地址登录。
注意: 由于IP封禁可能会影响无辜玩家(如共享网络的玩家),建议谨慎使用,主要用于应对严重的安全威胁。
IP封禁设置后需要重启服务器吗?
不需要。IP封禁设置后立即生效,服务器会阻止来自被封禁IP地址的新连接尝试。
如何封禁一个IP范围?
AzerothCore的标准ip_banned表不直接支持IP范围封禁。如果需要封禁IP范围,有以下几种方法:
- 逐个添加需要封禁的IP地址
- 使用防火墙或其他网络安全工具在服务器层面实现IP范围封禁
- 修改AzerothCore源代码,添加对CIDR格式的支持
如何查看某个IP地址是否被封禁?
使用以下SQL语句查询:
SELECT * FROM ip_banned
WHERE ip = '192.168.1.1'
AND (unbandate > UNIX_TIMESTAMP() OR unbandate = 0);