Debian 12 服务器初始化配置

打印 上一主题 下一主题

主题 558|帖子 558|积分 1674

本文一 ~ 六节的下令在root用户下操作,如在非root下,需添加sudo下令
  一、服务器购买

笔者云服务器使用的Debian12 系统
  1. cat /etc/debian_version
  2. 12.0
复制代码
二、更新密码

  1. passwd
  2. # 输入 new password
复制代码
三、修改ssh端口

默认22端口极易被攻击,可改为其他端口,可以肯定程度上低落风险。
  1. vim /etc/ssh/sshd_config
  2. 将#Port 22修改为Port 端口号
  3. # 重启ssh服务
  4. service sshd restart
复制代码
四、防火墙配置(ufw)

ufw是为轻量化配置iptables而开辟的一款工具。笔者使用该工具来配置防火墙。具体配置如下:
1、安装ufw
  1. # 1、安装ufw
  2. apt install -y ufw
复制代码
2、启用ipv6配置
因为笔者的云服务器默认启用了ipv6,因此防火墙配置必要同时包罗ipv4和ipv6
  1. vim /etc/default/ufw
  2. # 确保 IPV6=yes 设置
复制代码
3、设置默认计谋
  1. # 禁止所有入流量
  2. ufw default deny incoming
  3. # stdout
  4. Output
  5. Default incoming policy changed to 'deny'
  6. (be sure to update your rules accordingly)
  7. # 允许所有出流量
  8. ufw default allow outgoing
  9. # stdout
  10. Output
  11. Default outgoing policy changed to 'allow'
  12. (be sure to update your rules accordingly)
复制代码
4、设置特殊端口访问
如前文中修改的SSH端口
  1. ufw allow <新ssh端口>
复制代码
5、检察设置的规则并启动ufw
  1. # 查看规则
  2. ufw show added
  3. # 启用规则
  4. ufw enable
  5. # 该步骤需要二次确定
复制代码
6、检查规则设置
  1. ufw show added
  2. # stdout
  3. Added user rules (see 'ufw status' for running firewall):
  4. ufw allow OpenSSH
  5. ufw deny 22/tcp
  6. ufw allow 22222
  7. ufw allow 80/tcp
  8. ufw deny 22
  9. root@york:~# ufw status verbose
  10. Status: active
  11. Logging: on (low)
  12. Default: deny (incoming), allow (outgoing), disabled (routed)
  13. New profiles: skip
  14. To                         Action      From
  15. --                         ------      ----
  16. xx/tcp                                   ALLOW IN    Anywhere
  17. xx/tcp                     DENY IN     Anywhere
复制代码
7、设置自启动
  1. systemctl enable ufw
复制代码
五、防暴力入侵(failban)

fail2ban是一个用来防止系统入侵的工具,重要是防止暴力破解系统密码。
固然前文修改了SSH端口,但是仍然有可能被暴力攻击,因此笔者用fail2ban来防御对SSH的暴力破解。
1、fail2ban安装
  1. apt install -y fail2ban
复制代码
2、配置SSH防御
  1. vim /etc/fail2ban/jail.local
  2. # 内容如下
  3. [DEFAULT]
  4. #此参数为加白的网段、IP,可以是域名、网段或单个IP,空格隔开。
  5. ignoreip = 127.0.0.1/8 ::1
  6. #设置被封锁的时间间隔,如下表示10分钟,可以是秒(s)、分钟(m)、小时(h)、天(d),不带单位则默认为s,-1表示永久封锁。
  7. bantime  = 10m
  8. #检测的间隔时间,在间隔时间内,当>=maxtretry设置的失败次数,则触发限制,禁止访问。
  9. findtime  = 10m
  10. #findtime时间内的最大失败次数
  11. maxretry = 5
  12. backend = systemd
  13. [sshd]
  14. enabled = true
  15. port    = <ssh端口>
  16. logpath = /var/log/auth.log
  17. backend = %(sshd_backend)s
  18. ignoreip = 127.0.0.1/8 ::1 10.10.0.0/16 172.16.0.0/16
  19. # 封锁一个月
  20. bantime = 1mon
  21. findtime = 2m
  22. maxretry = 5
复制代码
以上sshd配置表示,两分钟内如果ssh登岸失败五次,则封锁访问的IP,同时排除本地回环地址和一些内网网段
   PS: 谨慎使用当前配置服务器的机器来测试 fail2ban 封锁功能,会导致无法访问服务器(笔者深有体会)
  3、启动并设置自启动
  1. # 启动
  2. systemctl start fail2ban
  3. # 查看状态
  4. systemctl status fail2ban
  5. # 自启动
  6. system enable fail2ban
复制代码
六、 root登录并配置

1、在 root 用户下,创建普通用户
创建下令
  1. adduser going # 创建用户
  2. passwd going # 设置 going 用户的登录密码
复制代码
  一样寻常一个项目由多个开辟职员完成,公司并不会为每个开辟职员配置一台服务器,而是共用服务器,通过普通用户登录机器开辟。并且使用普通用户登录和操作开辟机也可以包管系统的安全性
  2、添加 sudoers
偶然候普通用户也必要实行一些必要 root 权限的操作,例如使用 apt 安装一个软件包,这时候最好的办法是将普通用户添加到 sudoers 中,这样普通用户就可以通过 sudo 下令来临时获取 root 权限。下令如下
  1. sed -i '/^root.*ALL=(ALL:ALL).*ALL/a\going\tALL=(ALL:ALL) NOPASSWD: ALL' /etc/sudoers
复制代码
之后 /etc/sudoers 文件中,新增了以下一行
  1. going   ALL=(ALL:ALL) NOPASSWD: ALL
复制代码
/etc/sudoers 文件用于配置 sudo(superuser do)下令的授权规则。sudo 下令答应普通用户以超级用户(root)的权限实行特定的下令,而不必要直接使用root账户登录。
going ALL=(ALL:ALL) NOPASSWD: ALL规则表示:答应用户 going 在任何主机上以任何用户的身份实行任何下令时都不必要输入密码,即可获得 sudo 权限。
七、 普通用户配置服务器

1、配置 $HOME/.bashrc 文件
登录新服务器后的第一步就是配置 $HOME/.bashrc 文件,以使 Linux 登录 Shell 更加易用,例如:配置 LANG 解决中文乱码;配置 PS1 可以使下令行提示符表现更简便。添加如下内容
  1. # Some aliases to prevent mistakes
  2. alias rm='rm -i'
  3. alias cp='cp -i'
  4. alias mv='mv -i'
  5. # Create a default workspace directory to keep all work files in one place
  6. if [ ! -d $HOME/workspace ]; then
  7.     mkdir -p $HOME/workspace
  8. fi
  9. # User-specific environment settings
  10. # Basic environment
  11. # Set system language to en_US.UTF-8 to avoid Chinese character display issues in the terminal
  12. export LANG="en_US.UTF-8"
  13. # The default PS1 setting displays the full path, to prevent it from becoming too long,
  14. # it now shows "username@dev last_directory_name"
  15. export PS1='[\u@dev \W]\$ '
  16. # Set the workspace directory
  17. export WORKSPACE="$HOME/workspace"
  18. # Add $HOME/bin directory to the PATH variable
  19. export PATH=$HOME/bin:$PATH
  20. # Set the default editor to vim
  21. export EDITOR=vim
  22. # When logging into the system, default to the Workspace directory
  23. cd $WORKSPACE
  24. # User-specific aliases, configures and functions
复制代码
上述 Bash 脚本会自动创建工作目录 workspace,以后全部的工作都可以在这个目录下展开。这样做可以带来以下几点利益:


  • 可以使我们的 $HOME 目录保持整洁,便于以后的文件查找和分类;
  • 如果哪一天 / 分区空间不敷,可以将整个 workspace 目录 mv 到另一个分区中,并在 / 分区中保留软连接,例如:/home/going/workspace -> /data/workspace/;
  • 如果哪天想备份全部的工作文件,可以直接备份 workspace。
在配置 PATH 变量时,建议将期望使用的下令地点的目录放在 $PATH 之前,这样 Linux 会优先匹配到我们期望的下令。例如:export PATH=$HOME/binPATH,如果有类似的下令 A,Linux 会优先使用 $HOME/bin 目录下的 A
八、 依靠安装

1、底子工具安装
  1. $ sudo apt install -y build-essential jq tclsh gettext bc libcurl4-openssl-dev
复制代码
2、安装Git
Git是当前代码管理必不可少的工具,颠末当前大部分linux机器都自带git,但是版本过低,最好安装一个高版本的Git以使用其新特性。具体安装方法:
  1. $ cd /tmp
  2. $ wget --no-check-certificate https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz
  3. $ tar -xvzf git-2.43.0.tar.gz
  4. $ cd git-2.43.0/
  5. $ ./configure
  6. $ make
  7. $ sudo make install
  8. $ git --version # 输出 git 版本号,说明安装成功
  9. git version 2.43.0
复制代码
如果在实行make下令时出现如下错误
  1. $ make
  2. GIT_VERSION = 2.43.0
  3.     * new build flags
  4.     CC oss-fuzz/fuzz-commit-graph.o
  5. In file included from oss-fuzz/fuzz-commit-graph.c:1:
  6. ./git-compat-util.h:1495:10: fatal error: zlib.h: No such file or directory
  7. 1495 | #include <zlib.h>
  8.       |          ^~~~~~~~
  9. compilation terminated.
  10. make: *** [Makefile:2719: oss-fuzz/fuzz-commit-graph.o] Error 1
复制代码
实行sudo apt install zlib1g-dev下令即可解决。
安装好 Git 后,还必要把 Git 的二进制目录添加到 PATH 路径中,不然 Git 可能会因为找不到一些下令导致 Git 报错。实行以下下令来添加目录:
  1. tee -a $HOME/.bashrc <<'EOF'
  2. # Configure for git
  3. export PATH=/usr/local/libexec/git-core:$PATH
  4. EOF
复制代码
3、配置Git
  1. $ git config --global user.name "xxx"    # 用户名改成自己的
  2. $ git config --global user.email "xxxx@xxx.com"    # 邮箱改成自己的
  3. $ git config --global credential.helper store    # 设置 Git,保存用户名和密码
  4. $ git config --global core.longpaths true # 解决 Git 中 'Filename too long' 的错误
复制代码
除了以上配置外,另有一些注意点:


  • 在Git中,会把非 ASCII 字符叫做 Unusual 字符。这类字符在 Git 输出到终端的时候默认是用 8 进制转义字符输出的(以防乱码),但现在的终端多数都支持直接表现非 ASCII 字符,以是我们可以关闭掉这个特性。下令如下:
  1. $ git config --global core.quotepath off
复制代码


  • GitHub 限制最大只能克隆 100M 的单个文件,为了能够克隆大于 100M 的文件,还必要安装 Git Large File Storage
  1. $ sudo apt install git-lfs
复制代码
九、 docker安装

docker是现在市场上最流行的容器技术之一,答应用户将应用程序和服务打包成独立的运行时情况。方便在本地启动第三方服务用于测试,如mysql,redis。
1、卸载旧版本
  1. for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
复制代码
2、添加docker 官方GPG key
  1. # Add Docker's official GPG key:
  2. sudo apt-get update
  3. sudo apt-get install ca-certificates curl
  4. sudo install -m 0755 -d /etc/apt/keyrings
  5. sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
  6. sudo chmod a+r /etc/apt/keyrings/docker.asc
复制代码
3、将仓库添加到 APT 源中
  1. echo \
  2.   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  3.   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  4.   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. sudo apt-get update
复制代码
4、安装docker
  1. sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
复制代码
上述下令,安装了多个 Docker 软件包,这些软件包作用如下:


  • docker-ce:Docker 社区版,即 Docker 的核心程序;
  • docker-ce-cli:Docker 的下令行工具;
  • containerd.io:Docker 的容器运行时;
  • docker-buildx-plugin:Docker 多平台构建插件;
  • docker-compose-plugin:Docker 的容器编排工具
安装成功之后,默认 docker 处在运行中状态,可以实行systemctl status docker下令检察
5、docker配置文件配置
docker 的配置文件是 /etc/docker/daemon.json,该文件位于 Docker 配置目录下,通常是 /etc/docker/ 目录。如果该文件不存在,可以手动创建一个大概你可以直接使用以下配置,覆盖已有的配置
  1. sudo tee /etc/docker/daemon.json << EOF
  2. {
  3.   "exec-opts": ["native.cgroupdriver=systemd"],
  4.   "insecure-registries": [],
  5.   "live-restore": true,
  6.   "bip": "172.16.0.1/24",
  7.   "storage-driver": "overlay2",
  8.   "registry-mirrors": ["https://registry.docker-cn.com"],
  9.   "data-root": "/data/lib/docker",
  10.   "log-driver": "json-file",
  11.   "dns": [],
  12.   "default-runtime": "runc",
  13.   "log-opts": {
  14.     "max-size": "100m",
  15.     "max-file": "10"
  16.   }
  17. }
  18. EOF
复制代码
配置参数阐明如下:


  • exec-opts:用于配置 Docker 实行时的选项。native.cgroupdriver=systemd 指定使用系统的 systemd cgroup 驱动程序。Cgroup 控制组(Control Groups)是一种内核功能,可以限制一组进程的系统资源。
  • insecure-registries:用于配置不安全的镜像仓库地址
  • live-restore:是否规复容器状态以支持服务的不间断更新,在这个例子中,该值为 true 表示启用容器状态规复。
  • bip:配置 Docker 容器网络地址的 IP 范围。本例中该值为 172.16.0.1/24 表示使用 172.16.0.0/24 子网进行 Docker 容器通信。
  • storage-driver:用于指定使用的存储驱动。本例中该值为 overlay2 指定使用 OverlayFS2 存储驱动。
  • registry-mirrors:用于配置 Docker 镜像加速器地址。
  • data-root:配置 Docker 的数据存放路径。本例中该值为 /data/lib/docker。
  • dns:配置选项用于设置容器的 DNS 服务器。
  • default-runtime:配置选项用于设置默认的运行时。
  • log-driver:配置 Docker 日志驱动程序。本例中该值为 json-file,表示使用 json 格式记录 Docker 日志。
  • log-opts:配置 Docker 日志选项。该字段是一个 JSON 对象,包罗 :

    • max-size:用于限制 Docker 日志文件的最大巨细。本例中该值为 100m,表示 Docker 日志文件的巨细不能大于 100M。可以使用 b、k、m、g 后缀来指定单元(字节、千字节、兆字节、吉字节)。
    • max-file:用于限制 Docker 日志文件的数目。在本例中,该值为 10,表示 Docker 只会保留末了10 个日志文件。

配置完成后需重启docker
  1. sudo systemctl restart docker
复制代码
6、docker其他配置
a、使用 non-root 用户操作 docker
通过上述配置,普通用户运行docker必要sudo,通过如下配置可实现在非root下实行运行
  1. sudo -i groupadd docker # 创建 `docker` 用户组
  2. sudo -i usermod -aG docker $USER # 将当前用户添加到 `docker` 用户组下
  3. newgrp docker # 重新加载组成员身份
  4. docker run hello-world # 确认能够以普通用户使用 docker
复制代码
b、开机自启动
下令如下
  1. sudo systemctl enable docker.service # 设置 docker 开机启动
  2. sudo systemctl enable containerd.service # 设置 containerd 开机启动
复制代码
Reference



  • How to Set Up a Firewall with UFW on Ubuntu
  • 使用 fail2ban 防范 SSH 暴力破解攻击
  • Fail2Ban安全配置与应用 - 高度可定制化/支持多种服务
  • fail2ban 启动失败题目处理处罚
  • 知识星球-实战营开辟实战课
  • 源码编译安装git
  • Install Docker Engine on Debian

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表