多网卡服务器安全防护需四步:明确网卡业务角色(如eth0公网、eth1内网);服务级绑定指定ip(nginx/mysql/fastdfs等配置监听具体ip);系统级清理冗余端口与服务(禁用0.0.0.0监听,停非必要服务);防火墙按网卡/ip/端口精细放行并默认drop。

多网卡服务器上,绑定特定 IP 并关闭未使用的公网端口,是防止暴露面扩大、规避扫描攻击的关键操作。核心不是“关所有端口”,而是让服务只监听该用的 IP + 该开的端口,其余一律不响应。
明确每个网卡的用途和对应 IP
先理清物理或虚拟网卡与业务角色的映射关系,例如:
- eth0(主网卡):绑定了公网弹性 IP(如 203.0.113.50),用于用户访问 Web 或 API
- eth1(内网网卡):绑定了 VPC 内网 IP(如 192.168.209.121),仅用于数据库、缓存、服务间通信
- eth2(测试网卡):绑定了隔离测试段 IP(如 172.16.10.100),仅允许运维跳板机访问
用 ip a 或 ifconfig 确认每张网卡实际分配的 IP,避免配置错对象。
服务级绑定:让程序只监听目标 IP
不能依赖防火墙“拦住”流量,而应让服务本身拒绝非目标 IP 的连接请求。常见做法:
-
Web 服务(Nginx/Apache):在监听配置中写明 IP,如
listen 203.0.113.50:443 ssl;,而非listen 443 ssl; -
数据库(MySQL/PostgreSQL):修改配置文件,将
bind-address = 0.0.0.0改为bind-address = 192.168.209.121 -
FastDFS Storage:在
storage.conf中设置bind_addr = 192.168.209.121,禁用默认全监听 -
自研应用(Node.js/Python/Java):启动时指定 host 参数,如
app.listen(3000, '192.168.209.121')或--host=192.168.209.121
系统级收紧:禁用默认全网监听 + 清理冗余端口
即使服务没配错,操作系统层面仍可能残留监听行为。需两步清理:
- 查当前所有监听端口及绑定 IP:
ss -tlnp或netstat -tuln,重点关注0.0.0.0:xxx和:::xxx条目 - 停掉非必要服务:如
rpcbind、avahi-daemon、exim4等默认开启但业务不用的服务 - 对必须保留但仅限内网的服务(如 Redis),确保其配置中
bind和protected-mode yes同时生效
防火墙兜底:按网卡+IP+端口精细放行
iptables/nftables 规则要基于网卡设备名或源 IP 段,而不是简单“开放某端口”:
- 只允许公网 IP 接收 80/443:
iptables -A INPUT -i eth0 -d 203.0.113.50 -p tcp --dport 80 -j ACCEPT - 只允许内网 IP 访问 3306:
iptables -A INPUT -i eth1 -s 192.168.209.0/24 -p tcp --dport 3306 -j ACCEPT - 默认 DROP 所有其他入向连接:
iptables -P INPUT DROP
规则需保存(如 iptables-save > /etc/iptables/rules.v4),并确保开机加载。
做完这四步,服务器就不再“被动暴露”,而是主动收敛访问路径。真正的防护不在封多少端口,而在让每个端口只对真正需要它的人可见。











