使用 iptables 阻止所有传入 IP

使用 iptables 阻止所有传入 IP

是否可以阻止所有传入的 IP 地址,只允许一个或两个 IP 地址访问 Ubuntu 服务器?

答案1

阻止除 1 或 2 之外的所有 IP:

sudo /sbin/iptables -I INPUT -s xxx.xxx.x.xxx -j ACCEPT
sudo /sbin/iptables -I INPUT -s xxx.xxx.x.yyy -j ACCEPT
sudo /sbin/iptables -I INPUT -j DROP

第一个命令阻止所有 IP;第二个和第三个命令告诉计算机接受来自特定 IP 的连接。

如果要使这些更改永久生效,请在运行上述命令后运行以下命令。

安装 iptables-persistent

sudo apt-get install iptables-persistent

将 iptables 更改保存到文件

iptables-save > /etc/iptables/rules.v4

... 这应该可行!


请参阅@ThomasWard 的回答;它更完整,如果你将服务器用于任何与网络相关的事务(包括更新),我的回答将会产生重大问题。

答案2

不幸的是,这里的另一个答案没有考虑到三种相关的情况:

  1. 本地流量到系统本身。(localhost通过lo适配器等)
  2. 交通有关的到您进行的其他流量(对传出连接的响应等)
  3. 来自您自己网络的 ICMP 响应(根据网络环境,有时这是必要的)。

大多数住宅网络或普通网络不需要 #3,但 #1 和 #2 至关重要 - #1 使得从系统到系统的流量可以正常工作(想想用于本地服务或其sudo自己的内部主机名查找的本地主机连接),而 #2 因为您需要能够接收与已建立的出站连接相关的流量,以获取 DNS 响应、用于您的包安装或更新的 HTTP/HTTPS 数据包数据等。

因此,我提出的解决方案是这样做:

如果您iptables已制定任何规则,请先将其清除,sudo iptables -F以便我们在执行此操作之前从“干净的记录”开始。

# This first command is OK, setting INPUT to default ACCEPT becase
# we will force all unpermitted traffic to DROP at the end of this ruleset.
sudo iptables -P INPUT ACCEPT
sudo iptables -A INPUT -i lo -m comment --comment "Accept localhost, computer to itself" -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment "Accept traffic related to established connections and this system's outgoing traffic" -j ACCEPT
sudo iptables -A INPUT -s a.b.c.d --comment "Accept inbound connections from a.b.c.d" -j ACCEPT
sudo iptables -A INPUT -s w.x.y.z --comment "Accept inbound connections from w.x.y.z" -j ACCEPT
# Repeat previous line as many times as you need to in order to accept traffic
# that you want to accept, but also add a line for the IP address you are 
# currently connected to the system from if a remote SSH session, otherwise
# you may lock yourself out.
sudo iptables -A INPUT -m comment --comment "Drop all other traffic inbound" -j DROP

这将完成 anonymous2 尝试执行的操作,同时还允许您的计算机继续使用互联网并让您的系统正常运行。这还允许您的系统继续运行,直到您在最后添加 DROP 规则(不要添加该规则,直到您将要访问的 IP 地址也列入白名单,这应该是上面的 ALLOW 规则之一,您可以添加任意多个

确保安装iptables-persistent并存储这些规则,/etc/iptables/rules.v4否则这些规则将无法持久。

相关内容