1、新建规则文件
mkdir /etc/iptables
vim /etc/iptables/rules.v4
写入内容
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 135,137,138,139,445,3389 -j REJECT
-A OUTPUT -p tcp -m multiport --sports 135,137,138,139,445,3389 -j REJECT
COMMIT
2、手动加载测试
iptables-restore < /etc/iptables/rules.v4
3、设置开机生效
由于银河麒麟系统使用的网络管理工具不是传统的ifupdown,而是NetworkManager,导致/etc/network/if-pre-up.d/目录下的脚本重启不会被触发执行。需要用更可靠的systemd服务来实现开机自动加载 iptables 规则。
步骤 1:创建 systemd 服务文件
sudo vim /etc/systemd/system/iptables.service
[Unit]
# 服务描述
Description=Load iptables Rules Automatically
# 依赖网络预启动目标,确保在网络启动前加载规则
Wants=network-pre.target
Before=network-pre.target network.target
# 取消默认依赖,避免启动顺序问题
DefaultDependencies=no
[Service]
# 一次性执行服务(执行完即退出)
Type=oneshot
# 核心命令:加载iptables规则(使用/sbin/iptables-restore绝对路径)
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4
# 如需加载IPv6规则,取消下面的注释(同样用绝对路径)
# ExecStart=/sbin/ip6tables-restore /etc/iptables/rules.v6
# 即使执行完,仍标记服务为活跃状态
RemainAfterExit=yes
[Install]
# 绑定到多用户运行级别(开机默认级别)
WantedBy=multi-user.target
步骤 2:重新加载 systemd 并启用服务
# 重新加载systemd配置,识别新创建的服务
sudo systemctl daemon-reload
# 启用服务(设置开机自启)并立即启动服务(加载规则)
sudo systemctl enable --now iptables.service
执行以下命令检查服务是否正常运行:
sudo systemctl status iptables.service
重启系统,然后执行sudo iptables -L -n,验证规则是否已经自动加载。