我想阻止从我的服务器发出的所有内容,同时仍允许响应传入的 http/https 请求。
一些例子:
用户使用浏览器调用我的服务器(https://myserver.example.org/test.html)防火墙应该允许响应并且服务器应该将 test.html 传递给用户。
我的服务器上的应用程序尝试连接到https://badguy.example.org/test.html 防火墙应该拒绝该传出请求,因为 badguy.example.org 没有向我的服务器请求任何内容。
我不希望它基于 IP 或 IP 范围。只要从某个 IP 联系到服务器,它就可以做出响应。如果之前没有通过这个 IP 联系过它,就不允许向那里发送任何内容。
可以使用 ufw 或 iptables 吗?我该怎么做?
答案1
关键是旗帜--state ESTABLISHED
在 OUTPUT 链中仅允许建立已建立的连接而不允许建立新连接。
(可选)允许通过 SSH 登录以执行管理任务,
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
允许 HTTP 流量
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
允许 HTTPS 流量
iptables -A INPUT -i eth0 -p tcp --dport 443-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443-m state --state ESTABLISHED -j ACCEPT
阻止来自您的服务器的传出 http/https 请求。
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -j DROP