2022最新_结合官方文档_部署 fail2ban docker 拦截sshd + docker nginx容器

3天(1天半折腾的正常安装的)!折腾3天了!总结出来,方便国人!

看大家留言反应,人多的话,就再放个正常安装版的教程!

给自己的忠告:为啥不看官方文档?非看之前别人配置的信息,按官方的来哪那么多坑?!

给读者的忠告:真以为我们行了?其实还差人家很远,墙外的世界真是很精彩!

相关文档


官方文档【推荐】

GitHub - crazy-max/docker-fail2ban: Fail2ban Docker image

参考文档

Docker + nginx-proxy + let's encrypt + watchtower + fail2ban · GitHub

更多Nginx案例参考

fail2ban for Docker — Generic service & computer documentation. documentation

部署


使用说明

  • 看官方文档!看官方文档!看官方文档!别瞎找国外旧版教程!
  • docker-compose 可独立使用不用与其他容器共存,网络可独立
  • 服务器 firewall/iptables 不用开启,镜像自带(使用iptables)
  • 当容器重启不了的时候,重启Docker,因为docker iptables被修改

Docker-compose

官方 docker-compose 参考示例:

docker-fail2ban/examples/compose at master · crazy-max/docker-fail2ban · GitHub

mkdir /mnt/docker/docker-compose/fail2ban
cd /mnt/docker/docker-compose/fail2ban
vim docker-compose.yml
--------------------
version: "3"
services:
  fail2ban:
    image: crazymax/fail2ban:latest
    container_name: fail2ban_docker
    restart: unless-stopped
    network_mode: "host"
    cap_add:
      - NET_ADMIN
      - NET_RAW
    # 使用同级目录下的环境变量文件件代替下面environment
    env_file:
      - "./fail2ban.env"
#    environment:
#      - TZ=Asia/Shanghai
#      - F2B_LOG_TARGET=STDOUT
#      - F2B_LOG_LEVEL=INFO
#      - F2B_DB_PURGE_AGE=1d
    volumes:
      - "/mnt/data/fail2ban/data:/data"
      - "/mnt/data/fail2ban/log/:/var/log/"
      # sshd 日志映射
      - "/var/log/:/var/sshd_log/:ro"
      # nginx 日志映射
      - "/mnt/data/nginx_weblogs/:/mnt/data/nginx_weblogs/:ro"
    logging:
      driver: "json-file"
      options:
        max-size: "5m"
        max-file: "10"
--------------------
# 注意保存为utf-8
:set fileencoding=utf-8
vim fail2ban.env
--------------------
TZ=Asia/Shanghai

F2B_LOG_TARGET=STDOUT
F2B_LOG_LEVEL=INFO

# 秒s,分m,时h,天d,月mo,年y
F2B_DB_PURGE_AGE=1d

#如发送邮件开启
#SSMTP_HOST=smtp.sendgrid.net
#SSMTP_PORT=587
#SSMTP_USER=apikey
#SSMTP_PASSWORD=YOUR_API_KEY
#SSMTP_TLS=YES
--------------------
# 注意保存为utf-8
:set fileencoding=utf-8

# 其他说明:
# 官方github文档都没有提及应该是以前版本的参数,现在已经不用再声明了,可选声明
# F2B_MAX_RETRY=3
# 触发规则后的选择行为:
# 只封禁IP:action_
# 封禁IP+邮件通知:action_mw 
# 封禁IP+邮件通知+报告相关日志:action_mwl 
#F2B_ACTION=%(action_)s

#F2B_IPTABLES_CHAIN=DOCKER-USER

#F2B_DEST_EMAIL=RECEIPIENT_EMAIL
#F2B_SENDER=SENDER_EMAIL

配置


 【坑】官方github都没有action应该是已经默认到镜像内执行,只需声明要封锁的端口即可

sshd拦截

参考:docker-fail2ban/sshd.conf at master · crazy-max/docker-fail2ban · GitHub

vim /mnt/data/fail2ban/data/jail.d/sshd.conf
【文件内不能有中文,否则会加载配置失败】
--------------------
[sshd]
enabled = true
chain = INPUT
# port = ssh
port = 37222
filter = sshd[mode=aggressive]
logpath = /var/sshd_log/secure
maxretry = 5
--------------------
# 如修改过sshd端口必须明确 

Nginx-cc拦截

vim /mnt/data/fail2ban/data/filter.d/nginx-cc.conf
【文件内不能有中文,否则会加载配置失败】
-------------------
[Definition]
failregex = ^<HOST> .* "(GET|POST|HEAD).*HTTP.*" (404|503) .*$
ignoreregex =.*(robots.txt|favicon.ico|jpg|png)
-------------------

参考:docker-fail2ban/guacamole.conf at master · crazy-max/docker-fail2ban · GitHub

vim /mnt/data/fail2ban/data/jail.d/nginx-cc.conf
【文件内不能有中文,否则会加载配置失败】
------------------------
[nginx-cc]
enabled = true
chain = DOCKER-USER
ignoreip = [ 本机公网 IP ]
port = http,https
filter = nginx-cc
logpath  = /mnt/data/nginx_weblogs/access.log
           /mnt/data/nginx_weblogs/error.log
           /mnt/data/nginx_weblogs/gitlab.access.log
           /mnt/data/nginx_weblogs/gitlab.error.log
bantime = 2h
findtime = 10m
maxretry = 5

# 多日志注意一定要对齐

# 其他说明
# 默认不用声明action,这里举一个可用的一个action参考
# action = iptables[name=app, port=https, protocol=tcp, chain=FORWARD]

屏蔽规则

官方参考:fail2ban/jail.conf at master · fail2ban/fail2ban · GitHub

# 可以在上面的官方文档中 ctrl+f 查找对应位置 
# 下面的一个是多端口(需要明确端口)
# 一个是全屏蔽(这里是容器,并不是服务器)
# 选一个即可
banaction = iptables-multiport
banaction_allports = iptables-allports

# 个人经验理解:
# 因为涉及到多个容器,即使使用【banaction_allports = iptables-allports】
# 只在规则限定容器内生效,屏蔽所有容器的端口,并不会跨容器
# 此处应该理解每个容器都是单独的iptables,个人看下面的docker iptables命令也是这样的感觉

使用


相关操作命令

# 查看状态 check status
sudo docker exec -t fail2ban_docker fail2ban-client status

# 查看指定监狱状态 Check status of specific jail
sudo docker exec -t fail2ban_docker fail2ban-client status sshd

# 指定监狱屏蔽IP(<JAIL>为监狱名) ban specific IP
sudo docker exec -t fail2ban_docker fail2ban-client set <JAIL> banip <IP>
# 示例:sudo docker exec -t fail2ban_docker fail2ban-client set sshd banip 1.1.1.1

# 指定监狱解封IP(<JAIL>为监狱名)  unban specific IP
sudo docker exec -t fail2ban_docker fail2ban-client set <JAIL> upbanip <IP>
# 示例:sudo docker exec -t fail2ban_docker fail2ban-client set sshd  upbanip 1.1.1.1

防火墙规则查看

#在docker容器内部操作
docker exec -it fail2ban_docker /bin/bash
#1.查看filter表
> iptables -nvL

#2.查看nat表
> iptables -nvL -t nat

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值