Set*_*eth 22
您也可以使用ufw,而 IMO,它要简单得多。
要拒绝任何连接的 IP 地址,请使用:
sudo ufw deny from <ip_address> to any
Run Code Online (Sandbox Code Playgroud)
或者拒绝访问特定端口:
sudo ufw deny from <ip_address> to any port <some_port>
Run Code Online (Sandbox Code Playgroud)
或者您可以指定协议:
sudo ufw deny proto tcp from <ip_address> to any port <some_port>
Run Code Online (Sandbox Code Playgroud)
(替换tcp为tcp或udp取决于您想要的协议)
Tho*_*ard 17
在我们继续之前,让我们注意一些事情。
- 大多数 Internet 都没有静态 IP 地址。因此,可以使用代理、Tor 等来尝试绕过单 IP 块。
- 执行相反操作通常更安全,即阻止端口上的所有流量,并仅接受某些地址。这在大多数面向 Web 的情况下是不可行的,但它仍然是普遍接受的安全实践。
- 我们一般不会在 Internet 上进行任何过滤 - 我们不会考虑以下答案的第 1 点,并且您必须考虑如果您阻止一个 IP,他们会找到绕过它的方法的可能性,并且访问不同的 IP,然后继续攻击。
在任何ufw比 更简单的评论之前iptables,我iptables在这里使用是因为 OP 使用iptables命令回答了这个问题,这让我假设他们想要一个有iptables命令而不是ufw命令的答案/
良好的iptables防火墙配置将拒绝除系统上“可接受的连接”方面所需的最低要求之外的所有内容,并且应仅接受规则中明确允许的连接。
为此,我们必须将iptables AND 配置ip6tables为默认阻止流量,除了您从计算机内部发起的流量(例如来自 Firefox 的网络流量等,如果您在系统上,或wget下载软件的流,或允许apt更新包)。我们还必须允许您为希望到达系统的流量添加可接受的规则。
为了使这些规则保持不变,以便它们在每次重新启动时始终有效,您应该安装该iptables-persistent软件包,这将允许您保存这些规则,然后在系统启动时自动加载它们。sudo apt-get install iptables-persistent首先运行,然后添加您的规则。 我们将确保在创建规则集后更新在启动时加载的规则集。
假设我们从空白iptables和ip6tables设置开始(这是 Ubuntu 中的默认设置),您将需要添加一堆规则。我将从 开始iptables,然后我们将使用ip6tables。
iptables
以下是一个基本规则集,它将限制所有尝试到达您系统的数据和数据包,无论您使用的是什么连接:
接受本地主机数据
iptables -A INPUT -i lo -j ACCEPT- 接受 LocalHost 上的所有流量,即仅在计算机内部的流量。这是您的计算机正常运行所必需的。
接受与系统已启动的出站连接相关的数据
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT- 接受与出站方向的连接相关的所有流量,包括来自远程服务器(例如 apt 镜像或您正在访问的任何网站)的响应。
ICMP 规则
请注意,我不会过滤掉 ICMP 数据包,因为这些数据包通常可以接受,除非您是偏执狂。如果你真的想阻止ICMP,那么你需要使用这些规则来接受一些关键的数据包:
接受“超时”ICMP
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT - 接受特定时间限制连接设置所必需的“超时”数据包。
接受“目标无法访问”ICMP
iptables -A INPUT -p icmp -m icmp --icmp-type 3/4 -j ACCEPT - 接受来自远程服务器的“目标无法访问”ICMP 响应。这允许系统在您无法到达的远程站点上正确运行。
接受 PING 请求/响应(“Echo”ICMP)
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT - 接受“Echo”(又名“Ping”)请求。这很好保留,因为您的系统与某些站点和/或服务的连接可能需要 PING 才能保持连接请求。
创建一个iptables表来保存可接受的流量端口/规则
iptables -N acceptable_traffic
iptables -A INPUT -j acceptable_traffic
通过这样做,您有一个表,您可以在其中放置规则,用于设置您希望从外部连接在系统上接受的流量。如果你有一个 SSH 服务器,你会这样做iptables -A acceptable_traffic -p tcp --dport 22 -j ACCEPT(或者用 SSH 服务器端口替换 22)。您也可以在此处添加其他可接受的交通规则。
拒绝所有没有设置规则的流量 对此有
两个选项。
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable - 这是第一个选项,我认为这是一种更明智的阻止流量的方法,当个人尝试访问服务器时,他们将收到一个“主机无法访问”ICMP 数据包,然后终止连接尝试。
iptables -A INPUT -j DROP- 这是第二种选择。这将自动丢弃发送到您的系统的所有与 ACCEPT 规则不匹配的传入数据包。这意味着数据包被完全忽略。来自远程位置的连接尝试将自行超时,所连接的系统没有响应。
ip6tables
与iptablesIPv4一样,您必须ip6tables针对 IPv6进行配置。规则相似,但不同。 *如果您的系统上没有 IPv6,您可能不必担心这一点,但是系统中的规则不会受到影响。
接受本地主机数据
ip6tables -A INPUT -i lo -j ACCEPT- 接受 LocalHost 上的所有流量,即仅在计算机内部的流量。这是您的计算机正常运行所必需的。
接受与系统已启动的出站连接相关的数据
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT- 接受与出站方向的连接相关的所有流量,包括来自远程服务器(例如 apt 镜像或您正在访问的任何网站)的响应。
ICMPv6 规则
ip6tables -A INPUT -p icmpv6 -j ACCEPT- 我不会阻止 IPv6 ICMP 数据包,因为与 IPv4 不同,您应该接受十亿多个 IPv6 ICMP 数据包(即所有这些数据包)。为此,您可以这样做以接受所有这些。
创建一个ip6tables表来保存可接受的流量端口/规则
ip6tables -N acceptable_traffic
ip6tables -A INPUT -j acceptable_traffic
通过这样做,您有一个表,您可以在其中放置规则,用于设置您希望从外部连接在系统上接受的流量。如果你有一个 SSH 服务器,你会这样做ip6tables -A acceptable_traffic -p tcp --dport 22 -j ACCEPT(或者用 SSH 服务器端口替换 22)。您也可以在此处添加其他可接受的交通规则。
拒绝所有没有设置规则的流量 对此有
两个选项。
ip6tables -A INPUT -j REJECT --reject-with icmp6-addr-unreachable - 这是第一个选项,我认为这是一种更明智的阻止流量的方法,当个人尝试访问服务器时,他们将收到“地址无法访问”ICMPv6 数据包,然后终止连接尝试。
ip6tables -A INPUT -j DROP- 这是第二种选择。这将自动丢弃发送到您的系统的所有与 ACCEPT 规则不匹配的传入数据包。这意味着数据包被完全忽略。来自远程位置的连接尝试将自行超时,所连接的系统没有响应。
保存所有规则
由于我之前告诉过您要安装该iptables-persistent软件包,因此您需要实际保存规则,以便以后可以加载它们。
注意:这组命令实际上会将您带入超级用户 shell。除了我在此声明的这些命令之外,您不应在此 Shell 中执行任何其他操作!
执行以下命令:
sudo -s
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
exit
Run Code Online (Sandbox Code Playgroud)
这将保存规则,以便在每次重新启动时加载它们。 如果您稍后编辑规则,则需要重新运行这些命令以保存规则集。
如果我真的想要阻止坏 IP 列表怎么办?
我们仍然可以做到这一点!您可能需要“不良”流量的块列表。所以,这是我对此的解决方案,就像之前一样,我将其分为两部分,iptables并且ip6tables.
iptables
创建一个表 prohibited_traffic
我们现在需要创建一个prohibited_traffic表。您将在此处添加“坏 IP”。然后我们需要将prohibited_traffic规则插入到 INPUT 表中。(在下面的示例中,我使用 2 来指示我们插入此规则的位置的规则编号位置,将其放在以下规则之后ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED:
iptables -N prohibited_traffic
iptables -I INPUT 2 -j prohibited_traffic
Run Code Online (Sandbox Code Playgroud)
添加规则以阻止某些 IP
现在我们将要阻止的 IP 添加到此prohibited_traffic表中。这是模板:
iptables -A prohibited_traffic -s SourceIPAddress -j DROP
Run Code Online (Sandbox Code Playgroud)
将“SourceIPAddress”替换为您要阻止的 IP 地址。如果您有一个 IP 范围要阻止,则需要获取“范围”并确定包含所有 IP 地址的 CIDR 范围,然后使用该格式IPV4ADDRESS/cidr来阻止包含这些 IP 的 CIDR 范围。如果没有 CIDR 或一个接一个地添加大量 IP,范围块就无法完成。
ip6tables
这几乎等同于 iptables
创建一个表 prohibited_traffic
我们现在需要创建一个prohibited_traffic表。您将在此处添加“坏 IP”。然后我们需要将prohibited_traffic规则插入到 INPUT 表中。(在下面的示例中,我使用 2 来指示我们插入此规则的位置的规则编号位置,将其放在以下规则之后ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED:
ip6tables -N prohibited_traffic
ip6tables -I INPUT 2 -j prohibited_traffic
Run Code Online (Sandbox Code Playgroud)
添加规则以阻止某些 IP
现在我们将要阻止的 IP 添加到此prohibited_traffic表中。这是模板:
ip6tables -A prohibited_traffic -s SourceIPAddress -j DROP
Run Code Online (Sandbox Code Playgroud)
将“SourceIPAddress”替换为您要阻止的 IP 地址。如果您有一个 IP 范围要阻止,则需要获取“范围”并确定包含所有 IP 地址的 CIDR 范围,然后使用该格式IPV6ADDRESS/cidr来阻止包含这些 IP 的 CIDR 范围。如果没有 CIDR 或一个接一个地添加大量 IP,范围块就无法完成。
| 归档时间: |
|
| 查看次数: |
29671 次 |
| 最近记录: |