net.ipv4.conf.all.log_martians=1 的作用是开启内核对火星包的基础日志记录,仅输出源ip、目标ip、接收接口和时间戳等原始异常信息,不提取端口、ttl、tcp选项等指纹级字段;需配合rp_filter、tcpdump、ss等工具才能进一步分析来源特征。

明确 log_martians 能记录什么
开启后,内核会在 /var/log/messages 或 journalctl -k 中写入类似这样的行:
kernel: martian source 192.168.5.100 from 10.20.30.40, on dev eth1
含义是:在 eth1 接口收到一个源地址为 10.20.30.40、但声称来自私网段 192.168.5.100 的包——这违背路由常识,被判定为火星包。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
它记录的是:异常包的源IP、目标IP、接收接口、时间戳,不含端口、协议类型、TTL、TCP窗口等“指纹级”字段。
如何正确启用并确保日志可见
- 临时启用:运行
sudo sysctl -w net.ipv4.conf.all.log_martians=1 - 永久生效:在 /etc/sysctl.conf 或 /etc/sysctl.d/99-martian.conf 中添加一行:
net.ipv4.conf.all.log_martians = 1,然后执行sudo sysctl --system - 确认生效:
sysctl net.ipv4.conf.all.log_martians应返回1 - 检查日志是否输出:
sudo journalctl -k -g martian -n 20或sudo grep martian /var/log/messages
为什么它“不等于指纹”,以及怎么补足
log_martians 只告诉你“有异常”,但无法区分是配置错误、ARP欺骗、还是恶意伪造。要逼近“来源指纹”,必须结合其他机制:
-
配合 rp_filter:设置
net.ipv4.conf.all.rp_filter = 1(严格反向路径校验),可大幅增加火星包触发概率,让日志更聚焦真实异常 -
用 tcpdump 捕获原始包:当发现某源IP频繁触发 martian 日志时,立即运行:
sudo tcpdump -i eth1 src host 10.20.30.40 -w martian_40.pcap -c 100,再用 Wireshark 查看 TTL、Window Size、TCP 选项(如 TSval)、IP ID 等行为特征 -
关联进程和连接:若该源IP是本机发出的(比如容器或本地程序误配),可用
ss -tunap | grep 10.20.30.40或lsof -i @10.20.30.40定位源头进程
典型火星包场景与排查建议
-
多网卡子网重叠:如 eth0 配 192.168.1.0/24,eth1 也配了 192.168.1.0/24,导致回包走错接口 → 检查
ip addr和路由表 - 策略路由或 NAT 配置错误:SNAT/DNAT 规则未覆盖所有路径,造成地址“看起来非法” → 检查 iptables/nftables 的 nat 表及 conntrack 状态
-
虚拟化/容器网络冲突:Docker 或 K8s CNI 分配的网段与物理网段重复 → 查
docker network inspect或kubectl get nodes -o wide - 恶意伪造源地址:攻击者故意发私网地址伪装包试探边界 → 此时需结合防火墙 DROP 规则 + 入侵检测(如 Suricata)做联动响应










