我有一台服务器,由于某些原因,我不想与同一子网上的任何其他服务器进行通信或查看它,但我仍然需要任何人都可以访问它上面的 HTTP 服务器(已经从服务器为任何地方打开了 443)
简而言之,任何人都可以访问 Web 服务器(即使在我们的网络之外),但服务器本身无法看到同一网络上的任何其他服务器。有没有办法做到这一点,而无需为该服务器创建另一个 VLAN?在这种情况下,ACL 规则是一个不错的选择吗?谢谢。
答案1
假设您的以太网设备是 eth0,您可能可以使用类似下面的方法(其中一些可能是多余的,并且尚未经过测试,因此可能需要进行一些调整/调试)
# Because we are inserting chains into the beginning, this file is read in reverse order. This means we don't need to worry about other rules, these will take priority.
# Drop outgoing packets we don't specifically allow
/sbin/iptables -I OUTPUT -j DROP
# Allow ourselves to make DNS requests and other outbound requsts. You might want to add other stuff like SSH
/sbin/iptables -I OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -I OUTPUT -p tcp --dport 53 -j ACCEPT
# Allow incoming requests to web server to be answered. The magic is because we are responding, so we use source port.
/sbin/iptables -I OUTPUT -p tcp --sport 443 -j ACCEPT
/sbin/iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
# We may or may not need to specify we want other traffic to be dropped.
# This is probably not required but will explicitly prevent outgoing requests on port 443 and 80 (because its dport we know they are outgoing rather then incoming)
/sbin/iptables -I OUTPUT -p tcp --dport 443 -J DROP
/sbin/iptables -I OUTPUT -p tcp --dport 443 -J DROP
答案2
您可以添加防火墙规则,以将此服务器与此子网上的所有其他服务器隔离。假设您有子网
IP Address: 192.168.1.0
Network Address: 192.168.1.0
Usable Host IP Range: 192.168.1.1 - 192.168.1.254
Broadcast Address: 192.168.1.255
Total Number of Hosts: 256
Number of Usable Hosts: 254
Subnet Mask: 255.255.255.0
假设您想要的服务器托管在上面192.168.1.7
,并且您希望它无法访问同一子网中的所有其他主机。我假设您有防火墙的 ip 表
# Allow traffic locally on the server
iptables -I INPUT -s 127.0.0.1 -j ACCEPT
# Block all OTHER traffic that does not meet condition above
iptables -P INPUT DROP
如果您使用 AWS 或其他云解决方案,那么您可以使用自己的防火墙。