fail2ban + 陷阱端口
云服务器安全防护
查了一下 ssh 登录信息,才发现好像这台服务器没开防护,以前用的 fail2ban,选择重新装一次,记录一下,查资料的时候看到了陷阱端口感觉很不错,也顺便实践一下。
查看登录信息
查看btmp信息
1 | lastb -n 10 | tac |
查看攻击者ip和攻击次数
1 | lastb | awk '{ print $3}' | sort | uniq -c | sort -n |
发现攻击次数挺少的,最多的也才382次。
1 | 次数 ip |
查看尝试登陆的用户名,最多的还是 root
1 | lastb | awk '{ print $1}' | sort | uniq -c | sort -n |
1 | 22 test1 |
查看被扫描的端口及扫描者IP
下面的命令能够后台监控tcp连接,并保存文件到syn.scan
中,使用jobs
命令可以查看此任务,使用tail syn.scan
可以查看文件信息。
1 | nohup tcpdump -n "tcp[tcpflags] == tcp-syn" 2>&1 > syn.scan & |
查看被扫描的端口及其排名
1 | awk -F '[ .:]' '{print $16}' syn.scan | sort | uniq -c | sort -n |
查看扫描者IP及扫描次数
1 | awk -F '[ .]' '{print $4"."$5"."$6"."$7}' syn.scan | sort | uniq -c |sort -n |
fail2ban 安全防护
安装
1 | sudo apt-get install fail2ban |
启动
1 | systemctl start fail2ban |
开机自启
1 | systemctl enable fail2ban |
查看状态
1 | systemctl status fail2ban |
创建本地配置文件副本
1 | cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
编辑副本
1 | nano /etc/fail2ban/jail.local |
重启
1 | systemctl restart fail2ban |
配置ssh防暴力破解
1 | rm -rf /etc/fail2ban/jail.d/* |
然后复制以下内容粘贴进去,ctrl+x
保存退出然后重启服务
1 | [sshd] |
查看封锁列表
1 | fail2ban-client status |
查看SSH封锁情况
1 | fail2ban-client status sshd |
陷阱端口
简介
开放陷阱端口就是开放大量无意义的端口,让攻击者难以分辨哪些是真实服务。这并不能完全防止端口扫描,但可以干扰攻击者,增加其识别真实服务的难度。
陷阱端口应随机分布在非默认端口范围内,避免集中在某个区域;不要使用常见服务端口(如80、443、22等)作为陷阱端口;确保陷阱端口与真实服务端口不冲突。
这里设置的陷阱端口一旦被访问,直接将访问ip加入30分钟的黑名单,期间内不能访问所有端口。
配置
安装iptables-persistent
1 | apt install iptables-persistent |
创建自定义链
1 | iptables -N TRAP_BLACKLIST |
iptables 只能加入 15 个端口,这里使用 ipset 工具管理端口集合,突破 15 个端口的限制
1 | apt install ipset |
创建端口集合(支持 TCP 和 UDP)
1 | ipset create trap_ports bitmap:port range 1-65535 |
绑定 iptables 规则
1 | iptables -A INPUT -m set --match-set trap_ports dst -j TRAP_BLACKLIST |
保存配置
1 | ipset save trap_ports -f /etc/iptables/trap_ports.set |
验证配置
1 | ipset list trap_ports |
添加规则
1 | # 如果IP已在列表且30分钟内,刷新时间并丢弃 |
保存规则(重要!)
1 | netfilter-persistent save |
检查规则是否生效
1 | iptables -L -v -n |
其它
调整黑名单容量(编辑后重启生效)
1 | echo "options ipt_recent ip_list_tot=200" | sudo tee /etc/modprobe.d/iptables-recent.conf |
查看当前黑名单IP
1 | sudo cat /proc/net/xt_recent/trap_ports |
检查 ipset 集合
1 | sudo ipset list trap_ports |
记得开放陷阱端口对应的服务器安全组规则配置。
测试
这是一个在线端口扫描网站,将服务器的地址输入进行扫描,当扫到陷阱端口之后,之后实际打开的端口也被识别为未打开,还是有一定作用的。