如何配置firewalld来阻止除特定端口之外的所有传出流量,同时允许localhost访问其自己的任何本地端口?

如何配置firewalld来阻止除特定端口之外的所有传出流量,同时允许localhost访问其自己的任何本地端口?

首先我要承认,我之所以问这个问题,是因为我已经找到了答案,并想与大家分享。如果这是不礼貌的行为,我深表歉意,我愿意听取大家的建议,以正确的方式分享这些来之不易的信息。如果这是重复的,请关闭它,并让访客查看原始问题。

那么,如何配置firewalld(在我的情况下使用CentOS 7.6)以阻止除特定端口之外的所有传出流量,同时还允许localhost访问其自己的任何本地端口?

我从这个开始:

# First, allow outbound traffic for all allowed inbound traffic 
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT 

# Allow outbound HTTP, HTTPS, DNS
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p icmp -m icmp --icmp-type=ping -j ACCEPT 
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT 
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p udp --dport 53 -j ACCEPT 
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT 

# Block all other outbound traffic 
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -j DROP

这一切都很好地锁定了服务器,使其无法访问网站和 DNS 以外的任何内容。

但任何试图通过 localhost 网络通信访问其他本地服务的本地服务都被阻止。更糟糕的是,即使配置了防火墙以记录丢弃的数据包,出站丢弃的数据包也不会被记录。

答案1

我通过反复试验找到了答案,因为在 Google 或其他地方搜索这个确切的(可能很奇怪)场景都无果:

# Allow all outbound traffic from localhost to localhost
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -o lo -j ACCEPT

这允许本地服务与任何其他本地服务进行通信(即使分配给目标服务的 IP 不是 127.0.0.1)。

相关内容