Linux服务器内部防火墙配置:仅允许80端口的Apache访问8080端口的后端服务
Linux服务器内部防火墙配置:仅允许80端口的Apache访问8080端口的后端服务
搞定这个需求很简单,咱们用Linux自带的iptables就能实现你想要的「类AWS安全组」的内部访问控制效果——只有Apache能访问8080的后端服务,本地终端用curl直接访问会被拦截。下面一步步来操作:
先确认Apache的运行用户
通常Ubuntu/Debian上Apache用www-data用户,CentOS/RHEL上用apache用户。你可以用以下命令确认:ps aux | grep apache2 # Ubuntu/Debian系统执行 ps aux | grep httpd # CentOS/RHEL系统执行输出结果的第一列就是Apache的运行用户,记下来后面要用。
添加iptables规则,允许Apache访问8080端口
执行这条命令,把www-data替换成你刚才查到的Apache用户:iptables -A OUTPUT -p tcp --dport 8080 -m owner --uid-owner www-data -j ACCEPT这条规则的意思是:所有以
www-data用户身份发起的、目标端口为8080的TCP出站请求,都允许通过。拦截所有其他访问8080端口的请求
接着添加拒绝规则,确保除了Apache之外,其他任何用户(包括root、你的登录用户)都不能访问8080:iptables -A OUTPUT -p tcp --dport 8080 -j REJECT强化后端服务的绑定地址
为了彻底杜绝外部请求访问8080,把你的Node.js后端服务绑定到127.0.0.1(而不是0.0.0.0)。比如在启动命令里指定:node your-app.js --host 127.0.0.1或者在代码里设置监听地址:
app.listen(8080, '127.0.0.1', () => { console.log('Backend running on http://127.0.0.1:8080'); });保存规则,防止重启后失效
不同发行版保存iptables规则的命令不一样:- Ubuntu/Debian:
iptables-save > /etc/iptables/rules.v4 - CentOS/RHEL:
service iptables save
- Ubuntu/Debian:
测试验证
- 切换到Apache用户测试访问,应该能正常获取响应:
sudo -u www-data curl http://127.0.0.1:8080 - 用你的普通用户或root执行curl,会收到拒绝连接的提示,比如:
curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused
备注:内容来源于stack exchange,提问作者Van Wilder
相关产品推荐
相关产品推荐

