有没有办法拒绝IP地址连接到我的PC?
有没有一种方法可以阻止IP连接到特定端口?
在继续进行之前,请先注意几件事。
- 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
以下是一个基本规则集,它将限制所有尝试访问系统的数据和数据包,无论您处于何种连接状态:
接受localhost数据
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
(或将22替换为SSH服务器端口)。您也可以在此处添加其他可接受的流量规则。
拒绝所有未设置规则的流量。
有两个选项。
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable
-这是第一种选择,我认为是一种更合理的阻止流量的方法,当个人尝试访问服务器时,他们将收到“主机无法访问” ICMP数据包,该数据包将终止连接尝试。
iptables -A INPUT -j DROP
-这是第二个选择。这将自动丢弃所有发送到系统的,与ACCEPT规则不匹配的传入数据包。这意味着数据包将被完全忽略。来自远程位置的连接尝试将自行超时,而连接的系统没有响应。
ip6tables
与iptables
IPv4一样,您必须ip6tables
为IPv6配置。规则相似,但不同。*如果您的系统上没有IPv6,则可能不必担心这一点,但是在系统中使用规则不会受到影响。
接受localhost数据
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
(或将22替换为SSH服务器端口)。您也可以在此处添加其他可接受的流量规则。
拒绝所有未设置规则的流量。
有两个选项。
ip6tables -A INPUT -j REJECT --reject-with icmp6-addr-unreachable
-这是第一种选择,我认为是一种更合理的阻止流量的方法,当个人尝试访问服务器时,他们将收到“地址无法访问” ICMPv6数据包,该数据包将终止连接尝试。
ip6tables -A INPUT -j DROP
-这是第二个选择。这将自动丢弃所有发送到系统的,与ACCEPT规则不匹配的传入数据包。这意味着数据包将被完全忽略。来自远程位置的连接尝试将自行超时,而连接的系统没有响应。
保存所有规则
自从我之前告诉您安装iptables-persistent
软件包以来,您实际上需要保存规则,以便以后可以加载它们。
注意:这组命令实际上使您进入超级用户外壳程序。除了我在此处声明的这些命令外,您在此外壳中不应做任何其他事情!
执行以下命令:
sudo -s
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
exit
这将保存规则,以便可以在每次重新启动时加载它们。如果您以后编辑规则,则需要重新运行这些命令以保存规则。
如果我实际上希望阻止不良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
添加规则以阻止某些IP
现在,我们添加IP以阻止该prohibited_traffic
表。这是模板:
iptables -A prohibited_traffic -s SourceIPAddress -j DROP
将“ 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
添加规则以阻止某些IP
现在,我们添加IP以阻止该prohibited_traffic
表。这是模板:
ip6tables -A prohibited_traffic -s SourceIPAddress -j DROP
将“ SourceIPAddress”替换为您要阻止的IP地址。如果要阻止的IP范围较大,则需要采用“范围”并确定包含所有IP地址的CIDR范围,然后使用该格式IPV6ADDRESS/cidr
来阻止包含IP的CIDR范围。如果没有CIDR或一个接一个地添加很多IP,就无法完成范围限制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句