端口扫描行为本身不违法但常被用于攻击探测,应通过ss/netstat检查监听端口、分析日志识别高频连接、tcpdump抓包验证、fail2ban自动封禁四步实现检测与响应。

Linux 服务器端口扫描行为本身不违法,但常被攻击者用于探测开放服务、寻找漏洞入口。及时发现异常扫描活动,是安全运维的关键一环。
通过 netstat 或 ss 查看当前连接与监听状态
主动检查本机正在监听的端口和服务,可快速识别非预期开放项。netstat 已逐步被更高效的 ss 取代:
- 查看所有监听端口及对应进程:运行 ss -tulnp(需 root 权限),输出中重点关注 State 为 LISTEN 的条目,以及最后一列显示的进程名和 PID
- 过滤特定端口或服务:如 ss -tuln | grep ':80' 快速确认 Web 服务是否意外暴露
- 若发现未知进程监听高危端口(如 22、3306、6379),应立即核查其合法性并限制访问来源
分析系统日志识别高频连接尝试
扫描行为通常表现为短时间内对多个端口发起大量 SYN 请求,这类行为会在内核日志或服务日志中留下痕迹:
- 检查内核连接拒绝日志:执行 journalctl -k | grep "port.*denied" 或 dmesg | grep -i "reject",关注重复出现的源 IP 和目标端口组合
- 查看 SSH 登录失败记录:运行 grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -10,统计高频尝试登录的 IP 地址
- Web 服务(如 Nginx/Apache)的 access.log 中若出现大量 404 或 400 响应且路径随机(如 /phpmyadmin/、/.git/config),也可能是目录爆破或端口映射探测的延伸行为
使用 tcpdump 抓包定位可疑扫描流量
当怀疑存在隐蔽扫描时,抓包是最直接的验证方式,适合短期排查:
- 捕获短时间内的入向 SYN 包:执行 tcpdump -i any 'tcp[tcpflags] & (tcp-syn) != 0 and dst portrange 1-65535' -c 50,观察是否有同一源 IP 向不同目标端口密集发包
- 保存并分析完整会话:用 tcpdump -w scan.pcap host 192.168.1.100(替换为目标服务器 IP)保存流量,再用 Wireshark 打开分析时间分布与端口序列
- 注意避免长期全量抓包,防止磁盘占满;建议配合过滤条件(如指定 src host 或 port range)缩小范围
部署 fail2ban 自动封禁扫描源 IP
单纯检测不够,需联动响应机制。fail2ban 可基于日志规则自动将恶意 IP 加入 iptables 或 nftables 黑名单:
- 安装后启用默认 jail:Debian/Ubuntu 上执行 apt install fail2ban && systemctl enable --now fail2ban,它会自动监控 auth.log 阻止暴力破解
- 自定义端口扫描防护规则:在 /etc/fail2ban/jail.local 中添加新 jail,匹配如“Connection refused”或“no route to host”等日志关键词,并设置 bantime 和 maxretry
- 验证生效:用另一台机器运行 nmap -p 1-100 target_ip 模拟扫描,随后检查 fail2ban-client status sshd 或对应 jail 名称,确认 IP 是否被 ban










