标签: Linux

  • 云服务器的黑洞路由配置

    一、 什么是黑洞路由

    黑洞路由是一种网络配置方法,旨在将特定的网络流量引导到一个不存在的目标地址,导致这些流量被丢弃,仿佛进入了一个“黑洞”一样。这种技术通常被用于丢弃不需要的流量,或作为防御手段来应对网络攻击。

    在黑洞路由中,管理员通过配置路由表,将目标 IP 地址或 IP 段指向一个虚拟的“黑洞”地址,这个地址通常是一个不存在的地址或一个空地址。当网络流量被引导到这个黑洞地址时,它们将被直接丢弃,而不会被转发到实际的目标。

    黑洞路由在网络安全方面尤为重要,尤其是在对抗 分布式拒绝服务攻击(DDoS) 等恶意流量时。

    二、 黑洞路由的应用场景

    1. 防御分布式拒绝服务攻击(DDoS)

    背景:

    DDoS 攻击通过向目标网络或服务器发送大量恶意流量,迅速使其瘫痪,无法为正常用户提供服务。

    应用:

    通过设置黑洞路由,将攻击流量引导到“黑洞”地址,避免这些流量占用带宽,从而保护其他正常流量。例如,网络管理员可以通过添加黑洞路由来丢弃所有来自特定 IP 段的攻击流量,确保攻击不会对系统造成负面影响。

    案例:

    某在线服务提供商在遭遇大规模 DDoS 攻击时,立即将攻击来源的 IP 地址段引导到黑洞,从而成功减轻了攻击负担,保护了其正常的用户流量。

    2. 隔离受感染的主机或网络

    背景:

    网络中的设备可能会被病毒或恶意软件感染,成为攻击的源头。为了避免这些设备对其他主机造成威胁,可以通过黑洞路由将其流量隔离。

    应用:

    当发现某台设备或主机被感染时,可以设置黑洞路由将它的流量丢弃,避免它继续传播恶意流量或参与更大的攻击。

    案例:

    某公司发现内网中的一台计算机已经被勒索病毒感染,导致它向外发送大量垃圾流量。管理员通过黑洞路由将这台主机的所有流量引导到黑洞,有效隔离了感染主机,防止了病毒蔓延。

    3. 过滤不需要的流量或垃圾流量

    背景:

    许多网络流量可能是垃圾流量,来自无用的请求或恶意的爬虫,这些流量不仅浪费带宽,还可能影响正常服务的响应速度。

    应用:

    管理员可以设置黑洞路由,丢弃来自不需要的 IP 地址或流量类型。这种方法对于防止无意义的访问或爬虫流量尤为有效。

    案例:

    某网站为了防止爬虫和无效请求消耗带宽,在发现大量来自某些 IP 地址的恶意爬虫流量后,快速通过黑洞路由将这些 IP 阻断,从而保证正常用户的访问不受影响。

    4. 网络重定向和流量控制

    背景:

    在某些情况下,管理员可能希望控制流量的走向,或者强制执行某些安全策略,防止流量访问不安全的目标。

    应用:

    可以通过设置黑洞路由来引导特定流量到“黑洞”,从而控制哪些流量可以进入网络。例如,在企业内部网络中,可以使用黑洞路由来阻止员工访问某些危险的外部网站或 IP 地址。

    案例:

    某企业使用黑洞路由禁止员工访问特定的社交媒体网站,以避免员工在工作时间浪费过多时间,同时降低因不安全网站带来的潜在风险。

    5. IP 地址封禁

    背景:

    当发现某些 IP 地址是恶意的攻击源时,可能需要对这些 IP 进行封禁,防止它们继续发起攻击或进行其他不良行为。

    应用:

    黑洞路由可以被用于封禁特定 IP 地址或 IP 地址段,确保这些恶意源的流量不会进入目标网络。

    案例:

    一个在线游戏平台遭遇了来自某个国家的大规模暴力破解攻击,攻击者通过多个 IP 地址发起登录尝试。管理员通过设置黑洞路由,迅速将这些 IP 地址段的流量丢弃,防止了攻击对游戏服务器的影响。

    6. 流量监控与分析

    背景:

    有时需要对某些流量进行监控和分析,以便检测异常行为或进行故障排查。

    应用:

    可以将流量通过黑洞路由引导到特定地址,来检测是否有异常流量或网络行为,从而帮助网络管理员识别问题。

    案例:

    在某次流量审计中,网络管理员发现了一些异常的流量模式,怀疑可能是恶意活动。为了进一步分析,管理员将这些可疑流量引导到黑洞,从而有效隔离了这些流量并避免了对正常流量的干扰。

    7. 网络故障和故障转移管理

    背景:

    在分布式网络环境中,某些网络节点可能会出现故障,导致流量无法正常路由。此时需要一种快速的手段来避免流量流向故障节点。

    应用:

    黑洞路由可用于将故障节点的流量丢弃,避免错误的流量路径导致其他节点的负担增加。

    案例:

    某企业的外部路由节点发生故障,导致无法正常访问外部资源。管理员通过黑洞路由将所有经过该节点的流量丢弃,防止故障的流量影响到网络中的其他设备和服务。

    8. 临时流量丢弃

    背景:

    有时在系统维护期间,管理员需要暂时丢弃某些流量,以避免在维护过程中受到干扰。

    应用:

    通过黑洞路由,管理员可以在维护过程中临时将不需要的流量引导到黑洞,从而保护网络的正常运行。

    案例:

    某个大型网站在进行例行维护时,管理员通过黑洞路由临时丢弃所有来自外部的流量,以保证维护过程不被外部请求打断。维护结束后,恢复正常流量路由。

    三、 黑洞路由配置示例

    需要配置黑洞路由的条件
    • 防御 DDoS 攻击:当检测到来自特定 IP 地址段的 DDoS 攻击流量时,可以通过黑洞路由将这些流量丢弃,从而防止攻击占用带宽和系统资源。
    • 隔离感染主机:如果网络中某台设备被恶意软件感染,可能会发起大量恶意流量,管理员可以通过黑洞路由将其流量丢弃,防止对其他设备造成危害。
    • 阻止垃圾流量:当网站或服务器受到大量无效请求(如爬虫、扫描器)干扰时,管理员可以配置黑洞路由,将这些不需要的流量丢弃,保障网络的正常运行。
    • 故障恢复或冗余路径管理:如果某个网络节点发生故障或不再有效,黑洞路由可以用于暂时丢弃流量,避免流量被错误地路由到故障节点。
    • IP 封禁:某些 IP 地址在进行恶意行为(如暴力破解)时,管理员可以通过配置黑洞路由直接丢弃这些 IP 的流量,防止其继续攻击。

    1. Windows 配置

    1. 添加黑洞路由
      例如,黑洞路由将所有来自 192.168.1.0/24 网络的流量丢弃:
    route add 192.168.1.0 mask 255.255.255.0 0.0.0.0
    1. 添加永久黑洞路由
      如果需要在系统重启后保留黑洞路由,可以使用 -p 选项:
    route add 192.168.1.0 mask 255.255.255.0 0.0.0.0 -p
    1. 删除黑洞路由
      如果不再需要黑洞路由,可以删除指定的路由规则:
    route delete 192.168.1.0
    1. 查看当前路由表
      通过查看路由表,可以确认是否已配置黑洞路由:
    route print

    2. Linux 配置

    1. 添加黑洞路由
      例如,将 192.168.1.0/24 的流量引导到黑洞:
    ip route add blackhole 192.168.1.0/24
    1. 添加永久黑洞路由
      如果需要保持黑洞路由在重启后仍然有效,可以添加 permanent 标志(在某些 Linux 发行版中,可能需要将配置写入路由表配置文件中以实现永久生效):
    ip route add blackhole 192.168.1.0/24 permanent
    1. 删除黑洞路由
      如果需要删除已配置的黑洞路由,可以使用:
    ip route del blackhole 192.168.1.0/24
    1. 查看当前路由表
      使用以下命令查看当前的路由表,并检查是否存在黑洞路由:
    ip route show | grep blackhole

  • Docker安装wiki.js知识共享平台

    通过 Docker 部署 Wiki.js 可以帮助团队快速建立起知识共享平台,Wiki.js 是一个现代化的、功能强大的 Wiki 引擎,基于 Node.js 开发,支持多种数据库(如 PostgreSQL 和 MySQL)。它提供了丰富的功能,包括实时协作、Markdown 支持、权限管理、搜索功能等,非常适合团队内部使用,帮助知识共享和文档管理。

    1. 安装Docker

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh

    2. 使用 Docker 部署 Wiki.js

    需要创建一个 docker-compose.yaml 文件,用于定义 Docker 服务的配置。

    nano docker-compose.yaml

    文件内容如下:

    services:
    
      db:
        image: postgres:15-alpine
        environment:
          POSTGRES_DB: wiki
          POSTGRES_PASSWORD: wikijsrocks
          POSTGRES_USER: wikijs
        logging:
          driver: none
        restart: unless-stopped
        volumes:
          - db-data:/var/lib/postgresql/data
    
      wiki:
        image: ghcr.io/requarks/wiki:2
        depends_on:
          - db
        environment:
          DB_TYPE: postgres
          DB_HOST: db
          DB_PORT: 5432
          DB_USER: wikijs
          DB_PASS: wikijsrocks
          DB_NAME: wiki
        restart: unless-stopped
        ports:
          - "80:3000"
    
    volumes:
      db-data:

    3. 启动容器

    通过 docker-compose 启动 Wiki.js 和 PostgreSQL 数据库:

    docker-compose up -d

    命令执行后,Docker 会下载必要的镜像并启动容器。

    Wiki.js 将绑定到主机的 80 端口
    你可以通过浏览器访问 http://<你的服务器 IP>:80 来完成 Wiki.js 的配置。

  • Linux系统配置时区和时间同步服务的两种方法

    在 Linux 系统中,配置时区和启用时间同步服务可以通过不同的方式完成。下面我们将介绍两种常见的方法:一种使用传统命令,另一种使用 timedatectl 命令来进行配置。

    方法一:使用传统命令配置时区

    1. 配置时区为 Asia/Singapore

    你可以通过以下命令来设置时区:

    echo "Asia/Singapore" | tee /etc/timezone

    然后,将本地时间设置为 Asia/Singapore 时区:

    ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    1. 查看当前系统时间

    使用 date 命令查看系统时间,确保时区设置生效:

    date

    方法二:使用 timedatectl 配置时区

    1. 配置时区为 Asia/Singapore

    使用 timedatectl 直接设置时区:

    timedatectl set-timezone Asia/Singapore
    1. 查看当前系统时间

    使用 timedatectl 查看当前系统时区设置:

    timedatectl
    1. 安装并启动时间同步服务

    如果系统没有启用时间同步服务,可以通过以下命令来安装和启动 systemd-timesyncd 服务:

    apt install systemd-timesyncd
    systemctl start systemd-timesyncd
    systemctl status systemd-timesyncd
    1. 确认时间同步

    使用 timedatectl 再次查看同步状态:

    timedatectl
  • 通过 SCP自动同步远程备份文件到本地

    使用 scp 命令在 Linux 环境中实现自动备份。通过脚本并结合 cron 定时任务,实现每天自动从远程服务器拉取指定目录的备份数据到本地指定路径。

    1. 配置密钥登录

    1. 更新系统并安装所需的软件:
    apt update
    apt install -y openssh-client nano cron
    1. 创建 .ssh 目录:
    mkdir .ssh
    1. 将私钥文件放入 .ssh 目录,并设置正确的权限:
    nano /root/.ssh/id_rsa
    chmod 600 /root/.ssh/id_rsa

    2. 设置备份脚本

    1. 创建并编辑备份脚本:
    nano /root/backup.sh
    1. backup.sh 中添加以下内容:
    #!/bin/bash
    
    # Set the SFTP private key path and remote host information
    PRIVATE_KEY="/root/.ssh/id_rsa"
    REMOTE_USER="qixin"
    REMOTE_HOST="192.168.1.100"
    REMOTE_PATH="/opt/backup/*"
    LOCAL_PATH="/opt/web-backup"
    
    # Loop through files in remote directory and skip existing ones
    for remote_file in $(ssh -i "$PRIVATE_KEY" "$REMOTE_USER@$REMOTE_HOST" "ls $REMOTE_PATH"); do
        local_file="$LOCAL_PATH/$(basename $remote_file)"
    
        # Check if the file already exists locally
        if [ ! -f "$local_file" ]; then
            echo "Downloading $remote_file..."
            /usr/bin/scp -i "$PRIVATE_KEY" "$REMOTE_USER@$REMOTE_HOST:$remote_file" "$LOCAL_PATH"
        else
            echo "$remote_file already exists, skipping."
        fi
    done
    
    # Exit the script
    exit 0

    说明

    • PRIVATE_KEY 设置私钥路径
    • REMOTE_USER 设置用户名
    • REMOTE_HOST 设置IP地址
    • REMOTE_PATH 远程文件目录路径
    • LOCAL_PATH 本地文件目录路径
    1. 设置脚本执行权限:
    chmod +x /root/backup.sh

    3. 设置定时任务

    1. 编辑 crontab 配置,设置每天凌晨三点执行备份脚本:
    crontab -e
    1. 在 crontab 文件中添加以下内容:
    0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1

  • 使用Docker部署ONLYOFFICE 社区版文档服务器

    ONLYOFFICE 文档服务器是一款在线办公套件,包含文本、电子表格和演示文稿的查看器和编辑器,完全兼容 Office Open XML 格式:.docx、.xlsx、.pptx,并支持实时协作编辑。

    主要特点:

    • 实时协作:支持多人同时编辑同一个文档,提升团队协作效率。
    • 多种格式支持:兼容主流 Office 格式(如 .docx.xlsx.pptx),无缝处理不同类型的文件。
    • 跨平台支持:适用于 Windows、Linux、macOS 等多平台,方便部署和使用。
    • 高效文档管理:提供强大的文档查看、编辑、共享功能,适用于个人及小型团队使用。

    1. 克隆 ONLYOFFICE 社区版仓库

    首先,打开终端并克隆 ONLYOFFICE 的社区版 Docker 配置库:

    git clone https://github.com/ONLYOFFICE/Docker-CommunityServer

    2. 进入项目目录

    克隆完成后,进入项目目录:

    cd Docker-CommunityServer

    3. 启动 Docker 容器

    使用 docker-compose 启动 ONLYOFFICE 社区版文档服务器:

    docker-compose -f docker-compose.workspace.yml up -d

    4. 配置访问

    部署完成后,你可以通过访问服务器的 IP 地址或域名来使用 ONLYOFFICE 文档服务器。默认端口为 80,你可以在浏览器中输入服务器地址,例如:

    http://<服务器IP地址>/
  • 迁移 Ubuntu 24.04 系统从 VMware虚拟化迁移到 KVM 虚拟化

    当我们将虚拟机从 VMware 环境迁移到 KVM 虚拟化平台时,虽然系统能够成功启动,但可能会出现无法联网的情况。解决迁移 Ubuntu 24.04 系统从 VMware 到 KVM,无法获取IP导致没有网络的问题

    1. 迁移前的准备

    在迁移之前,需要做好以下准备工作:

    • 备份虚拟机:为了防止意外丢失数据,首先应该备份虚拟机。
    • 安装 QEMU-Guest-Agent:QEMU-Guest-Agent 是 KVM 环境中必要的工具,它能增强虚拟机和宿主机之间的交互,例如提供更好的网络性能和电源管理。 安装命令如下:
    sudo apt update
    sudo apt install qemu-guest-agent

    2. 虚拟机迁移操作

    迁移过程中,可以使用如下两种方法之一进行迁移:

    • 迁移虚拟磁盘:通过将 VMware 虚拟机的虚拟磁盘(通常为 .vmdk 文件)转换为 KVM 支持的格式(如 .qcow2.raw 格式)。

    可以使用 qemu-img 工具进行格式转换:

    qemu-img convert -f vmdk -O qcow2 vmware_disk.vmdk kvm_disk.qcow2
    • 直接导出并导入虚拟机:导出 VMware 虚拟机的配置并导入到 KVM 中,使用 KVM 的虚拟机管理工具如 virt-managervirsh 进行虚拟机的创建和配置。

    3. 启动虚拟机并验证迁移

    完成迁移后,启动虚拟机,确保虚拟机能够成功启动并进入系统。此时,我们会发现虚拟机能够正常启动,但有时候会出现无法联网的情况。

    网络问题分析

    在迁移完成后,我们的 Ubuntu 24.04 系统成功启动,但无法连接到网络。执行 ip a 命令时,虚拟机没有分配到 IP 地址,且网络接口无法连接。经过排查,发现问题的根本原因在于虚拟机的网络接口名称发生了变化。

    VMware 与 KVM 中的网卡名称差异

    在不同的虚拟化平台中,网络接口的命名规则是不同的:

    • VMware 中,网卡设备名通常是 ens33 或类似的名称。
    • KVM 中,网卡名称可能变为 ens3eth0 或其他类似的格式。

    在迁移过程中,由于底层虚拟化平台的差异,网卡名称发生了变化,而系统中的网络配置文件仍然使用的是旧的设备名称,导致虚拟机无法正确连接到网络。

    排查步骤

    1. 查看实际网卡名称

    通过执行 ip a 命令查看系统中的实际网卡名称。该命令输出中显示网卡名称为 ens3,而不是 VMware 中的 ens33

    ip a
    1. 检查 Netplan 配置文件

    Netplan 是 Ubuntu 系统中用于网络配置的工具。我们需要检查 Netplan 配置文件,确认是否仍然使用旧的设备名称。

    cat /etc/netplan/50-cloud-init.yaml

    如果文件中仍然使用的是旧的 ens33,而实际的设备名称是 ens3,这将导致无法应用正确的网络配置。

    解决方法

    为了修复这个网络问题,只需将 Netplan 配置文件中的网卡名称从 ens33 更改为实际的 ens3,然后重新应用网络配置即可。

    步骤 1:编辑 Netplan 配置文件

    打开 Netplan 配置文件进行编辑:

    sudo nano /etc/netplan/50-cloud-init.yaml

    将原配置:

    network:
      version: 2
      ethernets:
        ens33:
          dhcp4: true

    修改为:

    network:
      version: 2
      ethernets:
        ens3:
          dhcp4: true

    步骤 2:应用新的网络配置

    保存并关闭文件后,应用新的网络配置:

    sudo netplan apply

    步骤 3:检查网络是否恢复

    重新执行 ip a 命令,检查网络接口是否已成功获取到 IP 地址:

    ip a

    您应该可以看到 ens3 接口已成功获取到 IP 地址,网络恢复正常。