![直接阻止访问端口但允许通过子域访问](https://linux22.com/image/678232/%E7%9B%B4%E6%8E%A5%E9%98%BB%E6%AD%A2%E8%AE%BF%E9%97%AE%E7%AB%AF%E5%8F%A3%E4%BD%86%E5%85%81%E8%AE%B8%E9%80%9A%E8%BF%87%E5%AD%90%E5%9F%9F%E8%AE%BF%E9%97%AE.png)
我最近开始使用 Elastic 搜索、Logstash 和 Kibana 来帮助可视化我的服务器上的日志。
效果很好,但唯一的问题是,所有这些都可以通过我服务器上的端口公开访问。例如example.com:9200
或example.com:5601
。
我已经找到了一种将弹性搜索限制为仅限本地流量的方法,但我需要一种方法来限制对 Kibana 的公共访问。
我想将其公开,这样我就可以访问它,但将其放在使用 的一些基本身份验证之前htaccess
。我已经成功实现了这一点,这样如果我导航到kibana.example.com
它,它会在通过之前要求我输入用户名和密码。但是,我仍然可以直接使用它来访问它example.com:5601
,而不会被要求进行身份验证。
环顾四周,似乎 iptables 是解决此问题的方法。我尝试使用sudo iptables -A INPUT -p tcp --dport 5601 -j DROP
,这确实阻止了对该端口的所有访问,但它也阻止了我想要通过时允许的流量kibana.example.com
。
我如何修改上述规则以允许访问,kibana.example.com
但在您尝试直接进入端口时阻止访问?
我的服务器运行 Debain Jessie 并且我使用 Apache 2.2 作为我的 Web 服务器。
答案1
我使用这个iptable
规则做到了这一点:
iptables -A INPUT ! -s 127.0.0.1 -p tcp -m tcp --dport 5601 -j DROP
它接受从本地主机到端口 5601 的所有连接(通过我的 Apache 代理完成)并丢弃所有其他连接。