网络端口服务控制
已开放的端口
当前开发与远程维护场景下,我们已开放的 TCP 端口如下:
| 端口 | 协议(典型) | 说明 |
|---|---|---|
| 22 | TCP | SSH:远程安全登录、维护、调试及 SCP/SFTP 等文件传输。 |
| 3389 | TCP | RDP:Windows 远程桌面;板端常见为 xrdp 等服务。 |
| 5900 | TCP | VNC:图形化远程桌面访问。 |
查看当前防火墙规则
在开发板上执行:
iptables-save
可看到完整规则(含链策略与各条 INPUT 规则)。仅查看列表形式时可用:
iptables -L -n -v
正常情况下,INPUT 链的默认策略(policy)应为 DROP,并包含对 22、3389、5900 等端口的 ACCEPT 规则(具体以您设备上实际输出为准)。
示例(节选,仅供参考):
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
COMMIT
增添端口方法
开机加载的规则通常保存在:
- IPv4:
/etc/iptables/rules.v4 - IPv6:
/etc/iptables/rules.v6
使用 root 编辑,例如:
sudo vi /etc/iptables/rules.v4
sudo vi /etc/iptables/rules.v6
IPv4 中 *filter 段结构与上文示例类似:先放行已建立连接与本机回环,再按端口追加 ACCEPT。
添加放行端口的写法(TCP)
在 -A INPUT -i lo -j ACCEPT 之后、COMMIT 之前,增加一行(将 端口号 换成实际端口,如 80、443):
-A INPUT -p tcp -m tcp --dport 端口号 -j ACCEPT
也可写成(与部分系统导出格式一致):
-A INPUT -p tcp --dport 端口号 -j ACCEPT
添加放行端口的写法(UDP)
-A INPUT -p udp -m udp --dport 端口号 -j ACCEPT
删除某条端口放行
在规则文件中删除对应 -A INPUT ... --dport 端口号 ... 整行即可。保存后需重新加载服务(见下一节),规则才会长期生效。
注意:请勿删除 RELATED,ESTABLISHED 与 lo(回环) 相关规则,否则可能影响正常回包与本机服务。
iptables-restore 服务
开发板默认启用 iptables-restore.service,用于开机从 rules.v4 / rules.v6 恢复规则。
临时停止服务
只想临时停用(例如排查网络问题)时执行:
sudo systemctl stop iptables-restore.service
这是临时操作。若服务仍为 enabled,设备重启后会再次启动,并继续从 rules.v4 / rules.v6 恢复规则。
禁用开机自启(重启后不自动加载规则)
若希望重启后也不自动加载规则,执行:
sudo systemctl disable iptables-restore.service
执行 disable 后,重启时该服务不会自动启动,也不会自动套用 rules.v4 / rules.v6。
需要恢复开机自动加载时:
sudo systemctl enable iptables-restore.service
sudo systemctl start iptables-restore.service
快速检查状态
systemctl is-enabled iptables-restore.service # 看是否开机自启
systemctl is-active iptables-restore.service # 看当前是否活跃
注意:
disable只影响“下次开机是否自动启动”;不会直接清空当前内核里的规则。当前规则请用iptables -L -n实测。
修改规则文件后重新加载
修改规则文件后,可执行:
sudo systemctl daemon-reload
sudo systemctl restart iptables-restore.service
sudo systemctl status iptables-restore.service
再用 iptables -L -n 或 iptables-save 确认是否与文件一致。
若服务异常,可根据 systemctl status 与日志排查;确认 /etc/iptables/rules.v4 语法正确(尤其是每条 -A 独立一行、*filter … COMMIT 成对出现)。
注意
- 远程维护常用放行端口:22(SSH)、3389(RDP)、5900(VNC),以设备上
iptables-save实际输出为准。 - 持久化编辑
/etc/iptables/rules.v4(及需要的rules.v6),按模板增删--dport行。 - 修改后执行
systemctl restart iptables-restore.service,并用iptables -L -n验证。 systemctl stop iptables-restore.service仅为临时手段;重启后仍会按规则文件加载。长期策略以改文件并restart服务为准。