zoukankan      html  css  js  c++  java
  • CentOS7防止CC攻击防止SSH爆破采取的措施

    准备工作
    1、检查firewalld是否启用

    复制代码
    #如果您已经安装iptables建议先关闭
    service iptables stop
    #查看firewalld状态
    firewall-cmd --state
    #启动firewalld
    systemctl start firewalld
    #设置开机启动
    systemctl enable firewalld.service
    复制代码

    启用firewalld后会禁止所有端口连接,因此请务必放行常用的端口,以免被阻挡在外,以下是放行SSH端口(22)示例,供参考:

    #放行22端口
    firewall-cmd --zone=public --add-port=22/tcp --permanent
    #重载配置
    firewall-cmd --reload
    #查看已放行端口
    firewall-cmd --zone=public --list-ports

    查看哪些ip连接了,以及每个ip有多少个连接。左边的数字是连接数:

    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

    2、安装fail2ban
    fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。

    #CentOS内置源并未包含fail2ban,需要先安装epel源
    yum -y install epel-release
    #安装fial2ban
    yum -y install fail2ban

    安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索。

    fail2ban 结构

    /etc/fail2ban ## fail2ban 服务配置目录
    /etc/fail2ban/action.d ## iptables 、mail 等动作文件目录
    /etc/fail2ban/filter.d ## 条件匹配文件目录,过滤日志关键内容
    /etc/fail2ban/jail.conf ## fail2ban 防护配置文件
    /etc/fail2ban/fail2ban.conf ## fail2ban 配置文件,定义日志级别、日志、sock 文件位置等

    3、配置规则
    新建jail.local来覆盖fail2ban的一些默认规则:

    复制代码
    #新建配置
    vi /etc/fail2ban/jail.local
    #默认配置
    [DEFAULT]
    ignoreip = 127.0.0.1/8
    bantime  = 86400
    findtime = 600
    maxretry = 5
    #这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写
    banaction = firewallcmd-ipset
    action = %(action_mwl)s
    复制代码

    参数说明:

    ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
    bantime:屏蔽时间,单位为秒(s)
    findtime:时间范围
    maxretry:最大次数
    banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口

    防止SSH爆破
    如果您还在使用默认SSH端口(22),可能每天都会被扫描,我们可以修改端口尽量避免被扫或者可以使用fail2ban将恶意IP屏蔽。

    继续修改jail.local这个配置文件,在后面追加如下内容:

    [sshd]
    enabled = true
    filter  = sshd
    port    = 22
    action = %(action_mwl)s
    logpath = /var/log/secure

    参数说明:

    [sshd]:名称,可以随便填写
    filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
    port:对应的端口
    action:采取的行动
    logpath:需要监视的日志路径

    到这一步,我们jail.local的规则看起来可能像下面这样子:

    复制代码
    [DEFAULT]
    ignoreip = 127.0.0.1/8
    bantime  = 86400
    findtime = 600
    maxretry = 5
    banaction = firewallcmd-ipset
    action = %(action_mwl)s
    
    [sshd]
    enabled = true
    filter  = sshd
    port    = 22
    action = %(action_mwl)s
    logpath = /var/log/secure
    复制代码

    上面的配置意思是如果同一个IP,在10分钟内,如果连续超过5次错误,则使用firewalld将他IP ban了。输入systemctl start fail2ban启动fail2ban来试试效果。

    使用另一台服务器不断尝试连接SSH,并且不断的将密码输入错误,你会发现连续超过5次后直接连不上,说明IP被ban了,可以输入:fail2ban-client status sshd查看被ban的IP

    防止CC攻击
    这里仅以Nginx为例,使用fail2ban来监视nginx日志,匹配短时间内频繁请求的IP,并使用firewalld将其IP屏蔽,达到CC防护的作用。

    fail2ban在/etc/fail2ban/filter.d这个目录已经内置了很多规则可以参考。如:nginx-limit-req.conf,Nginx的limit_req_zone用法详细请见:https://blog.csdn.net/keketrtr/article/details/75315330

    当然也可以自己新建规则:

    #需要先新建一个nginx日志匹配规则
    vi /etc/fail2ban/filter.d/nginx-cc.conf
    #填写如下内容
    [Definition]
    failregex =  -.*- .*HTTP/1.* .* .*$
    ignoreregex =

    继续修改jail.local追加如下内容:

    复制代码
    [nginx-cc]
    enabled = true
    port = http,https
    filter = nginx-cc
    action = %(action_mwl)s
    maxretry = 20
    findtime = 60
    bantime = 3600
    logpath = /usr/local/nginx/logs/access.log
    复制代码

    上面的配置意思是如果在60s内,同一IP达到20次请求,则将其IP ban 1小时,上面只是为了测试,请根据自己的实际情况修改。logpath为nginx日志路径。

    使用如下命令,可以测试正则规则的有效性:

    fail2ban-regex /usr/local/nginx/logs/access.log /etc/fail2ban/filter.d/nginx-cc.conf

    防止Wordpress爆破
    如果您经常分析日志会发现有大量机器人在扫描wordpress登录页面wp-login.php,虽然对方可能没成功,但是为了避免万一还是将他IP干掉为好。

    #需要先新建一个nginx日志匹配规则
    vi /etc/fail2ban/filter.d/wordpress.conf
    #填写如下内容
    [Definition]
    failregex = ^ -.* /wp-login.php.* HTTP/1.."
    ignoreregex =

    继续修改jail.local追加如下内容:

    复制代码
    [wordpress]
    enabled = true
    port = http,https
    filter = wordpress
    action = %(action_mwl)s
    maxretry = 20
    findtime = 60
    bantime = 3600
    logpath = /usr/local/nginx/logs/access.log
    复制代码

    当然,别忘记输入systemctl restart fail2ban重启fail2ban使其生效。

    常用命令

    复制代码
    #启动
    systemctl start fail2ban
    #停止
    systemctl stop fail2ban
    #启动
    systemctl restart fail2ban
    #开机启动
    systemctl enable fail2ban
    #是配置立即生效
    systemctl daemon-reload
    #查看是否开机启动
    systemctl is-enabled fail2ban
    #查看被ban IP,其中sshd为名称,比如上面的[wordpress]
    fail2ban-client status sshd
    #删除被ban IP
    fail2ban-client set sshd unbanip 192.168.111.111
    或
    fail2ban-client set sshd delignoreip 192.168.111.111
    #如果用以上命令删除被ban IP发现这个IP还是无法连接,是因为在临时策略中的ipset集合,只有电脑重启或者从这里面删除IP才行。
    #查看临时策略中的ipset集合:“ipset list”,删除ipset集合中IP:“ipset del fail2ban-sshd 192.168.111.111 -exist”
    #查看日志
    tail /var/log/fail2ban.log
    复制代码
    start 启动fail2ban server和监狱
    reload 重新加载配置文件
    stop 暂停fail2ban和监狱
    status 查看运行的监控服务数量和列表
    set loglevel  设置日志等级,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG
    get loglevel 获取当前日志的等级
    set <JAIL> idle on|off  设置某个监控(监狱)的状态。
    set <JAIL> addignoreip <IP> 设置某个监控(监狱)可以忽略的ip
    set <JAIL> delignoreip <IP> 删除某个监控(监狱)可以忽略的ip
    set <JAIL> banip <IP> 将ip加入 监控(监狱)
    set <JAIL> unbanip <IP> 将ip从监控(监狱)移除

    fail2ban邮件预警

    1.在/etc/mail.rc末尾配置发件人的信息:

    复制代码
    set ssl-verify=ignore
    set from=djx
    set smtp=smtps://mail.163.com:25
    set smtp-auth-user=dj
    set smtp-auth-password=
    set smtp-auth=login
    set nss-config-dir=/root/.certs
    复制代码

    2.然后在jail.local(自己的配置文件里),加入:

    mail-whois[name=SSH, dest=收件人@qq.com, sender=发送人@163.com]

    注意的问题

    问题1-时间文件: 当我们更改了时区后,然后日志的时间并没有修改过来,导致两者的时间不一致,这样fail2ban的工作就失效了。

    解决办法:重启日志服务:systemctl restart rsyslog,保证两者的时间一致。

    问题2-修改端口问题:sshd更改端口号后使用fail2ban需要注意在填写配置的时候也需要更改端口号。否则会出现就算会将ip添加到防火墙,但是由于我更改了端口号,是起不到禁止作用的。

    解决办法:在配置文件/etc/fail2ban/jail.local中修改新的端口号。

    总结
    fail2ban已经内置很多匹配规则,位于filter.d目录下,包含了常见的SSH、FTP、Nginx、Apache等日志匹配,如果都还无法满足您的需求,您也可以自行新建规则来匹配异常IP。使用fail2ban+Firewalld来阻止恶意IP是行之有效的办法,可极大提高服务器安全。

  • 相关阅读:
    [转]asp.net页面缓存技术
    UL和LI在div中的高度的IE6下兼容性
    jquery制作的横向图片滚动带横向滚动条TackerScroll
    电脑可以上网,但是qq登陆不上去?
    Introduction to discrete event system学习笔记4.6
    Introduction to Discrete event system学习笔记4.9
    Introduction to discrete event systemsstudy 4.5
    Symbolic synthesis of obserability requirements for diagnosability B.Bittner,M.Bozzano,A.Cimatti,and X.Olive笔记4.16
    Introduction to discrete event system学习笔记4.8pm
    Introduction to discrete event system学习笔记 4.8
  • 原文地址:https://www.cnblogs.com/xiami2046/p/12664644.html
Copyright © 2011-2022 走看看