我必须设置 Iptables 来阻止一分钟内发出 10 个请求的每个 mac 地址。(ssh 或 http 登录)
可以使用以下方法阻止 IP:
iptables -A INPUT -p tcp --dport 22 -m hashlimit --hashlimit-mode srcip --hashlimit-above 10/minute -j DROP
要阻止已知的 mac 地址,可以使用
iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
但是如果不知道 MAC 地址该怎么办呢?
也许用arp -a
命令?
如何结合iptables
和arp
?
有没有更聪明的方法?
编辑:
操作模式客户 被攻击者连接到 WiFi 子网,攻击者可以连接到同一子网
操作模式热点 被攻击者充当热点,生成自己的 WiFi 子网,供攻击者连接。
答案1
您采取的方法错误,正如其他人所说,基于 MAC 地址的阻止是行不通的。
相反,你应该使用 fail2ban 和 ipset
另一种方法可能是:
在加载 iptables 条目之前,该集合必须存在。
ipset create ban hash:net
这将删除已在禁止列表中的数据包
iptables -I INPUT 1 -m set --match-set ban src -j DROP
这会将 IP 添加到禁止列表中。
iptables -I INPUT 2 -p tcp --dport 22 -m hashlimit --hashlimit-mode srcip --hashlimit-above 10/minute -j SET --add-set ban src
答案2
一般情况下,港口22
(同1194
)正因为如此,它永远不应该暴露在 WAN 中,因为它每天会收到数千次连接尝试,除非22
暴露在 WAN 中,否则所有防火墙都会自动阻止这些连接尝试(使用数万个更高的端口,因为端口扫描器通常不会扫描所有 65,535 个端口)。
有很多方法可以通过速率限制来阻止流量,只需iptables
:
- MAC 地址过滤从来都不是有效的,因为 MAC 地址是动态的,很容易改变
- IP 过滤效果更好,但可以通过 VPN 进行更改
- 端口过滤往往是最好、最有效的:
# Establish Zone: Port_Log iptables -N Port_Log # Establish rule for traffic on port 22 for Zone: Port_Log iptables -A Port_Log -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j REJECT iptables -A Port_Log -j DROP # Integrated into firewall.user script below: ## $PL $tcp $SSH $limit3 -j REJECT # Establish rule for new incoming traffic on port 22 for Zone: INPUT iptables -I INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j REJECT # Integrated into firewall.user script below: ## $IN $tcp $SSH $New -j REJECT
iptables
我在 OpenWrt 上开始使用的默认基础脚本 [/etc/firewall.user
]:# ##::[[--- OpenWrt Firewall Script ---]]::## #=========================================================== ##----- IPtables -----## #=========================================================== # Paramaters # #----------------------------------------------------------- # Chains: IN="iptables -I INPUT" PL="iptables -A Port_Log" # Limit: limit3="-m limit --limit 3/min --limit-burst 3" limit4="-m limit --limit 4/sec" New="-m conntrack --ctstate NEW" # Ports: echR="--icmp-type echo-request" SSH="--dport 22" # Protocols: icmp="-p ICMP" tcp="-p tcp" udp="-p udp" # Establish Custom Zones # #----------------------------------------------------------- # Limit: iptables -N Port_Log # Establish Rate Limit # #----------------------------------------------------------- # ICMP: $PL $icmp $echR $limit4 -j ACCEPT # SSH: $PL $tcp $SSH $limit3 -j REJECT # Default: $PL $tcp -j REJECT --reject-with tcp-reset $PL $udp -j REJECT --reject-with icmp-port-unreachable $PL ! $icmp -j LOG --log-prefix "<[[--- Connection DROPPED ---]]> : " $PL -j DROP # Apply Rate Limit # #----------------------------------------------------------- # ICMP: $IN $icmp -j Port_Log # SSH: $IN $tcp $SSH $New -j REJECT