[TOC]

常规安全更新

通过 unattended-upgrades,可以使 Ubuntu 系统自动进行常规的安全相关更新,使系统一直保持 security。

1
2
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

更改SSH端口

默认情况下,SSH 服务器侦听端口 22。出于安全原因,许多系统管理员选择将此默认端口更改为另一个不太可预测的数字,以帮助防止自动攻击。

分步指南:

  1. 备份配置文件。在进行任何更改之前,最好备份 SSH 配置文件。

    1
    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
  2. 编辑 SSH 配置文件。使用您喜欢的文本编辑器打开 SSHD 配置文件。在此示例中,我们将使用 nano。

    1
    sudo nano /etc/ssh/sshd_config
  3. 找到端口指令。找到以 Port 开头的行。默认情况下,它应该显示端口 22。

  4. 更改端口号。编辑该行以反映所需的端口号,最好高于 1024,以避免与其他标准服务发生冲突。例如,要将其更改为端口 2222,该行将如下所示:

    1
    Port 2222
  5. 保存并关闭文件。如果您使用的是 nano,请按 CTRL + O 写入更改,然后按 Enter 键和 CTRL + X 退出。

  6. 调整防火墙规则。如果启用了防火墙(如 UFW 或 Firewalld),则需要更新其规则以允许在新的 SSH 端口上进行连接。

    1
    sudo ufw allow 2222/tcp
  7. 重新启动 SSH 服务。通过重新启动 SSH 守护程序来应用更改。

    1
    sudo systemctl restart sshd
  8. 测试新的 SSH 端口。在注销当前会话之前,请打开新的终端或 SSH 客户端,并尝试使用新端口连接到服务器,以确保一切正常:

    1
    ssh username@your_server_ip -p 2222

linux下创建新用户

Linux下新建用户需要使用useraddpasswd命令

  • 最基础的使用方法

    1
    2
    useradd <username> # 新建一个名为<username>的用户
    passwd <username> <password> # 为该用户设定密码为<password>
  • 最佳实践

    新建用户有时候我们需要连带着完成一些其他的目的,例如修改用户的默认shell(默认的/bin/sh功能太少,甚至不能使用方向键和Tab键)以及为新用户指定home目录的位置,于是我们可以这么使用

    1
    useradd -d <homedir> -m -s /bin/bash <username>

    对上述命令的翻译:
    新建用户<username>
    -s:指定shell到/bin/bash
    -d:指定其home目录为<homedir>
    -m:如果指定的home目录不存在,则新建

useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Usage: useradd [options] LOGIN
useradd -D
useradd -D [options]

Options:
--badnames 对用户名不做检测
-b, --base-dir BASE_DIR 为新建的用户指定home目录到BASE_DIR下
--btrfs-subvolume-home use BTRFS subvolume for home directory
-c, --comment COMMENT 加上备注文字。备注文字会保存在passwd的备注栏位中
-d, --home-dir HOME_DIR 指定home目录
-D, --defaults 变更预设值
-e, --expiredate EXPIRE_DATE 新用户账户的过期时间
-f, --inactive INACTIVE 指定在密码过期后多少天即关闭该帐号
-g, --gid GROUP 为新用户指定用户组(组名或者GID)
-G, --groups GROUPS 指定用户所属的附加群组
-h, --help 显示帮助信息
-k, --skel SKEL_DIR use this alternative skeleton directory
-K, --key KEY=VALUE override /etc/login.defs defaults
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home 为此用户创建home目录
-M, --no-create-home 不为此用户创建home目录
-N, --no-user-group 不为此用户创建同名的用户组
-o, --non-unique allow to create users with duplicate
(non-unique) UID
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 为新用户指定shell(例如/bin/bash)
-u, --uid UID 为新用户指定UID
-U, --user-group create a group with the same name as the user
-Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping
--extrausers Use the extra users database

向用户授予sudo权限

在 Linux 机器中登录 ssh 后,我收到以下消息,执行一个sudo命令,得到提示“’username’ is not in the sudoers file. This incident will be reported.”解决这个问题的办法是,向用户授予 sudo 权限。

假设 /etc/sudoers 文件被更改以防止 sudo 或 admin 组中的用户将其权限提升为超级用户的权限,则对 sudoers 文件进行备份,如下所示:

1
cp /etc/sudoers /etc/sudoers.orginal

打开 sudoers 文件

1
visudo

然后在管理员用户下方添加用户,如下语法所示:

1
username ALL=(ALL)  ALL

上面的语法每次执行sudo指令是需要passwd的,如果需要免密码,则需按如下语法所示:

1
username ALL=(ALL) NOPASSWD:ALL

使用 fail2ban 保护您的系统

注意:Fail2ban 只能用于保护需要用户名/密码身份验证的服务。例如,您无法使用 fail2ban 保护 ping。

在本文中,我将演示保护 SSH 守护程序 (SSHD) 免受暴力攻击。您可以设置过滤器,就像 fail2ban 它们一样,以保护系统上的几乎所有收听服务。

  • 安装和初始设置

    1
    2
    3
    sudo apt install fail2ban -y
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban

    除非您的 fail2ban 配置中存在某种语法问题,否则您不会看到任何标准输出消息。

  • 基础配置

    现在配置一些基本的东西 fail2ban 来保护系统,而不会干扰它自己。将 /etc/fail2ban/jail.conf 文件复制到 /etc/fail2ban/jail.local 。该 jail.local 文件是我们感兴趣的配置文件。

    1
    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

    默认情况下,fail2ban 附带一个 jail.conf 文件。但是,这可能会在更新中被覆盖,因此您应该将此文件复制到 jail.local 文件中并在其中进行调整。

    如果您已有文件 jail.local ,请使用 nano 或您喜欢的文本编辑器打开它:

    1
    sudo nano /etc/fail2ban/jail.local

    每次进行配置更改时都必须重新启动 fail2ban

    1
    sudo systemctl restart fail2ban
  • 设置筛选服务

    要设置过滤服务,必须在 /etc/fail2ban/jail.d 目录下创建相应的“jail”文件。对于 SSHD,创建一个名为 sshd.local 的新文件,并在其中输入服务过滤指令。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [sshd]
    enabled = true
    backend= systemd
    port = ssh
    banaction = ufw[application=$(app), blocktype=reject]
    logpath = /var/log/sshd/error.log
    maxretry = 3
    findtime = 120
    bantime = 600

    大多数设置都是不言自明的。对上述命令的翻译, 在连续的120s内错误输入密码三次以上的用户在 600 秒(10 分钟)禁止违规系统的 IP 地址。

    重新启动 fail2ban 服务。每次进行配置更改时都必须重新启动 fail2ban

    1
    sudo systemctl restart fail2ban
  • 封禁是什么样子的

    查看封禁日志

    1
    tail /var/log/fail2ban.log
  • 解除封禁

    1
    sudo fail2ban-client set sshd unbanip 192.168.1.69

    发出此命令后,立刻解除对192.168.1.69的封禁,无需重新启动 fail2ban 守护程序。

安装docker、docker-compose和Portainer CE

安装docker

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

验证安装

1
docker -v

若要创建 docker 组并添加用户,请执行以下操作:

1
2
3
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

验证是否可以 docker 在不运行 sudo

1
docker run hello-world

此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。

安装docker-compose

1
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予可执行权限给下载的二进制文件

1
sudo chmod +x /usr/local/bin/docker-compose

创建一个符号链接,将docker-compose命令链接到/usr/bin目录,以便可以全局访问

1
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

验证安装

1
docker-compose --version

安装Portainer CE

创建Portainer将用于存储其数据库的卷

1
docker volume create portainer_data

下载 Portainer容器

1
docker pull portainer/portainer-ce:latest

启动镜像

1
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

打开 Web 浏览器 https://localhost:9000

安装Tailscale

安装 Tailscale

1
curl -fsSL https://tailscale.com/install.sh | sh

将您的机器连接到 Tailscale 网络并在浏览器中进行身份验证:

1
sudo tailscale up

您已连接!您可以通过运行以下命令找到您的 Tailscale IPv4 地址:

1
tailscale ip -4	

如果添加的设备是服务器或远程访问的设备,则可能需要考虑禁用密钥过期,以防止需要定期重新进行身份验证。