打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

Bandwagon服务器如何放行与屏蔽特定端口

来自md5.pw
这是此页面的最新修订,它没有已核准修订。

由于搬瓦工的服务器架构设计旨在提供最大的灵活性,所以默认情况下未配置外部安全组(Security Group)。这意味着你的服务器直接暴露在公网环境中。

为了保障你的数据安全,防止恶意扫描和攻击,建议在系统内部配置防火墙。本教程将教你如何使用Linux 系统中强大且高效的防火墙工具 —— Nftables,来实现端口放行与屏蔽。

注意: 在进行任何防火墙操作前,请务必确保您当前的 SSH 连接端口(默认为 22)已被放行,否则您可能会将自己锁定在服务器之外!


什么是 Nftables?

Nftables 是 Linux 内核的新一代包过滤框架,旨在替代老旧的 iptables。它拥有更高的性能、更清晰的语法以及原子操作支持,是维护服务器安全的首选工具。(想要深入了解也可以查阅下面提供的维基百科资料)

Nftables 维基百科


第一部分:Debian / Ubuntu 系列安装指南

本节适用于 Debian 10/11/12 及 Ubuntu 20.04/22.04/24.04 等系统。

1. 更新系统组件

在安装任何软件之前,记得使用下面命令保持系统源的最新状态。

sudo apt update && sudo apt upgrade -y

2. 安装 Nftables

Debian 和 Ubuntu 的仓库中默认包含 nftables。

sudo apt install nftables -y

3. 启用并开机自启

安装完成后,我们需要启用服务,使其在服务器重启后依然生效。

sudo systemctl enable nftables
sudo systemctl start nftables

第二部分:CentOS Stream 系列安装指南

本节适用于 CentOS Stream 8/9 等系统。 注意: CentOS 默认通常使用 firewalld 作为防火墙前端。为了使用纯粹的 nftables,我们需要先禁用 firewalld 以避免冲突。

1. 更新系统组件

sudo dnf update -y

2. 移除 Firewalld (关键步骤)

为了防止规则冲突,我们先停止并禁用 firewalld。

sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 可选:如果你确定不再需要它,可以卸载
sudo dnf remove firewalld -y

3. 安装 Nftables

sudo dnf install nftables -y

4. 启用并开机自启

sudo systemctl enable nftables
sudo systemctl start nftables

第三部分:Rocky Linux / AlmaLinux 系列安装指南

Rocky Linux 和 AlmaLinux 作为 RHEL 的下游发行版,操作逻辑与 CentOS 类似,同样需要注意清理预装的防火墙管理工具。

1. 更新系统组件

sudo dnf update -y

2. 清理预装的 Firewalld

sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 建议卸载以保持环境纯净
sudo dnf remove firewalld -y

3. 安装 Nftables

sudo dnf install nftables -y

4. 启用并开机自启

sudo systemctl enable nftables
sudo systemctl start nftables

第四部分:Nftables 通用教程

无论使用上述哪种系统,Nftables 的配置文件路径通常统一为 /etc/nftables.conf。我们将通过修改这个文件来实现“默认拒绝所有,仅放行特定端口”的安全策略。

1. 备份默认配置

在修改前,先备份原始文件。

sudo cp /etc/nftables.conf /etc/nftables.conf.bak

2. 编写安全规则(核心步骤)

使用文本编辑器(如 nanovim)打开配置文件:

sudo nano /etc/nftables.conf

清空文件内容,并复制以下推荐配置模板。这个模板会自动放行 SSH 端口,并拒绝其他非必要的入站流量。

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        # 1. 允许本地回环接口 (Localhost)
        iifname "lo" accept

        # 2. 允许已建立的连接和相关流量 (比如你主动访问外网的返回数据)
        ct state established,related accept

        # 3. ICMP (Ping) 设置:允许被 Ping (可选,如果不想被 Ping 可改为 drop)
        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        # 4. === 关键端口放行区 ===
      
        # [必须] 放行 SSH 端口 (默认22,如果你改了端口请修改这里)
        tcp dport 22 accept

        # [示例] 放行 Web 服务端口 (HTTP/HTTPS)
        # tcp dport { 80, 443 } accept
      
        # [示例] 这是一个被屏蔽的端口演示 (由于默认策略是 drop,不写就是屏蔽,但也可以显式拒绝)
        # tcp dport 8080 reject
    }
  
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
  
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

配置详解:

  • policy drop;:这是最关键的一行。它意味着除了你在下面明确允许的,其他所有流量都会被丢弃。这是最安全的“白名单”模式。
  • tcp dport 22 accept:务必保留此行,否则会断开 SSH 连接。

3. 应用配置

保存文件后(在 nano 中按 Ctrl+O 回车保存,Ctrl+X 退出),运行以下命令重载配置,使其立即生效:


sudo systemctl reload nftables

如果命令没有报错,说明防火墙已成功运行。


第五部分:日常管理与操作

如何放行新的端口?

比如你安装了一个面板,需要放行 8888 端口。

  1. 编辑 /etc/nftables.conf
  2. chain input 中添加一行:tcp dport 8888 accept
  3. 运行 sudo systemctl reload nftables

如何屏蔽特定 IP?

如果您发现某个 IP (例如 192.168.1.100) 在恶意扫描你的服务器,可以在配置文件中 SSH 规则之前添加:

代码段

ip saddr 192.168.1.100 drop

如何屏蔽特定端口?

如果你使用的是上述“白名单模式”(Policy Drop),只需要删除对应的 accept 规则即可自动屏蔽。 如果你使用的是“黑名单模式”(Policy Accept),则需要显式添加:

tcp dport 3306 drop

最后

通过以上步骤,你已经在没有安全组的情况下,为你的 VPS 建立了一道坚固的防线。Nftables 的强大之处在于其灵活性,你可以根据业务需求编写更加复杂的流量转发和限流规则。