有没有办法使用 IPTABLES 来限制 MySQL 3306 上的连接速率?我正在考虑每 5 分钟允许 2 次对端口 3306 的连接尝试。谢谢
答案1
将这些限制保留在 MySQL 本身内,而不是在网络级别,不是更好吗?根据MySQL 文档您可以限制单个帐户的以下服务器资源:
* The number of queries that an account can issue per hour
* The number of updates that an account can issue per hour
* The number of times an account can connect to the server per hour
* The number of simultaneous connections to the server an account can have
执行此操作的 MySQL 查询示例:
mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank';
mysql> GRANT ALL ON customer.* TO 'francis'@'localhost'
-> WITH MAX_QUERIES_PER_HOUR 20
-> MAX_UPDATES_PER_HOUR 10
-> MAX_CONNECTIONS_PER_HOUR 5
-> MAX_USER_CONNECTIONS 2;
我个人更愿意将这种类型的设置保留在应用程序本身中,而不是试图在应用程序不知情的情况下对其进行操作。但据我所知,使用 iptables 的其他示例在技术上也应该有效。
答案2
$IPT -A INPUT -s 0/0 -p tcp --dport 3306 --syn -m limit --limit 10/hour \
--limit-burst 10 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 0/0 -p tcp --dport 3306 -j DROP
答案3
我很感兴趣,于是搜索了一下,发现本文等等。看起来你可以做到。
答案4
请注意,根据应用程序的不同,限制连接数实际上可能不会限制查询数。没有什么可以阻止应用程序在单个连接上进行数百次查询,这样做甚至是最佳实践。