《网络迷踪:SRE的TCP/IP故障排查艺术》
系列第六篇:加固城防 – 用
nmap
iptables
nmap
iptables
“案发现场”:
你刚刚部署了一台新的应用服务器,并按照文档,在防火墙上只开放了80和443端口。一周后,安全团队在进行例行扫描时,突然给你发来一个高危告警:“你的服务器
上,发现了一个对外开放的Redis服务(端口6379),并且没有密码保护!”
10.0.0.10你大吃一惊:“这不可能!我明明配置了防火墙!”
这个场景暴露了一个严峻的现实:我们自认为的安全配置,可能因为各种原因(如错误的规则、被其他服务修改、或者根本没生效)而存在漏洞。我们必须拥有一套工具和方法,能从“攻击者”的视角,来审视我们自己的服务器,看看它到底对外暴露了哪些“窗口”。
一、
nmap
nmap
nmap
这台主机是否在线?它对外开放了哪些TCP和UDP端口?每个端口上运行着什么服务?(甚至能猜出服务的版本号)对方可能是什么操作系统?
核心理念: 我们要用
nmap
实战演练:对自己的服务器进行一次“安全体检”
警告: 未经授权,严禁对任何不属于你的网络或服务器进行扫描。本教程所有操作,都应在你自己的测试服务器或获得明确授权的环境中进行。
1. 最基础的快速扫描
案情设定: 我们想快速检查一下服务器
10.0.0.10
输入(在你自己的另一台机器上执行,而不是在目标机上):
nmap 10.0.0.10
输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2025-08-12 11:00 UTC
Nmap scan report for 10.0.0.10
Host is up (0.0015s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
6379/tcp open  redis
Nmap done: 1 IP address (1 host up) scanned in 0.50 seconds
结果分析与注释:
Host is up
nmap
Not shown: 996 closed ports
nmap
22/tcp open ssh
80/tcp open http
443/tcp open https
6379/tcp open redis
2. 更深入的服务版本探测
为了获取更多信息,我们可以让
nmap
输入:
# -sV: 进行服务和版本探测 (Service/Version detection)
sudo nmap -sV 10.0.0.10
输出(截取Redis部分):
...
PORT     STATE SERVICE VERSION
6379/tcp open  redis   Redis key-value store 6.2.6
...
结果分析与注释:
nmap
二、
iptables
firewalld
iptables
firewalld
现在我们已经确认了漏洞的存在。接下来,我们需要登录到服务器
10.0.0.10
现代Linux发行版主要使用两种防火墙管理工具:
iptables
firewalld
ufw
iptables
我们以经典的
iptables
实战演练:审查并修复防火墙规则
1. 查看当前的防火墙规则
输入:
sudo iptables -L -n --line-numbers
命令解析:
-L
-n
--line-numbers
输出(一个有问题的配置示例):
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  127.0.0.1            0.0.0.0/0
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6379
结果分析与注释:
Chain INPUT (policy ACCEPT)
INPUT
policy
ACCEPT
num 6
ACCEPT
2. 修复防火墙规则
正确的安全实践是: 默认策略设为
DROP
ACCEPT
“手术”过程:
删除错误的规则:
# -D: 删除规则 (Delete),INPUT是链名,6是行号
sudo iptables -D INPUT 6
(强烈推荐)修改默认策略为DROP:
警告: 在修改默认策略为DROP之前,请务必确保你的SSH(22端口)和其它管理端口的ACCEPT规则已经存在且正确,否则你会被立刻锁在服务器外面!
sudo iptables -P INPUT DROP
保存规则: 
iptables
CentOS/RHEL: 
sudo service iptables save
iptables-persistent
sudo netfilter-persistent save
3. 最终验证
回到你的另一台机器,再次执行
nmap
输入:
nmap 10.0.0.10
预期输出:
...
PORT     STATE    SERVICE
22/tcp   open     ssh
80/tcp   open     http
443/tcp  open     https
6379/tcp filtered redis
结果分析:
现在,6379端口的状态变成了
filtered
nmap
本章总结
今天,我们完成了从“故障排查者”到“安全审计员”的角色转变。
攻击者视角: 我们学会了使用
nmap
iptables
firewalld
ufw
我们已经能保障单台服务器的安全。但在现代架构中,流量很少直接打到应用服务器上,它会先经过一系列的“交通枢纽”和“安检口岸”。
在下一篇中,我们将进入更高维度的网络世界,学习《流量迷局 – 理解负载均衡(L4/L7)与CDN背后的“隐形路由”》,让你对一个网络请求的完整生命周期,有更宏观、更全面的认识。
 
                
 
                 
                 
                





 
                