fcu*_*hoo 4 security ssh firewall iptables
我打算添加以下规则来iptables阻止这些天常见的 ssh 蛮力攻击。
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m state --state NEW -m recent --set --name SSH --rsource
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m recent --rcheck --seconds 30 --hitcount 4 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m recent --rcheck --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j LOG --log-prefix "SSH brute force "
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -m recent --update --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0.103 -p tcp -m tcp --dport 4522 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
我知道第二条、第三条和第四条规则负责在 30 秒内记录和阻止来自同一 IP 的攻击。间隔。
iptables没有黑名单计数,这不是阻止而是减慢攻击速度?问题#1:当文档说“将其记录到系统日志一次,然后立即拒绝并忘记它”时,忘记它是什么意思?
意味着该消息将显示在日志中,但只会出现一次,因此每次触发规则时,您的日志都不会被连续的消息流污染。
问题 2:永远忘记它?
不,不是永远。有一个与这些消息在日志中出现的频率相关的时间段。
问题#3:有iptables检查的黑名单吗?
不,没有iptables“检查”的黑名单。从某种意义上说它是愚蠢的,它只会过滤你告诉它的内容,并且只允许你告诉它的内容通过。
问题 #4:如果一个 IP 被拒绝,但一小时后又尝试了另一个连接,是否还会有来自该 IP 的 3 次尝试?
这取决于什么是拱形超时。如果发生了额外的尝试并且原始超时未从初始尝试过去,则日志中不应有额外的消息传递,也不应有允许的连接。但是,如果超时已经过去,那么是的,您将看到有关这些后续尝试的其他消息。
我鼓励您查看 Iptablerecent模块的文档,了解有关其工作原理的更多详细信息。
端口扫描
IP 保留在“坏人”列表中的时间长度将由您的规则结构来控制,如下所示:
iptables -A INPUT -i $OUTS -m recent --name badguys --update --seconds 3600 -j DROP
iptables ...
.
.
.
iptables -A INPUT -t filter -i $OUTS -j DROP -m recent --set --name badguys
Run Code Online (Sandbox Code Playgroud)
第一条规则将检查传入的数据包是否已经在“badguy”列表中。如果是,那么时钟将被--update交换机“重置”,坏人的 IP 将在此列表中保留长达 1 小时(3600 秒)。随后的每次尝试都会重置这个 1 小时的窗口!
注意:按照这样的规则结构,违规者必须完全沉默一小时才能再次与我们沟通
SSH
对于 SSH 连接,策略略有不同。与 IP 进入我们的“坏人”列表相关的超时仍然是 1 小时,并且仍然会在 1 小时窗口内每次重新连接时重置。
对于 SSH,我们需要计算每个--syn连接。这是一个 TCP SYN 数据包,在 TCP 3 次握手中发生。通过计算这些,我们可以“跟踪”每个连接尝试。如果您在 30 秒内尝试与我们联系超过 2 次,我们会放弃您。
为了获得这些不断尝试连接到“badguy”列表中的 IP,我们可以合并另一个规则,如果它们在 5 分钟窗口(300 秒)内尝试连接到我们 6 次,则添加它们。
这是相应的规则 -它们的顺序至关重要!:
iptables -N BADGUY
iptables -t filter -I BADGUY -m recent --set --name badguys
iptables -A INPUT -i $OUTS -p tcp --syn --dport ssh -m recent --name ssh --set
iptables -A INPUT -i $OUTS -p tcp --syn --dport ssh -m recent --name ssh --rcheck --seconds 300 --hitcount 6 -j BADGUY
iptables -A INPUT -i $OUTS -p tcp --syn --dport ssh -m recent --name ssh --rcheck --seconds 30 --hitcount 2 -j DROP
Run Code Online (Sandbox Code Playgroud)
注意:您可以在/proc/net/ipt_recent. 那里应该有一个带有列表名称的文件badguys。
问题 #5:如果是这种情况,那么只要 iptables 没有一些黑名单计数,这不是阻塞而是减慢攻击速度?
我想你会发现,从 iptable 的角度来看,通常有 3 种方法来处理连接尝试。
#3是大多数复杂性来自设置iptables和/或一般防火墙的地方。由于互联网上的大部分流量在某种程度上是可以的,并且当该流量表现出“强迫性”行为时,从某种意义上说,单个 IP 尝试连接到服务器的端口 X 次,从而成为问题。