1. 为什么需要双网卡隔离配置在企业级应用部署中服务器通常需要同时处理公网访问请求和内网数据交互。我见过太多因为网络配置不当导致的安全事故——有被爬虫拖垮数据库的有内网数据被批量泄露的。用双网卡做物理隔离是最靠谱的解决方案就像给房子装了两道门前门接待客人公网后门只允许家人进出内网。典型的应用场景包括Web服务器需要对外提供HTTP服务同时要安全地连接内网数据库文件服务器允许公网下载但上传权限仅开放给内网需要隔离管理流量和业务流量的云主机环境CentOS 7.9作为目前企业使用最广泛的稳定系统其网络配置方式与新版系统有些差异。最近帮客户排查过一个典型案例他们的电商平台在促销时突然卡死最后发现是公网流量打满了网卡导致内网数据库查询超时。采用双网卡隔离后类似问题再没出现过。2. 环境准备与网卡识别2.1 硬件检查与驱动确认先别急着改配置我吃过亏——有次折腾半天发现第二张网卡根本没被系统识别。拿出你的物理服务器或虚拟机确认两个网口已正确连接物理机看网口指示灯虚拟机检查网络适配器数量网线分别接入不同网络公网交换机/内网交换机用这个命令检查网卡识别情况lspci | grep -i ethernet正常应该看到两个网络控制器类似00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-LM 02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection如果少了一个可能需要安装驱动。常见问题卡在VMXNET3虚拟网卡上这时候需要yum install -y open-vm-tools modprobe vmxnet32.2 网卡命名规则处理CentOS 7.x的网卡命名可能让人困惑新版系统用ens192这种命名老机器可能还是eth0。我建议统一改成传统命名方式修改grub配置vi /etc/default/grub在GRUB_CMDLINE_LINUX参数追加net.ifnames0 biosdevname0更新grub并重启grub2-mkconfig -o /boot/grub2/grub.cfg reboot现在你的网卡应该变成了eth0和eth1方便后续配置。3. 双网卡基础配置实战3.1 公网网卡(eth0)配置公网网卡通常采用DHCP获取IP但生产环境我强烈建议用静态IP。编辑配置文件vi /etc/sysconfig/network-scripts/ifcfg-eth0关键配置如下根据实际情况调整TYPEEthernet BOOTPROTOstatic DEFROUTEyes NAMEeth0 DEVICEeth0 ONBOOTyes IPADDR203.0.113.100 NETMASK255.255.255.0 GATEWAY203.0.113.1 DNS18.8.8.8 DNS21.1.1.1 PEERDNSno特别注意DEFROUTEyes表示这是默认路由出口PEERDNSno防止DHCP覆盖我们的DNS设置网关地址要咨询你的网络管理员3.2 内网网卡(eth1)配置内网网卡配置有几个坑我踩过——特别是网关冲突问题。配置示例vi /etc/sysconfig/network-scripts/ifcfg-eth1内容如下TYPEEthernet BOOTPROTOstatic NAMEeth1 DEVICEeth1 ONBOOTyes IPADDR192.168.1.100 NETMASK255.255.255.0 # 关键内网网卡绝对不能设GATEWAY DNS1192.168.1.1重点提醒绝对不要在内网网卡设置GATEWAY参数这会导致路由表混乱内网DNS建议使用内网DNS服务器地址如果内网需要访问其他网段后面我们会单独配置路由4. 高级路由与防火墙策略4.1 多网卡路由配置配置完网卡后用ip route show查看路由表。常见问题是内网访问公网IP时走了内网卡这时候需要添加策略路由先创建路由表文件echo 100 eth1_rules /etc/iproute2/rt_tables然后添加路由规则ip route add 192.168.1.0/24 dev eth1 src 192.168.1.100 table eth1_rules ip route add default via 192.168.1.1 dev eth1 table eth1_rules ip rule add from 192.168.1.100 table eth1_rules永久生效需要把以下内容加到/etc/rc.localip route flush cache4.2 防火墙精细控制防火墙配置是安全的关键我整理了一套生产环境验证过的规则公网开放最小权限firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps firewall-cmd --permanent --remove-servicessh # 建议修改SSH端口 firewall-cmd --permanent --add-port50000/tcp # 改用非标准SSH端口内网数据库严格管控firewall-cmd --permanent --add-rich-rule rule familyipv4 source address192.168.1.0/24 port port3306 protocoltcp accept防止IP欺骗firewall-cmd --permanent --add-rich-rule rule familyipv4 source address192.168.1.0/24 destination not address192.168.1.100 drop重载配置firewall-cmd --reload5. 数据库与服务配置5.1 MySQL内网绑定很多数据库默认监听所有IP这非常危险。修改MySQL配置vi /etc/my.cnf在[mysqld]段添加bind-address 192.168.1.100 skip-name-resolve重启服务systemctl restart mysqld验证监听情况netstat -tulnp | grep mysql应该只看到tcp 0 0 192.168.1.100:3306 0.0.0.0:* LISTEN5.2 Web服务多IP绑定以Nginx为例可以配置不同IP响应不同请求server { listen 203.0.113.100:80; server_name example.com; location /api { proxy_pass http://192.168.1.100:8080; } }这样设计的好处是前端页面通过公网IP访问API接口请求被代理到内网IP数据库完全不出内网6. 故障排查与性能优化6.1 常见问题排查网卡起不来的万能解法systemctl stop NetworkManager systemctl disable NetworkManager systemctl restart network路由检查三板斧ip route show traceroute 8.8.8.8 mtr -rw 8.8.8.8防火墙规则调试journalctl -xe -u firewalld firewall-cmd --list-all-zones6.2 性能调优参数在高流量场景下需要调整内核参数vi /etc/sysctl.conf添加net.core.rmem_max16777216 net.core.wmem_max16777216 net.ipv4.tcp_rmem4096 87380 16777216 net.ipv4.tcp_wmem4096 65536 16777216 net.ipv4.tcp_window_scaling1生效配置sysctl -p针对网卡的高级设置万兆网卡特别有用ethtool -G eth0 rx 4096 tx 4096 ethtool -K eth0 tso on gso on gro on7. 安全加固建议7.1 网络层防护禁用IP转发除非要做路由器echo net.ipv4.ip_forward0 /etc/sysctl.conf防ARP欺骗echo arp_ignore1 /etc/sysctl.conf echo arp_announce2 /etc/sysctl.conf关键命令历史记录echo export PROMPT_COMMANDhistory -a /etc/profile echo export HISTTIMEFORMAT%F %T /etc/profile7.2 系统层加固禁用不必要的服务systemctl disable avahi-daemon systemctl stop cups关键文件锁定chattr i /etc/passwd /etc/shadow chattr i /etc/group /etc/gshadow定期安全检查脚本#!/bin/bash # 检查异常连接 netstat -antp | grep -E 192.168.1.[^100] # 检查可疑进程 ps aux | grep -E [s]shd|ftp|telnet # 检查root权限变更 awk -F: ($3 0) {print $1} /etc/passwd
CentOS 7.9双网卡实战:公网访问与内网数据库隔离配置指南
1. 为什么需要双网卡隔离配置在企业级应用部署中服务器通常需要同时处理公网访问请求和内网数据交互。我见过太多因为网络配置不当导致的安全事故——有被爬虫拖垮数据库的有内网数据被批量泄露的。用双网卡做物理隔离是最靠谱的解决方案就像给房子装了两道门前门接待客人公网后门只允许家人进出内网。典型的应用场景包括Web服务器需要对外提供HTTP服务同时要安全地连接内网数据库文件服务器允许公网下载但上传权限仅开放给内网需要隔离管理流量和业务流量的云主机环境CentOS 7.9作为目前企业使用最广泛的稳定系统其网络配置方式与新版系统有些差异。最近帮客户排查过一个典型案例他们的电商平台在促销时突然卡死最后发现是公网流量打满了网卡导致内网数据库查询超时。采用双网卡隔离后类似问题再没出现过。2. 环境准备与网卡识别2.1 硬件检查与驱动确认先别急着改配置我吃过亏——有次折腾半天发现第二张网卡根本没被系统识别。拿出你的物理服务器或虚拟机确认两个网口已正确连接物理机看网口指示灯虚拟机检查网络适配器数量网线分别接入不同网络公网交换机/内网交换机用这个命令检查网卡识别情况lspci | grep -i ethernet正常应该看到两个网络控制器类似00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-LM 02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection如果少了一个可能需要安装驱动。常见问题卡在VMXNET3虚拟网卡上这时候需要yum install -y open-vm-tools modprobe vmxnet32.2 网卡命名规则处理CentOS 7.x的网卡命名可能让人困惑新版系统用ens192这种命名老机器可能还是eth0。我建议统一改成传统命名方式修改grub配置vi /etc/default/grub在GRUB_CMDLINE_LINUX参数追加net.ifnames0 biosdevname0更新grub并重启grub2-mkconfig -o /boot/grub2/grub.cfg reboot现在你的网卡应该变成了eth0和eth1方便后续配置。3. 双网卡基础配置实战3.1 公网网卡(eth0)配置公网网卡通常采用DHCP获取IP但生产环境我强烈建议用静态IP。编辑配置文件vi /etc/sysconfig/network-scripts/ifcfg-eth0关键配置如下根据实际情况调整TYPEEthernet BOOTPROTOstatic DEFROUTEyes NAMEeth0 DEVICEeth0 ONBOOTyes IPADDR203.0.113.100 NETMASK255.255.255.0 GATEWAY203.0.113.1 DNS18.8.8.8 DNS21.1.1.1 PEERDNSno特别注意DEFROUTEyes表示这是默认路由出口PEERDNSno防止DHCP覆盖我们的DNS设置网关地址要咨询你的网络管理员3.2 内网网卡(eth1)配置内网网卡配置有几个坑我踩过——特别是网关冲突问题。配置示例vi /etc/sysconfig/network-scripts/ifcfg-eth1内容如下TYPEEthernet BOOTPROTOstatic NAMEeth1 DEVICEeth1 ONBOOTyes IPADDR192.168.1.100 NETMASK255.255.255.0 # 关键内网网卡绝对不能设GATEWAY DNS1192.168.1.1重点提醒绝对不要在内网网卡设置GATEWAY参数这会导致路由表混乱内网DNS建议使用内网DNS服务器地址如果内网需要访问其他网段后面我们会单独配置路由4. 高级路由与防火墙策略4.1 多网卡路由配置配置完网卡后用ip route show查看路由表。常见问题是内网访问公网IP时走了内网卡这时候需要添加策略路由先创建路由表文件echo 100 eth1_rules /etc/iproute2/rt_tables然后添加路由规则ip route add 192.168.1.0/24 dev eth1 src 192.168.1.100 table eth1_rules ip route add default via 192.168.1.1 dev eth1 table eth1_rules ip rule add from 192.168.1.100 table eth1_rules永久生效需要把以下内容加到/etc/rc.localip route flush cache4.2 防火墙精细控制防火墙配置是安全的关键我整理了一套生产环境验证过的规则公网开放最小权限firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps firewall-cmd --permanent --remove-servicessh # 建议修改SSH端口 firewall-cmd --permanent --add-port50000/tcp # 改用非标准SSH端口内网数据库严格管控firewall-cmd --permanent --add-rich-rule rule familyipv4 source address192.168.1.0/24 port port3306 protocoltcp accept防止IP欺骗firewall-cmd --permanent --add-rich-rule rule familyipv4 source address192.168.1.0/24 destination not address192.168.1.100 drop重载配置firewall-cmd --reload5. 数据库与服务配置5.1 MySQL内网绑定很多数据库默认监听所有IP这非常危险。修改MySQL配置vi /etc/my.cnf在[mysqld]段添加bind-address 192.168.1.100 skip-name-resolve重启服务systemctl restart mysqld验证监听情况netstat -tulnp | grep mysql应该只看到tcp 0 0 192.168.1.100:3306 0.0.0.0:* LISTEN5.2 Web服务多IP绑定以Nginx为例可以配置不同IP响应不同请求server { listen 203.0.113.100:80; server_name example.com; location /api { proxy_pass http://192.168.1.100:8080; } }这样设计的好处是前端页面通过公网IP访问API接口请求被代理到内网IP数据库完全不出内网6. 故障排查与性能优化6.1 常见问题排查网卡起不来的万能解法systemctl stop NetworkManager systemctl disable NetworkManager systemctl restart network路由检查三板斧ip route show traceroute 8.8.8.8 mtr -rw 8.8.8.8防火墙规则调试journalctl -xe -u firewalld firewall-cmd --list-all-zones6.2 性能调优参数在高流量场景下需要调整内核参数vi /etc/sysctl.conf添加net.core.rmem_max16777216 net.core.wmem_max16777216 net.ipv4.tcp_rmem4096 87380 16777216 net.ipv4.tcp_wmem4096 65536 16777216 net.ipv4.tcp_window_scaling1生效配置sysctl -p针对网卡的高级设置万兆网卡特别有用ethtool -G eth0 rx 4096 tx 4096 ethtool -K eth0 tso on gso on gro on7. 安全加固建议7.1 网络层防护禁用IP转发除非要做路由器echo net.ipv4.ip_forward0 /etc/sysctl.conf防ARP欺骗echo arp_ignore1 /etc/sysctl.conf echo arp_announce2 /etc/sysctl.conf关键命令历史记录echo export PROMPT_COMMANDhistory -a /etc/profile echo export HISTTIMEFORMAT%F %T /etc/profile7.2 系统层加固禁用不必要的服务systemctl disable avahi-daemon systemctl stop cups关键文件锁定chattr i /etc/passwd /etc/shadow chattr i /etc/group /etc/gshadow定期安全检查脚本#!/bin/bash # 检查异常连接 netstat -antp | grep -E 192.168.1.[^100] # 检查可疑进程 ps aux | grep -E [s]shd|ftp|telnet # 检查root权限变更 awk -F: ($3 0) {print $1} /etc/passwd