如何使用 iptables 根据服务器主机名/端口过滤传入连接?

如何使用 iptables 根据服务器主机名/端口过滤传入连接?

我有几个子域名。假设:

a.domain.com
b.domain.com
mysql.domain.com
c.domain.com

都指向同一个 IP 地址。我想阻止所有到端口 3306 的连接,除非它们要连接到mysql.domain.com

因此类似于:

mysql -h a.domain.com -P 3306 -u username
mysql -h b.domain.com -P 3306 -u username

应该不可能,但是

mysql -h mysql.domain.com -P 3306 -u username

应该管用。

使用 iptables 可以实现吗?还是我必须做其他事情?

答案1

这是不可能的,句号。 mysql与几乎所有网络感知客户端一样,DNS解析在客户端进行,因此服务器永远不知道执行了什么查找来获取随后访问的IP地址。

如您所知,只有极少数服务会将完整的服务器名称作为协议的一部分传递给服务器 - 例如 HTTP 和使用 SNI 的 HTTPS - 但这些是例外,而不是规则。

相关内容