您现在的位置是:烟消火灭网 > 时尚

linux指定ip访问端口

烟消火灭网2026-10-17 07:42:41【时尚】8人已围观

简介 一条`iptables`规则就能解决大部分“指定IP访问端口”的需求,但很多人第一反应是去改防火墙配置文件——那玩意儿在云服务器上根本不管用。我上周刚帮朋友排查过,他买了台阿里云ECS,安全组里放行

一条`iptables`规则就能解决大部分“指定IP访问端口”的问端需求,但很多人第一反应是问端去改防火墙配置文件——那玩意儿在云服务器上根本不管用。我上周刚帮朋友排查过,问端他买了台阿里云ECS,问端安全组里放行了3306,问端结果从公司IP死活连不上MySQL。问端折腾半天发现,问端他改的问端是系统自带的firewalld,而云厂商的问端安全组规则优先级更高,压根没走系统防火墙那层。问端

先分清你处在什么环境。问端云服务器上,问端得去控制台改安全组入方向规则,问端源IP填`1.2.3.4/32`,问端端口填3306,问端协议选TCP。本地虚拟机或者物理机,直接用`iptables -A INPUT -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT`,再补一条`iptables -A INPUT -p tcp --dport 3306 -j DROP`把其他IP拒掉。顺序别搞反,先放行再拒绝,否则规则不生效。

有个细节容易踩坑:如果你用Docker跑服务,端口映射是走NAT表的。这时候光改INPUT链没用,得操作DOCKER链。比如容器映射了8080,你想只让192.168.1.100访问,执行`iptables -I DOCKER -p tcp --dport 8080 -s 192.168.1.100 -j ACCEPT`,然后`iptables -I DOCKER -p tcp --dport 8080 -j DROP`。注意是-I插到最前面,因为DOCKER链默认有ACCEPT规则,顺序不对等于白干。

要是你嫌命令行麻烦,用ufw也行。Ubuntu上直接`ufw allow from 1.2.3.4 to any port 22 proto tcp`,但ufw底层还是iptables,碰到老系统可能没预装。另外,改完规则记得测试——从允许的IP敲一下`nc -vz 目标IP 端口`,再从被拒绝的IP试一次,别光看规则列表就以为完事了。

有个反直觉的坑:有些服务监听的是`0.0.0.0`,有些只监听`127.0.0.1`。如果你在服务器本机测试通了,但外部IP连不上,先检查服务的bind地址。比如Nginx默认监听所有接口,但某些Python开发服务器只绑了localhost。这时候防火墙规则再对也没用,得先改服务监听配置。

最后提醒一句,别图省事直接`-j DROP`拒绝所有来源。我见过有人为了安全把SSH端口只对办公网IP开放,结果出差换个网络就登不上服务器,最后只能通过云厂商的VNC控制台去解封。真要限制,建议设个宽裕点的IP段,或者加个临时规则留条后路。

很赞哦!(115)