-
创建者:
虚拟的现实,上次更新时间:7月 02, 2025 需要 5 分钟阅读时间
1. DNS设置
1.1. 查看当前DNS配置
DNS 全局配合和网卡局部配置 systemd 239 中 systemd-resolve 已被重命名为 resolvectl
$ resolvectl status Global(全局配置) Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: stub Link 2 (enp1s0)(某网卡局部配置) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 8.8.8.8 DNS Servers: 8.8.8.8 8.4.4.8
1.2. 临时设置DNS
# vim /etc/resolv.conf nameserver 1.1.1.2 nameserver 1.0.0.2
1.3. 永久设置DNS
1.最简单的方法
使用resolvconf命令设置,通过此命令永久设置dns
# 1.安装resolvconf # apt install resolvconf # 2. 修改head文件(此文件由resolvconf生成) # vim /etc/resolvconf/resolv.conf.d/head nameserver 1.1.1.2 nameserver 1.0.0.2 # 4.配置shengxiao # resolvconf -u # 3.开机启动服务 systemctl enable --now resolvconf.service
注意:
- 修改完成后,必须通过 resolvconf -u 生效,此时会在 /etc/resolv.conf 中添加dns配置并生效。
- 生效后,通过 resolvectl status 查询不到此配置生效情况,但是通过 netplan apply 生效可在全局配置中找到。最终以 /etc/resolv.conf 中的dns配置生效为准。
2.非简单方法
修改/etc/netplan/目录下的yml文件
# 1.修改相关配置文件 # vim /etc/netplan/xxx.yml network: ethernets: enp1s0: dhcp4: true nameservers: addresses: [8.8.8.8, 8.4.4.8] version: 2 # 2.配置生效 # netplay apply
3.配置生效总结
netplay apply 应用后,resolvconf 和 netplan 的配置通过 resolvectl status 查到,但是只有 resolvconf 的配置会写入 /etc/resolv.conf。
$ resolvectl status Global(全局配置) Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: foreign Current DNS Server: 1.1.1.2 DNS Server: 1.0.0.2 Link 2 (enp1s0)(某网卡局部配置) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 8.8.8.8 DNS Servers: 8.8.8.8 8.4.4.8 $ cat /etc/resolv.conf nameserver 1.1.1.2 nameserver 1.0.0.2
2. 时间同步
Ubuntu 22.04 中
- timedatectl 替代了老旧的 ntpdate。默认情况下,timedatectl 在系统启动的时候会立刻同步时间,并在稍后网络连接激活后通过 socket 再次检查一次。
- timesyncd 替代了 ntpd 的客户端的部分。默认情况下 timesyncd 会定期检测并同步时间。它还会在本地存储更新的时间,以便在系统重启时做时间单步调整。
timesyncd 和 ntpd 区别:
- ntpd是步进式平滑的逐渐调整时间
- timesyncd是断点式更新时间,也就是时间不同会立即更新
# 1. 配置时间同步 # vi /etc/systemd/timesyncd.conf [Time] # 一个空格分隔的NTP服务器列表 #NTP= # 一个空格分隔的NTP服务器列表,用作备用NTP服务器 #FallbackNTP=ntp.ubuntu.com # 最大可接受的"root distance"秒数(最大误差),默认值为 5 秒 #RootDistanceMaxSec=5 # NTP消息的 最小/最大轮询间隔秒数 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048 # 2.查看时间同步 # timedatectl
3. 设置静态 IP 地址
3.1. 通过 netplan 配置静态 IP 地址
1、先通过 ip address和 ip link查看当前的 IP 地址情况,然后备份已有的 netplan 配置文件
ip address ip link ls /etc/netplan/ sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all_backup.yaml sudo nano /etc/netplan/01-network-manager-all.yaml
2、参照下面的格式配置静态 IP 地址
network: version: 2 renderer: networkd ethernets: ens18: dhcp4: no addresses: - 192.168.1.22/24 gateway4: 192.168.1.101 nameservers: addresses: [8.8.8.8, 8.8.4.4]
如果需要配置多个 IP 地址,可以参考下面的内容
network: version: 2 renderer: networkd ethernets: ens18: dhcp4: no addresses: - 192.168.1.22/24 - 192.168.1.23/24 - 192.168.1.24/24 routes: - to: default via: 192.168.1.101 nameservers: addresses: [8.8.8.8, 8.8.4.4]
DHCP 的配置文件可以参考
# This is the network config written by 'subiquity' network: ethernets: eno1: dhcp4: true version: 2
4、保存后重启并应用网络配置
sudo netplan try sudo netplan apply sudo systemctl restart systemd-networkd
系统处理 netplan 配置文件的逻辑
- 合并配置:如果有两个配置文件并且分别配置了不同的网络(例如一个配置一个接口,另一个配置不同的接口),则两个配置将同时生效。
- 冲突的配置:如果多个 YAML 文件配置相同的接口,但具有不同的设置,则按字典顺序排在最后配置文件生效。如果 01-config.yaml 和 02-config.yaml都配置了 eth0 接口,但具有不同的 IP 地址,则 最终 02-config.yaml 的配置生效
3.2. 利用命令方式配置静态 IP
通过命令配置静态 IP 的方式需要对应的系统组件
sudo apt update sudo apt install network-manager nmcli con show sudo nmcli con modify 'Wired connection 1' ipv4.addresses 192.168.1.22/24 sudo nmcli con modify 'Wired connection 1' ipv4.gateway 192.168.1.101 sudo nmcli con modify 'Wired connection 1' ipv4.dns "8.8.8.8,8.8.4.4" sudo nmcli con modify 'Wired connection 1' ipv4.method manua sudo nmcli connection modify 'Wired connection 1' ip4 192.168.1.22/24 gw4 192.168.1.101 ipv4.dns 8.8.8.8 sudo nmcli con down 'Wired connection 1' sudo nmcli con up 'Wired connection 1' nmcli con show 'Wired connection 1' nmcli con show 'Wired connection 1' | grep ipv4.addresses
4. 安全基线
4.1. 设置过期时间
# vim /etc/login.defs PASS_MAX_DAYS 90 PASS_MIN_DAYS 0 PASS_WARN_AGE 10
密码长度已不在此处,而是在相关pam中进一步设置。
4.2. 设置密码复杂度、长度、过期时间、密码尝试次数
通过 pwquality 控制,Ubuntu 22.04 默认没有此模块,需要提前安装。
# 安装libpam-pwquality apt install libpam-pwquality # 设置密码复杂度 vim /etc/security/pwquality.conf minlen = 8 dcredit = -1 lcredit = -1 ocredit = -1 ucredit = -1 # 设置密码尝试3次 vim /etc/pam.d/common-password password requisite pam_pwquality.so try_first_pass retry=3 # 禁止重复使用旧密码 vim /etc/pam.d/common-password password [success=1 default=ignore] pam_unix.so obsecure use_authtok try_first_passs yescrypt remember=5
4.3. 防暴力破解
Ubuntu 22.04 中,pam_tally2 已被移除,可以使用 pam_faillock 代替。
# faillock 包含在libpam-modules中,无需安装 # faillock参数配置 # grep -v '#' /etc/security/faillock.conf dir = /var/run/faillock audit silent deny = 3 fail_interval = 900 unlock_time = 120
关于faillock的配置,涉及以下两个pam文件
- /etc/pam.d/common-auth
- /etc/pam.d/common-account
# 用户账户锁定时连续身份验证失败必须达到的间隔长度默认为 900 秒 # 用户账户锁定时间默认为 600 秒, root用户不受管控 # vim /etc/pam.d/common-auth auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900 auth [success=1 default=ignore] pam_unix.so nullok auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900 auth requisite pam_deny.so auth required pam_permit.so auth optional pam_cap.so # vim /etc/pam.d/common-account account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so account requisite pam_deny.so account required pam_permit.so account required pam_faillock.so
5. Selinux
Ubuntu22.04 默认没有安装 Selinux,进一步操作:
# 1.安装selinux apt update apt install policycoreutils selinux-utils selinux-basics # 2.启动selinux selinux-activate # 3.enforce selinux,需重启生效 selinux-config-enforcing # 4.查看selinux 状态 setstatus SELinux status: disabled # 5.关闭selinux,需重启生效 vim /etc/selinux/config SELINUX=enforcing 或 SELINUX=disabled # 6.临时设置selinux setenforce 0 或 setenforce 1
6. 防火墙
Ubuntu22.04 默认使用 ufw 管理防火墙,默认处于禁用状态。
# 1.安装ufw apt install ufw # 2.防火墙状态 ufw status verbose
6.1. 防火墙常用配置
sudo ufw default allow # 預設允許 sudo ufw default deny # 預設封鎖 sudo ufw allow ssh sudo ufw allow 22 sudo ufw allow 80 # 允許 80 sudo ufw allow 443 # 允許 443 sudo ufw deny 3389 # 封鎖 3389 sudo ufw deny 21 # 封鎖 21 sudo ufw allow 6000:6007/tcp # 允許 TCP 6000~6007 sudo ufw allow 6000:6007/udp # 允許 UDP 6000~6007 sudo ufw allow from 192.168.11.10 # 允許 192.168.11.10 的所有連線 sudo ufw allow from 192.168.11.0/24 # 允許 192.168.11.1~192.168.11.255 的所有連線 sudo ufw deny from 192.168.11.4 # 封鎖 192.168.11.4 的所有連線 sudo ufw status numbered sudo ufw enable # 啟用防火牆 sudo ufw disable # 停用防火牆
7. 内核
在做内核参数优化时,提示报错 sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory。Ubuntu22.04 使用 5.15.0-60-generic,经过进一步了解到从4.10内核开始,官方修改了时间戳的生成机制,在此我们参考小米技术的总结的建议:
- tcp_tw_recycle 选项在4.10内核之前还只是不适用于NAT/LB的情况(其他情况下,我们也非常不推荐开启该选项),但4.10内核后彻底没有了用武之地,并且在4.12内核中被移除.
- tcp_tw_reuse 选项仍然可用。在服务器上面,启用该选项对于连入的TCP连接来说不起作用,但是对于客户端(比如服务器上面某个服务以客户端形式运行,比如nginx反向代理)等是一个可以考虑的方案。
- 修改TCP_TIMEWAIT_LEN是非常不建议的行为。
8. 跨版本升级
以下内容基于从 20.04 升级到 22.04 ,当然 22.04 升级到 24.04 也类似
1、查询系统版本和磁盘空间
> lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal df -H
2、更新现有的组件并清理不必要的组件,安装升级所需的组件
sudo apt update -y && sudo apt upgrade -y sudo apt dist-upgrade sudo apt autoremove sudo apt install update-manager-core sudo reboot
3、重新开机后确认是否有对应升级的版本
> sudo do-release-upgrade --check-dist-upgrade-only Checking for a new Ubuntu release There is no development version of an LTS available. To upgrade to the latest non-LTS development release set Prompt=normal in /etc/update-manager/release-upgrades. sudo do-release-upgrade -d --allow-third-party
-d是指升级到最新的开发版,即使是 LTS 版本都没开发出来。
参照升级提示一路完成系统升级并重启
4、清理升级后不必要的组件
> lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy sudo apt update -y && sudo apt upgrade -y sudo apt --purge autoremove sudo apt autoclean
- 无标签
添加评论