我需要阻止我的服务器发起与远程服务器的任何连接。
不过,我仍然希望服务器能够回复通过客户端发起的连接。
换句话说,我希望其他人能够连接到该服务器,但该服务器不能发起到其他服务器的远程连接。
我怎样才能做到这一点?
我正在使用 Ubuntu。
答案1
阻止所有传出连接不是一个好主意,因为这会阻止您从在线存储库安装软件、执行 DNS 搜索(这在大多数环境中都很糟糕)、使用 NTP 保持时钟更新等。无论如何,如果您仍然想这样做,请尝试以下操作:
# Drop all connections initiated from this host
iptables -t filter -I OUTPUT 1 -m state --state NEW -j DROP
# Additionally, log the event (optional)
iptables -t filter -I OUTPUT 1 -m state --state NEW -j LOG --log-level warning \
--log-prefix "Attempted to initiate a connection from a local process" \
--log-uid
您可以通过允许某些流量(如 DNS)使规则更加智能。您可以通过两种方式实现这一点:
使匹配更加复杂。对于一个或两个“白名单”项目来说就足够了。例如:
# Only forbid non-UDP traffic iptables -t filter -I OUTPUT 1 -m state --state NEW \! -p udp -j DROP
使用“-j ACCEPT”目标预先添加与允许从本地主机启动的某些所需服务匹配的规则。例如:
# Run this after the "DROP" rule to allow connection to ports #+ 80 and 443, mostly used for HTTP and HTTPS traffic iptables -t filter -I OUTPUT 1 -p udp -m multiport --ports 80,443 -j ACCEPT
答案2
Ubuntu 的内置防火墙是 ufw。您可以使用名为 Gufw 的 GUI 来控制它。在 Gufw 的主窗格中,只需单击 Outgoing:Deny。