我是 UFW 的新手。我们的一台服务器遭到入侵,我必须立即:
- 拒绝所有入站。
- 拒绝所有出站。
- 允许所有 SSH。
- 允许出站 DNS。
- 允许 Git 克隆、推送、拉取等。
- 仅允许入站 HTTP/S(80 和 8081、443)。应阻止源自服务器的出站 HTTP/S。
- 允许MySQL仅连接到127.0.0.1或localhost并阻止所有传入的MySQL。
我意识到其中一些规则很奇怪,但这就是我被要求做的。我意识到我实际上不知道如何在 UFW 中完成其中一些任务。
这是我所拥有的:
# Deny all outgoing.
ufw default deny incoming
# Deny all outgoing.
ufw default deny outgoing
# Allow outgoing DNS.
ufw allow out 53
# Allow SSH.
ufw allow 22
# Allow outbound Git (I need to be able to clone, pull, push, etc).
ufw allow out 9418/tcp
# Allow only incoming HTTP on port 80 and 8081 without outbound.
# Allow only incoming HTTPS on port 443 without outbound.
ufw allow in to any port 80 proto tcp
# Allow MySQL to connect to localhost only.
ufw allow from 127.0.0.1 to 127.0.0.1 port 3306 proto tcp
运行上述命令后,我可以:
- 用于
curl --request GET 'http://foo.bar'
向另一个站点发送 HTTP 请求。我需要拒绝源自服务器内部的 HTTP 请求。 - 不使用 Git 克隆。它只是挂着。
我还没有测试过 MySQL,但不应该允许它连接到除 和 之外的任何127.0.0.1
东西localhost
。
我需要改变什么才能让它按照我想要的方式运行?
答案1
您需要允许您打开的端口传入,而不仅仅是传出。否则目标服务器将无法向您发送响应。如果您注意到,您的 ssh 可以正常工作,因为您允许传入和传出。 GIT 不起作用,因为您阻止了来自远程服务器的响应。 DNS 可能也被破坏了。
MySQL:默认情况下,您的 my.cnf 不应允许远程连接;您通常必须在绑定地址中明确允许它。