当前位置:首页 » 《我的小黑屋》 » 正文

Debian 12 服务器初始化配置

29 人参与  2024年09月22日 08:40  分类 : 《我的小黑屋》  评论

点击全文阅读


文章目录

一、服务器购买二、更新密码三、修改ssh端口四、防火墙配置(ufw)五、防暴力入侵(failban)六、 root登录并配置七、 普通用户配置服务器八、 依赖安装九、 docker安装Reference

本文一 ~ 六节的命令在root用户下操作,如在非root下,需添加sudo命令

一、服务器购买

笔者云服务器使用的Debian12 系统

cat /etc/debian_version12.0

二、更新密码

passwd# 输入 new password

三、修改ssh端口

默认22端口极易被攻击,可改为其他端口,可以一定程度上降低风险。

vim /etc/ssh/sshd_config将#Port 22修改为Port 端口号# 重启ssh服务service sshd restart 

四、防火墙配置(ufw)

ufw是为轻量化配置iptables而开发的一款工具。笔者使用该工具来配置防火墙。具体配置如下:
1、安装ufw

# 1、安装ufwapt install -y ufw

2、启用ipv6配置
因为笔者的云服务器默认启用了ipv6,因此防火墙配置需要同时包括ipv4和ipv6

vim /etc/default/ufw# 确保 IPV6=yes 设置

3、设置默认策略

# 禁止所有入流量ufw default deny incoming# stdoutOutputDefault incoming policy changed to 'deny'(be sure to update your rules accordingly)# 允许所有出流量ufw default allow outgoing# stdoutOutputDefault outgoing policy changed to 'allow'(be sure to update your rules accordingly)

4、设置特殊端口访问
如前文中修改的SSH端口

ufw allow <新ssh端口>

5、查看设置的规则并启动ufw

# 查看规则ufw show added# 启用规则ufw enable# 该步骤需要二次确定

6、检查规则设置

ufw show added# stdoutAdded user rules (see 'ufw status' for running firewall):ufw allow OpenSSHufw deny 22/tcpufw allow 22222ufw allow 80/tcpufw deny 22root@york:~# ufw status verboseStatus: activeLogging: on (low)Default: deny (incoming), allow (outgoing), disabled (routed)New profiles: skipTo                         Action      From--                         ------      ----xx/tcp           ALLOW IN    Anywherexx/tcp                     DENY IN     Anywhere

7、设置自启动

systemctl enable ufw

五、防暴力入侵(failban)

fail2ban是一个用来防止系统入侵的工具,主要是防止暴力破解系统密码。
虽然前文修改了SSH端口,但是仍然有可能被暴力攻击,因此笔者用fail2ban来防御对SSH的暴力破解。
1、fail2ban安装

apt install -y fail2ban

2、配置SSH防御

vim /etc/fail2ban/jail.local# 内容如下[DEFAULT]#此参数为加白的网段、IP,可以是域名、网段或单个IP,空格隔开。ignoreip = 127.0.0.1/8 ::1#设置被封锁的时间间隔,如下表示10分钟,可以是秒(s)、分钟(m)、小时(h)、天(d),不带单位则默认为s,-1表示永久封锁。bantime  = 10m#检测的间隔时间,在间隔时间内,当>=maxtretry设置的失败次数,则触发限制,禁止访问。findtime  = 10m#findtime时间内的最大失败次数maxretry = 5backend = systemd[sshd]enabled = trueport    = <ssh端口>logpath = /var/log/auth.logbackend = %(sshd_backend)signoreip = 127.0.0.1/8 ::1 10.10.0.0/16 172.16.0.0/16# 封锁一个月bantime = 1monfindtime = 2mmaxretry = 5

以上sshd配置表示,两分钟内如果ssh登陆失败五次,则封锁访问的IP,同时排除本地回环地址和一些内网网段

PS: 谨慎使用当前配置服务器的机器来测试 fail2ban 封锁功能,会导致无法访问服务器(笔者深有体会)

3、启动并设置自启动

# 启动systemctl start fail2ban# 查看状态systemctl status fail2ban# 自启动system enable fail2ban

六、 root登录并配置

1、在 root 用户下,创建普通用户
创建命令

adduser going # 创建用户passwd going # 设置 going 用户的登录密码

一般一个项目由多个开发人员完成,公司并不会为每个开发人员配置一台服务器,而是共用服务器,通过普通用户登录机器开发。并且使用普通用户登录和操作开发机也可以保证系统的安全性

2、添加 sudoers
有时候普通用户也需要执行一些需要 root 权限的操作,例如使用 apt 安装一个软件包,这时候最好的办法是将普通用户添加到 sudoers 中,这样普通用户就可以通过 sudo 命令来暂时获取 root 权限。命令如下

sed -i '/^root.*ALL=(ALL:ALL).*ALL/a\going\tALL=(ALL:ALL) NOPASSWD: ALL' /etc/sudoers

之后 /etc/sudoers 文件中,新增了以下一行

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 可以使命令行提示符显示更简洁。添加如下内容

# Some aliases to prevent mistakesalias rm='rm -i'alias cp='cp -i'alias mv='mv -i'# Create a default workspace directory to keep all work files in one placeif [ ! -d $HOME/workspace ]; then    mkdir -p $HOME/workspacefi# User-specific environment settings# Basic environment# Set system language to en_US.UTF-8 to avoid Chinese character display issues in the terminalexport LANG="en_US.UTF-8"# The default PS1 setting displays the full path, to prevent it from becoming too long, # it now shows "username@dev last_directory_name"export PS1='[\u@dev \W]\$ '# Set the workspace directoryexport WORKSPACE="$HOME/workspace"# Add $HOME/bin directory to the PATH variableexport PATH=$HOME/bin:$PATH# Set the default editor to vimexport EDITOR=vim# When logging into the system, default to the Workspace directorycd $WORKSPACE# User-specific aliases, configures and functions

上述 Bash 脚本会自动创建工作目录 workspace,以后所有的工作都可以在这个目录下展开。这样做可以带来以下几点好处:

可以使我们的 $HOME 目录保持整洁,便于以后的文件查找和分类;如果哪一天 / 分区空间不足,可以将整个 workspace 目录 mv 到另一个分区中,并在 / 分区中保留软连接,例如:/home/going/workspace -> /data/workspace/;如果哪天想备份所有的工作文件,可以直接备份 workspace。

在配置 PATH 变量时,建议将期望使用的命令所在的目录放在 $PATH 之前,这样 Linux 会优先匹配到我们期望的命令。例如:export PATH=$HOME/bin:$PATH,如果有相同的命令 A,Linux 会优先使用 $HOME/bin 目录下的 A

八、 依赖安装

1、基础工具安装

$ sudo apt install -y build-essential jq tclsh gettext bc libcurl4-openssl-dev

2、安装Git
Git是当前代码管理必不可少的工具,经过当前大部分linux机器都自带git,但是版本过低,最好安装一个高版本的Git以使用其新特性。具体安装方法:

$ cd /tmp$ wget --no-check-certificate https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz$ tar -xvzf git-2.43.0.tar.gz$ cd git-2.43.0/$ ./configure$ make$ sudo make install$ git --version # 输出 git 版本号,说明安装成功git version 2.43.0

如果在执行make命令时出现如下错误

$ makeGIT_VERSION = 2.43.0    * new build flags    CC oss-fuzz/fuzz-commit-graph.oIn file included from oss-fuzz/fuzz-commit-graph.c:1:./git-compat-util.h:1495:10: fatal error: zlib.h: No such file or directory 1495 | #include <zlib.h>      |          ^~~~~~~~compilation terminated.make: *** [Makefile:2719: oss-fuzz/fuzz-commit-graph.o] Error 1

执行sudo apt install zlib1g-dev命令即可解决。

安装好 Git 后,还需要把 Git 的二进制目录添加到 PATH 路径中,不然 Git 可能会因为找不到一些命令导致 Git 报错。执行以下命令来添加目录:

tee -a $HOME/.bashrc <<'EOF'# Configure for gitexport PATH=/usr/local/libexec/git-core:$PATHEOF

3、配置Git

$ git config --global user.name "xxx"    # 用户名改成自己的$ git config --global user.email "xxxx@xxx.com"    # 邮箱改成自己的$ git config --global credential.helper store    # 设置 Git,保存用户名和密码$ git config --global core.longpaths true # 解决 Git 中 'Filename too long' 的错误

除了以上配置外,还有一些注意点:

在Git中,会把非 ASCII 字符叫做 Unusual 字符。这类字符在 Git 输出到终端的时候默认是用 8 进制转义字符输出的(以防乱码),但现在的终端多数都支持直接显示非 ASCII 字符,所以我们可以关闭掉这个特性。命令如下:
$ git config --global core.quotepath off
GitHub 限制最大只能克隆 100M 的单个文件,为了能够克隆大于 100M 的文件,还需要安装 Git Large File Storage
$ sudo apt install git-lfs

九、 docker安装

docker是目前市场上最流行的容器技术之一,允许用户将应用程序和服务打包成独立的运行时环境。方便在本地启动第三方服务用于测试,如mysql,redis。
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

# Add Docker's official GPG key:sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc

3、将仓库添加到 APT 源中

echo \  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \  sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update

4、安装docker

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/ 目录。如果该文件不存在,可以手动创建一个或者你可以直接使用以下配置,覆盖已有的配置

sudo tee /etc/docker/daemon.json << EOF{  "exec-opts": ["native.cgroupdriver=systemd"],  "insecure-registries": [],  "live-restore": true,  "bip": "172.16.0.1/24",  "storage-driver": "overlay2",  "registry-mirrors": ["https://registry.docker-cn.com"],  "data-root": "/data/lib/docker",  "log-driver": "json-file",  "dns": [],  "default-runtime": "runc",  "log-opts": {    "max-size": "100m",    "max-file": "10"  }}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

sudo systemctl restart docker

6、docker其他配置
a、使用 non-root 用户操作 docker

通过上述配置,普通用户运行docker需要sudo,通过如下配置可实现在非root下执行运行

sudo -i groupadd docker # 创建 `docker` 用户组sudo -i usermod -aG docker $USER # 将当前用户添加到 `docker` 用户组下newgrp docker # 重新加载组成员身份docker run hello-world # 确认能够以普通用户使用 docker

b、开机自启动
命令如下

sudo systemctl enable docker.service # 设置 docker 开机启动sudo systemctl enable containerd.service # 设置 containerd 开机启动

Reference

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

点击全文阅读


本文链接:http://zhangshiyu.com/post/162986.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1