1. 项目概述为什么我们需要一份实战命令手册在Linux世界里安全从来不是一项“功能”而是一种“状态”。无论是管理一台暴露在公网的服务器还是维护一个内部开发环境你面对的不是一个静态的堡垒而是一个动态的战场。网络扫描、异常连接、可疑进程、配置漏洞……威胁无处不在。新手面对netstat、iptables、tcpdump这些命令时常常感到无从下手参数太多输出太杂不知道哪些信息是关键更不知道如何串联起来形成有效的防御或排查链条。这份《Linux网络安全实战命令手册》的初衷就是解决这个痛点。它不是一本面面俱到的命令字典而是一份由前线运维和安防人员总结的“作战地图”。手册的核心思想是场景驱动和结果导向。我们不会孤立地讲解某个命令的所有参数而是围绕“如何发现一次端口扫描”、“如何定位异常外联”、“如何快速加固一台新上线的服务器”这些具体任务将多个命令组合成一套可执行的战术动作。手册适合所有需要与Linux服务器打交道的角色从刚入门的运维工程师、开发人员到负责安全响应的工程师。即使你对底层协议不甚了解通过跟随手册中的步骤也能快速完成一次基本的安全巡检或应急响应。而对于有经验的老手手册中组合命令的思路和排查心法或许也能带来一些新的启发。2. 核心思路从“信息收集”到“行为控制”的防御纵深在动手敲命令之前我们必须建立一个清晰的网络安全分析框架。盲目地执行命令就像在黑暗中挥舞棍棒效率低下且容易遗漏要害。我的思路是构建一个四层纵深防御分析模型资产清点、流量洞察、连接审计、策略加固。每一层都对应着一组关键命令和核心问题。第一层资产清点我们有什么这是所有安全工作的起点。如果你连自己系统上开放了哪些端口、运行了哪些服务、有哪些用户和计划任务都不知道那么安全无从谈起。这一层的目标是建立系统当前状态的“基准快照”。关键问题包括哪些网络接口是活跃的系统监听在哪些端口上这些端口对应什么进程有没有隐藏的非授权服务第二层流量洞察发生了什么清点完静态资产下一步就是观察动态流量。网络是攻击的主要载体异常流量往往是入侵的第一征兆。这一层关注的是流经网卡的数据包。我们需要区分正常业务流量和潜在的恶意流量比如扫描、爆破、数据外传等。这里的挑战在于如何从海量数据中快速提取出有价值的信息。第三层连接审计谁在连接流量是宏观的连接则是微观的、具体的。一个ESTABLISHED状态的TCP连接明确地告诉你当前谁正在和你的哪个服务进行通信。这一层是发现已成功入侵或内部横向移动的关键。我们需要关注有哪些远程IP正与本地连接本地进程是否主动发起了到可疑外网的连接这些连接是否在预期之内第四层策略加固我们如何控制基于前三层的发现我们最终要落实到行动上即通过配置和策略来限制、允许或监控网络行为。这包括配置防火墙规则来最小化暴露面修改服务配置以增强认证以及设置监控告警以便持续观察。这个四层模型是线性的分析思路但在实战中我们往往需要根据警报或现象在多层之间来回跳跃、交叉验证。例如发现一个可疑的外联IP第三层我们可能需要抓包分析其通信内容第二层并最终在防火墙上封锁它第四层。手册中的命令将按照这个逻辑层次进行组织。3. 实战工具箱核心命令精讲与组合拳3.1 资产清点层摸清家底在怀疑有安全问题之前你首先得知道“正常”应该是什么样子。ss命令现代网络连接查看器虽然netstat家喻户晓但ss(socket statistics) 是其更快速、更强大的替代品直接从内核空间获取信息效率极高。# 查看所有TCP监听端口并显示对应的进程名(PID和程序名) ss -tulnp # 关键参数解析 # -t: TCP协议 # -u: UDP协议 # -l: 仅显示监听状态的套接字 # -n: 以数字形式显示地址和端口不进行DNS和端口服务名解析更快 # -p: 显示使用此套接字的进程信息需要sudo权限执行后你会看到类似下面的输出Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((sshd,pid888,fd3)) tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:((master,pid789,fd13))解读与心法第一行0.0.0.0:22表示SSH服务监听在所有网络接口的22端口这是常见的。第二行127.0.0.1:25表示邮件服务postfix/sendmail只监听在本地回环地址这是安全的配置避免了SMTP服务被外部直接利用。你需要逐一审核列表中的每一个监听端口问自己这个服务是业务必需的吗它监听的地址范围是否过宽是否应该从0.0.0.0改为具体的业务IPlsof命令以进程为中心的视角ss是从端口找进程lsof(list open files) 则擅长从进程或端口反查。在Linux中网络连接也是一种“文件”。# 查看哪个进程在使用80端口 sudo lsof -i :80 # 查看某个进程如nginx打开的所有网络连接和文件 sudo lsof -p $(pgrep nginx | head -1) # 查看所有连接到指定远程IP如1.2.3.4的连接 sudo lsof -i 1.2.3.4实操心得lsof -i的输出非常详细包括命令、PID、用户、文件描述符类型IPv4/IPv6、协议、状态等。当ss显示一个陌生端口被监听时用lsof -i :端口号可以立刻定位到“元凶”。结合ps命令 (ps aux | grep PID)你能获取该进程的完整启动路径和参数这对于判断是否为恶意进程至关重要。3.2 流量洞察层捕捉网络脉搏当怀疑有网络攻击或异常时抓包分析是无可替代的手段。tcpdump命令网络诊断的瑞士军刀这是最经典、最强大的命令行抓包工具。功能强大但学习曲线稍陡。# 基础抓包捕获eth0网卡的所有流量写入文件 sudo tcpdump -i eth0 -w capture.pcap # 实战过滤只抓取与特定IP(192.168.1.100)相关的流量且不解析域名 sudo tcpdump -i eth0 -n host 192.168.1.100 # 更精细过滤抓取来自特定源IP到本机80端口的TCP流量 sudo tcpdump -i eth0 -n src host 10.0.0.5 and dst port 80 and tcp # 实时观察抓取并实时显示DNS查询请求 sudo tcpdump -i eth0 -n udp port 53核心过滤表达式语法host ip过滤指定IP双向。src host ip/dst host ip过滤源或目的IP。port num过滤指定端口。tcp,udp,icmp过滤协议。逻辑运算符and与,or或,not非用括号组合。注意事项权限与性能抓包需要root权限。在生产环境抓包务必使用-c参数限制抓包数量如-c 1000或配合-G和-W参数进行滚动抓包避免写满磁盘。离线分析复杂的分析不建议在终端直接看。用-w保存为.pcap文件然后下载到本地用Wireshark图形化工具进行深入分析效率倍增。虚拟化环境在VMware/KVM虚拟机中抓取虚拟网卡如ens33可能看不到宿主机与其他虚拟机之间的流量。如需分析外部流量应在物理交换机或宿主机上抓包。iftop或nethogs命令实时流量仪表盘tcpdump是微观分析而iftop和nethogs提供了宏观的实时流量视图。iftop类似 top 命令实时显示网络带宽使用情况按主机对IP进行排序。sudo iftop -i eth0 -n # -n 不解析主机名加快显示速度。界面中 和 表示流量方向中间栏是实时流速。它能快速帮你发现哪个IP占用了大量带宽是排查“服务器变慢是不是被攻击了”的第一利器。nethogs按进程分组显示实时网络带宽占用。sudo nethogs eth0当iftop告诉你某个IP流量巨大时用nethogs可以立刻定位到是服务器上的哪个进程在“搞鬼”。3.3 连接审计层审视每一扇门窗这一层的命令用于查看已经建立或正在尝试的连接是发现入侵后横向移动、反弹shell、数据外传的关键。ss的进阶用法查看活动连接# 查看所有已建立的TCP连接 ss -tn state established # 查看所有非监听状态的TCP连接包括正在连接、等待关闭等 ss -tn state connected # 统计各种状态的连接数用于快速感知异常如大量SYN-RECV可能是SYN洪水攻击 ss -snetstat的经典组合在某些极简系统上ss可能未安装netstat是备选# 查看所有TCP连接及对应进程经典组合 netstat -antp # 参数解析 # -a: 所有连接 # -n: 数字形式 # -t: TCP # -p: 显示进程需sudo连接分析心法关注“ESTABLISHED”状态这是已经成功的连接。仔细检查每一个连接的“Foreign Address”远端地址。是否有连接到不常见国家IP的链接是否有到已知恶意IP或矿池地址的连接警惕“OUTBOUND”连接服务器通常主要接受入站连接。大量异常的、由本地主动发起的出站连接特别是到高端口或陌生域名的连接极有可能是恶意软件在“回连”C2服务器或进行数据外泄。利用awk/grep进行快速过滤# 统计所有ESTABLISHED连接的目标IP和端口按出现次数排序找出最频繁的连接对象 ss -tn state established | awk {print $5} | cut -d: -f1 | sort | uniq -c | sort -rn | head -20 # 查找连接到特定端口如6666, 4444等常见后门端口的连接 netstat -an | grep -E ‘:6666|:4444|:31337’3.4 策略加固层构筑防线发现问题后最终需要采取措施。防火墙是核心。iptables命令Linux内核防火墙的配置工具它是Netfilter框架的用户空间管理工具功能强大但规则管理稍复杂。# 1. 查看当前所有规则详细显示规则编号便于后续删除或修改 sudo iptables -L -n -v --line-numbers # 2. 设置默认策略最严格的策略丢弃所有输入、转发允许所有输出 sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT # 注意在远程连接时设置INPUT DROP会立刻断开SSH必须先为SSH设置允许规则。 # 3. 允许已建立的连接和相关的连接保证现有通信不受影响 sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 4. 允许本地回环接口 sudo iptables -A INPUT -i lo -j ACCEPT # 5. 允许SSH连接假设端口是22 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 6. 允许HTTP/HTTPS如果这是Web服务器 sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 7. 记录并拒绝其他所有输入流量记录在/var/log/kern.log或messages中 sudo iptables -A INPUT -j LOG --log-prefix IPTABLES-DROP: sudo iptables -A INPUT -j DROPnftables命令新一代的防火墙框架nftables旨在取代iptables语法更简洁统一性能更好是未来的方向。# 创建一个名为“filter”的表处理IPv4流量 sudo nft add table ip filter # 在表中创建名为“input_chain”的链挂钩到输入流量优先级为0策略为丢弃 sudo nft add chain ip filter input_chain { type filter hook input priority 0 \; policy drop \; } # 添加规则允许已建立和相关的连接 sudo nft add rule ip filter input_chain ct state established,related accept # 添加规则允许SSH sudo nft add rule ip filter input_chain tcp dport 22 accept # 列出所有规则 sudo nft list ruleset防火墙配置黄金法则白名单优于黑名单默认拒绝只放行必要的端口和服务。规则顺序至关重要规则从上到下依次匹配。要把最常用、匹配最精确的规则放在前面提升性能。通用的、记录日志的规则放在最后。先放行后禁止在远程配置防火墙时务必先添加允许你当前SSH连接的规则然后再设置默认DROP策略否则你会把自己锁在外面。保存规则iptables规则默认重启后失效。在CentOS/RHEL上使用service iptables save在Ubuntu/Debian上需要安装iptables-persistent包并使用netfilter-persistent save。对于nftables规则通常保存在/etc/nftables.conf。4. 实战场景演练组合命令解决真实问题理论说再多不如实战走一遍。下面我们模拟几个经典的安全场景看如何运用上述命令组合拳。4.1 场景一服务器疑似被入侵排查异常进程与外联现象服务器CPU或带宽异常升高Zabbix监控告警。排查步骤快速定位异常进程# 使用top或htop查看资源占用最高的进程 top -c -o %CPU # 或 htop记下可疑进程的PID。深入分析可疑进程# 使用lsof查看该进程打开的所有文件、网络连接 sudo lsof -p 可疑PID # 重点关注网络连接TYPE列显示为IPv4/IPv6看它连接到哪些远程地址和端口。检查全系统网络连接寻找其他可疑点# 查看所有TCP/UDP连接并关联进程 sudo ss -tulnp sudo ss -tn state established # 特别关注状态为ESTABLISHED的出站连接本地端口是高端随机端口远程地址可疑。如果发现可疑外联IP进行流量抓包取证# 只抓取与该IP的流量保存为文件供深入分析 sudo tcpdump -i eth0 -w suspicious_traffic.pcap host 可疑IP # 抓包10秒后自动停止 sudo timeout 10 tcpdump -i eth0 -n host 可疑IP检查计划任务和系统服务# 查看当前用户和root的计划任务 crontab -l sudo crontab -l # 查看系统级别的计划任务目录 ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ ... # 查看最近新增或修改的服务 systemctl list-units --typeservice --staterunning find /etc/systemd/system -type f -newermt “2024-01-01” 2/dev/null4.2 场景二对外服务如Web遭受扫描或CC攻击现象Web服务器访问缓慢日志中出现大量同一IP段的请求。排查与应急步骤实时观察网络连接状态# 使用watch命令动态刷新观察80/443端口的连接情况 watch -n 1 ‘ss -tn sport :80 state established’ # 可以快速看到哪些IP建立了大量连接。使用netstat/ss进行快速统计# 统计每个IP到本机80端口的连接数并按连接数排序 netstat -nt | grep ‘:80 ‘ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -rn | head -20 # 使用ss命令类似 ss -tn sport :80 state established | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -rn输出结果会清晰显示攻击源IP。临时封禁攻击IP使用iptables# 封禁单个IP sudo iptables -I INPUT -s 攻击者IP -j DROP # 封禁整个IP段如 202.96.128.0/24 sudo iptables -I INPUT -s 202.96.128.0/24 -j DROP # 查看封禁规则 sudo iptables -L INPUT -n --line-numbers # 如果想删除某条封禁规则比如第一条 sudo iptables -D INPUT 1更精细的防御限制连接速率# 使用iptables的limit模块限制同一IP每分钟最多新建25个到80端口的连接超过则丢弃 sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 25/min --limit-burst 100 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j DROP这条规则能有效缓解CC攻击而不影响正常用户的访问。4.3 场景三新服务器上线前的安全基线检查目标在将新服务器接入生产网络前进行快速安全加固。检查清单与命令关闭不必要的服务# 查看所有开机自启的服务 systemctl list-unit-files --typeservice | grep enabled # 禁用不必要的服务如蓝牙、打印服务在服务器上通常无用 sudo systemctl disable bluetooth.service cups.service检查并加固SSH# 编辑SSH配置文件 sudo vim /etc/ssh/sshd_config关键配置项PermitRootLogin no# 禁止root直接登录PasswordAuthentication no# 禁用密码登录强制使用密钥前提是你已配置好公钥Port 2222# 修改默认22端口非必需但可减少自动化扫描AllowUsers your_username# 只允许特定用户登录 修改后重启服务sudo systemctl restart sshd配置防火墙使用iptables# 应用前述“策略加固层”中的白名单规则只开放SSH、业务端口。 # 务必先添加允许当前SSH连接的规则检查SUID/SGID特殊权限文件# 查找系统中所有SUID/SGID文件 find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \; 2/dev/null这些文件在执行时会拥有文件所有者或组的权限。需要审查列表移除非必要文件的SUID/SGID位例如chmod u-s /path/to/file。安装并配置入侵检测/日志监控工具如Fail2ban# Ubuntu/Debian sudo apt install fail2ban # CentOS/RHEL sudo yum install fail2banFail2ban可以监控系统日志如SSH失败登录并自动调用iptables封禁多次失败的IP。5. 高级技巧与深度排查工具掌握了基础命令和场景后一些高级工具和技巧能让你的排查工作如虎添翼。netcat(nc)网络界的“瑞士军刀”它被称为“TCP/IP协议的调试器”可以用于端口扫描、端口监听、文件传输、甚至简单的后门。# 1. 端口扫描简易版不隐蔽 nc -zv target_ip 20-80 # -z: 零I/O模式扫描用 # -v: 详细信息 # 2. 监听端口接收数据可用于接收反弹shell或传输文件 nc -lvp 4444 received_file # -l: 监听模式 # -v: 详细信息 # -p: 指定端口 # 3. 连接到远程端口发送数据 echo “Hello” | nc target_ip 4444注意nc功能强大但也常被攻击者利用。在生产环境中应确保没有未经授权的nc监听进程。socatnc的增强版socat功能更强大可以建立多种类型的双向数据流。# 建立一个加密的SSL连接监听器 socat OPENSSL-LISTEN:443,certserver.pem,verify0,fork STDOUT系统日志分析journalctl与/var/log/很多安全事件的踪迹留在日志里。# 使用journalctl查看系统日志Systemd系统 # 查看指定服务如ssh的日志 sudo journalctl -u ssh.service -f # -f 表示跟踪输出 # 查看包含“Failed password”的日志排查SSH爆破 sudo journalctl _SYSTEMD_UNITssh.service | grep “Failed password” # 查看最近的系统日志100行 sudo journalctl -n 100 # 传统的日志文件也在/var/log/下 sudo tail -f /var/log/auth.log # Debian/Ubuntu的认证日志 sudo tail -f /var/log/secure # RHEL/CentOS的认证日志 sudo tail -f /var/log/syslog # 通用系统日志网络连接可视化nmapnmap是功能强大的网络发现和安全审计工具。注意未经授权扫描他人网络可能是非法的仅用于审计自己的资产。# 对目标进行TCP SYN扫描半开扫描较隐蔽 sudo nmap -sS target_ip # 扫描指定端口范围 sudo nmap -p 1-1000 target_ip # 识别服务版本 sudo nmap -sV target_ip # 使用默认的NSE脚本进行扫描发现常见漏洞 sudo nmap -sC target_ip6. 安全实践心法与持续学习命令是武器心法是兵法。最后分享几条在多年实战中沉淀下来的原则最小权限原则任何服务、进程、用户只赋予其完成工作所必需的最小权限。能用普通用户跑的服务绝不用root。纵深防御不要只依赖一层安全措施。防火墙是第一道门服务自身配置如SSH禁用密码是第二道入侵检测Fail2ban是第三道定期审计和更新是第四道。日志即证据确保关键服务SSH, Web Server, 防火墙DROP规则的日志功能开启并集中收集到安全的日志服务器。发生安全事件时日志是溯源分析的唯一依据。版本与补丁保持系统和软件更新。已知漏洞是攻击者最容易利用的入口。使用yum update/apt update apt upgrade定期更新。定期审计安全不是一劳永逸的。应定期如每周或每月运行安全扫描脚本检查用户、进程、计划任务、SUID文件等是否有异常变化。善用脚本化将复杂的检查流程写成Shell脚本。例如一个包含ss -tulnp、netstat -antp | grep ESTABLISHED、ps auxf等命令的脚本可以一键输出系统安全快照大大提高日常巡检和应急响应的效率。这份手册里的命令和场景是构建你Linux网络安全能力的基石。真正的精通来自于在无数次真实警报和攻防演练中的反复运用与思考。开始时你可能会对照手册一步步操作熟练之后这些命令将成为你直觉的一部分能够灵活组合应对千变万化的安全挑战。记住在安全的道路上保持好奇、保持警惕、持续学习是最好的防御。