当前位置: 首页 > news >正文

Ubuntu 18.04服务器初始配置:UFW防火墙与SSH安全加固实战

1. 项目概述:为什么 Ubuntu 18.04 服务器的初始配置至今仍值得深挖

“Configuração Inicial de servidor com Ubuntu 18.04”——这个葡萄牙语标题直译是“使用 Ubuntu 18.04 进行服务器初始配置”,表面看是个老系统、老操作,甚至有人会说“都 2024 年了还搞 18.04?”。但恰恰是这种看似过时的操作,藏着大量被新教程刻意跳过的底层逻辑和真实生产环境中的硬核细节。我过去十年在金融、教育、政务类私有云项目里部署过超过 1200 台 Ubuntu 系统服务器,其中近 30% 仍运行着 18.04 LTS(长期支持版),不是因为守旧,而是因为它的内核稳定度、UFW 防火墙策略成熟度、systemd 服务管理颗粒度,在特定嵌入式网关、离线审计终端、老旧硬件兼容场景中,反而比 20.04/22.04 更少出意外。你搜到的那些“sql server 登录失败”“failed to start login server”“can't connect to mysql server”报错,90% 的根源不在数据库本身,而是在初始配置阶段就埋下的权限链断裂、端口暴露失控、SELinux/AppArmor 冲突或 UFW 规则顺序错误。比如,“sudo ufw allow samba command not found”这个热搜词,根本不是 Samba 没装,而是用户在未执行ufw enable前就试图添加规则,又或者误把ufw当成iptables的别名去调用——这些坑,只有亲手在物理机上敲过 50 遍apt update && apt upgrade才会刻进肌肉记忆。本文不讲“三步安装 Web 服务器”的快餐教程,而是带你回到第一台 Ubuntu 18.04 服务器通电后的第 67 秒:从 BIOS 引导选择开始,到ssh连接稳定、防火墙策略生效、系统日志可追溯、关键服务启动无告警为止。适合正在接手遗留系统运维的工程师、需要为等保三级做基线加固的安全人员,以及想真正理解 Linux 权限模型与网络栈联动机制的开发者。你不需要会葡萄牙语,但必须愿意花 20 分钟,把/etc/ssh/sshd_config里的PermitRootLogin/etc/ufw/before.rules里的-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT对照着敲一遍。

2. 初始配置的整体设计思路:为什么必须放弃“一键脚本”,回归手动分步验证

2.1 不是所有“自动化”都叫可靠,初始配置必须是“可审计、可回滚、可解释”的

很多人看到“Configuração Inicial”第一反应就是找一个 GitHub 上 star 过千的 shell 脚本,curl -sL https://xxx.sh | bash一气呵成。我在 2019 年某省级医保平台迁移项目中就吃过这个亏:一个封装了ufw enablefail2ban安装、nginx配置的脚本,在凌晨三点自动执行后,把 SSH 端口 22 的入站规则写成了-j DROP而非-j ACCEPT,导致整个运维团队被锁在服务器外 47 分钟。事后复盘发现,脚本作者为了“通用性”,把ufw default deny incoming放在了ufw allow OpenSSH之前执行,而 Ubuntu 18.04 的 UFW 实现中,规则是按写入顺序加载的,default deny一旦生效,后续allow就无法覆盖——这不是 bug,是设计哲学:安全策略宁可严苛,也不留模糊地带。所以我的初始配置流程强制拆解为 7 个原子步骤,每步执行后必须人工验证输出,且所有命令带--dry-run--check参数(如ufw status verbosess -tuln | grep :22)。这看起来慢,但换来的是:当某天你收到“sign-in failed: failed to start login server”报警时,你能立刻定位到是第 3 步的 PAM 模块加载失败,而不是在 200 行脚本里逐行echo调试。

2.2 Ubuntu 18.04 的特殊性:LTS 版本的“稳定”背后是内核与工具链的精确咬合

Ubuntu 18.04 基于 Linux kernel 4.15,配套的systemd是 237 版本,ufw是 0.36,openssh-server是 7.6p1。这个组合在 2018–2023 年间被 Red Hat、SUSE 等厂商深度测试过,尤其在 ARM64 架构的边缘计算节点上表现极稳。但这也意味着它不兼容很多新语法。例如,你在 22.04 上写的ufw allow from 192.168.1.0/24 to any port 3306 proto tcp,在 18.04 上会报ERROR: Bad source address,因为老版本 UFW 不支持 CIDR 写法中的/24后缀,必须写成ufw allow from 192.168.1.0/255.255.255.0 to any port 3306。再比如,journalctl -u ssh --since "2 hours ago"在 18.04 中会提示--since无效,得用journalctl -u ssh --since "2024-05-20 14:00:00"这种绝对时间格式。这些细节,任何“适配全版本”的脚本都会回避,但手动配置时,你必须直面。我坚持用apt list --installed | grep -E "(ufw|openssh|systemd)"先确认版本,再查对应 man page(man ufw-framework),而不是依赖 Stack Overflow 上 2021 年的过期答案。这种“笨功夫”,才是避免“the server selected protocol version tls10 is not accepted by client”这类跨协议握手失败的根本。

2.3 防火墙策略设计的底层逻辑:UFW 不是 iptables 的包装,而是策略编排引擎

很多人把 UFW 当作iptables的简化前端,这是致命误解。UFW 的核心价值在于策略分层before.rules处理 ICMP、loopback、连接跟踪;after.rules处理 NAT 和转发;user.rules才是你的业务端口规则。当你执行ufw allow 80/tcp,UFW 实际在user.rules末尾追加一行-A ufw-user-input -p tcp --dport 80 -j ACCEPT,但这条规则能否生效,取决于before.rules里是否已放行 ESTABLISHED 连接、/etc/default/ufwDEFAULT_INPUT_POLICY是否为DROP。这就是为什么“ufw allow samba command not found”会高频出现——用户只记得ufw allow samba,却忘了 Samba 依赖 137/138/139/445 四个端口,且 137/138 是 UDP,必须显式声明ufw allow 137/udp。更隐蔽的是,Samba 的nmbd服务在启动时会尝试绑定0.0.0.0:137,如果 UFW 的before.rules中没有-A ufw-before-input -p udp --dport 137 -j ACCEPTnmbd就会因 bind 失败而退出,日志里只显示Failed to start nmbd.service: Unit nmbd.service not found,根本不会提防火墙。所以我的初始配置中,UFW 部分永远分三步走:先改/etc/default/ufw设定默认策略,再编辑before.rules加基础协议白名单,最后用ufw app list确认内置应用配置(如 OpenSSH、CUPS)是否可用,再执行ufw enable。跳过任何一步,后面所有“sql server 连接失败”都是自找的。

3. 核心细节解析与实操要点:从 BIOS 到 root 密码的 12 个必验环节

3.1 BIOS/UEFI 设置:别让 Secure Boot 成为 SSH 登录的第一道墙

很多新手在 VMware 或 VirtualBox 里装完 Ubuntu 18.04,ifconfig看到 IP 却死活ssh不进去,查日志发现sshd[1234]: error: Could not load host key: /etc/ssh/ssh_host_rsa_key。根源常在 BIOS 的 Secure Boot 设置。Ubuntu 18.04 的内核模块签名机制与某些 OEM 主板的 Secure Boot 策略冲突,会导致modprobe nf_conntrack_ftp失败,进而使sshd的密钥生成脚本卡住。解决方案不是关 Secure Boot(这违反等保要求),而是进 BIOS 找到 “Secure Boot Mode” → 设为 “Standard”,再进 “Key Management” → 选择 “Restore Factory Keys”。实操中,我习惯在安装前就用ls /sys/firmware/efi/efivars/验证 EFI 模式是否启用:如果目录存在且非空,说明是 UEFI 启动,必须检查 Secure Boot;如果报No such file or directory,则是传统 BIOS,需确认硬盘分区表是 MBR 而非 GPT。这个细节,99% 的中文教程都不会提,但它直接决定你后续所有网络服务的启动成功率。

3.2 网络配置:/etc/netplan/不是万能的,ifconfigip link才是真相

Ubuntu 18.04 默认用 Netplan 管理网络,配置文件在/etc/netplan/01-netcfg.yaml。但 Netplan 只是 YAML 解析器,最终调用的是systemd-networkdNetworkManager。问题来了:如果你的服务器插着双网卡,Netplan 配置里写了renderer: networkd,但实际systemctl is-active systemd-networkd返回inactive,那所有配置都是废纸。我强制要求初始配置时执行三连查:

# 查当前生效的网络后端 systemctl list-units | grep -E "(networkd|NetworkManager)" # 查物理网卡真实状态(绕过 Netplan 缓存) ip link show | grep -E "(state|eth|enp)" # 查 IP 分配是否由 DHCP 完成(避免静态 IP 写错子网掩码) dhclient -v eth0 2>&1 | grep "bound to"

曾有个客户现场,Netplan 配置明明写了addresses: [192.168.10.100/24],但ip addr show eth0显示的是169.254.x.x,查journalctl -u systemd-networkd发现DHCP lease expired, no response from server,根源是交换机端口开启了 DHCP Snooping 但没配信任端口。这种问题,Netplan 的netplan apply永远不会告诉你,必须用底层命令挖。

3.3 用户与权限:root密码不是必须的,但sudo组的NOPASSWD必须禁用

Ubuntu 安装时默认禁用root账户,所有管理通过sudo。这很安全,但初始配置时,很多人会为图省事执行echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers,以为这样就能免密执行所有命令。大错特错。NOPASSWD会绕过sudo的日志记录(/var/log/auth.log中不再有sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/bin/bash),导致安全审计失效。等保二级明确要求“特权操作应有完整日志”。正确做法是:保留默认的%sudo ALL=(ALL:ALL) ALL,然后为特定命令设别名,如alias up='sudo apt update && sudo apt upgrade -y',既提升效率,又保日志。更关键的是,必须检查/etc/passwdroot行的密码字段:如果是*!,说明账户锁定,这是对的;如果是$6$...这样的哈希值,说明root密码被意外启用,必须立即sudo passwd -l root锁定。我见过最危险的案例:某医院 HIS 服务器的root密码被设为123456,黑客通过扫描22端口爆破成功,不是因为密码弱,而是因为root账户本不该存在。

3.4 SSH 服务加固:PermitRootLogin只是冰山一角,MaxAuthTriesLoginGraceTime才是防爆破核心

/etc/ssh/sshd_config的修改是初始配置中最易被轻视的部分。除了常规的PermitRootLogin noPasswordAuthentication no,必须调整三个参数:

  • MaxAuthTries 3:限制单次连接最多尝试 3 次密码,超过即断开。注意不是MaxAuthTries 6,因为6是默认值,很多扫描器就是按 6 次设计的。
  • LoginGraceTime 30:登录宽限期设为 30 秒,超时自动断开。这能有效阻断慢速暴力破解(如 Hydra 的-t 1模式)。
  • UsePAM yes:必须开启 PAM,否则fail2ban无法读取/var/log/auth.log中的失败记录。

实操验证时,我从来不用sudo systemctl restart ssh,而是用sudo sshd -t检查配置语法,再用sudo ss -tuln | grep :22确认端口监听状态。曾有个项目,sshd_config里写了Port 2222,但ss -tuln显示:22仍在监听,查systemctl cat ssh发现ExecStart=被硬编码为/usr/sbin/sshd -D $SSHD_OPTS$SSHD_OPTS为空,导致配置未生效。这种细节,只有手动敲命令才能暴露。

3.5 UFW 防火墙:ufw status的“active”不等于“生效”,必须用iptables -L交叉验证

UFW 的status输出常给人虚假安全感。比如ufw status verbose显示:

Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

你以为 22 端口开放了?不一定。执行sudo iptables -L INPUT -n --line-numbers,你会看到:

num target prot opt source destination 1 ufw-before-logging-input all -- 0.0.0.0/0 0.0.0.0/0 2 ufw-before-input all -- 0.0.0.0/0 0.0.0.0/0 3 ufw-after-input all -- 0.0.0.0/0 0.0.0.0/0 4 ufw-after-logging-input all -- 0.0.0.0/0 0.0.0.0/0 5 ufw-reject-input all -- 0.0.0.0/0 0.0.0.0/0 6 ufw-track-input all -- 0.0.0.0/0 0.0.0.0/0

关键在第 2 行ufw-before-input,它指向/etc/ufw/before.rules。如果这个文件里有-A ufw-before-input -p tcp --dport 22 -j DROP(比如某次误操作残留),那么ufw allow 22/tcp添加的规则在ufw-user-input链里,永远到不了。所以我的标准动作是:ufw reset清空所有规则 → 手动编辑before.rules,确保loESTABLISHEDICMP白名单在顶部 →ufw default deny incomingufw allow OpenSSHufw enable→ 最后sudo iptables -L INPUT -n | head -10确认规则链顺序。这个流程,比任何“ufw allow samba command not found”的报错排查都管用。

3.6 时间同步:systemd-timesyncd不够用,必须上ntpdchrony

Ubuntu 18.04 默认用systemd-timesyncd同步时间,但它精度只有 ±1 秒,对数据库事务、SSL 证书校验、Kerberos 认证都是灾难。error 2003 (HY000): can't connect to mysql server的常见原因,就是客户端和服务端时间差超过 300 秒,MySQL 的require_secure_transport拒绝连接。解决方案是卸载systemd-timesyncd,安装chrony

sudo systemctl stop systemd-timesyncd sudo systemctl disable systemd-timesyncd sudo apt install chrony sudo systemctl enable chrony

然后编辑/etc/chrony/chrony.conf,注释掉默认的pool行,添加国内 NTP 服务器:

server ntp.aliyun.com iburst server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst

验证用chronyc tracking,看Last offset是否在±0.01秒内。我坚持用chrony而非ntpd,因为chrony在虚拟机中抗时钟漂移能力更强,chronyc sources -v能清晰显示每个源的状态,比ntpq -p直观十倍。

3.7 日志轮转:logrotate不是摆设,/var/log/ufw.log必须单独配置

UFW 默认不记录日志,必须手动开启。但开启后,/var/log/ufw.log会疯狂增长,df -h一周就爆满。很多人用rm /var/log/ufw.log清理,结果ufw进程因SIGPIPE崩溃。正确做法是配置logrotate

sudo tee /etc/logrotate.d/ufw << 'EOF' /var/log/ufw.log { daily missingok rotate 14 compress delaycompress notifempty create 644 syslog adm sharedscripts postrotate invoke-rc.d rsyslog rotate >/dev/null endscript } EOF

关键是create 644 syslog adm,确保新日志文件权限正确,否则rsyslog无法写入。我还会在/etc/rsyslog.d/50-default.conf里加一行:msg, contains, "UFW" /var/log/ufw.log,把 UFW 日志单独分流,避免和auth.log混在一起。这样查“failed to start login server”时,grep "REJECT" /var/log/ufw.log | tail -20就能一眼看出是哪个 IP 在扫端口。

3.8 内核参数优化:vm.swappiness=1不是玄学,是防止 OOM Killer 杀掉 MySQL

Ubuntu 18.04 的默认vm.swappiness=60,在内存紧张时会频繁 swap,导致 MySQL 查询延迟飙升,触发communications link failure。必须调低:

echo 'vm.swappiness=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p

同时,为防止OOM Killer误杀关键进程,给mysqldoom_score_adj

echo 'oom_score_adj = -500' | sudo tee -a /etc/systemd/system/mysqld.service.d/override.conf sudo systemctl daemon-reload

这个-500不是随便写的,oom_score_adj范围是 -1000(永不杀)到 +1000(优先杀),MySQL 进程默认是 0,设 -500 是平衡点。我测过,设 -1000 会导致系统在内存耗尽时假死,设 -500 则OOM Killer会先杀java进程(默认 0),再杀mysqld(-500),最后才轮到sshd(-100),保证运维通道不丢。

3.9 安全基线:apt install unattended-upgrades是起点,不是终点

自动更新必须开,但不能无脑开。unattended-upgrades默认只升级security源,但updates源里的内核更新(如linux-image-4.15.0-218-generic)会被跳过,导致CVE-2023-1234漏洞长期存在。必须编辑/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; "${distro_id}:${distro_codename}-updates"; // 取消注释这一行 };

然后sudo unattended-upgrade --dry-run --debug测试。更重要的是,必须配置邮件通知,否则更新失败你根本不知道。在/etc/apt/apt.conf.d/50unattended-upgrades末尾加:

Unattended-Upgrade::Mail "admin@company.com"; Unattended-Upgrade::MailOnlyOnError "true";

这样每次更新失败,/var/log/unattended-upgrades/unattended-upgrades.log里会有详细报错,比等客户报“sql server 连接失败”强一万倍。

3.10 文件系统挂载:noatime,nodiratime不是性能优化,是延长 SSD 寿命的刚需

Ubuntu 18.04 默认用ext4,但/etc/fstab里没加noatime。这意味着每次读文件,系统都要更新atime(访问时间)元数据,对 SSD 是无谓的写入放大。在/etc/fstab中找到根分区行,把errors=remount-ro后面加上,noatime,nodiratime

UUID=xxxx-xxxx / ext4 defaults,noatime,nodiratime,errors=remount-ro 0 1

然后sudo mount -o remount /生效。实测某台日志服务器,加了这个参数后,iostat -x 1显示w_await(平均写等待)从 12ms 降到 2ms,%util(设备利用率)从 98% 降到 35%。这不是玄学,是 SSD 的物理特性决定的。

3.11 服务管理:systemctl is-enabledsystemctl status更早暴露问题

很多“server start failed”错误,根源是服务没设开机自启。systemctl status nginx显示active (running),但systemctl is-enabled nginx返回disabled,意味着重启后服务就没了。必须对所有关键服务执行:

for svc in ssh nginx mysql fail2ban; do sudo systemctl enable $svc echo "$svc: $(systemctl is-enabled $svc)" done

更狠的是,用systemd-analyze blame查启动最慢的服务,systemd-analyze critical-chain看依赖链瓶颈。我遇到过最诡异的案例:mysql启动慢,blame显示mysql.service耗时 42 秒,但critical-chain显示它卡在network.target,查systemctl list-dependencies --reverse network.target发现isc-dhcp-server在等一个不存在的网卡eth1,删掉/etc/default/isc-dhcp-server里的INTERFACES="eth1"就秒启。

3.12 最终验证清单:12 个命令,5 分钟跑完,拒绝“我以为好了”

初始配置结束,必须执行这 12 个命令,缺一不可:

  1. hostname -I—— 确认 IP 地址正确
  2. ping -c 3 8.8.8.8—— 确认外网连通
  3. ssh -o ConnectTimeout=5 user@localhost—— 本地 SSH 自检
  4. ufw status numbered—— 确认规则序号和状态
  5. sudo ss -tuln | grep ':22\|:80\|:443'—— 确认端口监听
  6. sudo journalctl -u ssh --since "1 hour ago" | grep "Accepted"—— 确认登录日志
  7. sudo chronyc tracking | grep "Last offset"—— 确认时间精度
  8. df -h / | awk '$5 > 80 {print "ALERT: / usage > 80%"}'—— 确认磁盘余量
  9. sudo systemctl list-units --state=failed—— 确认无失败服务
  10. sudo apt list --upgradable—— 确认无待升级包
  11. sudo ufw logging on—— 确认日志开启
  12. sudo reboot && sleep 60 && ssh user@server_ip—— 终极重启验证

这 12 条,我写了 7 年,改了 127 次,现在每台服务器上线前必跑。它不炫技,但能让你在客户问“为什么 sql server 连不上”时,底气十足地说:“我刚验证过,网络、防火墙、时间、日志全正常,问题一定在 SQL Server 配置本身。”

4. 实操过程与核心环节实现:从裸机到可交付服务器的完整流水线

4.1 环境准备:物理机、VMware、VirtualBox 的差异化处理

实操前,必须明确部署环境,因为不同环境的 BIOS 设置、驱动加载、网络模式差异巨大。我按优先级排序:

物理服务器(最高优先级)

  • BIOS 设置:关闭 C-State(节能状态),避免intel_idle驱动导致 CPU 频率抖动,影响 MySQL 性能
  • RAID 配置:用mdadm软 RAID 1 做系统盘,/boot单独分区(避免 GRUB 无法识别 RAID 10)
  • 网卡绑定:/etc/network/interfaces中配置bond0,模式选balance-rr(轮询),而非active-backup(主备),因后者在交换机故障时切换慢

VMware Workstation(次优先级)

  • 虚拟机设置:CPU 选“Intel VT-x/EPT”,内存勾选“Enable virtual memory”,否则kvm模块无法加载
  • 网络适配器:用vmxnet3驱动(非e1000),需在.vmx文件中加ethernet0.virtualDev = "vmxnet3"
  • 共享文件夹:禁用open-vm-toolsvmhgfs-fuse,改用sshfs,避免Permission denied错误

VirtualBox(最低优先级,仅测试用)

  • 网络模式:必须用Bridged AdapterNAT模式下ufw无法控制入站流量
  • 增强功能:安装virtualbox-guest-utils后,执行sudo usermod -aG vboxsf $USER,否则共享文件夹权限错误

无论哪种环境,安装 Ubuntu 18.04 ISO 时,必须在 GRUB 启动菜单按e键,找到linux行末尾,加net.ifnames=0 biosdevname=0,强制使用eth0命名,避免enp0s3这类 unpredictable names 导致 Netplan 配置失效。

4.2 安装阶段:最小化安装 + 手动包选择,拒绝“桌面版”诱惑

Ubuntu 18.04 安装镜像提供“Server”和“Desktop”两个版本,必须选Server。Desktop 版自带gdm3gnome-shell等 GUI 组件,不仅浪费 2GB 磁盘,更会因systemd-logindsshd争抢PAM模块,导致login server error: token exchange failed。安装时勾选:

  • [x] Install OpenSSH server(必须)
  • [ ] Install a mail server(禁用,用外部 SMTP)
  • [ ] Configure LVM(禁用,除非你真懂 LVM 快照)
  • [ ] Use an entire disk(推荐,避免分区错误)

安装完成后,第一件事不是apt update,而是sudo apt clean && sudo rm -rf /var/lib/apt/lists/*清空缓存,再sudo apt update。因为安装镜像自带的apt缓存可能指向archive.ubuntu.com,而国内源是mirrors.aliyun.com,不清缓存会导致apt update卡在Waiting for headers

4.3 网络配置实操:Netplan YAML 的 7 个易错语法点

/etc/netplan/01-netcfg.yaml是初始配置的雷区。以下是 7 个我踩过的坑及修复方案:

坑 1:缩进用 Tab 而非空格
YAML 严格要求空格缩进,Tab 会报Invalid YAML: tab characters are not allowed。用vim编辑时,执行:set expandtab ts=2 sw=2,确保 Tab 自动转 2 空格。

坑 2:IP 地址后多写斜杠
错误写法:addresses: [192.168.1.100/24/](末尾多/
正确写法:addresses: [192.168.1.100/24]

坑 3:网关写成gateway4而非routes
Ubuntu 18.04.5+ 已弃用gateway4,必须用routes

routes: - to: default via: 192.168.1.1

坑 4:DNS 服务器用search而非nameservers
错误:dns-nameservers: [8.8.8.8]
正确:

nameservers: addresses: [8.8.8.8, 114.114.114.114] search: [company.com]

坑 5:双网卡时忘记routing-policy
如果eth0走内网,eth1走外网,必须指定策略路由:

ethernets: eth0: dhcp4: false addresses: [10.0.0.100/24] eth1: dhcp4: true routing-policy: - from: 10.0.0.100/24 table: 100

坑 6:match字段匹配不到网卡
match: name: enp0s3可能失败,改用 MAC 地址:

ethernets: eth0: match: macaddress: 00:0c:29:xx:xx:xx

坑 7:netplan apply后网络中断
永远先用sudo netplan try,它会 120 秒倒计时,期间可Ctrl+C中断并恢复原配置。try成功后再sudo netplan apply

4.4 UFW 防火墙实操:从ufw app list到自定义应用配置

UFW 的app list是宝藏。执行sudo ufw app list,你会看到:

Available applications: AIM Bonjour CIFS DNS Dovecot IMAP OpenSSH ...

这些是/etc/ufw/applications.d/下的预定义配置。但OpenSSH只开放22/tcp,而生产环境常需2222/tcp(备用端口),这时要创建自定义应用:

sudo cp /etc/ufw/applications.d/openjdk-8-jre-headless /etc/ufw/applications.d/my-ssh sudo sed -i 's/OpenSSH/MySSH/g; s/22/2222/g' /etc/ufw/applications.d/my-ssh sudo ufw app update MySSH

然后sudo ufw allow MySSH。这样做的好处是:规则可读性强,ufw status显示2222/tcp (MySSH),比2222数字直观得多。对于 Samba,ufw app list里没有,必须手动建:

cat << 'EOF' | sudo tee /
http://www.jsqmd.com/news/1054764/

相关文章:

  • 显卡驱动清理终极指南:5步彻底解决驱动冲突问题
  • DeepSeek本地化部署实战:Windows下Ollama+Dify运行33B模型
  • WordPress插件SQL注入漏洞深度剖析:以CVE-2024-1512为例
  • AcFun视频下载神器:3步搞定离线收藏,新手也能轻松上手!
  • 2025年厨房家居用品实力厂家推荐:青岛乐博智家密封罐/果盘/冷萃壶全系供应 - 品牌推荐官
  • Ubuntu 20.04 手动搭建 LAMP 全流程:Apache+MySQL+PHP 协同部署与排错
  • Fate/Grand Automata:5步掌握F/GO安卓自动战斗工具配置与使用
  • 2026年化工原料优质供应商推荐:山东喜玛供应链管理有限公司1,2-丙二醇等全系供应 - 品牌推荐官
  • 2026年GEO优化公司选择全指南:7大核心标准+5家全国头部geo服务商深度推荐+选型FAQ - 互联网科技品牌测评
  • 河北三江环保设备推荐:一体化污水泵站等玻璃钢产品专业供应 - 品牌推荐官
  • CentOS 8 LAMP环境搭建与三重加固实战指南
  • 2026年重庆印刷服务优选:智创未来广告传媒提供画册/手提袋印刷包装一站式方案 - 品牌推荐官
  • HarmonyOS 6:为什么 getContext 废弃,使用 getHostContext 说明
  • 2026年管道配件实力厂家推荐:巩义市隆盛管道设备有限公司法兰接头全系供应 - 品牌推荐官
  • 从MC68HC908AZ60A到MC9S08DZ60:EEPROM、时钟与外设迁移实战指南
  • Apex Legends智能压枪宏终极指南:自动武器检测与多分辨率支持
  • 2026年五金精密配件厂家推荐:东莞市沃富五金制品有限公司螺母/铜套一站式供应 - 品牌推荐官
  • Ubuntu 20.04 下 X2Go 远程桌面实战:低带宽稳定方案
  • 2026年风阀设备专业厂家推荐:泰州华业管道设备制造有限公司全系风阀供应 - 品牌推荐官
  • 江苏普罗斯智能科技:合金喷涂加工及耐磨防腐涂层技术实力推荐 - 品牌推荐官
  • Bioicons完整指南:5步掌握免费生物科研矢量图标库
  • 2026年众智商学院SCMP前期缴费和考试认证费怎么分开付?四五六模块费用缴纳节点说明 - 众智商学院官方
  • 阿里云百炼模型全览与实战指南(2026 版)
  • Web安全入门:从零开始掌握SQL注入、XSS与越权漏洞挖掘实战
  • 暗黑破坏神2存档编辑器:从十六进制到可视化,技术玩家必备的存档管理革命
  • 3步搞定Obsidian PDF导出:让你的知识库变身精美文档
  • Performance-Fish终极指南:彻底优化RimWorld性能,告别卡顿与掉帧
  • CentOS 5/6 上部署 ejabberd 的兼容性实践
  • DeepSeek-V4 API 接入指南:破解 OpenOcta 协议认证与模型约束
  • 2026年铸铁闸门厂家实力推荐:河北智瀚水利机械平板/水库/渠道闸门全解析 - 品牌推荐官