搜索
缓存时间18 现在时间18 缓存数据 他朗声道:“贫道五百年前散人吕洞玄,五十年前龙虎山齐玄帧,如今武当洪洗象,已修得七百年功德。” “贫道立誓,愿为天地正道再修三百年!” “只求天地开一线,让徐脂虎飞升!” 年轻道士声如洪钟,响彻天地间。 “求徐脂虎乘鹤飞升!” 黄鹤齐鸣。 有一袭红衣骑鹤入天门。
查看: 500|回复: 5

脚本-自动封禁可疑ip

[复制链接]
发表于 2024-8-24 12:34:48 | 显示全部楼层 |阅读模式

厌倦了滚动浏览相同的帖子?当您创建帐户后,您将始终回到您离开的地方。使用帐户,不仅可以享受无广告的清爽界面!

您需要 登录 才可以下载或查看,没有账号?注册

×
频道: https://t.me/cryptothrifts
github地址: https://github.com/cryptoli/server-script.git
使用方法:
  1. wget https://raw.githubusercontent.com/cryptoli/server-script/main/fail2banguardian.sh && chmod +x fail2banguardian.sh && ./fail2banguardian.sh
复制代码

说明:

1 ubuntu/debian/centos可用,安装fail2ban实现封禁可疑ip,可能存在bug,欢迎提pr
2 适合新手小白一键安装配置
3 适合不想装宝塔面板的MJJ
4 实现功能包括:
  1)安装 fail2ban
  2)配置服务保护
  3)设置邮件通知
  4)添加自定义防火墙规则
  5)解封 IP 地址
  6)启动 fail2ban
  7)重启 fail2ban
  8)停止 fail2ban
  9)卸载 fail2ban
  10)集成 Cloudflare
  11)查看日志

附图

附图

附脚本:

  1. #!/bin/bash

  2. # 开发者: 857
  3. # Telegram 频道: https://t.me/cryptothrifts
  4. # 功能: 自动安装、配置 fail2ban,支持多服务保护、设置封禁时长和失败条件、自定义防火墙规则、解封IP、邮件通知、Cloudflare集成等功能
  5. # 适配操作系统: Ubuntu/Debian/CentOS

  6. if [ "$EUID" -ne 0 ]; then
  7.   echo "请以 root 用户身份运行此脚本。"
  8.   exit 1
  9. fi

  10. echo "开发人: 857"
  11. echo "Telegram 频道: https://t.me/cryptothrifts"
  12. echo "脚本功能: 自动安装、配置 fail2ban,支持多服务保护、设置封禁时长、失败条件、白名单、自定义防火墙规则、解封IP、邮件通知和Cloudflare集成等功能"
  13. echo "适配操作系统: Ubuntu/Debian/CentOS"
  14. echo "========================================"

  15. if [ -f /etc/os-release ]; then
  16.     . /etc/os-release
  17.     OS=$ID
  18. else
  19.     echo "无法检测操作系统类型,脚本停止。"
  20.     exit 1
  21. fi

  22. install_fail2ban() {
  23.     echo "开始安装 fail2ban..."
  24.    
  25.     case $OS in
  26.         ubuntu|debian)
  27.             sudo apt-get update
  28.             sudo apt-get install -y fail2ban mailutils
  29.             ;;
  30.         centos|rhel|fedora)
  31.             sudo yum install -y epel-release
  32.             sudo yum install -y fail2ban mailx
  33.             ;;
  34.         *)
  35.             echo "不支持的操作系统:$OS"
  36.             exit 1
  37.             ;;
  38.     esac
  39. }

  40. configure_service() {
  41.     local service_name=$1
  42.     local port=$2
  43.     local log_path=$3
  44.    
  45.     if ! grep -q "\[$service_name\]" /etc/fail2ban/jail.local; then
  46.         sudo bash -c "cat >> /etc/fail2ban/jail.local <<EOL

  47. [$service_name]
  48. enabled = true
  49. port = $port
  50. logpath = $log_path
  51. bantime = $BAN_TIME
  52. findtime = $FIND_TIME
  53. maxretry = $MAX_RETRY
  54. ignoreip = $IGNORE_IPS
  55. EOL"
  56.     else
  57.         echo "$service_name 已经配置,跳过。"
  58.     fi
  59. }

  60. configure_service_protection() {
  61.     echo "配置 fail2ban 来保护多个服务并自定义规则..."

  62.     if [ ! -f /etc/fail2ban/jail.local ]; then
  63.         sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  64.     fi

  65.     read -p "请输入封禁时长(秒,默认3600秒/1小时): " BAN_TIME
  66.     BAN_TIME=${BAN_TIME:-3600}
  67.    
  68.     read -p "请输入失败检测窗口时间(秒,默认600秒/10分钟): " FIND_TIME
  69.     FIND_TIME=${FIND_TIME:-600}

  70.     read -p "请输入最大失败尝试次数(默认5次): " MAX_RETRY
  71.     MAX_RETRY=${MAX_RETRY:-5}
  72.    
  73.     read -p "请输入白名单IP(使用逗号分隔多个IP,默认无白名单): " IGNORE_IPS

  74.     sudo sed -i '/^\[DEFAULT\]/,/^\[.*\]/ s/^bantime = .*/bantime = '"$BAN_TIME"'/' /etc/fail2ban/jail.local
  75.     sudo sed -i '/^\[DEFAULT\]/,/^\[.*\]/ s/^findtime = .*/findtime = '"$FIND_TIME"'/' /etc/fail2ban/jail.local
  76.     sudo sed -i '/^\[DEFAULT\]/,/^\[.*\]/ s/^maxretry = .*/maxretry = '"$MAX_RETRY"'/' /etc/fail2ban/jail.local
  77.     if [ -n "$IGNORE_IPS" ]; then
  78.         if grep -q "^ignoreip = " /etc/fail2ban/jail.local; then
  79.             sudo sed -i '/^\[DEFAULT\]/,/^\[.*\]/ s/^ignoreip = .*/ignoreip = '"$IGNORE_IPS"'/' /etc/fail2ban/jail.local
  80.         else
  81.             sudo sed -i '/^\[DEFAULT\]/ a\ignoreip = '"$IGNORE_IPS" /etc/fail2ban/jail.local
  82.         fi
  83.     fi

  84.     echo "请选择要保护的服务(使用空格分隔多个选择):"
  85.     echo "1) sshd"
  86.     echo "2) nginx"
  87.     echo "3) apache"
  88.     echo "4) vsftpd"
  89.     echo "5) postfix"
  90.     echo "6) dovecot"
  91.     echo "7) 自定义"
  92.     read -p "请输入选项 (例如: 1 3 5): " SERVICES
  93.    
  94.     for SERVICE in $SERVICES; do
  95.         case $SERVICE in
  96.             1) configure_service "sshd" "ssh" "/var/log/auth.log" ;;
  97.             2) configure_service "nginx-http-auth" "http,https" "/var/log/nginx/error.log" ;;
  98.             3) configure_service "apache-auth" "http,https" "/var/log/apache2/error.log" ;;
  99.             4) configure_service "vsftpd" "ftp,ftp-data" "/var/log/vsftpd.log" ;;
  100.             5) configure_service "postfix" "smtp,ssmtp" "/var/log/mail.log" ;;
  101.             6) configure_service "dovecot" "pop3,pop3s,imap,imaps" "/var/log/mail.log" ;;
  102.             7)
  103.                 read -p "请输入要保护的自定义服务名称: " CUSTOM_SERVICE
  104.                 read -p "请输入服务监听的端口: " CUSTOM_PORT
  105.                 read -p "请输入服务的日志文件路径: " CUSTOM_LOG
  106.                 configure_service "$CUSTOM_SERVICE" "$CUSTOM_PORT" "$CUSTOM_LOG"
  107.                 ;;
  108.             *)
  109.                 echo "无效选项:$SERVICE"
  110.                 ;;
  111.         esac
  112.     done

  113.     echo "服务配置完成,重新启动 fail2ban..."
  114.     sudo systemctl restart fail2ban
  115. }

  116. setup_email_notification() {
  117.     echo "设置邮件通知功能..."
  118.    
  119.     EMAIL="[email protected]"
  120.     read -p "请输入管理员邮箱以便接收通知(默认[email protected]): " EMAIL_INPUT
  121.     EMAIL=${EMAIL_INPUT:-$EMAIL}

  122.     case $OS in
  123.         ubuntu|debian)
  124.             sudo apt-get install -y mailutils
  125.             ;;
  126.         centos|rhel|fedora)
  127.             sudo yum install -y mailx
  128.             ;;
  129.     esac

  130.     if grep -q "^destemail = " /etc/fail2ban/jail.local; then
  131.         sudo sed -i 's/^destemail = .*/destemail = '"$EMAIL"'/' /etc/fail2ban/jail.local
  132.     else
  133.         sudo bash -c "echo 'destemail = $EMAIL' >> /etc/fail2ban/jail.local"
  134.     fi

  135.     sudo bash -c "cat >> /etc/fail2ban/jail.local <<EOL

  136. # 邮件通知相关配置
  137. [DEFAULT]
  138. sendername = Fail2Ban
  139. mta = sendmail
  140. action = %(action_mw)s
  141. EOL"
  142. }

  143. add_custom_firewall_rule() {
  144.     echo "添加自定义防火墙规则..."

  145.     read -p "请输入要封禁的协议(如:tcp/udp,默认tcp): " PROTOCOL
  146.     PROTOCOL=${PROTOCOL:-tcp}

  147.     read -p "请输入要封禁的端口(默认空,不封禁): " PORT

  148.     if [ -n "$PORT" ]; then
  149.         if grep -q "\[custom-rule\]" /etc/fail2ban/jail.local; then
  150.             sudo sed -i "/\[custom-rule\]/,+4s/^port = .*/port = $PORT/" /etc/fail2ban/jail.local
  151.             sudo sed -i "/\[custom-rule\]/,+4s/^protocol = .*/protocol = $PROTOCOL/" /etc/fail2ban/jail.local
  152.         else
  153.             sudo bash -c "cat >> /etc/fail2ban/jail.local <<EOL

  154. [custom-rule]
  155. enabled = true
  156. port = $PORT
  157. protocol = $PROTOCOL
  158. logpath = /var/log/custom.log
  159. EOL"
  160.         fi
  161.     fi
  162. }

  163. unban_ip() {
  164.     echo "解封指定的IP..."
  165.     read -p "请输入要解封的IP地址:" UNBAN_IP
  166.     sudo fail2ban-client unban $UNBAN_IP
  167. }

  168. start_fail2ban() {
  169.     echo "启动 fail2ban..."
  170.     sudo systemctl enable fail2ban
  171.     sudo systemctl start fail2ban
  172.     sudo fail2ban-client status
  173. }

  174. restart_fail2ban() {
  175.     echo "重启 fail2ban..."
  176.     sudo systemctl restart fail2ban
  177. }

  178. stop_fail2ban() {
  179.     echo "停止 fail2ban..."
  180.     sudo systemctl stop fail2ban
  181. }

  182. uninstall_fail2ban() {
  183.     echo "卸载 fail2ban..."
  184.    
  185.     case $OS in
  186.         ubuntu|debian)
  187.             sudo apt-get remove --purge -y fail2ban
  188.             ;;
  189.         centos|rhel|fedora)
  190.             sudo yum remove -y fail2ban
  191.             ;;
  192.         *)
  193.             echo "不支持的操作系统:$OS"
  194.             exit 1
  195.             ;;
  196.     esac
  197. }

  198. integrate_cloudflare() {
  199.     echo "配置 Cloudflare 集成..."
  200.    
  201.     read -p "请输入 Cloudflare API 密钥: " CLOUDFLARE_API_KEY
  202.     read -p "请输入 Cloudflare 帐户邮箱: " CLOUDFLARE_EMAIL

  203.     if grep -q "\[Definition\]" /etc/fail2ban/action.d/cloudflare.conf; then
  204.         echo "Cloudflare 已经配置,跳过。"
  205.     else
  206.         sudo bash -c "cat > /etc/fail2ban/action.d/cloudflare.conf <<EOL
  207. [Definition]
  208. actionban = curl -s -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
  209.     -H "X-Auth-Email: $CLOUDFLARE_EMAIL" \
  210.     -H "X-Auth-Key: $CLOUDFLARE_API_KEY" \
  211.     --data '{"mode":"block","configuration":{"target":"ip","value":"<ip>"}}'
  212. EOL"
  213.     fi
  214. }

  215. view_logs() {
  216.     sudo tail -f /var/log/fail2ban.log
  217. }

  218. while true; do
  219.     echo "请选择一个操作:"
  220.     echo "1) 安装 fail2ban"
  221.     echo "2) 配置服务保护"
  222.     echo "3) 设置邮件通知"
  223.     echo "4) 添加自定义防火墙规则"
  224.     echo "5) 解封 IP 地址"
  225.     echo "6) 启动 fail2ban"
  226.     echo "7) 重启 fail2ban"
  227.     echo "8) 停止 fail2ban"
  228.     echo "9) 卸载 fail2ban"
  229.     echo "10) 集成 Cloudflare"
  230.     echo "11) 查看日志"
  231.     echo "12) 退出"
  232.    
  233.     read -p "请输入选项 (1-12): " OPTION

  234.     case $OPTION in
  235.         1) install_fail2ban ;;
  236.         2) configure_service_protection ;;
  237.         3) setup_email_notification ;;
  238.         4) add_custom_firewall_rule ;;
  239.         5) unban_ip ;;
  240.         6) start_fail2ban ;;
  241.         7) restart_fail2ban ;;
  242.         8) stop_fail2ban ;;
  243.         9) uninstall_fail2ban ;;
  244.         10) integrate_cloudflare ;;
  245.         11) view_logs ;;
  246.         12) exit 0 ;;
  247.         *) echo "无效的选项,请重新选择。" ;;
  248.     esac
  249. done
复制代码
爱生活,爱奶昔~
发表于 2024-8-24 15:24:54 来自手机 | 显示全部楼层
要是自己被ban了,咋解
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

楼主| 发表于 2024-8-24 23:01:09 | 显示全部楼层
nyarime 发表于 2024-8-24 15:24
要是自己被ban了,咋解

有设置的,1小时自动解禁
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

发表于 2024-8-28 20:17:57 | 显示全部楼层
能不能配合其他特征来过滤非本人的操作?比如网站可以通过判断UA,服务器登陆能增加其他特征判断吗?
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

发表于 2024-9-3 18:40:42 | 显示全部楼层
馬克了先
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

Powered by Nyarime. Licensed

GMT+8, 2024-11-21 18:46 , Processed in 0.028440 second(s), 13 queries , Gzip On, Redis On
发帖际遇 ·手机版 ·小黑屋 ·RSS ·奶昔网

登录切换风格
快速回复 返回顶部 返回列表