1. 项目概述:从一次安全巡检说起
最近在帮一家使用天融信安全设备的客户做年度安全巡检,他们的核心业务系统部署在几台Linux服务器上,这些服务器与天融信的防火墙、入侵检测系统共同构成了防护体系。在检查过程中,我发现了一个很有意思的现象:客户在防火墙策略上投入了大量精力,规则写得密密麻麻,但对于承载业务的Linux服务器本身,却依然沿用着几年前部署时的默认配置和弱密码。这让我意识到,一个普遍存在的认知误区是,认为部署了专业的安全硬件,后端系统的安全就可以高枕无忧了。实际上,天融信的“墙”再坚固,如果“墙内”的Linux系统自身千疮百孔,攻击者一旦通过应用漏洞、配置缺陷或弱口令突破进来,整个防御体系就会瞬间从“纵深防御”退化成“马奇诺防线”。
“天融信Linux系统安全问题”这个标题,探讨的正是这种“软硬结合”场景下的安全实践。它不是一个孤立的技术点,而是一个系统工程,核心在于如何让作为业务载体的Linux系统,与作为边界防护的天融信安全设备形成有效联动与互补,构建从网络边界到主机内部、从被动防护到主动响应的立体化安全能力。无论是运维工程师、安全工程师,还是系统架构师,理解并实践这套方法论,对于保障企业核心业务在复杂威胁环境下的稳定运行都至关重要。接下来,我将结合这次巡检和以往的大量实战经验,拆解其中涉及的核心思路、关键配置与避坑指南。
2. 安全基线与合规性建设
在讨论具体技术之前,我们必须先确立一个共识:安全始于基线。没有基准,所有的加固和检查都将失去依据。对于运行在关键业务环境,特别是与天融信等安全设备联动的Linux系统,建立并遵循一套严格的安全基线是第一步。
2.1 建立符合等保要求的安全基线
国内许多行业,尤其是金融、政务、能源等领域,其信息系统需要满足网络安全等级保护制度的要求。天融信设备本身往往就是为了满足等保二级、三级甚至四级的边界防护需求而部署的。与之对应,后端Linux系统的安全基线也必须向等保看齐。
一个基础的Linux安全基线应至少涵盖以下方面,我通常会整理成一个Checklist,在每次系统上线或定期巡检时逐项核对:
- 账户与口令策略:这是最基础也最容易被忽视的。禁止root用户远程SSH登录、设置密码复杂度策略(长度、字符类型、定期更换)、禁用或锁定无用默认账户(如games、lp等)。
- 服务最小化原则:使用
systemctl list-unit-files --type=service和ss -tulnp命令,确认所有运行的服务都是业务必需的。关闭如telnet、rpcbind、vsftpd(除非必要)等高危或老旧服务。 - 网络与防火墙配置:即使前端有天融信防火墙,主机层面的防火墙(如firewalld或iptables)仍需启用,并遵循“默认拒绝,按需开放”的原则。只开放业务所需的精确端口。
- 文件与目录权限:关键系统目录(如
/etc,/bin,/sbin)的权限应为755,属主为root。检查/etc/passwd和/etc/shadow文件权限是否为644和000。查找系统中所有SUID/SGID文件(find / -perm /6000 -type f),审查其必要性。 - 日志审计配置:确保rsyslog或systemd-journald服务正常运行,配置关键日志(如auth, authpriv, cron, kernel)的集中存储。这是事后溯源分析的唯一依据。
注意:基线配置不是一次性的。我建议使用自动化工具(如Ansible的playbook或OpenSCAP)来定期检查和修复基线偏离。手动检查不仅效率低,而且容易因疏忽遗漏。
2.2 系统更新与漏洞管理
保持系统更新是抵御已知漏洞最有效的手段。但生产环境的更新需要谨慎。
- 更新源与策略:配置可靠的yum或apt源。对于CentOS/RHEL,建议使用官方源或国内稳定的镜像站。更新策略上,我通常采取“测试环境先行,生产环境分批”的方式。先在一个与生产环境一致的测试机上应用所有更新,观察1-2周无异常后,再在生产环境的非核心节点上实施,最后推广到全部。
- 内核更新要格外小心:内核更新可能导致硬件驱动、第三方模块(如某些监控Agent、安全防护软件)不兼容。更新前务必在测试环境充分验证,并准备好回滚方案(例如,在GRUB中保留旧内核启动选项)。
- 漏洞扫描与评估:不要盲目更新所有包。应结合漏洞扫描报告进行。可以使用Nessus、OpenVAS等专业工具,或Linux自带的工具(如
yum updateinfo list security查看RHEL系的安全公告)来识别影响当前系统的关键漏洞(CVSS评分高、已有公开EXP的)。优先修补这些漏洞。
一个常见的误区是,认为有了天融信的入侵防御(IPS)功能,就可以拦截针对系统漏洞的攻击,从而延缓甚至不做系统更新。这是非常危险的。IPS的规则库更新可能存在延迟,且对于未知的0day漏洞或变种攻击,IPS可能失效。主机层面的补丁是最后一道,也是最根本的防线。
3. 网络防护与访问控制纵深化
天融信防火墙提供了强大的边界访问控制能力,但这绝不意味着主机自身的网络访问控制可以放松。两者应该协同工作,形成纵深。
3.1 主机防火墙的精细化管理
以最常用的firewalld为例,许多管理员只是简单地firewall-cmd --add-port=80/tcp --permanent就了事。其实,我们可以做得更精细,使其与天融信防火墙策略呼应。
- 基于区域的策略:为不同安全级别的网卡分配不同的zone。例如,连接业务网络的网卡放在
publiczone,只开放80、443端口;连接内部管理网络的网卡放在trustedzone(或一个自定义的managementzone),开放SSH等管理端口。这样即使攻击者从业务口进入,也无法直接访问管理服务。# 查看网卡所属区域 firewall-cmd --get-active-zones # 将eth1网卡绑定到internal区域 firewall-cmd --zone=internal --change-interface=eth1 --permanent - 使用富规则(Rich Rules)实现高级控制:这是
firewalld的强大功能。例如,天融信的运维IP段是192.168.10.0/24,我们可以设置只允许该IP段访问主机的SSH端口,并记录日志。
这条规则的意思是,每分钟最多记录3条来自任意IP访问22端口的拒绝日志,避免被攻击时日志刷屏。通过查看firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" accept' --permanent firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="22" protocol="tcp" reject' --permanent # 更佳实践:将拒绝规则的日志记录也加上,便于监控异常访问 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="22" protocol="tcp" reject' --permanent firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="22" protocol="tcp" log prefix="SSH_DENY: " level="info" limit value="3/m" reject' --permanent/var/log/firewalld或系统日志,就能快速发现针对SSH的暴力破解尝试。
3.2 SSH服务的加固实践
SSH是Linux系统管理的生命线,也是攻击者最常攻击的入口。除了禁用root登录和修改端口(这属于“安全通过隐匿”,作用有限),还有更有效的加固手段。
- 使用密钥认证,彻底禁用密码:这是最推荐的方式。生成强密钥对(
ssh-keygen -t ed25519),将公钥部署到服务器的~/.ssh/authorized_keys文件中,然后在/etc/ssh/sshd_config中设置:
确保PasswordAuthentication no PubkeyAuthentication yesauthorized_keys文件权限为600,.ssh目录权限为700。 - 限制用户和来源IP:结合
firewalld的富规则,也可以在SSH配置中直接限制。
这表示只允许用户AllowUsers admin@192.168.10.* DenyUsers *admin从192.168.10.0/24网段登录。注意顺序,AllowUsers在DenyUsers之前生效。 - 启用双因子认证(2FA):对于特权账户或核心系统,可以集成Google Authenticator等工具实现2FA。这能极大提升撞库和密钥泄露后的安全性。
- 使用Fail2ban或DenyHosts:这类工具可以动态分析认证日志,将短时间内多次尝试失败(如SSH密码错误)的IP地址加入本地防火墙(如iptables)的拒绝列表一段时间。这是对抗暴力破解的利器。配置时要注意将天融信运维IP段加入白名单,避免自己把自己锁在外面。
4. 入侵检测与文件完整性监控
边界防火墙和主机加固能阻挡大部分攻击,但我们需要假设“攻击者已经进来”,并具备检测能力。这就是主机入侵检测系统(HIDS)和文件完整性监控(FIM)的价值。
4.1 部署开源HIDS:以Wazuh为例
Wazuh是一个功能强大的开源安全监控平台,它集成了HIDS、FIM、漏洞检测、日志分析等功能,并且可以与天融信设备的日志进行联动分析。
- 架构与部署:Wazuh采用Agent/Server架构。在需要监控的每台Linux服务器上安装Wazuh Agent,它会收集系统日志、文件完整性、进程、端口等信息,加密后发送到Wazuh Server(可以独立部署,也可以与ELK堆栈集成)。部署过程并不复杂,按照官方文档添加仓库安装即可,重点是配置。
- 关键配置项:
- 文件完整性监控:在Agent的
ossec.conf中,定义需要监控的关键目录和文件。例如,监控/etc,/bin,/sbin,/usr/bin,/usr/sbin以及Web根目录、数据库配置文件等。可以设置检查频率和忽略某些临时文件的变化。<syscheck> <frequency>43200</frequency> <!-- 每12小时检查一次 --> <directories check_all="yes" realtime="yes">/etc,/usr/bin,/usr/sbin</directories> <ignore>/etc/adjtime</ignore> <ignore>/etc/mtab</ignore> </syscheck>realtime="yes"表示使用内核的inotify机制进行实时监控,任何更改都会立即告警。 - 命令监控:监控特权命令的执行,比如
sudo、su、useradd等。
通过分析<localfile> <log_format>syslog</log_format> <location>/var/log/secure</location> </localfile>/var/log/secure日志,Wazuh可以检测到可疑的提权行为。
- 文件完整性监控:在Agent的
- 与天融信日志联动:这是提升整体安全态势感知的关键。天融信防火墙、IPS等设备通常可以将日志以syslog格式发送到指定的服务器。我们可以在Wazuh Server上配置一个syslog接收器,接收这些日志。然后,在Wazuh的规则引擎中编写规则,将天融信告警(如“检测到SQL注入攻击”)与后端Linux主机上Wazuh Agent检测到的异常(如“Web目录下新增了可疑PHP文件”)进行关联分析。如果两者在短时间内相继发生,则可以生成一个更高危的告警,提示“疑似攻击成功并上传了Webshell”。
4.2 系统审计框架(Auditd)的深度使用
除了第三方HIDS,Linux内核自带的Auditd审计框架也是一个强大的工具,尤其适合监控特定的、细粒度的系统调用。
- 监控文件访问:假设我们想监控
/etc/passwd文件的任何读取和修改尝试,因为攻击者入侵后常会查看或篡改此文件。# 添加一条审计规则 auditctl -w /etc/passwd -p war -k identity_file # -w 监控文件路径 # -p 权限:r读,w写,x执行,a属性更改。这里是w(写)、a(属性)、r(读) # -k 给这条规则打个“标签”(key),方便搜索 - 监控系统调用:监控所有使用
sudo提权的命令执行。auditctl -a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k sudo_exec # 这条规则监控:当程序执行(execve)时,如果真实用户ID(uid)不等于有效用户ID(euid),并且有效用户ID是0(root),则记录日志。 - 日志分析与排查:审计日志默认在
/var/log/audit/audit.log。可以使用ausearch或aureport工具查询。例如,查找所有带identity_file标签的日志:ausearch -k identity_file。当发生安全事件时,这些详细的审计日志是无价之宝,可以精确还原攻击者的操作链。
实操心得:Auditd的规则配置需要一定的经验,规则太宽泛会产生海量日志淹没有效信息,太狭窄又会遗漏关键行为。建议从监控最核心的系统和数据文件开始,逐步根据威胁模型调整。同时,要确保
/var/log分区有足够空间,或配置日志轮转和归档。
5. 安全运维与应急响应流程
技术手段齐备后,安全的另一半是流程和管理。没有流程保障,再好的工具也无法持续发挥作用。
5.1 权限管理与最小特权原则
Linux的权限体系非常强大,但滥用sudo和chmod 777是两大常见毒瘤。
- 精细化sudo配置:不要轻易给用户
ALL=(ALL) ALL这样的万能权限。使用visudo编辑/etc/sudoers或更好的是在/etc/sudoers.d/目录下创建独立文件,赋予最小必要权限。
这样,# 在 /etc/sudoers.d/operator 文件中 User_Alias OPERATORS = user1, user2 Cmnd_Alias SERVICE_CMDS = /bin/systemctl start *, /bin/systemctl stop *, /bin/systemctl restart *, /bin/systemctl status * Cmnd_Alias LOG_CMDS = /bin/tail -f /var/log/messages, /bin/journalctl -xe OPERATORS ALL=(root) SERVICE_CMDS, LOG_CMDSuser1和user2就只能执行指定的服务管理和日志查看命令,无法安装软件、修改配置或查看其他用户文件。 - 定期权限审计:使用脚本定期扫描系统,查找权限设置过松的文件和目录,特别是那些设置了SUID/SGID位或全局可写(world-writable)的文件。
对于非必要的SUID文件(如# 查找SUID/SGID文件 find / -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -ls 2>/dev/null # 查找全局可写目录 find / -path /proc -prune -o -type d -perm -0002 -a ! -perm -1000 -ls 2>/dev/null/usr/bin/chage,如果不用),可以用chmod u-s去掉SUID位。
5.2 制定并演练应急响应预案
当监控系统告警或发现入侵迹象时,一个混乱的响应过程可能导致证据破坏、影响扩大。必须事先制定预案。
- 预案核心要素:
- 联系人清单:明确安全事件发生时,需要通知哪些人(运维、安全、业务、管理层),以及他们的联系方式。
- 初步遏制步骤:第一步做什么?通常是隔离受影响主机(通过网络ACL或关机),防止横向移动。注意:直接关机可能丢失内存中的证据,需权衡业务影响与取证需求。通常优先网络隔离。
- 证据保全流程:如何在不破坏现场的情况下收集证据?例如,使用
dd或dcfldd工具对磁盘做只读镜像,使用netstat -anp、ps auxf、lsof等命令快速抓取系统状态,并重定向到文件,同时记录命令的哈希值(md5sum)以供法庭证据链使用。 - 根因分析:如何排查入侵途径?检查日志(lastlog, secure, wtmp)、检查可疑进程和网络连接、对比文件完整性监控报告、回顾天融信防火墙和IPS的拦截日志。
- 恢复与重建:清除后门、修复漏洞、从干净备份恢复数据、验证系统完整性。
- 定期演练:预案不能只停留在纸上。至少每半年进行一次桌面推演或实战演练。模拟一个常见的攻击场景(如Webshell入侵),让团队成员按照预案一步步执行,检验流程的可行性和团队的反应速度。演练后必须复盘,优化预案。
6. 常见问题与排查技巧实录
在实际运维中,总会遇到各种预料之外的安全相关问题。这里记录几个典型场景和我的排查思路。
6.1 问题一:服务器疑似被入侵,CPU异常飙高
现象:监控显示某台服务器CPU持续100%,但通过top命令查看,没有发现明显占用过高的单个进程。
排查思路:
- 检查隐藏进程:使用
ps auxf查看所有进程的树状结构,或者使用ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu排序查看。有时恶意进程会伪装成正常进程名。 - 检查内核线程和中断:使用
top后按1查看每个CPU核心的负载,再按Shift + H显示内核线程。有时是内核模块或驱动异常。使用vmstat 1或mpstat -P ALL 1查看中断(in)和上下文切换(cs)是否异常高,这可能指向DDoS攻击或驱动问题。 - 检查定时任务:
crontab -l查看当前用户的,ls -la /etc/cron.*和/var/spool/cron/查看系统级和其他用户的。挖矿木马常驻留于此。 - 检查网络连接:使用
ss -antp或netstat -antp查看异常的外部连接。结合iftop或nethogs查看实时流量,定位是哪个进程在大量收发数据。 - 检查系统调用:如果以上都无果,可能是短时进程在作祟(fork bomb风格)。使用
strace动态跟踪,或者用auditd提前布控(如前面所述监控execve系统调用)。
我遇到的一个案例:最终发现是一个被入侵的Web应用,攻击者上传了一个PHP脚本,该脚本不断调用shell_exec执行一个编译好的挖矿程序,但该程序执行完就退出,父进程PHP脚本则短暂休眠后再次调用。在top里看不到稳定的高CPU进程,但整体CPU就是满的。通过auditd监控execve并过滤特定路径,才最终抓到了这个“鬼影”进程的生成源头。
6.2 问题二:天融信IPS频繁告警同一台服务器遭受攻击,但服务器上应用似乎正常
现象:天融信入侵防御系统控制台不断弹出告警,显示来自互联网的IP在对内网一台Web服务器进行SQL注入、XSS等攻击尝试,但服务器管理员检查Web日志(如Nginx的access.log)并未发现大量异常请求。
排查思路:
- 确认攻击流量路径:首先确认天融信设备部署的位置(通常是串联在出口或服务器区前端)。告警意味着IPS检测到了攻击特征并进行了阻断。所以,这些恶意请求很可能在到达服务器之前就被丢弃或重置了连接,因此服务器的Web日志里自然没有记录。这是一个正常且理想的状态,说明IPS在起作用。
- 分析攻击源与目的:从天融信告警日志中提取攻击源IP、攻击类型、目标端口。如果攻击源IP是固定的少数几个,可以考虑在天融信防火墙上直接设置黑名单,永久拒绝其访问。
- 检查服务器是否存在真实漏洞:IPS的阻断是基于特征库,可能存在误报,也可能存在漏报。不能因为IPS告警了就认为万事大吉。需要对目标服务器进行主动的漏洞扫描和安全评估,确认其是否存在告警所对应的真实漏洞(如某个具体的SQL注入点)。如果存在,即使IPS能拦截大部分攻击,也需要尽快修复应用漏洞,因为特征库可能无法覆盖所有变种攻击。
- 联动分析:将天融信的IPS告警日志与服务器上的HIDS(如Wazuh)告警、Web应用防火墙(如ModSecurity)日志进行关联分析。如果发现IPS告警某种攻击后,短时间内服务器上出现了文件被篡改、异常进程启动等告警,那就需要高度警惕,可能攻击已经绕过IPS成功。
核心要点:安全设备的告警不是终点,而是起点。它提示我们需要关注某个系统或应用可能面临的威胁。运维人员和安全人员需要协同,一边利用设备阻断当前攻击,一边深入排查根除潜在风险。
6.3 问题三:配置了主机防火墙后,应用出现间歇性连接失败
现象:在Linux服务器上配置了firewalld或iptables规则后,业务应用(如Java应用连接数据库、微服务之间调用)偶尔会出现连接超时或失败。
排查思路:
- 检查连接跟踪表:Linux防火墙(特别是iptables/
firewalld底层使用的netfilter)有连接跟踪机制。对于有状态的连接(如TCP),防火墙会维护一个conntrack表。如果服务器并发连接数非常高,可能会打满conntrack表的最大值(net.netfilter.nf_conntrack_max),导致新建连接被丢弃。
如果确实满了,需要根据业务情况适当调大# 查看当前连接跟踪数量和使用率 cat /proc/sys/net/netfilter/nf_conntrack_count cat /proc/sys/net/netfilter/nf_conntrack_max # 查看是否因为满而丢弃 dmesg | grep nf_conntracknf_conntrack_max,并调整nf_conntrack_tcp_timeout_*等超时参数,让失效连接尽快释放。 - 检查规则顺序和逻辑:防火墙规则是从上到下匹配的。一条错误的
REJECT或DROP规则放在前面,可能会阻断正常的业务流量。使用iptables -L -n -v或firewall-cmd --list-all-zones仔细检查规则,特别是富规则和直接规则。确保允许业务流量的规则在拒绝规则之前。 - 检查是否有其他网络组件干扰:除了主机防火墙,还有SELinux、网络命名空间、容器网络(如Docker的iptables规则)、或者云平台的安全组等都可能影响连接。使用
tcpdump在业务端口抓包,看请求是否到达了主机,回复是否发出,在哪里被丢弃,这是最直接的诊断方法。
安全是一个持续对抗和演进的过程,围绕天融信设备与Linux系统的安全实践,核心在于打破“重边界、轻主机”的思维定式,将安全能力渗透到每一台承载业务的服务器中,并通过日志聚合、告警关联等技术手段,让边界设备与主机安全产品真正联动起来,形成一个有机的整体。每一次安全事件的排查与解决,都是对自身防御体系的一次压力测试和优化机会。