本文目录导读:

是的,实用脚本完全可以自动限制SSH登录,常用的方法包括:
基于 fail2ban 的自动封禁脚本
#!/bin/bash # fail2ban 自动安装和配置脚本 # 安装 fail2ban sudo apt-get update && sudo apt-get install -y fail2ban # 配置 SSH 保护 cat > /etc/fail2ban/jail.local << 'EOF' [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 600 EOF # 重启服务 sudo systemctl restart fail2ban sudo systemctl enable fail2ban
自定义 IP 白名单/黑名单脚本
#!/bin/bash
# ssh_ip_restrict.sh - 自动限制SSH登录IP
ALLOWED_IPS=("192.168.1.0/24" "10.0.0.0/8")
BLOCKED_IPS=()
# 设置防火墙规则
setup_firewall() {
# 清除现有规则
sudo iptables -F INPUT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
# 只允许特定IP访问SSH
for ip in "${ALLOWED_IPS[@]}"; do
sudo iptables -A INPUT -p tcp --dport 22 -s "$ip" -j ACCEPT
done
# 拒绝其他IP访问SSH
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
}
# 自动检测异常登录
detect_bruteforce() {
tail -f /var/log/auth.log | while read line; do
if echo "$line" | grep -q "Failed password"; then
ip=$(echo "$line" | grep -oP 'from \K[\d.]+')
count=$(grep -c "$ip" /var/log/auth.log)
if [ "$count" -gt 5 ]; then
echo "攻击检测: $ip 失败登录 $count 次"
sudo iptables -A INPUT -s "$ip" -j DROP
echo "$(date) - 封禁IP: $ip" >> /var/log/ssh_ban.log
fi
fi
done
}
# 主函数
main() {
case "$1" in
start)
setup_firewall
detect_bruteforce &
echo "SSH限制已启动"
;;
stop)
sudo iptables -F INPUT
echo "SSH限制已停止"
;;
status)
sudo iptables -L INPUT -n --line-numbers
;;
add_ip)
sudo iptables -I INPUT -p tcp --dport 22 -s "$2" -j ACCEPT
echo "已添加IP: $2"
;;
*)
echo "用法: $0 {start|stop|status|add_ip <IP>}"
;;
esac
}
main "$@"
基于时间窗口的自动限制脚本
#!/bin/bash
# auto_ssh_limit.sh
LOG_FILE="/var/log/auth.log"
BAN_LOG="/var/log/ssh_banned.log"
BAN_DURATION=3600 # 封禁时长(秒)
MAX_ATTEMPTS=5 # 最大尝试次数
WINDOW=600 # 时间窗口(秒)
# 检查并封禁异常IP
check_and_ban() {
# 获取最近失败的IP(窗口时间内)
recent_ips=$(grep "Failed password" "$LOG_FILE" | \
awk -v window="$WINDOW" '{
time=strftime("%s", systime())
if (time - $0_time <= window) print $NF
}' | sort | uniq -c | sort -rn)
echo "$recent_ips" | while read count ip; do
if [ "$count" -ge "$MAX_ATTEMPTS" ]; then
# 检查是否已封禁
if ! sudo iptables -C INPUT -s "$ip" -j DROP 2>/dev/null; then
sudo iptables -A INPUT -s "$ip" -j DROP
echo "$(date) - 自动封禁IP: $ip (尝试$count次)" >> "$BAN_LOG"
# 定时解封
(sleep $BAN_DURATION && \
sudo iptables -D INPUT -s "$ip" -j DROP && \
echo "$(date) - 解封IP: $ip" >> "$BAN_LOG") &
fi
fi
done
}
# 监控日志文件
monitor_logs() {
tail -Fn0 "$LOG_FILE" | while read line; do
if echo "$line" | grep -q "Failed password"; then
check_and_ban
fi
done
}
# 主循环
while true; do
monitor_logs
sleep 10
done
简化版一键限制脚本
#!/bin/bash # 一键限制SSH登录 echo "配置SSH安全策略..." # 1. 禁用root登录 sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config # 2. 限制最大尝试次数 echo "MaxAuthTries 3" >> /etc/ssh/sshd_config # 3. 仅允许密钥登录 echo "PasswordAuthentication no" >> /etc/ssh/sshd_config echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config # 4. 重启SSH服务 systemctl restart sshd # 5. 配置防火墙 ufw allow from 192.168.1.0/24 to any port 22 ufw deny 22 ufw --force enable echo "SSH安全配置完成!"
使用建议
- 推荐使用 fail2ban:功能全面,配置灵活,适合生产环境
- 自定义脚本适合特定需求:如只允许特定IP段
- 测试环境先测试:避免把自己封禁
- 保留备用访问:如带外管理(iDRAC/iLO)
- 定期检查日志:确保脚本正常工作
你可以根据实际需求选择合适的脚本,或组合使用多种方法实现更强的安全防护。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播