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  | 
记得开放陷阱端口对应的服务器安全组规则配置。
测试
这是一个在线端口扫描网站,将服务器的地址输入进行扫描,当扫到陷阱端口之后,之后实际打开的端口也被识别为未打开,还是有一定作用的。
监听端口记录访问信息
可使用 iptables 记录某个端口的访问日志,通过防火墙规则记录连接请求,日志中包含时间、IP和端口信息。
- 添加 iptables 规则
例如针对目标端口 80 和 443 记录新连接:1
2sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j LOG --log-prefix "PORT-80 "
sudo iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j LOG --log-prefix "PORT-443 " - 保存 iptables 规则 
1
2sudo apt install iptables-persistent
sudo netfilter-persistent save - 配置日志分割
编辑/etc/rsyslog.d/iptables.conf,将日志定向到独立文件:1
2
3
4
5
6# 创建日志规则
echo ':msg, contains, "PORT-80 " -/var/log/port_80.log' | sudo tee -a /etc/rsyslog.d/iptables.conf
echo ':msg, contains, "PORT-443 " -/var/log/port_443.log' | sudo tee -a /etc/rsyslog.d/iptables.conf
echo '& stop' | sudo tee -a /etc/rsyslog.d/iptables.conf
# 重启 rsyslog
sudo systemctl restart rsyslog - 测试并查看日志
测试端口访问,检查日志:1
tail -f /var/log/port_80.log
 





