Linux 运维网络、日志、Web 性能第一部分防火墙 iptables/nftables1. 主机防火墙 vs 网络防火墙对比 K8s Pod 不通排查1四维度异同对比表格对比维度网络防火墙硬件边界防火墙主机防火墙iptables/firewalld部署场景网络出口边界、机房核心交换机旁、互联网出入口全局流量必经节点部署在单台服务器 / 虚拟机 / 容器内部流量到达本机网卡后拦截仅管控本机流量核心配置需求基于网段、区域、公网 IP 做区域隔离支持应用层识别、NAT 负载均衡、VPN、带宽管控多设备统一策略下发基于本机端口、进程、回环网卡、容器虚拟网卡仅三层四层包过滤无独立硬件加速配置跟随单机无全局统一视图规则管控范围跨主机、跨网段、内外网全流量能阻止内网横向扫描、外部攻击抵达内网所有服务器仅管控本机入站、出站、本机转发流量无法拦截内网其他服务器互访流量只能防护单点适用规模中大型企业、多机房、混合云、高公网流量场景支撑上万终端并发单台服务器、容器集群节点、小规模测试环境单机千级连接无压力超大流量易成为瓶颈相同点均基于五元组过滤、支持连接状态跟踪、DROP/ACCEPT/REJECT 动作、NAT 转换均作为安全分层防御组件。2边界已有网络防火墙仍部署主机防火墙的原因内网横向防护网络防火墙只能拦截内外网边界内网服务器一旦被入侵攻击者可在内网横向渗透主机防火墙限制单台主机端口暴露阻断内网横向攻击。精细化单机权限边界防火墙只能按网段粗粒度放行主机防火墙可针对本机特定端口、本地程序、容器 Pod 做细粒度管控如仅允许本机 127.0.0.1 访问 3306 数据库。多层纵深防御边界防火墙失效策略误配、漏洞穿透时主机防火墙作为最后一道兜底防护。容器 / 云环境隔离云服务器安全组等价网络防火墙无法管控容器内部互通主机防火墙隔离 Pod / 容器之间流量。攻击面收缩每台服务器仅开放业务必需端口减少暴露端口降低漏洞利用风险。3K8s Pod 无法通信优先排查表与链优先排查filter 表 FORWARD 链原因Pod 之间流量经过宿主机网卡转发流量匹配 filter 表 FORWARD 链规则若默认 DROP 或未放行 Pod 网段转发Pod 之间数据包直接丢弃。2. iptables vs nftables 性能、瓶颈、升级转换工具1内核态 / 用户态、内存占用性能差异内核态用户态交互效率iptables多套独立工具iptables/ip6tables/arptables每条规则更新需完整遍历内核 xtables 表频繁锁竞争每次增删规则完整拷贝整张规则表到内核用户内核交互开销极高多地址族分开维护重复匹配逻辑。nftables统一nft工具管理 IPv4/IPv6/ARP/bridge采用树形哈希索引规则匹配 O (logN)批量提交规则至内核单次系统调用完成批量变更锁竞争大幅降低用户内核切换次数锐减。内存资源占用iptables每条规则独立内核结构体重复存储匹配字段规则量大时内存线性暴涨连接跟踪哈希表效率差。nftables共用匹配表达式、映射集存储相同 IP / 端口集合复用内存同等规则数量内存占用仅 iptables 40%~60%集合set/map支持批量 IP 匹配减少重复规则。2日常无感性能瓶颈阈值单机规则数量 5000 条以内、并发连接 10 万以内两者性能差距肉眼不可感知超过阈值后 iptables 规则遍历、锁竞争延迟陡增高并发场景差距显著。3iptables 平滑升级 nftables 官方转换工具iptables-translate单行 iptables 命令实时转换为 nft 语法逐条校验规则iptables-restore-translate读取 iptables-save 导出的完整规则文件批量转换整套防火墙策略iptables-nft兼容层工具原有 iptables 命令底层调用 nftables 内核过渡阶段无缝兼容业务脚本nftables-compat发行版配套兼容套件完整转换 nat/filter/mangle/raw 四表所有规则。3. iptables -P INPUT DROP 风险、远程防自杀方案、iptables -F 后果1不建议直接iptables -P INPUT DROP原因默认策略是内核兜底动作执行该命令后立即生效若未提前放行 SSH、lo 回环、已建立连接流量当前远程 SSH 会话会立刻断开无任何恢复途径只能机房本地操作服务器。2防远程断连替代方案与首条规则最佳实践替代方案默认策略保持ACCEPT所有白名单规则配置完成后最后一条添加兜底拒绝规则iptables-AINPUT-jDROP第一条强制最佳实践放行本地回环网卡 lo本地进程通信、服务依赖 127.0.0.1缺失会导致本地数据库、日志、定时任务全部异常iptables-AINPUT-ilo-jACCEPT第二条必配规则放行已建立、关联连接保障现有 SSH 会话不中断iptables-AINPUT-mconntrack--ctstateESTABLISHED,RELATED-jACCEPT3默认 ACCEPT、末尾兜底 DROP执行iptables -F后果iptables -F仅清空 filter 表所有自定义规则不修改默认策略。清空后末尾兜底 DROP 规则被删除INPUT 默认策略为 ACCEPT所有入站流量全部放行服务器完全暴露在内网 / 公网无任何访问限制。4. SNAT 与 MASQUERADE 核心区别、生产场景选型1核心区别SNAT静态源地址转换必须手动指定固定出口公网 IP内核永久保存转换映射连接断开后映射不销毁性能更高。MASQUERADESNAT 动态变体自动读取出口网卡实时 IP无需手动指定 IP每次发包读取网卡地址连接销毁后映射立即释放额外性能损耗。2场景选型企业固定公网 IP 出口选用 SNATiptables-tnat-APOSTROUTING-s内网网段-jSNAT --to-source 固定公网IP家庭宽带 / 4G/5G 拨号动态 IP选用 MASQUERADEiptables-tnat-APOSTROUTING-s内网网段-o拨号网卡-jMASQUERADE5. DNAT 端口映射通用命令、必须放在 PREROUTING 链原因1DNAT 通用命令格式iptables-tnat-APREROUTING-i公网网卡-ptcp--dport外网暴露端口-jDNAT --to-destination 内网Web服务器IP:真实业务端口# 示例公网80转发内网192.168.1.100:80iptables-tnat-APREROUTING-ieth0-ptcp--dport80-jDNAT --to-destination192.168.1.100:80# 配套放行转发iptables-AFORWARD-d192.168.1.100-ptcp--dport80-jACCEPT2DNAT 必须在 PREROUTING 链的原理数据包流程网卡收包 → PREROUTING → 路由决策 → FORWARD/INPUTDNAT 需要修改目标 IP路由决策依赖目标 IP 判断数据包转发去向若在路由之后POSTROUTING/INPUT修改目标 IP路由表已完成路径计算地址转换失效PREROUTING 在路由前修改目的 IP路由模块读取转换后的内网 IP正常转发至内网 Web 服务器。6. 删除自定义链 iptables -X 报错、彻底清理自定义链步骤1直接iptables -X SSH_CHAIN报错原因自定义链被主链 / 其他自定义链的规则引用如-j SSH_CHAIN跳转内核存在引用计数无法直接删除报错提示chain is still referenced。2安全清理完整步骤查看所有引用该自定义链的规则记录规则行号iptables-L-n--line-numbers|grepSSH_CHAIN根据行号逐条删除所有跳转引用规则iptables-DINPUT 行号确认无任何引用后清空自定义链内所有规则iptables-FSSH_CHAIN执行删除自定义链iptables-XSSH_CHAIN校验iptables -L确认自定义链完全消失。7. 堡垒机内网数据库更新软件源 iptables NAT 转发规则、注意事项环境说明内网数据库10.0.0.10无公网堡垒机双网卡内网网卡 10.0.0.1公网网卡 eth0公网 IP核心 iptables 规则开启内核 IP 转发永久需修改 sysctl.confecho1/proc/sys/net/ipv4/ip_forwardSNAT 内网数据库出站流量访问外网软件源iptables-tnat-APOSTROUTING-s10.0.0.10/32-oeth0-jMASQUERADE# 固定公网IP替换为SNAT --to-source 堡垒机公网IPFORWARD 链放行双向转发流量# 数据库访问外网iptables-AFORWARD-s10.0.0.10-oeth0-jACCEPT# 外网源返回流量至数据库iptables-AFORWARD-ieth0-d10.0.0.10-mconntrack--ctstateESTABLISHED,RELATED-jACCEPT关键注意事项限制源 IP 仅数据库服务器不开放整个内网网段缩小攻击面堡垒机 INPUT 链严格限制仅内网运维 IP 登录关闭不必要端口软件源仅放行 80/443禁止数据库主动发起高危端口出站规则持久化重启堡垒机不丢失转发 NAT 策略定期清理 conntrack 连接表避免大量空闲连接占满内核资源。第二部分日志体系 rsyslog/journald/logrotate/NFS/sersync1. rsyslog 日志级别、local0-local7 作用、仅记录 ERR 配置符号1优先级从高到低排序严重程度递减emerg(0)alert(1)crit(2)err(3)warn(4)notice(5)info(6)debug(7)数字越小故障越严重。2LOG_LOCAL0~LOG_LOCAL7 不是日志级别作用自定义设备Facility用于区分业务日志来源。系统内置 facility 为 kern、mail、auth 等local0-local7 留给自定义程序、中间件、业务应用输出日志实现业务日志隔离可单独存储、单独转发至日志平台。3仅记录 ERR 级别不含更高 / 更低配置符号rsyslog 匹配语法err配置示例conflocal3.err /var/log/biz-error.logerr记录 err 及更高级别crit/alert/emergerr仅精确匹配 err过滤所有高于、低于 err 的日志。2. systemd-journald 默认存储、二进制日志优劣1默认存储策略无特殊配置CentOS7/Rocky10 默认Storageauto系统重启前日志存储内存/run/log/journal重启丢失当/var/log/journal目录存在时自动持久化磁盘二进制存储全新系统默认不创建该目录日志临时存内存。持久化目录/var/log/journal/机器UUID/日志文件.journal二进制格式。2二进制 journal 日志对比文本日志优劣优势内置索引journalctl按时间、进程、优先级、PID 秒级过滤检索自带元数据进程 ID、用户、内核模块、启动 ID无需手动解析文本自动日志轮转、磁盘配额限制防止占满磁盘日志完整性校验防止篡改、截断支持实时流式输出、精确时间戳、二进制日志无编码乱码。劣势二进制文件无法用 cat/grep 直接读取必须依赖 journalctl 工具跨系统兼容性差文本日志通用journal 文件仅 systemd 解析长期归档不便通常需转储为文本同步至 SIEM占用额外元数据存储空间同等日志量比文本更大。3. logrotate sharedscripts、无该参数事故、copytruncate 隐患1sharedscripts 作用多日志文件匹配同一条 rotate 规则时默认每轮转一个文件执行一次 postrotate 脚本sharedscripts仅在所有文件轮转完成后执行 1 次脚本。2不配置 sharedscripts 生产事故Nginx 场景Nginx 日志配置匹配 access.log、error.log 两个文件无 sharedscripts 时每次轮转单个文件都会执行kill -USR1重载日志短时间内连续两次发送重载信号Nginx 频繁重建日志文件句柄产生大量空日志、日志丢失、部分请求日志重复写入高并发下 worker 进程阻塞出现 502 响应。3copytruncate 潜在隐患非原子操作先 copy 原日志再 truncate 清空两者存在时间窗口窗口内产生的日志直接丢失文件 inode 不变日志采集工具filebeat无法识别轮转出现重复采集、日志断层大日志文件 copy 过程占用大量 IO高并发业务磁盘 IO 飙升引发延迟崩溃风险copy 完成前服务器宕机日志副本不完整原始日志被截断永久丢失。4. NFS 高并发、高可用场景致命缺点高并发高性能场景缺陷单文件锁性能极差百万级文件读写锁竞争严重延迟指数上升无本地页面缓存每次读写都请求服务端内网大流量场景带宽瓶颈元数据操作create/delete/stat同步阻塞大量小文件场景 IO 性能断崖下跌TCP 单通道传输无法并行多流加速超大文件传输慢。高可用极高要求场景缺陷传统 NFS 无原生集群单点服务故障所有挂载业务中断故障切换耗时分钟级无秒级自动故障转移服务端宕机时客户端 IO 阻塞应用卡死无自动熔断机制文件缓存一致性弱多客户端同时写同一文件极易数据错乱无内置多副本依赖底层存储 RAID存储损坏直接丢数据。5. NFS root_squash 安全策略、root 映射属主1root_squash 策略含义默认开启的安全防护客户端挂载目录使用 root 用户操作时强制压缩权限禁止客户端 root 拥有服务端文件最高权限防止客户端 root 篡改、删除服务端系统文件。2root 写入文件映射属主客户端 root 操作会映射为服务端nobody/nfsnobody匿名普通用户 UID/GID文件属主不再是 root无法修改权限、删除高权限文件。补充no_root_squash关闭该策略极度不安全生产禁止使用。6. 百万级文件实时同步inotifywaitrsync 脚本 vs sersync单纯 shell 脚本inotifywaitrsync缺陷海量文件触发海量回调shell 进程频繁创建销毁CPU 占用极高无事件合并短时间大量新增文件触发上千次 rsync 全量扫描IO 打满无失败重试、断点续传网络波动直接丢失同步任务shell 无日志分级、无监控告警同步故障无法及时发现仅支持简单路径过滤复杂黑白名单编写繁琐易出错内存管理差百万文件事件堆积后进程内存泄漏、崩溃。sersync 优势XML 配置C 开发常驻进程事件自动合并批量同步减少 rsync 调用次数XML 统一配置过滤规则、同步线程、重试次数、日志路径运维标准化内置失败重试、错误日志、同步进度监控支持自定义告警脚本增量精准同步仅传输变更文件不扫描全量目录支持多目标服务器同步、限速、排除复杂目录适配大规模集群稳定低内存占用百万级文件实时同步无阻塞。7. Nginx logrotate 轮转后新日志无写入旧文件持续写入原因 解决方案根因Nginx 进程持有旧 access.log文件句柄logrotate 仅重命名文件未通知 Nginx 重新打开新日志文件操作系统文件重命名不改变原有句柄指向进程持续向旧文件写入。解决方案配置 postrotate 脚本发送 USR1 信号优雅重载日志句柄配合 sharedscriptsconf/var/log/nginx/*.log{daily rotate14compress sharedscripts postrotate /usr/bin/kill-USR1$(cat/run/nginx.pid)endscript}禁止使用 copytruncate采用默认 rename 新建文件模式校验 nginx.pid 文件路径正确避免信号发送失败若容器环境确保 logrotate 能正常通信 nginx 主进程。第三部分零拷贝、Apache、CPU 亲和、虚拟主机、权限、PHP 线程安全1. sendfile /sendfileDMA /splice 原理、拷贝次数、DMA 定义与作用1三种系统调用对比① sendfile工作原理内核直接读取磁盘 PageCache 数据通过 socket 发送至网卡不经过用户态缓冲区状态切换2 次用户态→内核态、内核态→用户态拷贝次数2 次 DMA 拷贝磁盘→PageCache、PageCache→网卡缓冲区无 CPU 内存拷贝。② sendfileDMADMA Scatter-Gather 硬件卸载工作原理网卡支持分散聚合 DMA跳过 PageCache 中转磁盘数据直接 DMA 至网卡状态切换2 次上下文切换拷贝次数1 次 DMA 拷贝零 CPU 内存拷贝硬件卸载提升吞吐。③ splice工作原理基于管道缓冲区在内核态完成数据流转支持文件 - 管道、管道 -socket 双向转发状态切换仅 1 次用户 / 内核切换可批量连续数据流转拷贝次数1 次 DMA 拷贝内核缓冲区复用无需用户内存splice 显著优势双向数据流通用文件收发、管道转发、代理流量sendfile 仅支持文件发网络splice 支持任意内核缓冲区流转支持分段流式处理内存占用更低适配反向代理、流媒体、日志转发场景。2DMA 定义与作用DMADirect Memory Access直接内存访问。作用硬件磁盘、网卡绕过 CPU直接与内存交换数据释放 CPU无需参与大块数据内存拷贝CPU 仅处理协议逻辑大幅降低软中断、上下文切换开销高并发网络 IO 性能提升数倍硬件并行传输磁盘读写与网卡发包同时执行消除串行等待。2. Apache prefork/worker/event 架构、event 解决长连接痛点、prefork 遗留使用场景1三种 MPM 架构差异prefork多进程模型无线程每连接独占 1 个独立子进程进程间完全隔离不共享内存兼容性最强。worker多进程 多线程主进程生成多个 worker 进程每个进程创建多线程1 线程处理 1 个连接线程共享进程内存资源消耗低于 prefork。event异步事件驱动多进程多线程区分工作线程与监听线程长连接KeepAlive交由独立事件队列管理不占用业务工作线程。2event 解决 KeepAlive 资源浪费原理prefork/worker 中长连接空闲等待时进程 / 线程持续占用无法处理新请求event 独立开专门 listener 线程管理所有空闲长连接业务工作线程仅处理活跃请求空闲连接不占用工作线程数万长连接场景下线程数大幅减少内存、CPU 占用显著降低。3老旧系统仍使用 prefork 的原因PHP 非线程安全NTS老旧 PHP5 及更早版本无线程安全编译worker/event 多线程模型会出现内存损坏、500 报错仅 prefork 多进程隔离可稳定运行老旧第三方模块、CGI 程序不支持多线程存在线程竞态、内存泄漏传统商业软件依赖独立进程权限隔离线程共享内存存在安全风险老旧 Linux 发行版内核 epoll 缺陷event 模型存在稳定性 bug。3. CPU 亲和性核心价值、低收益场景、绑定命令1进程 CPU 绑定核心价值减少进程 CPU 核心漂移降低 CPU 缓存失效L1/L2 缓存命中率提升减少跨核心上下文切换、跨 NUMA 节点内存访问延迟隔离业务进程与系统进程资源争抢性能波动更小多核高并发服务提升吞吐量降低请求延迟。2绑定无收益 / 低收益场景容器化 K8s/Docker容器调度器会动态调度 Pod 至任意节点核心亲和绑定会被调度覆盖使用 cgroup cpuset 才能稳定生效单纯 taskset 无效短生命周期进程日志轮转、定时任务、一次性脚本进程快速销毁缓存收益无法体现单核服务器、低并发业务无多核心竞争绑定无性能提升超线程共享核心绑定同物理核两个超线程反而加剧竞争。3Linux 手动绑定进程 CPU 命令taskset进程级临时绑定# 将PID 1234绑定至0、1核心taskset-cp0,11234numactl支持 NUMA 节点 CPU 绑定高性能服务专用。4. Apache Listen 8081、仅配置 *:81 虚拟主机80 端口访问响应 Nginx 区别Apache 响应逻辑客户端访问 80 端口Apache 监听 80 但无对应VirtualHost *:80虚拟主机配置读取全局主服务器配置ServerName、DocumentRoot 默认值返回页面不会拒绝连接。与 Nginx 核心区别Nginx 规则监听端口必须存在对应 server 块若仅 listen 81 无 listen 80 的 server客户端访问 80 端口直接连接拒绝Connection refusedNginx 不会使用全局默认配置兜底。5. Apache Alias 跨目录 403 原因、授权方案403 报错根本原因目录权限 / SELINUX 上下文目标目录不在 Apache 默认 DocumentRoothttpd 进程无读、执行权限SELinux 阻止 httpd 访问外部目录上下文非httpd_sys_content_t缺少 Directory 访问授权Alias 映射外部目录Apache 默认拒绝所有外部目录访问未配置Require all granted授权。完整授权配置方案apacheAlias/test//var/www/html/source/# 授权目录访问权限Directory/var/www/html/source/Require all granted Options Indexes FollowSymLinks AllowOverride None/Directory# SELinux修复CentOS/Rockychcon-R-thttpd_sys_content_t /var/www/html/source/# 永久保存SELinux上下文semanage fcontext-a-thttpd_sys_content_t/var/www/html/source(/.*)?restorecon-R/var/www/html/source/# 文件系统权限chmod-R755/var/www/html/sourcechown-Rapache:apache /var/www/html/source6. Apache prefork 切换 event 后 PHP 页面 500、静态 HTML 正常原因核心根因PHP 模块线程安全不兼容prefork 是多进程模型每个进程独立加载 libphp.so进程间内存完全隔离非线程安全版 PHPphp-nts可正常运行event MPM 为多线程架构单个进程内多条线程并发调用 PHP 解析服务器使用非线程安全 PHPNTS内部全局变量、缓冲区无线程锁多线程并发访问产生内存竞态、内存损坏、段错误PHP 执行抛出 500 内部错误静态 HTML 不经过 PHP 解析模块仅 Apache 文件读取不受线程模型影响访问正常。解决办法切换回 prefork MPM重新编译 / 安装线程安全版 PHPZTS搭配 event/worker 使用放弃 mod_php 嵌入式模块改用 PHP-FPM 独立进程解耦MPM 线程模型不再影响 PHP。