前言:为了在局域网下实现,教师和学生之间的文件传输,直接使用麒麟系统自带的“传书”App无疑是最优选,但是随之而来的问题是,学生之间也可相互进行文件传输和消息传递,脱离了教师的监管,这在具备考试功能的机器上是应该被明确禁止的。在此背景下,我们希望学生能且仅能与教师席位进行全双工通信,无法通过“传书”App与局域网下的其它机器进行通信。

参考TCP 和 UDP 怎么选?让麒麟传书告诉你,我们得知“传书”App的内部实现细节:

麒麟传书使用 UDP 协议来发送和接收 UDP 广播数据,传输局域网内的好友上线离线消息,在接收到好友上线或离线消息后更新好友状态,> 同时建立心跳机制来保证获取到好友的在线状态。
麒麟传书使用 TCP 协议主动连接好友监听的端口,进行 socket 连接,从而在连接成功后通过 TCP 进行文字、文件、文件夹等数据> 传输,同时对数据传输过程进行维护。
麒麟传书使用 TCP 协议来监听本机指定的端口,等待好友进行连接,在连接成功后进行数据传输。

因此通过配置Tcp防火墙,就可达到目的。
要求:银河麒麟配置防火墙,拒绝192.168.22.*下的所有TCP连接,除了192.168.22.220,且重启系统后仍然奏效

1.使用iptables添加防火墙规则

# 允许192.168.22.220的TCP连接
sudo iptables -I INPUT -s 192.168.22.220 -p tcp -j ACCEPT

# 拒绝192.168.22.0/24网段的其他TCP连接
sudo iptables -A INPUT -s 192.168.22.0/24 -p tcp -j DROP

2.保存当前的 iptables 规则

# 手动保存规则到文件(需确保目录存在)
sudo mkdir -p /etc/iptables
sudo -i
iptables-save > /etc/iptables/rules.v4
exit
  1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/load-iptables.service

内容如下:

[Unit]
Description=Load iptables rules at boot
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

4.启用并启动服务

sudo systemctl daemon-reload
sudo systemctl enable load-iptables
sudo systemctl start load-iptables

5.重启系统并验证规则是否生效

sudo iptables -L INPUT -n --line-numbers

确保规则中包含:

ACCEPT  tcp  --  192.168.22.220      0.0.0.0/0
DROP    tcp  --  192.168.22.0/24     0.0.0.0/0

经测试,可以达到想要的效果。

❤️ 转载文章请注明出处,谢谢!❤️