2025-02-19 14:48:54 +08:00

447 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.bid/style.css">
<link rel="stylesheet" href="https://blog.dich.bid/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.bid/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.bid/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.bid/about-server-set/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.bid">
<meta property="twitter:url" content="https://blog.dich.bid/about-server-set/">
<link rel="alternate" type="application/atom+xml" title="Dich&#x27;blog Atom Feed" href="https://blog.dich.bid/atom.xml" />
<link rel="icon" type="image/png" href=&#x2F;dich.webp />
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.bid" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li><a href="https://blog.dich.bid">blog</a></li>
<li><a href="https://blog.dich.bid/tags">tags</a></li>
<li><a href="https://blog.dich.bid/archive">archive</a></li>
<li class="active"><a href="https://blog.dich.bid/about">about me</a></li>
<li><a href="https://blog.dich.bid/links">links</a></li>
<li><a href="https://blog.dich.bid/search">search</a></li>
<li><a href="https://blog.dich.bid/weekly">weekly</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.bid/about-server-set/">乱七八糟:服务器初始化与安全设置</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-06-12
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 本文记录服务器常用操作步骤。</p>
<span id="continue-reading"></span><h2 id="doamin">Doamin</h2>
<p>建站不一定需要服务器、域名和备案。尤其不要买腾讯云不要买CN域名备案过程要填很多个人信息且一周没有解析网站备案就会自动注销。</p>
<ul>
<li>
<p><strong>cn 域名没有隐私保护whois protection</strong>。国内域名注册商说的隐私保护根本是自欺欺人,在它们隐私保护就是在自己的查询服务隐藏注册人信息。但在别的地方是能查到的,在<a href="https://whois.cnnic.cn/">中国互联网络信息中心</a>可以查到每个 cn 域名注册人的姓名和邮箱。</p>
</li>
<li>
<p><strong>注册 cn 域名必须使用真实身份信息</strong>。要是你想用假信息注册来保护隐私,那就太天真了。审核的时候不会通过的。真的不想用自己的信息注册的话,要么以公司名义注册,但公司的法定代表人还是能查到的。要么叫别人注册域名之后给你用,可谁愿意冒这种风险呢。</p>
</li>
<li>
<p><strong>cn 域名无法删除</strong>。如果你觉得 cn 域名暴露了你的隐私,那对不起,这是不能注销的<a href="https://cyrusyip.org/zh-cn/post/2021/05/25/damn-cn-domain/#fn:3">3</a>。你只能修改邮箱地址,然后等到它过期。或者转让给别人,不过感觉把别人推到火坑里不太好啊。</p>
</li>
<li>
<p><strong>cn 域名有被停用的风险</strong>。2008 年,有人以跳水奥运冠军吴敏霞拼音注册了 wuminxia.cn<a href="https://www.cnbeta.com/articles/tech/62209.htm">结果被中国互联网络信息中心CNNIC回收了域名</a>,并转交给国家体育总局。此域名在 2021 年 2 月 28 日被优视科技<a href="https://whois.cnnic.cn/WhoisServlet?queryType=Domain&amp;domain=wuminxia.cn">注册</a>呵呵。2009 年,牛博网被域名注册商万网停止解析。</p>
</li>
</ul>
<h2 id="vps">VPS</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>apt install curl vim sudo
</span><span>apt update &amp;&amp; apt upgrade -y
</span><span>apt-get install --fix-missing
</span></code></pre>
<h2 id="bbr">BBR</h2>
<p>查询系统所支持的拥塞控制算法。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>$ sysctl net.ipv4.tcp_available_congestion_control
</span><span>net.ipv4.tcp_congestion_control = bbr cubic reno
</span></code></pre>
<p>查询正在使用中的拥塞控制算法Linux 绝大部分系统默认为 Cubic 算法)。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>$ sysctl net.ipv4.tcp_congestion_control
</span><span>net.ipv4.tcp_congestion_control = cubic
</span></code></pre>
<p>指定拥塞控制算法为 bbr。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>$ echo net.ipv4.tcp_congestion_control=bbr &gt;&gt; /etc/sysctl.conf &amp;&amp; sysctl -p
</span></code></pre>
<h2 id="safe">Safe</h2>
<h3 id="geng-huan-sshduan-kou">更换SSH端口</h3>
<p>使用root账户或已经有sudo权限的用户登录到系统。</p>
<p>打开SSH配置文件<code>sshd_config</code>可以使用文本编辑器如nano或vi。以下是使用nano编辑器的示例</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo vim /etc/ssh/sshd_config
</span></code></pre>
<p>在配置文件中找到以下行:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Port 22
</span></code></pre>
<p>这是SSH默认的端口号你可以将其更改为你想要的任何未被占用的端口号。例如将端口更改为2222</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Port 2222
</span></code></pre>
<p>保存并关闭文本编辑器。重新启动SSH服务以应用更改</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo service ssh restart
</span></code></pre>
<p>或者如果你的系统使用systemd可以使用以下命令</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl restart ssh
</span></code></pre>
<h3 id="an-zhuang-ufw">安装 UFW</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt install ufw
</span></code></pre>
<p><strong>如果你在远程位置连接你的服务器,在启用 UFW 防火墙之前,你必须显式允许进来的 SSH 连接。否则,你将永远都无法连接到机器上。</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo ufw allow 22/tcp
</span></code></pre>
<blockquote>
<p>如果 SSH 运行在非标准端口,你需要将上述命令中的 22 端口替换为对应的 SSH 端口。</p>
</blockquote>
<p><strong>放开 1Panel 系统端口。</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo ufw allow 8090/tcp
</span></code></pre>
<blockquote>
<p>上述命令中的 8090 端口需要替换为安装 1Panel 系统时自定义的端口。</p>
</blockquote>
<p><strong>启动 UFW</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo ufw enable
</span></code></pre>
<h3 id="an-zhuang-fail2ban">安装 Fail2ban</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt-get install fail2ban
</span></code></pre>
<p><strong>2、Debian 12 及以上的版本需要手动安装 rsyslog</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt-get install rsyslog
</span></code></pre>
<p><strong>3、启动 Fail2ban 服务</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl start fail2ban
</span></code></pre>
<p><strong>4、开机自启动</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl enable fail2ban
</span></code></pre>
<p><strong>5、查看 Fail2ban 服务状态。</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl status fail2ban
</span></code></pre>
<h3 id="ban-ipv6">Ban IPv6</h3>
<p>手动 禁用 VPS 的 IPv6 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl -w net.ipv6.conf.all.disable_ipv6=1
</span><span>sysctl -w net.ipv6.conf.default.disable_ipv6=1
</span></code></pre>
<p>如果想重启系统也生效, 执行:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo &#39;net.ipv6.conf.all.disable_ipv6=1&#39; &gt;&gt; /etc/sysctl.conf
</span><span>echo &#39;net.ipv6.conf.default.disable_ipv6=1&#39; &gt;&gt; /etc/sysctl.conf
</span></code></pre>
<p>手动 启用 VPS 的 IPv6 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl -w net.ipv6.conf.all.disable_ipv6=0
</span><span>sysctl -w net.ipv6.conf.default.disable_ipv6=0
</span></code></pre>
<p>重新载入 sysctl 配置</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl --system # reload sysctl
</span></code></pre>
<p>如果重载, 还无效果, 可能要 reboot 重启下.
查看 VPS 的 IPv6 信息</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ip -6 addr show scope global
</span><span>
</span><span>或者 curl ipv6.ip.sb
</span></code></pre>
<h3 id="gai-wei-mi-yao-deng-lu">改为密钥登录</h3>
<ul>
<li>在本地执行以下命令生成.pub后缀的公钥和无后缀的密钥</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ssh-keygen
</span></code></pre>
<p>注意不同密钥对名称不能相同;同时可以为这两个文件用密码加密;</p>
<ul>
<li>
<p>随后将.pub后缀的公钥中的内容写入服务器的<code>~/.ssh/authorized_keys</code>中;</p>
</li>
<li>
<p>使用以下命令编译服务器的SSH配置</p>
</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>vim /etc/ssh/sshd_config
</span></code></pre>
<p>将其中的该行改为<code>PasswordAuthentication no</code>,保存退出;随后使用</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl restart sshd
</span></code></pre>
<p>重启SSH即可禁用密码登录</p>
<ul>
<li>
<p><strong>PermitRootLogin prohibit-password</strong>改为<strong>prohibit-password</strong>即可实现仅root用户密钥登录</p>
</li>
<li>
<p>使用以下命令查看输出,</p>
</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo cat /etc/ssh/sshd_config | grep -E &#39;PasswordAuthentication|PubkeyAuthentication&#39;
</span></code></pre>
<p>如有<strong>PasswordAuthentication no → 禁用密码登录</strong>以及<strong>PubkeyAuthentication yes → 允许密钥登录</strong>则成功。</p>
<ul>
<li>
<p>注意<strong>authorized_keys</strong>的权限为600如果不是则需要改正<code>chmod 600 ~/.ssh/authorized_keys</code></p>
</li>
<li>
<p>随后可以在本地尝试登录,命令为<code>ssh -i ~/.ssh/id_xxx -p 端口 用户名@服务器IP</code>第一次登录会提示服务器公钥的哈希值需要选Yes。</p>
</li>
</ul>
<h2 id="docker">Docker</h2>
<ol>
<li>安装基础工具</li>
</ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt-get update
</span><span> sudo apt-get install \
</span><span> apt-transport-https \
</span><span> ca-certificates \
</span><span> curl \
</span><span> gnupg \
</span><span> lsb-release
</span></code></pre>
<ol start="2">
<li>安装docker的gpg key</li>
</ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
</span></code></pre>
<ol start="3">
<li>安装docker源</li>
</ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo &quot;deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</span></code></pre>
<p>上面命令中的<code>lsb_release -cs</code>返回<code>bullseye</code>也就是debian11的代号。</p>
<ol start="4">
<li>安装docker</li>
</ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>apt-get update
</span><span>sudo apt-get install docker-ce docker-ce-cli containerd.io
</span><span>sudo systemctl enable docker
</span><span>sudo systemctl start docker
</span></code></pre>
<p>至此安装完成。</p>
<p>在debian系的Linux发行版上docker会开机启动启动。</p>
<p>如果平时使用非root账户又不想每次执行docker命令之前都加上sudo参考docker的<a href="https://link.zhihu.com/?target=https%253A//docs.docker.com/engine/install/linux-postinstall/%2523manage-docker-as-a-non-root-user">文档</a>,可以添加<code>docker</code>并将非root账户加入到该组中。下面的命令创建<code>docker</code>组并将当前用户加入<code>docker</code>组,执行完成之后重新登陆生效:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo groupadd docker
</span><span>sudo usermod -aG docker $USER
</span></code></pre>
<h3 id="shi-yong-docker-cun-chu-ku-an-zhuang">使用 Docker 存储库安装</h3>
<p>我建议使用此方法的主要原因是您可以轻松升级,因为存储库可以轻松更新!</p>
<p>首先,使用以下命令安装此方法的先决条件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt update &amp;&amp; sudo apt install ca-certificates curl gnupg
</span></code></pre>
<p>现在,让我们使用以下命令创建一个目录来存储密钥环:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo install -m 0755 -d /etc/apt/keyrings
</span></code></pre>
<p>接下来,使用给定的命令下载 GPG 密钥并将其存储在 <code>/etc/apt/keyrings/etc/apt/keyrings</code> 目录中:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
</span></code></pre>
<p>完成后,使用 chmod 命令更改 docker.gpg 文件的权限:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo chmod a+r /etc/apt/keyrings/docker.gpg
</span></code></pre>
<p>最后,使用以下命令为 Docker 设置存储库:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo \
</span><span> &quot;deb [arch=&quot;$(dpkg --print-architecture)&quot; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
</span><span> &quot;$(. /etc/os-release &amp;&amp; echo &quot;$VERSION_CODENAME&quot;)&quot; stable&quot; | \
</span><span> sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</span></code></pre>
<p>上述命令中每行末尾的额外 <code>\</code> 只是添加新行的一种方式,以便您可以轻松查看整个命令。就是这样!</p>
<p>现在,您可以使用以下命令更新存储库索引并安装 Docker</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt update &amp;&amp; sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</span></code></pre>
<p>要验证 Docker 安装,您可以安装 hello-world 映像:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo docker run hello-world
</span></code></pre>
<p>hello-world docker 镜像很小,仅用于检查 Docker 是否运行正常。</p>
<h3 id="shi-yong-docker-er-bu-shi-yong-sudo">使用 Docker 而不使用 sudo</h3>
<p>如果您注意到,在运行 hello-world 映像时,我使用了 sudo。</p>
<p>这可能不太方便。那么如何将其配置为不必使用 sudo 呢?</p>
<p>为此,首先使用 groupadd 命令创建一个 docker 组:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo groupadd docker
</span></code></pre>
<p>现在将用户添加到组docker</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo usermod -aG docker $USER
</span></code></pre>
<p>现在从终端注销并重新登录以使更改生效。</p>
<blockquote>
<p>如果您在虚拟机中安装 Docker需要重新启动才能使您所做的更改生效。</p>
</blockquote>
<p>让我们通过运行 hello-world 图像来测试它:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run hello-world
</span></code></pre>
<p>正如您所看到的,我无需使用 sudo 即可获得相同的结果。</p>
<h3 id="xie-zai-docker">卸载 Docker</h3>
<p>首先,使用以下命令停止 docker 服务:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl stop docker
</span></code></pre>
<p>然后按以下方式使用 apt purge 命令从系统中删除 Docker</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</span></code></pre>
<p>如果您打算进行全新安装或者不想拥有任何以前的数据,那么您可以使用 rm 命令删除 Docker 文件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo rm -rf /var/lib/docker
</span></code></pre>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo rm -rf /var/lib/containerd
</span></code></pre>
<p>就是这样! Docker 已成功删除。</p>
<h2 id="zai-arch-linuxshang-an-zhuang-docker">在Arch Linux上安装Docker</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo pacman -S docker
</span></code></pre>
<p>安装完成后需要启动Docker服务并设置为开机自启</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl start docker
</span><span>sudo systemctl enable docker
</span></code></pre>
<p>运行以下命令来验证Docker是否正常工作</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo docker run hello-world
</span></code></pre>
<p>默认情况下只有root用户才能运行Docker命令。为了避免每次运行Docker命令时都需要使用sudo可以将当前用户添加到docker组</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo usermod -aG docker $USER
</span></code></pre>
<p>之后,需要注销并重新登录,或者重启系统以使更改生效。</p>
<p>安装Docker Compose</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo pacman -S docker-compose
</span></code></pre>
<h2 id="1panel">1panel</h2>
<p>执行如下命令一键安装 1Panel:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sudo bash quick_start.sh
</span></code></pre>
<h2 id="ipzheng-shu-shen-qing-bu-shu">IP证书申请部署</h2>
<ul>
<li>
<p><a href="https://zerossl.com/">ZeroSSL</a> 中申请一个90天的证书</p>
</li>
<li>
<p>然后在VPS上输入以下命令</p>
</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>mkdir -p ./.well-known/pki-validation
</span></code></pre>
<ul>
<li>
<p>随后在ZeroSSL中将所给出的类似<strong>B992F08CB46748D02E4C553A4038BC.txt</strong>复制;</p>
</li>
<li>
<p>将从ZeroSSL下载得到的文件打开复制里面的东西形成以下的格式然后将这些命令在VPS上面运行</p>
</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>cat &lt;&lt; EOF | sudo tee ./.well-known/pki-validation/B992F08CB46748D02E4C553A4038BC.txt
</span><span>254563C20918258D661E7D43D6A43A2A258857E191977DD5F740FBB9ABD25279
</span><span>comodoca.com
</span><span>ca5792984e3f0a1
</span><span>EOF
</span></code></pre>
<ul>
<li>开启一个临时HTTP服务器</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>python3 -m http.server 80
</span></code></pre>
<ul>
<li>随后即可在ZeroSSL中验证证书并开启SSL。</li>
</ul>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.bid/about-runer-2/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">乱七八糟:跑步笔记(二)</span>
</a>
</span>
<span class="button next">
<a href="https://blog.dich.bid/awesome-360t7/">
<span class="button__text">综合工程:360T7刷ImmortalWrt</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2025
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
</div>
</body>
</html>