版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

DNS设置

信息
https://learnubuntu.com/change-dns-server/

查看当前DNS配置

DNS 全局配合和网卡局部配置 systemd 239 中 systemd-resolve 已被重命名为 resolvectl

代码块
languagebash
$ 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

临时设置DNS

代码块
languagebash
# vim /etc/resolv.conf
nameserver 1.1.1.2
nameserver 1.0.0.2

永久设置DNS

1.最简单的方法

使用resolvconf命令设置,通过此命令永久设置dns

代码块
languagebash
# 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文件

代码块
languagebash
# 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


信息
注意:由于此配置是针对enp1s0网卡,因此dns只针对网卡局部生效。另外通过 netplay apply 生效后,dns配置不会加载到 /etc/resolv.conf 中。

3.配置生效总结

netplay apply 应用后,resolvconf 和 netplan 的配置通过 resolvectl status 查到,但是只有 resolvconf 的配置会写入 /etc/resolv.conf

代码块
languagebash
$ 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

时间同步

Ubuntu 22.04 中

  • timedatectl  替代了老旧的 ntpdate。默认情况下,timedatectl 在系统启动的时候会立刻同步时间,并在稍后网络连接激活后通过 socket 再次检查一次。
  • timesyncd 替代了 ntpd 的客户端的部分。默认情况下 timesyncd 会定期检测并同步时间。它还会在本地存储更新的时间,以便在系统重启时做时间单步调整。

timesyncd  和 ntpd 区别:

  • ntpd是步进式平滑的逐渐调整时间
  • timesyncd是断点式更新时间,也就是时间不同会立即更新
信息
注意:断点式更新会对某些服务产生影响,所以在生产环境要慎用!


代码块
languagebash
# 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

设置静态 IP 地址

1、通过

通过 netplan 配置静态 IP 地址

1、先通过 地址,先通过  

Highlight
ip address

和 

Highlight
ip link

2、 查看当前的 IP 地址情况,然后备份已有的 netplan 配置文件

代码块
languageshell
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

3、参照下面的格式配置静态 2、参照下面的格式配置静态 IP 地址

代码块
languageyaml
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 地址,可以参考下面的内容

代码块
languageyaml
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 的配置文件可以参考

代码块
languageyaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    eno1:
      dhcp4: true
  version: 2

5、保存后重启并应用网络配置4、保存后重启并应用网络配置

代码块
languageshell
sudo netplan try
sudo netplan apply
sudo systemctl restart systemd-networkd

系统处理 netplan 配置文件的逻辑

  • 合并配置:如果有两个配置文件并且分别配置了不同的网络(例如一个配置一个接口,另一个配置不同的接口),则两个配置将同时生效。
  • 冲突的配置:如果多个 YAML 文件配置相同的接口,但具有不同的设置,则按字典顺序排在最后配置文件生效。如果 01-config.yaml 和 02-config.yaml都配置了 eth0 接口,但具有不同的 IP 地址,则 最终 02-config.yaml 的配置生效

利用命令方式配置静态 IP

通过命令配置静态 IP  的方式需要对应的系统组件

代码块
languageshell
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

Image Added

安全基线

设置过期时间

代码块
languagebash
# vim /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_WARN_AGE 10

密码长度已不在此处,而是在相关pam中进一步设置。

设置密码复杂度、长度、过期时间、密码尝试次数

通过 pwquality 控制,Ubuntu 22.04 默认没有此模块,需要提前安装。

代码块
languagebash
# 安装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

防暴力破解

Ubuntu 22.04 中,pam_tally2 已被移除,可以使用 pam_faillock 代替。

代码块
languagebash
# faillock 包含在libpam-modules中,无需安装

# faillock参数配置
# grep -v '#' /etc/security/faillock.conf
dir = /var/run/faillock
audit
silent
deny = 3
fail_interval = 900
unlock_time = 120
信息
https://askubuntu.com/questions/1403438/how-do-i-set-up-pam-faillock

关于faillock的配置,涉及以下两个pam文件

  • /etc/pam.d/common-auth
  • /etc/pam.d/common-account


代码块
languagebash
# 用户账户锁定时连续身份验证失败必须达到的间隔长度默认为 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

Selinux

信息
https://linuxconfig.org/how-to-disable-enable-selinux-on-ubuntu-22-04-jammy-jellyfish-linux

Ubuntu22.04 默认没有安装 Selinux,进一步操作:

代码块
languagebash
# 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

防火墙

Ubuntu22.04 默认使用 ufw 管理防火墙,默认处于禁用状态。

代码块
languagebash
# 1.安装ufw
apt install ufw

# 2.防火墙状态
ufw status verbose

防火墙常用配置

代码块
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 # 停用防火牆

内核

在做内核参数优化时,提示报错 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是非常不建议的行为。

跨版本升级

以下内容基于从 20.04 升级到 22.04 ,当然 22.04 升级到 24.04 也类似

1、查询系统版本和磁盘空间

代码块
languageshell
> 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、更新现有的组件并清理不必要的组件,安装升级所需的组件

代码块
languageshell
sudo apt update -y && sudo apt upgrade -y
sudo apt dist-upgrade
sudo apt autoremove
sudo apt install update-manager-core
sudo reboot

3、重新开机后确认是否有对应升级的版本

代码块
languageshell
> 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
Highlight
-d

是指升级到最新的开发版,即使是 LTS 版本都没开发出来。

参照升级提示一路完成系统升级并重启

4、清理升级后不必要的组件

代码块
languageshell
> 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


目录