前言:为了在局域网下实现,教师和学生之间的文件传输,直接使用麒麟系统自带的“传书”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
- 创建 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
经测试,可以达到想要的效果。
❤️ 转载文章请注明出处,谢谢!❤️