我有一个如下所示的前端定义:
frontend fe_imap from defaults_1
mode tcp
bind 127.0.0.1:143
bind [::1]:143
bind x.x.x.x:143
stick-table type ip size 100k expire 24h store gpt0
option tcplog
use_backend block_imap if { sc_get_gpt0(0) eq 1 }
use_backend %[src,map_ip(/etc/haproxy/maps/blacklist-imap.map)]
default_backend be_imap
我的想法是只封锁一些 IP 一段时间,而永久封锁其他 IP。后者已经完美运行。我使用运行时 API 对地图和表格进行更新。
由于某种原因,gpt0 的想法不起作用。我在命令提示符下输入了以下内容:
echo "set table fe_imap src 127.0.0.1 data.gpt0 1" | socat stdio /var/run/haproxy.sock
添加了 IP(这只是一个本地主机示例。在现实生活中,这将是远程 IP)
echo "show table fe_imap" | socat stdio /var/run/haproxy.sock
# table: fe_imap, type: ip, size:102400, used:1
0x7fe788035988: key=127.0.0.1 use=0 exp=85159306 shard=0 gpt0=1
如果我尝试“telnet 127.0.0.1 143”,我仍然会进入默认后端而不是 block_imap 后端。
有人可以帮我吗?