<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Richardson</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://blog.ittinker.com/</id>
  <link href="https://blog.ittinker.com/" rel="alternate"/>
  <link href="https://blog.ittinker.com/rss.xml" rel="self"/>
  <rights>All rights reserved 2026, Richardson</rights>
  <subtitle>深度探索，勇往直前</subtitle>
  <title>The IT Explorer</title>
  <updated>2026-07-31T10:00:00.000Z</updated>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="独立开发者工具箱" scheme="https://blog.ittinker.com/categories/%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7%E7%AE%B1/"/>
    <category term="SSH" scheme="https://blog.ittinker.com/tags/SSH/"/>
    <category term="密钥管理" scheme="https://blog.ittinker.com/tags/%E5%AF%86%E9%92%A5%E7%AE%A1%E7%90%86/"/>
    <category term="服务器安全" scheme="https://blog.ittinker.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8/"/>
    <category term="独立开发" scheme="https://blog.ittinker.com/tags/%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91/"/>
    <category term="运维工具" scheme="https://blog.ittinker.com/tags/%E8%BF%90%E7%BB%B4%E5%B7%A5%E5%85%B7/"/>
    <content>
      <![CDATA[<blockquote><p><strong>结论先行</strong>：SSH 密钥登录三步搞定基础安全——生成 ed25519 密钥、上传公钥、禁掉密码登录。进阶用 ~/.ssh/config 管多服务器、SSH Agent 免密 passphrase、不同账号用不同密钥。配不好要么进不去、要么被爆破，这是 VPS 安全的地基，务必先配密钥、测通能登录、再禁密码（顺序反了会把自己锁外面）。</p></blockquote><blockquote><p>上篇讲了 VPS 初始化，这篇专门深入 SSH 密钥。如果你管着几台 VPS、几个 GitHub 账号，迟早会遇到密钥对不上的情况——这篇把常见场景一次讲清，配好一次，长期受用。</p></blockquote><p><strong>我的 VPS 推荐</strong>：我管理 8 台 VPS，分别在 Vultr、DigitalOcean、AWS 上。如果你还没选 VPS，我推荐这几家性价比高的（<a href="https://ittinker.com/go/vultr">Vultr</a> · <a href="https://ittinker.com/go/do">DigitalOcean</a>）。</p><h2 id="1、期望目标">1、期望目标</h2><p>上篇文章我们讲了VPS到手后的初始化，其中SSH密钥登录是核心。但实际使用中，你会遇到更复杂的场景：</p><ul><li>✅ <strong>多服务器管理</strong>：手头有3-5台VPS，每台服务器用不同密钥</li><li>✅ <strong>多账号隔离</strong>：GitHub个人账号+公司账号、GitLab多个账号</li><li>✅ <strong>SSH Agent免密</strong>：私钥设置了passphrase，不想每次都输入</li><li>✅ <strong>跨平台使用</strong>：Mac日常开发、Windows临时管理、手机应急登录</li><li>✅ <strong>故障排查</strong>：密钥登录失败、权限问题、连接被拒绝</li></ul><p>这篇文章的目标是让你在任何SSH场景下都能从容应对。</p><p><strong>新手必读路径</strong>（30 分钟搞定）：</p><ol><li>生成密钥（3.1）</li><li>上传公钥（3.2）</li><li>配置 SSH Config（3.3）</li><li>配置 SSH Agent（3.4）</li></ol><p><strong>进阶按需查阅</strong>：</p><ul><li>多账号管理 → 3.6</li><li>故障排查 → 第 5 节</li><li>Windows 特殊配置 → 3.4/3.5</li></ul><hr><h2 id="2、计划思考">2、计划思考</h2><h3 id="为什么需要单独讲SSH密钥？">为什么需要单独讲SSH密钥？</h3><p>上篇文章讲了基础的密钥登录配置，但实际出海开发者的环境更复杂：</p><table><thead><tr><th>场景</th><th>挑战</th><th>解决方案</th></tr></thead><tbody><tr><td>多台VPS</td><td>每台服务器密钥不同，容易搞混</td><td>SSH Config统一管理</td></tr><tr><td>多平台账号</td><td>GitHub个人+工作、GitLab、Gitee</td><td>为每个平台生成独立密钥</td></tr><tr><td>私钥设置了passphrase</td><td>每次连接都要输密码，烦死</td><td>SSH Agent + Keychain</td></tr><tr><td>不同操作系统</td><td>Mac/Windows/手机各有各的坑</td><td>统一流程+针对性配置</td></tr><tr><td>密钥泄露应急</td><td>某台电脑丢了，所有服务器都要换密钥</td><td>密钥分层+快速轮换</td></tr></tbody></table><h3 id="整体架构">整体架构</h3><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500">  <defs>    <style>      .box { fill: #f8f9fa; stroke: #333; stroke-width: 2; }      .arrow { stroke: #333; stroke-width: 2; fill: none; marker-end: url(#arrowhead); }      .text { font-family: Arial, sans-serif; font-size: 14px; fill: #333; }      .title { font-weight: bold; font-size: 16px; }    </style>    <marker id="arrowhead" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">      <polygon points="0 0, 10 3, 0 6" fill="#333" />    </marker>  </defs>  <!-- 你的电脑 -->  <rect x="50" y="200" width="180" height="100" class="box" rx="5"/>  <text x="140" y="230" class="text title" text-anchor="middle">你的电脑</text>  <text x="140" y="255" class="text" text-anchor="middle">~/.ssh/</text>  <text x="140" y="275" class="text" text-anchor="middle">├── id_ed25519</text>  <text x="140" y="295" class="text" text-anchor="middle">├── github_key</text>  <text x="140" y="315" class="text" text-anchor="middle">└── work_key</text>  <!-- SSH Config -->  <rect x="310" y="200" width="180" height="100" class="box" rx="5"/>  <text x="400" y="230" class="text title" text-anchor="middle">SSH Config</text>  <text x="400" y="255" class="text" text-anchor="middle">Host vps1</text>  <text x="400" y="275" class="text" text-anchor="middle">  IdentityFile ~/.ssh/id_ed25519</text>  <text x="400" y="295" class="text" text-anchor="middle">Host github.com</text>  <text x="400" y="315" class="text" text-anchor="middle">  IdentityFile ~/.ssh/github_key</text>  <!-- SSH Agent -->  <rect x="570" y="200" width="180" height="100" class="box" rx="5"/>  <text x="660" y="230" class="text title" text-anchor="middle">SSH Agent</text>  <text x="660" y="255" class="text" text-anchor="middle">缓存已解密密钥</text>  <text x="660" y="275" class="text" text-anchor="middle">自动提供认证</text>  <text x="660" y="295" class="text" text-anchor="middle">无需重复输入</text>  <!-- 服务器1 -->  <rect x="150" y="380" width="120" height="80" class="box" rx="5"/>  <text x="210" y="415" class="text title" text-anchor="middle">VPS 1</text>  <text x="210" y="435" class="text" text-anchor="middle">生产环境</text>  <!-- 服务器2 -->  <rect x="340" y="380" width="120" height="80" class="box" rx="5"/>  <text x="400" y="415" class="text title" text-anchor="middle">VPS 2</text>  <text x="400" y="435" class="text" text-anchor="middle">测试环境</text>  <!-- GitHub -->  <rect x="530" y="380" width="120" height="80" class="box" rx="5"/>  <text x="590" y="415" class="text title" text-anchor="middle">GitHub</text>  <text x="590" y="435" class="text" text-anchor="middle">代码托管</text>  <!-- 箭头 -->  <path d="M230 250 L310 250" class="arrow"/>  <path d="M490 250 L570 250" class="arrow"/>  <path d="M400 300 L210 380" class="arrow"/>  <path d="M400 300 L400 380" class="arrow"/>  <path d="M400 300 L590 380" class="arrow"/></svg><p>这个架构让你能：</p><ul><li>用不同密钥访问不同服务器（单点故障隔离）</li><li>一个命令连接任何服务器（省心）</li><li>私钥passphrase只输一次（省事）</li><li>电脑丢了，撤回特定密钥就行（安全）</li></ul><hr><h2 id="3、操作步骤">3、操作步骤</h2><h3 id="3-1-生成密钥对">3.1 生成密钥对</h3><h4 id="ed25519-vs-RSA：怎么选？">ed25519 vs RSA：怎么选？</h4><table><thead><tr><th>算法</th><th>密钥长度</th><th>性能</th><th>兼容性</th><th>推荐场景</th></tr></thead><tbody><tr><td>ed25519</td><td>短（32字节）</td><td>快</td><td>新系统</td><td><strong>首选</strong>，现代服务器</td></tr><tr><td>RSA 4096</td><td>长（4KB）</td><td>慢</td><td>所有系统</td><td>老旧系统、特殊兼容需求</td></tr></tbody></table><p><strong>现在的选择</strong>：新密钥全部用 ed25519。主流 VPS 商（<a href="https://ittinker.com/go/vultr">Vultr</a> · <a href="https://ittinker.com/go/do">DigitalOcean</a> · Linode · AWS 等）2020 年后的系统都支持 ed25519，放心用。只有当你要连 2017 年前的老系统时，才考虑 RSA 4096。</p><h4 id="为不同用途生成不同密钥">为不同用途生成不同密钥</h4><p>尽量一把密钥对应一个用途，方便出问题时单独撤回。为每个场景生成独立密钥：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 默认密钥（用于大部分VPS）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;yourname@vps-default&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. GitHub个人账号</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/github_personal -C <span class="string">&quot;yourname@github&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. GitHub工作账号</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/github_work -C <span class="string">&quot;work@github&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 生产环境专用</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/prod_key -C <span class="string">&quot;prod@company&quot;</span></span><br></pre></td></tr></table></figure><p><strong>参数说明</strong>：</p><ul><li><code>-t ed25519</code>：使用ed25519算法</li><li><code>-f filename</code>：指定密钥文件名（不用默认的id_ed25519）</li><li><code>-C comment</code>：添加注释，方便识别（可以是你邮箱、用途描述）</li></ul><h4 id="设置passphrase">设置passphrase</h4><p><strong>passphrase 就是&quot;加密密码&quot;</strong>，保护你的私钥文件。私钥丢了但有 passphrase，别人也用不了。</p><p>生成密钥时会提示：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p><strong>强烈建议设置passphrase！</strong> 这是私钥的最后一道防线，电脑丢了还能保护你的服务器。</p><p>好的passphrase：</p><ul><li>长度≥12个字符</li><li>混合大小写、数字、符号</li><li>可以是一句话（空格分隔的多个单词）</li></ul><blockquote><p>💡 <strong>passphrase vs 密码</strong></p><p>passphrase通常是一句话，比传统密码更长、更容易记，安全性和用户体验都更好。</p></blockquote><hr><h3 id="3-2-上传公钥到服务器">3.2 上传公钥到服务器</h3><h4 id="方法A：ssh-copy-id（推荐）">方法A：ssh-copy-id（推荐）</h4><p>这是最简单的方式，Mac/Linux自带：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 上传默认密钥</span></span><br><span class="line">ssh-copy-id user@192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 上传指定密钥</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/github_work.pub git@github.com</span><br><span class="line"></span><br><span class="line"><span class="comment"># 指定端口（SSH没改端口可以忽略）</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/mykey.pub -p 22000 user@192.168.1.100</span><br></pre></td></tr></table></figure><p>输入一次密码，公钥就自动配置好了。</p><p><strong>参数说明</strong>：</p><ul><li><code>-i identity_file</code>：指定要上传的公钥文件</li><li><code>-p port</code>：指定 SSH 端口（很老的 ssh-copy-id 不支持 <code>-p</code>，改用 <code>-o &quot;Port=22000&quot;</code>）</li></ul><h4 id="方法B：手动复制">方法B：手动复制</h4><p>Windows用户或ssh-copy-id不可用时：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/github_work.pub</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 复制输出的一整行（ssh-ed25519 AAAA...）</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 登录服务器（user 是服务器用户名如 root/ubuntu，server 是服务器 IP 或域名）</span></span><br><span class="line">ssh user@server</span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 在服务器上执行（将第 2 步看到的公钥内容完整粘贴到下面，ssh-ed25519 开头的一整行）</span></span><br><span class="line"><span class="built_in">mkdir</span> -p ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;ssh-ed25519 AAAA... yourname@github&quot;</span> &gt;&gt; ~/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure><h4 id="方法C：Windows-PowerShell">方法C：Windows PowerShell</h4><p>Windows 10/11自带OpenSSH，可以这样：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成密钥</span></span><br><span class="line">ssh<span class="literal">-keygen</span> <span class="literal">-t</span> ed25519 <span class="literal">-C</span> <span class="string">&quot;yourname@windows&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 上传公钥（需要手动复制内容）</span></span><br><span class="line"><span class="built_in">type</span> <span class="variable">$env:USERPROFILE</span>\.ssh\id_ed25519.pub</span><br><span class="line"></span><br><span class="line"><span class="comment"># 或者用这个一键命令（需要密码登录）</span></span><br><span class="line"><span class="built_in">type</span> <span class="variable">$env:USERPROFILE</span>\.ssh\id_ed25519.pub | ssh user@server <span class="string">&quot;mkdir -p ~/.ssh &amp;&amp; cat &gt;&gt; ~/.ssh/authorized_keys&quot;</span></span><br></pre></td></tr></table></figure><h4 id="验证配置">验证配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 测试密钥登录（应该不需要输密码）</span></span><br><span class="line">ssh -i ~/.ssh/github_work git@github.com</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果成功，会看到Welcome信息</span></span><br><span class="line"><span class="comment"># Hi username! You&#x27;ve successfully authenticated...</span></span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>常见坑</strong></p><ul><li>权限不对：<code>.ssh</code>必须是700，<code>authorized_keys</code>必须是600</li><li>公钥复制错了：确保是一整行，没有换行或空格</li><li>用户搞错了：<code>~/.ssh</code>在服务器上是目标用户的home目录</li></ul></blockquote><hr><h3 id="3-3-SSH-Config管理多服务器">3.3 SSH Config管理多服务器</h3><p>这是 SSH 管理的核心——配好后你不用记 IP、端口、用户名。</p><h4 id="配置文件位置">配置文件位置</h4><p>在<strong>你的本地电脑</strong>上编辑（用任意编辑器 nano/vim/VSCode）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 方法1：用 nano（简单，文件不存在会自动创建）</span></span><br><span class="line">nano ~/.ssh/config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 方法2：用 vim</span></span><br><span class="line">vim ~/.ssh/config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 方法3：用 VSCode</span></span><br><span class="line">code ~/.ssh/config</span><br></pre></td></tr></table></figure><h4 id="基本配置模板">基本配置模板</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"># 全局设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br><span class="line"></span><br><span class="line"># VPS 生产环境</span><br><span class="line">Host vps-prod</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User deploy</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/prod_key</span><br><span class="line"></span><br><span class="line"># VPS 测试环境</span><br><span class="line">Host vps-test</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User test</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># GitHub 个人账号</span><br><span class="line">Host github.com</span><br><span class="line">    HostName github.com</span><br><span class="line">    User git</span><br><span class="line">    IdentityFile ~/.ssh/github_personal</span><br><span class="line">    IdentitiesOnly yes</span><br><span class="line"></span><br><span class="line"># GitHub 工作账号（用别名区分）</span><br><span class="line">Host github-work</span><br><span class="line">    HostName github.com</span><br><span class="line">    User git</span><br><span class="line">    IdentityFile ~/.ssh/github_work</span><br><span class="line">    IdentitiesOnly yes</span><br></pre></td></tr></table></figure><p><strong>参数说明</strong>：</p><ul><li><code>Host</code>：别名，你用这个名字连接</li><li><code>HostName</code>：真实域名或IP</li><li><code>User</code>：登录用户名</li><li><code>Port</code>：SSH端口</li><li><code>IdentityFile</code>：私钥文件路径</li><li><code>IdentitiesOnly yes</code>：只用指定密钥，避免 SSH 傻傻试遍所有密钥导致服务器拒绝连接（报错 Too many authentication failures）</li><li><code>AddKeysToAgent yes</code>：自动把密钥加到ssh-agent</li></ul><h4 id="使用方法">使用方法</h4><p>配置好后，连接只用别名：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 以前要这样</span></span><br><span class="line">ssh -p 22000 -i ~/.ssh/prod_key deploy@192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 现在只需要这样</span></span><br><span class="line">ssh vps-prod</span><br><span class="line"></span><br><span class="line"><span class="comment"># Git push也自动用对密钥</span></span><br><span class="line">git push github-work main</span><br></pre></td></tr></table></figure><h4 id="高级技巧">高级技巧</h4><p><strong>通配符匹配</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># 所有AWS服务器都用同一个密钥</span><br><span class="line">Host aws-*</span><br><span class="line">    IdentityFile ~/.ssh/aws_key</span><br><span class="line">    User admin</span><br><span class="line"></span><br><span class="line">Host aws-prod</span><br><span class="line">    HostName ec2-xxx.compute.amazonaws.com</span><br><span class="line"></span><br><span class="line">Host aws-staging</span><br><span class="line">    HostName ec2-yyy.compute.amazonaws.com</span><br></pre></td></tr></table></figure><p><strong>include子配置文件</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"># ~/.ssh/config</span><br><span class="line">Host *</span><br><span class="line">    AddKeysToAgent yes</span><br><span class="line"></span><br><span class="line">Include config/github</span><br><span class="line">Include config/work</span><br><span class="line">Include config/vps</span><br></pre></td></tr></table></figure><p>这样可以把不同用途的配置分开管理，适合复杂环境。</p><hr><h3 id="3-4-SSH-Agent配置">3.4 SSH Agent配置</h3><p>如果你的私钥设置了passphrase，每次连接都要输入很烦。SSH Agent帮你缓存解密后的私钥，passphrase只输一次。</p><h4 id="Mac-Linux配置">Mac/Linux配置</h4><p><strong>启动ssh-agent</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 启动agent</span></span><br><span class="line"><span class="built_in">eval</span> <span class="string">&quot;<span class="subst">$(ssh-agent -s)</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加私钥（会提示输入passphrase）</span></span><br><span class="line">ssh-add ~/.ssh/github_personal</span><br><span class="line">ssh-add ~/.ssh/github_work</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看已添加的密钥</span></span><br><span class="line">ssh-add -l</span><br></pre></td></tr></table></figure><p><strong>自动启动（推荐）</strong>：</p><p>在 <code>~/.bashrc</code> 或 <code>~/.zshrc</code> 添加：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 打开配置文件（Mac 用 nano ~/.zshrc，Linux 用 nano ~/.bashrc）</span></span><br><span class="line">nano ~/.zshrc</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 在文件末尾粘贴以下内容</span></span><br><span class="line"><span class="comment"># 启动ssh-agent</span></span><br><span class="line"><span class="keyword">if</span> [ -z <span class="string">&quot;<span class="variable">$SSH_AUTH_SOCK</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">eval</span> <span class="string">&quot;<span class="subst">$(ssh-agent -s)</span>&quot;</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 自动添加所有密钥</span></span><br><span class="line"><span class="comment"># macOS Monterey (12.0) 及以后</span></span><br><span class="line">ssh-add --apple-use-keychain 2&gt;/dev/null || ssh-add</span><br><span class="line"><span class="comment"># 老版本 macOS 去掉 --apple-use-keychain</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. Ctrl+O 保存、Ctrl+X 退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 使配置生效</span></span><br><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure><p><strong>Mac Keychain集成</strong>：</p><p>Mac可以把passphrase存到系统钥匙串，以后自动解锁：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加密钥时存到keychain（macOS Monterey 12.0 及以后）</span></span><br><span class="line">ssh-add --apple-use-keychain ~/.ssh/github_personal</span><br><span class="line"><span class="comment"># 老版本 macOS：ssh-add ~/.ssh/github_personal</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 或者在SSH config中设置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;AddKeysToAgent yes&quot;</span> &gt;&gt; ~/.ssh/config</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;IdentityFile ~/.ssh/github_personal&quot;</span> &gt;&gt; ~/.ssh/config</span><br></pre></td></tr></table></figure><h4 id="Windows配置">Windows配置</h4><p>Windows 10/11的OpenSSH自带ssh-agent服务：</p><p><strong>启用服务</strong>：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 以管理员身份运行PowerShell</span></span><br><span class="line"><span class="comment"># 启动ssh-agent服务</span></span><br><span class="line"><span class="built_in">Set-Service</span> ssh<span class="literal">-agent</span> <span class="literal">-StartupType</span> Automatic</span><br><span class="line"><span class="built_in">Start-Service</span> ssh<span class="literal">-agent</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加密钥</span></span><br><span class="line">ssh<span class="literal">-add</span> <span class="variable">$env:USERPROFILE</span>\.ssh\id_ed25519</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看已添加密钥</span></span><br><span class="line">ssh<span class="literal">-add</span> <span class="literal">-l</span></span><br></pre></td></tr></table></figure><p><strong>Git Bash配置</strong>：</p><p>在 <code>~/.bashrc</code> 或 <code>~/.bash_profile</code> 添加：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 启动ssh-agent</span></span><br><span class="line"><span class="built_in">eval</span> $(ssh-agent -s)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加密钥</span></span><br><span class="line">ssh-add ~/.ssh/id_ed25519</span><br></pre></td></tr></table></figure><h4 id="验证Agent工作">验证Agent工作</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看agent中的密钥</span></span><br><span class="line">ssh-add -l</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除某个密钥</span></span><br><span class="line">ssh-add -d ~/.ssh/github_work</span><br><span class="line"></span><br><span class="line"><span class="comment"># 清空所有密钥</span></span><br><span class="line">ssh-add -D</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试连接（应该不需要输入passphrase）</span></span><br><span class="line">ssh vps-prod</span><br></pre></td></tr></table></figure><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 350">  <defs>    <style>      .box { fill: #e3f2fd; stroke: #1976d2; stroke-width: 2; }      .flow { fill: none; stroke: #1976d2; stroke-width: 2; marker-end: url(#arrow); }      .text { font-family: Arial, sans-serif; font-size: 14px; fill: #333; }      .title { font-weight: bold; font-size: 16px; }    </style>    <marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">      <polygon points="0 0, 10 3, 0 6" fill="#1976d2" />    </marker>  </defs><p><text x="350" y="30" class="text title" text-anchor="middle">SSH Agent 工作流程</text></p>  <!-- Step 1 -->  <rect x="50" y="60" width="150" height="60" class="box" rx="5"/>  <text x="125" y="85" class="text" text-anchor="middle">1. 首次连接</text>  <text x="125" y="105" class="text" text-anchor="middle">输入passphrase</text>  <!-- Arrow 1 -->  <path d="M200 90 L250 90" class="flow"/>  <!-- Step 2 -->  <rect x="250" y="60" width="150" height="60" class="box" rx="5"/>  <text x="325" y="85" class="text" text-anchor="middle">2. 私钥解密</text>  <text x="325" y="105" class="text" text-anchor="middle">加入Agent缓存</text>  <!-- Arrow 2 -->  <path d="M400 90 L450 90" class="flow"/>  <!-- Step 3 -->  <rect x="450" y="60" width="150" height="60" class="box" rx="5"/>  <text x="525" y="85" class="text" text-anchor="middle">3. 后续连接</text>  <text x="525" y="105" class="text" text-anchor="middle">自动使用缓存</text>  <!-- Agent Box -->  <rect x="250" y="180" width="200" height="120" class="box" rx="5"/>  <text x="350" y="210" class="text title" text-anchor="middle">SSH Agent</text>  <text x="350" y="240" class="text" text-anchor="middle">内存中缓存</text>  <text x="350" y="260" class="text" text-anchor="middle">已解密的私钥</text>  <text x="350" y="280" class="text" text-anchor="middle">自动提供认证</text>  <!-- Connection from step 3 to agent -->  <path d="M525 120 L525 150 L380 150 L380 180" class="flow"/>  <!-- Timeout info -->  <rect x="500" y="200" width="150" height="80" fill="#fff3cd" stroke="#856404" stroke-width="2" rx="5"/>  <text x="575" y="225" class="text" text-anchor="middle">默认超时</text>  <text x="575" y="245" class="text" text-anchor="middle">Agent重启</text>  <text x="575" y="265" class="text" text-anchor="middle">或系统重启</text></svg><hr><h3 id="3-5-不同客户端配置">3.5 不同客户端配置</h3><h4 id="VSCode-Remote-SSH">VSCode Remote SSH</h4><p>很多出海开发者用VSCode直接连服务器开发，配置SSH密钥后超级方便：</p><p><strong>安装插件</strong>：</p><ol><li>VSCode 左侧点击扩展图标（或按 <code>Cmd+Shift+X</code> Mac / <code>Ctrl+Shift+X</code> Windows）</li><li>搜索 “Remote - SSH”</li><li>点击 Install 安装</li></ol><p><strong>配置连接</strong>：<br>按 <code>Cmd+Shift+P</code>（Mac）或 <code>Ctrl+Shift+P</code>（Windows），输入 <code>Remote-SSH: Connect to Host</code>，选择你在 <code>~/.ssh/config</code> 中配置的别名。</p><p><strong>指定密钥</strong>：</p><p>如果VSCode找不到密钥，在SSH config中明确指定：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Host vps-dev</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User dev</span><br><span class="line">    IdentityFile ~/.ssh/my_dev_key</span><br></pre></td></tr></table></figure><h4 id="Termius-MobaXterm-等第三方工具">Termius / MobaXterm 等第三方工具</h4><p>这些工具有图形界面，密钥配置方式：</p><p><strong>Termius</strong>（<a href="https://ittinker.com/go/termius">我用这个，跨设备同步密钥很方便</a>）：</p><ol><li>Preferences → Keys → Import Key</li><li>选择你的私钥文件</li><li>新建Host时，在Key field选择导入的密钥</li></ol><p><strong>MobaXterm</strong>（<a href="https://ittinker.com/go/mobaxterm">免费版够用</a>）：</p><ol><li>Tools → MobaKeyGen 生成或导入密钥</li><li>Session配置 → SSH settings → Use private key</li><li>选择你保存的 <code>.ppk</code> 文件</li></ol><blockquote><p>💡 <strong>格式转换</strong></p><p>某些Windows工具需要PuTTY格式的 <code>.ppk</code> 文件，用PuTTYgen转换：</p><ol><li>打开PuTTYgen</li><li>Load → 选择你的OpenSSH私钥</li><li>Save private key → 保存为 <code>.ppk</code></li></ol></blockquote><h4 id="手机端应急">手机端应急</h4><p><strong>Termius (iOS/Android)</strong>：</p><ul><li>支持SSH密钥，可以从电脑同步或手动导入</li><li>设置好之后，手机也能应急管理服务器</li></ul><p><strong>JuiceSSH (Android)</strong>：</p><ul><li>支持密钥认证</li><li>可以生成新密钥或导入现有密钥</li></ul><hr><h3 id="3-6-多账号场景（GitHub-GitLab等）">3.6 多账号场景（GitHub/GitLab等）</h3><p>出海开发者通常有多个GitHub账号：个人项目、公司项目、为客户管理的账号。</p><h4 id="为每个平台生成独立密钥">为每个平台生成独立密钥</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># GitHub 个人账号</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/github_personal -C <span class="string">&quot;personal@github&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># GitHub 工作账号</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/github_work -C <span class="string">&quot;work@github&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># GitLab</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/gitlab -C <span class="string">&quot;yourname@gitlab&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Gitee（国内项目）</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/gitee -C <span class="string">&quot;yourname@gitee&quot;</span></span><br></pre></td></tr></table></figure><h4 id="SSH-Config配置">SSH Config配置</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"># GitHub 个人</span><br><span class="line">Host github.com</span><br><span class="line">    HostName github.com</span><br><span class="line">    User git</span><br><span class="line">    IdentityFile ~/.ssh/github_personal</span><br><span class="line">    IdentitiesOnly yes</span><br><span class="line"></span><br><span class="line"># GitHub 工作（用别名区分）</span><br><span class="line">Host github-work</span><br><span class="line">    HostName github.com</span><br><span class="line">    User git</span><br><span class="line">    IdentityFile ~/.ssh/github_work</span><br><span class="line">    IdentitiesOnly yes</span><br><span class="line"></span><br><span class="line"># GitLab</span><br><span class="line">Host gitlab.com</span><br><span class="line">    HostName gitlab.com</span><br><span class="line">    User git</span><br><span class="line">    IdentityFile ~/.ssh/gitlab</span><br><span class="line">    IdentitiesOnly yes</span><br><span class="line"></span><br><span class="line"># Gitee</span><br><span class="line">Host gitee.com</span><br><span class="line">    HostName gitee.com</span><br><span class="line">    User git</span><br><span class="line">    IdentityFile ~/.ssh/gitee</span><br><span class="line">    IdentitiesOnly yes</span><br></pre></td></tr></table></figure><h4 id="添加公钥到各平台">添加公钥到各平台</h4><p><strong>GitHub</strong>：</p><ol><li>Settings → SSH and GPG keys → New SSH key</li><li>粘贴 <code>~/.ssh/github_personal.pub</code> 的内容</li><li>Title设置为 “MacBook Pro” 或其他设备名</li></ol><p><strong>GitLab</strong>：</p><ol><li>Preferences → SSH Keys</li><li>粘贴公钥内容</li><li>Add key</li></ol><h4 id="Git仓库配置">Git仓库配置</h4><p>对于不同的GitHub账号，在仓库中设置不同的user（不同账号需要提交不同的作者信息，否则 commit 会显示错误的账号；这是仓库级配置，只对当前仓库生效）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 个人仓库</span></span><br><span class="line"><span class="built_in">cd</span> ~/projects/personal/myproject</span><br><span class="line">git config user.name <span class="string">&quot;Your Name&quot;</span></span><br><span class="line">git config user.email <span class="string">&quot;personal@email.com&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 工作仓库</span></span><br><span class="line"><span class="built_in">cd</span> ~/projects/work/companyproject</span><br><span class="line">git config user.name <span class="string">&quot;Your Name&quot;</span></span><br><span class="line">git config user.email <span class="string">&quot;work@company.com&quot;</span></span><br></pre></td></tr></table></figure><h4 id="测试连接">测试连接</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 测试GitHub个人账号</span></span><br><span class="line">ssh -T git@github.com</span><br><span class="line"><span class="comment"># Hi personalname! You&#x27;ve successfully authenticated...</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试GitHub工作账号</span></span><br><span class="line">ssh -T git@github-work</span><br><span class="line"><span class="comment"># Hi workname! You&#x27;ve successfully authenticated...</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试GitLab</span></span><br><span class="line">ssh -T git@gitlab.com</span><br><span class="line"><span class="comment"># Welcome to GitLab, @yourname!</span></span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>为什么要 IdentitiesOnly yes？</strong></p><p>SSH默认会尝试所有找到的密钥，服务器会拒绝太多认证尝试。加上这个参数，SSH只尝试指定的密钥，更快更可靠。</p></blockquote><hr><h3 id="3-7-禁用密码登录（最后一步，别急着做）">3.7 禁用密码登录（最后一步，别急着做）</h3><blockquote><p>⚠️ <strong>顺序铁律</strong>：先开一个<strong>新终端</strong>用密钥测通能登录，再禁密码。顺序反了会把自己锁在服务器外面。</p></blockquote><p>密钥配好、测通后，把密码登录关掉，全网的爆破脚本就彻底没戏了：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 先开一个新终端，用密钥测登录（原终端保持开着，留作回退）</span></span><br><span class="line">ssh -i ~/.ssh/id_ed25519 user@server</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 确认能登进后，改 sshd 配置</span></span><br><span class="line">sudo nano /etc/ssh/sshd_config</span><br><span class="line"><span class="comment"># 找到或新增这两行：</span></span><br><span class="line"><span class="comment">#   PasswordAuthentication no</span></span><br><span class="line"><span class="comment">#   PubkeyAuthentication yes</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 重载 sshd（不断当前连接）</span></span><br><span class="line">sudo systemctl reload sshd</span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 再开一个新终端验证：密钥能登、密码登不上</span></span><br><span class="line">ssh user@server                             <span class="comment"># 应该直接进去（密钥）</span></span><br><span class="line">ssh -o PubkeyAuthentication=no user@server  <span class="comment"># 应该被拒（密码已关）</span></span><br></pre></td></tr></table></figure><p>万一密钥登不上：原终端还开着，把 <code>PasswordAuthentication</code> 改回 <code>yes</code>、再 <code>reload sshd</code> 即可回退，不会把自己锁死。这一步是 SSH 安全的地基，但<strong>一定放在最后</strong>——前面所有密钥配置都是为了它能安全落地。</p><hr><h2 id="4、总结">4、总结</h2><h3 id="关键要点回顾">关键要点回顾</h3><table><thead><tr><th>主题</th><th>关键命令/配置</th><th>为什么要这么做</th></tr></thead><tbody><tr><td>生成密钥</td><td><code>ssh-keygen -t ed25519 -C &quot;注释&quot;</code></td><td>不同用途用不同密钥，方便隔离和轮换</td></tr><tr><td>上传公钥</td><td><code>ssh-copy-id -i key.pub user@host</code></td><td>最简单的方式，自动配置权限</td></tr><tr><td>SSH Config</td><td><code>~/.ssh/config</code> 配置文件</td><td>一个命令管理所有服务器，不用记IP端口用户名</td></tr><tr><td>多账号</td><td>用Host别名区分（github-work、github）</td><td>同一平台多个账号，各自独立</td></tr><tr><td>SSH Agent</td><td><code>ssh-add</code> + <code>AddKeysToAgent yes</code></td><td>Passphrase只输一次，省时省力</td></tr><tr><td>权限检查</td><td><code>chmod 700 ~/.ssh &amp;&amp; chmod 600 authorized_keys</code></td><td>SSH对权限要求严格，错了会拒绝密钥登录</td></tr><tr><td>测试连接</td><td><code>ssh -v user@host</code></td><td>用 <code>-v</code> 查详细日志，排查问题</td></tr></tbody></table><h3 id="配置文件位置速查">配置文件位置速查</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">本地电脑：</span><br><span class="line">~/.ssh/config              # SSH客户端配置</span><br><span class="line">~/.ssh/id_ed25519          # 默认私钥</span><br><span class="line">~/.ssh/id_ed25519.pub      # 默认公钥</span><br><span class="line">~/.ssh/github_personal     # GitHub个人私钥</span><br><span class="line"></span><br><span class="line">服务器：</span><br><span class="line">~/.ssh/authorized_keys     # 允许登录的公钥列表</span><br><span class="line">/etc/ssh/sshd_config       # SSH服务端配置</span><br></pre></td></tr></table></figure><h3 id="安全建议">安全建议</h3><ol><li><strong>密钥分层</strong>：生产环境、测试环境、个人账号用不同密钥</li><li><strong>定期轮换</strong>：每半年到一年换一次密钥（特别是私钥没设passphrase的）</li><li><strong>备份密钥</strong>：私钥加密备份到安全的地方（U盘、密码管理器）</li><li><strong>监控登录</strong>：定期用 <code>last</code> 命令查看登录记录</li><li><strong>撤回密钥</strong>：电脑丢了，立即从服务器删除 <code>~/.ssh/authorized_keys</code> 中的对应公钥</li></ol><h3 id="常用命令速查">常用命令速查</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成密钥</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;注释&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 上传公钥</span></span><br><span class="line">ssh-copy-id -i key.pub user@host</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试连接</span></span><br><span class="line">ssh -v user@host</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看已添加密钥</span></span><br><span class="line">ssh-add -l</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看指纹（验证密钥）</span></span><br><span class="line">ssh-keygen -lf ~/.ssh/id_ed25519.pub</span><br><span class="line"></span><br><span class="line"><span class="comment"># 修改passphrase</span></span><br><span class="line">ssh-keygen -p -f ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"><span class="comment"># 从私钥提取公钥</span></span><br><span class="line">ssh-keygen -y -f ~/.ssh/id_ed25519 &gt; ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><hr><h2 id="5、异常记录">5、异常记录</h2><h3 id="Q1：还是提示输入密码？">Q1：还是提示输入密码？</h3><p><strong>诊断</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用详细模式查看SSH在用什么认证方式</span></span><br><span class="line">ssh -v user@host</span><br></pre></td></tr></table></figure><p><strong>常见原因</strong>：</p><ol><li><p><strong>服务器上密钥没配置对</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在服务器上检查</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 确认你的公钥在里面，是一整行，没有换行</span></span><br></pre></td></tr></table></figure></li><li><p><strong>权限问题</strong>（最常见）</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在服务器上修复</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R youruser:youruser ~/.ssh</span><br></pre></td></tr></table></figure></li><li><p><strong>SSH配置禁用了密钥认证</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在服务器上检查</span></span><br><span class="line">grep PubkeyAuthentication /etc/ssh/sshd_config</span><br><span class="line"><span class="comment"># 应该是：PubkeyAuthentication yes</span></span><br></pre></td></tr></table></figure></li><li><p><strong>用错了私钥</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 明确指定私钥</span></span><br><span class="line">ssh -i ~/.ssh/correct_key user@host</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2：权限太开放（Permissions-are-too-open）？">Q2：权限太开放（Permissions are too open）？</h3><p>错误信息：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Permissions 0644 for &#x27;/home/user/.ssh/id_ed25519&#x27; are too open.</span><br></pre></td></tr></table></figure><p><strong>解决</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修复私钥权限（必须600）</span></span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"><span class="comment"># 修复私钥目录权限（必须700）</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>为什么SSH这么在意权限？</strong></p><p>如果私钥文件能被其他用户读取，安全就没意义了。SSH严格检查权限，避免你无意中暴露私钥。</p></blockquote><h3 id="Q3：Windows上没有ssh-copy-id？">Q3：Windows上没有ssh-copy-id？</h3><p><strong>方法A：用PowerShell</strong></p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">type</span> <span class="variable">$env:USERPROFILE</span>\.ssh\id_ed25519.pub | ssh user@host <span class="string">&quot;mkdir -p ~/.ssh &amp;&amp; cat &gt;&gt; ~/.ssh/authorized_keys&quot;</span></span><br></pre></td></tr></table></figure><p><strong>方法B：手动复制</strong></p><ol><li><code>cat ~/.ssh/id_ed25519.pub</code></li><li>复制输出</li><li>SSH登录服务器，手动粘贴到 <code>~/.ssh/authorized_keys</code></li></ol><p><strong>方法C：用第三方工具</strong></p><p>Termius、MobaXterm等图形化工具都有密钥管理功能，比命令行更直观。</p><h3 id="Q4：SSH-Agent不工作？">Q4：SSH Agent不工作？</h3><p><strong>检查agent是否运行</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Mac/Linux</span></span><br><span class="line"><span class="built_in">echo</span> <span class="variable">$SSH_AUTH_SOCK</span></span><br><span class="line"><span class="comment"># 如果是空的，说明agent没启动</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 启动agent</span></span><br><span class="line"><span class="built_in">eval</span> <span class="string">&quot;<span class="subst">$(ssh-agent -s)</span>&quot;</span></span><br></pre></td></tr></table></figure><p><strong>检查密钥是否已添加</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ssh-add -l</span><br><span class="line"><span class="comment"># 应该列出已添加的密钥</span></span><br><span class="line"><span class="comment"># 如果是 &quot;The agent has no identities&quot;，需要添加密钥</span></span><br><span class="line">ssh-add ~/.ssh/your_key</span><br></pre></td></tr></table></figure><p><strong>Windows服务没启动</strong>：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 以管理员身份运行</span></span><br><span class="line"><span class="built_in">Get-Service</span> ssh<span class="literal">-agent</span></span><br><span class="line"><span class="comment"># 如果Status是Stopped，启动它</span></span><br><span class="line"><span class="built_in">Start-Service</span> ssh<span class="literal">-agent</span></span><br><span class="line"><span class="built_in">Set-Service</span> ssh<span class="literal">-agent</span> <span class="literal">-StartupType</span> Automatic</span><br></pre></td></tr></table></figure><h3 id="Q5：多个密钥SSH都试但都不对？">Q5：多个密钥SSH都试但都不对？</h3><p><strong>症状</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Too many authentication failures</span><br></pre></td></tr></table></figure><p><strong>原因</strong>：SSH默认会尝试所有找到的密钥，服务器拒绝太多尝试。</p><p><strong>解决</strong>：在SSH config中加上 <code>IdentitiesOnly yes</code></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Host myserver</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User myuser</span><br><span class="line">    IdentityFile ~/.ssh/my_key</span><br><span class="line">    IdentitiesOnly yes    # 关键：只尝试指定的密钥</span><br></pre></td></tr></table></figure><h3 id="Q6：想换掉旧密钥？">Q6：想换掉旧密钥？</h3><p><strong>步骤</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 生成新密钥</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new -C <span class="string">&quot;rotated@2026&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 上传新公钥到服务器</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@host</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 测试新密钥登录</span></span><br><span class="line">ssh -i ~/.ssh/id_ed25519_new user@host</span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 用新密钥登录（保持用新密钥，别用默认/旧密钥），从服务器删除旧公钥</span></span><br><span class="line">ssh -i ~/.ssh/id_ed25519_new user@host</span><br><span class="line">vim ~/.ssh/authorized_keys  <span class="comment"># 手动删除旧公钥那一行</span></span><br><span class="line"><span class="comment"># ⚠️ 删公钥前先备份，误删会把自己关在服务器外！</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 更新SSH config（如果用了自定义文件名）</span></span><br><span class="line"><span class="comment"># 6. 删除旧私钥</span></span><br><span class="line"><span class="built_in">rm</span> ~/.ssh/id_ed25519_old</span><br></pre></td></tr></table></figure><h3 id="Q7：密钥指纹不匹配？">Q7：密钥指纹不匹配？</h3><p>首次连接会看到：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;xxx&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:...</span><br></pre></td></tr></table></figure><p><strong>验证指纹</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 从服务器获取指纹</span></span><br><span class="line">ssh-keyscan -t ed25519 host 2&gt;/dev/null | ssh-keygen -lf -</span><br><span class="line"></span><br><span class="line"><span class="comment"># 或者让服务商提供指纹（VPS控制台通常会显示）</span></span><br></pre></td></tr></table></figure><p><strong>指纹不匹配怎么办？</strong></p><p>立即停止连接！可能是中间人攻击。联系服务商确认。</p><h3 id="Q8：Git-push提示权限拒绝？">Q8：Git push提示权限拒绝？</h3><p><strong>问题</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ERROR: Permission to username/repo.git denied to deploykey</span><br></pre></td></tr></table></figure><p><strong>原因</strong>：密钥没对，或者SSH config没配置好。</p><p><strong>解决</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 测试SSH连接</span></span><br><span class="line">ssh -T git@github.com</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 检查用到的密钥</span></span><br><span class="line">ssh -vT git@github.com</span><br><span class="line"><span class="comment"># 在输出中找 &quot;Offering public key&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 在SSH config中明确指定密钥</span></span><br><span class="line">Host github.com</span><br><span class="line">    IdentityFile ~/.ssh/correct_github_key</span><br><span class="line">    IdentitiesOnly <span class="built_in">yes</span></span><br></pre></td></tr></table></figure><hr><h2 id="6、进阶技巧">6、进阶技巧</h2><h3 id="一键添加多个密钥到Agent">一键添加多个密钥到Agent</h3><p>在 <code>~/.bashrc</code> 或 <code>~/.zshrc</code> 中添加：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 自动添加所有密钥到ssh-agent</span></span><br><span class="line"><span class="function"><span class="title">add_ssh_keys</span></span>() &#123;</span><br><span class="line">    <span class="built_in">local</span> keys=(</span><br><span class="line">        ~/.ssh/id_ed25519</span><br><span class="line">        ~/.ssh/github_personal</span><br><span class="line">        ~/.ssh/github_work</span><br><span class="line">        ~/.ssh/prod_key</span><br><span class="line">    )</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span> key <span class="keyword">in</span> <span class="string">&quot;<span class="variable">$&#123;keys[@]&#125;</span>&quot;</span>; <span class="keyword">do</span></span><br><span class="line">        <span class="keyword">if</span> [ -f <span class="string">&quot;<span class="variable">$key</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">            ssh-add --apple-use-keychain <span class="string">&quot;<span class="variable">$key</span>&quot;</span> 2&gt;/dev/null || ssh-add <span class="string">&quot;<span class="variable">$key</span>&quot;</span> 2&gt;/dev/null</span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">done</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 启动agent并添加密钥</span></span><br><span class="line"><span class="keyword">if</span> [ -z <span class="string">&quot;<span class="variable">$SSH_AUTH_SOCK</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">eval</span> <span class="string">&quot;<span class="subst">$(ssh-agent -s)</span>&quot;</span></span><br><span class="line">    add_ssh_keys</span><br><span class="line"><span class="keyword">fi</span></span><br></pre></td></tr></table></figure><h3 id="密钥过期提醒">密钥过期提醒</h3><p>创建一个定期任务检查密钥年龄：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># check_ssh_keys.sh</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> key <span class="keyword">in</span> ~/.ssh/*.pub; <span class="keyword">do</span></span><br><span class="line">    <span class="keyword">if</span> [ -f <span class="string">&quot;<span class="variable">$key</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">        <span class="comment"># macOS 用 stat -f %m；Linux 改成 stat -c %Y</span></span><br><span class="line">        mtime=$(<span class="built_in">stat</span> -f %m <span class="string">&quot;<span class="variable">$key</span>&quot;</span> 2&gt;/dev/null || <span class="built_in">stat</span> -c %Y <span class="string">&quot;<span class="variable">$key</span>&quot;</span>)</span><br><span class="line">        age=$(( ($(date +%s) - mtime) / <span class="number">86400</span> ))</span><br><span class="line">        <span class="keyword">if</span> [ <span class="variable">$age</span> -gt 365 ]; <span class="keyword">then</span></span><br><span class="line">            <span class="built_in">echo</span> <span class="string">&quot;⚠️  密钥 <span class="subst">$(basename $key)</span> 已经 <span class="variable">$age</span> 天没换了，考虑轮换&quot;</span></span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"><span class="keyword">done</span></span><br></pre></td></tr></table></figure><h3 id="密钥轮换脚本">密钥轮换脚本</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># rotate_ssh_key.sh</span></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line">KEY_NAME=<span class="string">&quot;<span class="variable">$1</span>&quot;</span></span><br><span class="line">NEW_KEY=<span class="string">&quot;<span class="variable">$&#123;KEY_NAME&#125;</span>_new_<span class="subst">$(date +%Y%m%d)</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== SSH密钥轮换脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;目标密钥：<span class="variable">$KEY_NAME</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;新密钥名：<span class="variable">$NEW_KEY</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 生成新密钥</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/5] 生成新密钥...&quot;</span></span><br><span class="line">ssh-keygen -t ed25519 -f ~/.ssh/<span class="string">&quot;<span class="variable">$NEW_KEY</span>&quot;</span> -C <span class="string">&quot;rotated@<span class="subst">$(date +%Y-%m-%d)</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 显示公钥，提示上传</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/5] 请将以下公钥上传到服务器：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/<span class="string">&quot;<span class="variable">$&#123;NEW_KEY&#125;</span>&quot;</span>.pub</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">read</span> -p <span class="string">&quot;上传完成后按回车继续...&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 测试新密钥</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/5] 测试新密钥...&quot;</span></span><br><span class="line"><span class="built_in">read</span> -p <span class="string">&quot;输入服务器地址（user@host）: &quot;</span> server</span><br><span class="line">ssh -i ~/.ssh/<span class="string">&quot;<span class="variable">$NEW_KEY</span>&quot;</span> <span class="string">&quot;<span class="variable">$server</span>&quot;</span> <span class="string">&quot;echo &#x27;新密钥测试成功&#x27;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 备份旧密钥</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/5] 备份旧密钥...&quot;</span></span><br><span class="line"><span class="built_in">mv</span> ~/.ssh/<span class="string">&quot;<span class="variable">$KEY_NAME</span>&quot;</span> ~/.ssh/<span class="string">&quot;<span class="variable">$&#123;KEY_NAME&#125;</span>_backup_<span class="subst">$(date +%Y%m%d)</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 重命名新密钥</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/5] 重命名新密钥...&quot;</span></span><br><span class="line"><span class="built_in">mv</span> ~/.ssh/<span class="string">&quot;<span class="variable">$NEW_KEY</span>&quot;</span> ~/.ssh/<span class="string">&quot;<span class="variable">$KEY_NAME</span>&quot;</span></span><br><span class="line"><span class="built_in">mv</span> ~/.ssh/<span class="string">&quot;<span class="variable">$&#123;NEW_KEY&#125;</span>.pub&quot;</span> ~/.ssh/<span class="string">&quot;<span class="variable">$&#123;KEY_NAME&#125;</span>.pub&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;✅ 密钥轮换完成！旧密钥已备份。&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7、FAQ（SSH-密钥最常问）">7、FAQ（SSH 密钥最常问）</h2><p><strong>Q：ed25519 和 RSA 选哪个？</strong><br>新装一律 ed25519——密钥短、握手快、抗碰撞强度高。老的 RSA 2048 还能用但没必要新生成；RSA 1024 必须立刻换。</p><p><strong>Q：私钥 passphrase 忘了怎么办？</strong><br>找不回，只能重新生成密钥对、重新上传公钥。所以 passphrase 存密码管理器（1Password/Bitwarden），别靠脑子记。</p><p><strong>Q：一台电脑能放多把密钥吗？</strong><br>能。~/.ssh/ 下放多把，用 ~/.ssh/config 的 IdentityFile 给每个 Host 指定对应密钥。别一把密钥走天下（一台泄露全沦陷）。</p><p><strong>Q：换电脑怎么迁移密钥？</strong><br>把 ~/.ssh/ 整个目录（含 .pub 和 config）拷过去，注意私钥权限 600。更稳的做法：新电脑新生成密钥，把旧公钥在服务器撤销。</p><p><strong>Q：禁了密码登录会把自己锁外面吗？</strong><br>会，所以顺序是：先配好密钥 → 开新终端用密钥测能登录 → 再禁密码。千万别先禁密码再配密钥。</p><h2 id="下一篇预告">下一篇预告</h2><p>密钥配好、禁了密码，SSH 的地基就稳了。如果还没 VPS 练手，我推荐 <a href="https://ittinker.com/go/vultr">Vultr</a> · <a href="https://ittinker.com/go/do">DigitalOcean</a>。下一篇讲 <strong>SSH Config 进阶：Include 子配置、跳板机（ProxyJump）、连接复用</strong>，把多服务器管理再往前推一步。</p><hr><p><em>这是「独立开发者工具箱」第 8 篇，系列持续更新中，帮你少踩坑多出海。</em></p><p><strong>Sources</strong>:</p><ul><li><a href="https://www.brandonchecketts.com/archives/ssh-ed25519-key-best-practices-for-2025">SSH Key Best Practices for 2025</a></li><li><a href="https://docs.github.com/zh/enterprise-cloud@latest/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent">Generate New SSH Keys and Add to ssh-agent - GitHub Docs</a></li><li><a href="https://sshkeygenerator.com/zh-Hans/how-to-set-up-ssh/">SSH Key Generator - Complete Guide</a></li><li><a href="https://medium.com/@PopularDemand/ssh-copy-id-127a105643ac">ssh-copy-id Usage</a></li><li><a href="https://stackoverflow.com/questions/2419566/how-to-configure-multiple-ssh-private-keys-for-different-servers-efficiently">SSH Config Multiple Keys Discussion</a></li><li><a href="https://www.redhat.com/en/blog/manage-multiple-ssh-key-pairs">Red Hat Blog - Manage Multiple SSH Key Pairs</a></li></ul>]]>
    </content>
    <id>https://blog.ittinker.com/posts/20260731-sshmi-yao-deng-lu-pei-zhi-su-cha-cong-dan-ji-dao-duo-fu-wu-qi-guan-li-de-wan-zheng-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/20260731-sshmi-yao-deng-lu-pei-zhi-su-cha-cong-dan-ji-dao-duo-fu-wu-qi-guan-li-de-wan-zheng-zhi-nan/"/>
    <published>2026-07-31T10:00:00.000Z</published>
    <summary>深入讲解SSH密钥的各种使用场景：多服务器管理、不同密钥配置、SSH Agent免密、多客户端设置，附带常见问题排查。</summary>
    <title>SSH密钥登录配置速查：从单机到多服务器管理的完整指南</title>
    <updated>2026-07-31T10:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="独立开发者工具箱" scheme="https://blog.ittinker.com/categories/%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7%E7%AE%B1/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="服务器安全" scheme="https://blog.ittinker.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8/"/>
    <category term="独立开发" scheme="https://blog.ittinker.com/tags/%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <content>
      <![CDATA[<blockquote><p>新买的 VPS 就像一扇没上锁的门，全世界的脚本小子都在敲。这篇文章带你把门锁好。让你的小龙虾（openclaw）不会乱跑乱动。</p></blockquote><h2 id="0、写在前面">0、写在前面</h2><p>刚买了一台 VPS，兴冲冲地拿到 IP 和 root 密码，然后呢？</p><p>很多人的做法是：直接开始装软件、部署项目。</p><p><strong>这是个危险的习惯。</strong></p><p>你的 VPS 有一个公网 IP，意味着全世界任何人都可以尝试连接它。而默认配置下：</p><ul><li>端口是公开的 <strong>22</strong></li><li>用户名是众所周知的 <strong>root</strong></li><li>只剩一个密码在保护你</li></ul><p>每天有无数自动化脚本在扫描 IP 段，尝试用常见密码暴力破解。你的服务器从上线那一刻起，就已经在被攻击了。</p><p>所以，<strong>拿到 VPS 后的第一件事，不是装软件，而是做安全初始化</strong>。</p><hr><h2 id="1、期望目标">1、期望目标</h2><p>这篇文章的目标是：</p><ul><li>✅ 建立<strong>安全的远程访问</strong>：SSH 密钥登录 + 非默认端口</li><li>✅ 创建<strong>普通用户</strong>：避免直接使用 root</li><li>✅ 配置<strong>防火墙</strong>：只开放必要端口</li><li>✅ 启用<strong>网络加速</strong>：BBR 让网络起飞</li><li>✅ 防止<strong>暴力破解</strong>：fail2ban 自动封禁恶意 IP</li></ul><p>做完这些，你的 VPS 就有了一个坚实的基础，可以安心部署各种服务了。</p><hr><h2 id="2、计划思考">2、计划思考</h2><h3 id="为什么要做这些配置？">为什么要做这些配置？</h3><p>刚买的 VPS 就像一间刚交付的毛坯房：</p><table><thead><tr><th>默认状态</th><th>风险</th><th>我们的解决方案</th></tr></thead><tbody><tr><td>root 用户直接登录</td><td>权限过大，误操作后果严重</td><td>创建普通用户 + sudo</td></tr><tr><td>密码登录</td><td>可被暴力破解</td><td>SSH 密钥登录</td></tr><tr><td>默认 22 端口</td><td>被扫描器重点照顾</td><td>改为非标准端口</td></tr><tr><td>防火墙关闭</td><td>所有端口对外暴露</td><td>UFW 只放行必要端口</td></tr><tr><td>原生网络</td><td>丢包率高、延迟大</td><td>BBR 拥塞控制算法</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="整体流程">整体流程</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>我们按照这个顺序来操作，每一步都会解释为什么这么做。</p><h2 id="3、操作步骤">3、操作步骤</h2><h3 id="3-1-首次登录与系统更新">3.1 首次登录与系统更新</h3><h4 id="获取服务器-IP">获取服务器 IP</h4><p>购买 VPS 后，服务商会给你：</p><ul><li><strong>IP 地址</strong>：如 <code>192.168.1.100</code></li><li><strong>端口</strong>：通常是 <code>22</code>（有些服务商会改成其他端口）</li><li><strong>用户名</strong>：通常是 <code>root</code></li><li><strong>密码</strong>：随机生成的一串字符</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="SSH-连接">SSH 连接</h4><p><strong>Mac / Linux 用户</strong>：打开终端，直接输入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows 用户</strong>：</p><ul><li>Windows 10/11 自带 OpenSSH，可以直接在 PowerShell 或 CMD 中使用上面的命令</li><li>或者使用 <a href="https://termius.com/">Termius</a>、<a href="https://mobaxterm.mobatek.net/">MobaXterm</a> 等工具</li></ul><p>首次连接会看到指纹确认提示：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>这是在问你：「我不认识这台机器，你确定要连接吗？」</p><p>输入 <code>yes</code> 然后回车。接着输入密码（<strong>注意：输入时不会显示任何字符，这是正常的安全设计</strong>），回车。</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>看到类似这样的提示，说明登录成功：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>为什么要确认指纹？</strong></p><p>这是为了防止&quot;中间人攻击&quot;。首次连接时记录服务器指纹，以后连接时如果指纹变了，说明可能有人在冒充你的服务器。</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="初识你的服务器">初识你的服务器</h4><p>登录后，先了解一下这台机器的基本情况：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>记住这些信息，后续排查问题时会用到。</p><h4 id="系统更新">系统更新</h4><p>了解完服务器信息，第一件正事是更新系统。新服务器的系统镜像可能是几个月前的，期间可能已经有安全补丁发布：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>参数解释：</strong></p><ul><li><code>apt update</code>：更新软件包索引</li><li><code>apt full-upgrade</code>：升级所有软件，包括内核</li><li><code>-y</code>：自动确认，不用手动输入 yes</li><li><code>apt autoremove</code>：删除不再需要的依赖</li><li><code>apt autoclean</code>：清理下载的安装包缓存</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ 这一步可能需要几分钟，取决于有多少更新。中间偶尔需要确认的，基本上按它的逻辑来就好了。</p></blockquote><h4 id="检查是否需要重启">检查是否需要重启</h4><p>内核更新后通常需要重启才能生效：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>如果提示需要重启：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>重启后需要重新 SSH 连接。</p><h4 id="安装常用工具">安装常用工具</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>这些工具是干嘛的：</strong></p><table><thead><tr><th>工具</th><th>用途</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>让普通用户执行管理员命令</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>下载文件</td><td></td></tr><tr><td><code>git</code></td><td>版本控制</td><td></td></tr><tr><td><code>vim</code></td><td>文本编辑器</td><td></td></tr><tr><td><code>htop</code></td><td>更好看的进程监控</td><td></td></tr><tr><td><code>tree</code></td><td>树形显示目录结构</td><td></td></tr><tr><td><code>net-tools</code></td><td>网络工具（ifconfig、netstat 等）</td><td></td></tr><tr><td><code>ufw</code></td><td>简单好用的防火墙</td><td></td></tr><tr><td><code>fail2ban</code></td><td>防暴力破解</td><td></td></tr><tr><td><code>neofetch</code></td><td>漂亮地显示系统信息</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-创建非root用户">3.2 创建非root用户</h3><h4 id="为什么不直接用-root？">为什么不直接用 root？</h4><p>root 用户权限太大了，一个手滑 <code>rm -rf /</code> 就全没了。日常操作应该用普通用户，需要管理员权限时再用 <code>sudo</code>。</p><blockquote><p>龙虾（openclaw）可是怪兽呀，咋敢把 root 给它用呢？</p></blockquote><h4 id="创建用户">创建用户</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>系统会提示你设置密码和一些信息：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="授予-sudo-权限">授予 sudo 权限</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>验证一下：</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>如果输出 <code>root</code>，说明 sudo 配置成功。<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>小技巧</strong></p><p>输入 <code>exit</code> 可以退回 root 用户。后面的操作我们继续用 root 来配置，配置完成后再切换到普通用户。</p></blockquote><hr><h3 id="3-3-配置SSH密钥登录">3.3 配置SSH密钥登录</h3><h4 id="密钥认证-vs-密码认证">密钥认证 vs 密码认证</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>密钥认证比密码安全得多：</p><ul><li>密码可以被暴力破解，密钥几乎不可能</li><li>不用每次输密码，更方便</li><li>即使密码泄露，没有私钥也登不上</li></ul><h4 id="步骤一：本地生成密钥对">步骤一：本地生成密钥对</h4><p>在<strong>你的电脑</strong>（不是服务器）上执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>会提示：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>直接回车使用默认路径。我们这里用了 ./ittinker ，就是表示存在当前路径下，文件名叫 ittinker</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>可以设置密钥密码（多一层保护），也可以直接回车留空。</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>生成完成后，你会在 <code>~/.ssh/</code> 目录下看到两个文件（下面是默认文件名，如果前面回车就会这样）：</p><ul><li><code>id_ed25519</code>：<strong>私钥</strong>，绝对不能泄露！</li><li><code>id_ed25519.pub</code>：<strong>公钥</strong>，要上传到服务器</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> 是目前推荐的算法，比传统的 RSA 更安全、密钥更短。如果你的系统太旧不支持，可以用 <code>ssh-keygen -t rsa -b 4096</code>。</p></blockquote><blockquote><p>一个小细节，ed 25519 生成的 key 是比较小的，rsa 的文件很大，问了 AI 才知道，大小没关系，和算法有关系。</p></blockquote><h4 id="步骤二：上传公钥到服务器">步骤二：上传公钥到服务器</h4><p><strong>方法 A：使用 ssh-copy-id（推荐）</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>输入密码后，公钥会自动复制到服务器。</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>方法 B：手动复制</strong></p><p>如果 <code>ssh-copy-id</code> 不可用，可以手动操作：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>复制输出的内容（一长串以 <code>ssh-ed25519</code> 开头的文本）。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>权限很重要！</strong></p><p>SSH 对文件权限有严格要求：</p><ul><li><code>.ssh</code> 目录：700（只有用户自己能访问）</li><li><code>authorized_keys</code> 文件：600（只有用户自己能读写）</li></ul><p>权限不对的话，SSH 会拒绝使用密钥登录。</p></blockquote><h4 id="步骤三：测试密钥登录">步骤三：测试密钥登录</h4><p><strong>新开一个终端窗口</strong>（保持原窗口不要关，万一配置错了还能补救），测试密钥登录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>如果不需要输入密码就能登录，说明密钥配置成功！🎉</p><p>（如果你给私钥设置了 passphrase，会提示输入私钥密码，这是正常的）<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>这里我们加了一个 -i 参数，是因为这个 key，我们不是默认路径，而是放在当前路径下，如果不指定，系统会使用默认 key。</p></blockquote><hr><h3 id="3-4-SSH安全加固">3.4 SSH安全加固</h3><p>现在密钥登录已经可以用了，我们来加固 SSH：</p><ol><li>修改默认端口（避免被扫描）</li><li>禁用密码登录</li><li>禁止 root 直接登录</li></ol><h4 id="编辑-SSH-配置文件">编辑 SSH 配置文件</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>找到并修改以下配置（有些可能被注释了，去掉前面的 <code>#</code>）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>保存并退出（<code>ctrl + o</code>）。</p><blockquote><p>Nano 保存是 ctrl + o，它会给文件名，直接回车，退出就是 ctrl + x</p></blockquote><h4 id="重启-SSH-服务">重启 SSH 服务</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>重要提醒！</strong></p><p><strong>不要关闭当前终端！</strong> 先在新窗口测试新配置能否正常登录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>如果能登录，再关闭旧窗口。如果登不上，还可以在旧窗口里修复配置。</p></blockquote><blockquote><p>如果你买的是轻量服务器，大概率这个端口改不了，传统的 ECS 是可以修改的，要注意。</p></blockquote><hr><h3 id="3-5-配置UFW防火墙">3.5 配置UFW防火墙</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW（Uncomplicated Firewall）是 Ubuntu 默认的防火墙工具，配置简单但功能强大。</p><h4 id="基本配置">基本配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="启用防火墙">启用防火墙</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>会提示：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>输入 <code>y</code> 确认。</p><h4 id="检查状态">检查状态</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 是我敲错了，大家按自己的实际情况来就好了</p></blockquote><p>输出类似：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="常用命令速查">常用命令速查</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-开启BBR加速">3.6 开启BBR加速</h3><p>BBR（Bottleneck Bandwidth and Round-trip propagation time）是 Google 开发的 TCP 拥塞控制算法，可以显著提升网络性能。</p><h4 id="一键开启">一键开启</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="验证是否开启">验证是否开启</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>输出应该是：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>输出类似：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>BBR 的效果</strong></p><p>开启 BBR 后，特别是在网络不稳定或高延迟的环境下，你会明显感觉到：</p><ul><li>下载速度更快</li><li>SSH 操作更流畅</li><li>网页加载更快</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-配置fail2ban防暴力破解">3.7 配置fail2ban防暴力破解</h3><p>fail2ban 会监控日志，发现多次登录失败的 IP 后自动封禁。</p><h4 id="基本配置-2">基本配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>找到 <code>[sshd]</code> 部分，确保以下配置：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="启动服务">启动服务</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="查看状态">查看状态</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>输出类似：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="常用命令">常用命令</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-可选-SSH-Config-多服务器管理">3.8 [可选] SSH Config 多服务器管理</h3><p>如果你有多台服务器，每次输入 <code>ssh -p 22000 user@ip</code> 很麻烦。可以用 SSH Config 来简化。</p><h4 id="配置文件">配置文件</h4><p>在<strong>你的本地电脑</strong>上编辑 <code>~/.ssh/config</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>添加配置：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="使用方法">使用方法</h4><p>现在可以直接用别名连接：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>省去了记 IP、端口、用户名的麻烦！</p><hr><h3 id="3-9-可选-仅允许Cloudflare访问">3.9 [可选] 仅允许Cloudflare访问</h3><p>如果你的网站完全在 Cloudflare 后面，可以设置只允许 Cloudflare 的 IP 访问 80/443 端口，增加安全性。</p><blockquote><p>⚠️ 注意：这个配置需要你的域名已经接入 Cloudflare CDN。</p></blockquote><h4 id="自动配置脚本">自动配置脚本</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>这个脚本会：</p><ol><li>从 Cloudflare 官方获取最新的 IP 段</li><li>添加 UFW 规则，只允许这些 IP 访问 80/443</li><li>重新加载 UFW</li></ol><h4 id="设置定时更新">设置定时更新</h4><p>Cloudflare 的 IP 段可能会变化，设置每周自动更新：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-设置时区">3.10 设置时区</h3><p>默认时区可能是 UTC，改成你所在的时区方便看日志：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-可选-配置自动安全更新">3.11 [可选] 配置自动安全更新</h3><p>让系统自动安装安全补丁，省得每次手动操作：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>选择「Yes」启用自动更新。</p><blockquote><p>💡 这个功能会自动安装<strong>安全更新</strong>，不会自动升级到新的大版本，相对安全。</p></blockquote><hr><h2 id="4、总结">4、总结</h2><h3 id="初始化检查清单">初始化检查清单</h3><p>完成以上配置后，用这个清单检查一遍：</p><table><thead><tr><th>检查项</th><th>命令</th><th>预期结果</th></tr></thead><tbody><tr><td>系统已更新</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>没有可升级的包</td></tr><tr><td>普通用户可 sudo</td><td><code>sudo whoami</code></td><td>输出 <code>root</code></td></tr><tr><td>密钥登录正常</td><td><code>ssh yourname@ip -p port</code></td><td>无需密码登录</td></tr><tr><td>密码登录已禁用</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH 端口已修改</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>你设置的端口</td></tr><tr><td>防火墙已启用</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR 已开启</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban 运行中</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>时区已设置</td><td><code>timedatectl</code></td><td>Asia/Shanghai 或你的时区</td></tr><tr><td>本地 SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>已配置服务器别名</td></tr></tbody></table><h3 id="关键文件位置">关键文件位置</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="安全最佳实践">安全最佳实践</h3><ol><li><strong>定期更新系统</strong>：<code>apt update &amp;&amp; apt upgrade</code></li><li><strong>定期检查登录日志</strong>：<code>lastb</code>（失败登录）、<code>last</code>（成功登录）</li><li><strong>及时关注 fail2ban 封禁情况</strong></li><li><strong>重要配置文件修改前先备份</strong></li></ol><hr><h2 id="5、异常记录">5、异常记录</h2><h3 id="Q1：密钥登录失败，还是要输密码？">Q1：密钥登录失败，还是要输密码？</h3><p><strong>可能原因：</strong></p><ol><li><p><strong>权限问题</strong>（最常见）</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>公钥没有正确复制</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux 干扰</strong>（CentOS/RHEL 系统）</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2：改端口后连不上了？">Q2：改端口后连不上了？</h3><p><strong>排查步骤：</strong></p><ol><li><p>确认新端口在防火墙中已开放：</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>确认 SSH 配置正确：</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>确认 SSH 服务正在运行：</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>如果完全连不上，用服务商的 VNC/控制台 登录修复。</p></li></ol><h3 id="Q2-5：修改端口根本不生效？（云厂商轻量服务器）">Q2.5：修改端口根本不生效？（云厂商轻量服务器）</h3><p><strong>现象</strong>：改了 <code>/etc/ssh/sshd_config</code>，重启服务后 22 端口还在，新端口没生效。</p><p><strong>诊断方法</strong>：</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>如果输出类似：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>说明 22 端口是由 <code>init</code>（PID 1）监听的，而不是 <code>sshd</code> 进程。</p><p><strong>原因</strong>：部分云厂商的「轻量应用服务器」或「容器实例」的 SSH 是由<strong>平台层代理</strong>的，你服务器内部的 sshd 配置不起作用。</p><p><strong>解决方案</strong>：</p><table><thead><tr><th>实例类型</th><th>SSH 端口修改方式</th></tr></thead><tbody><tr><td>传统 ECS</td><td>修改 sshd_config ✅</td></tr><tr><td>轻量服务器</td><td>可能需要在云控制台修改，或根本不支持</td></tr><tr><td>容器实例</td><td>通常不支持修改</td></tr></tbody></table><p>如果你的实例不支持改端口，<strong>其他安全措施更重要</strong>：</p><ul><li>✅ 创建普通用户 + 禁用 root 登录</li><li>✅ SSH 密钥登录 + 禁用密码登录</li><li>✅ fail2ban 防暴力破解</li></ul><p>这些措施做到位，安全性依然很高。</p><h3 id="Q3：fail2ban-把我自己封了？">Q3：fail2ban 把我自己封了？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4：UFW-启用后网站访问不了？">Q4：UFW 启用后网站访问不了？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5：执行命令提示找不到-sudo？">Q5：执行命令提示找不到 sudo？</h3><p>Debian 最小化安装可能没有 sudo，用 root 安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6、一键初始化脚本（熟练后使用）">6、一键初始化脚本（熟练后使用）</h2><p>如果你已经熟悉了上面的步骤，可以用这个脚本快速初始化。</p><blockquote><p>⚠️ <strong>注意</strong>：运行脚本前，先确保你已经准备好了 SSH 公钥。</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7、做完这些，安全性提升了多少？">7、做完这些，安全性提升了多少？</h2><table><thead><tr><th>步骤</th><th>做了什么</th><th>为什么重要</th></tr></thead><tbody><tr><td>更新系统</td><td>安装最新补丁</td><td>修复已知漏洞</td></tr><tr><td>创建新用户</td><td>不再直接用 root</td><td>减少误操作风险</td></tr><tr><td>SSH 密钥</td><td>用密钥替代密码</td><td>无法被暴力破解</td></tr><tr><td>修改端口</td><td>躲开默认的 22</td><td>减少被扫描到的概率</td></tr><tr><td>禁用密码</td><td>只允许密钥登录</td><td>彻底杜绝密码攻击</td></tr><tr><td>禁用 root</td><td>root 不能直接登录</td><td>增加攻击难度</td></tr><tr><td>UFW 防火墙</td><td>只开放必要端口</td><td>减少攻击面</td></tr><tr><td>BBR 加速</td><td>优化网络性能</td><td>提升访问速度</td></tr><tr><td>fail2ban</td><td>自动封禁恶意 IP</td><td>防止持续攻击</td></tr></tbody></table><p>做完这些，你的服务器安全性已经超过了 <strong>90%</strong> 的 VPS。</p><hr><h2 id="下一篇预告">下一篇预告</h2><p>下一篇我们来讲 <strong>SSH密钥登录配置速查</strong>，会更详细地介绍：</p><ul><li>不同系统生成密钥的方法</li><li>多密钥管理</li><li>SSH Agent 配置</li><li>常见 SSH 客户端设置</li></ul><hr><p><em>本文最后更新：2026年1月</em></p><p><em>独立开发者工具箱系列，欢迎关注！</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>新买的 VPS 像一扇没上锁的门，全世界的脚本小子都在敲。拿到 VPS 第一件事不是装软件，而是安全初始化：SSH 密钥登录、非默认端口、普通用户、防火墙、fail2ban、BBR 加速。这篇带你用第一个小时把地基打牢。</summary>
    <title>VPS 到手后的第一个小时：从裸机到安全可用的完整初始化指南（让你的OpenClaw更安全）</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="صندوق أدوات المطوّر المستقل" scheme="https://blog.ittinker.com/categories/%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B7%D9%88%D9%91%D8%B1-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%82%D9%84/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="لينكس" scheme="https://blog.ittinker.com/tags/%D9%84%D9%8A%D9%86%D9%83%D8%B3/"/>
    <category term="خادم افتراضي خاص (VPS)" scheme="https://blog.ittinker.com/tags/%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A-%D8%AE%D8%A7%D8%B5-VPS/"/>
    <category term="أمان الخادم" scheme="https://blog.ittinker.com/tags/%D8%A3%D9%85%D8%A7%D9%86-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85/"/>
    <category term="تطوير مستقل" scheme="https://blog.ittinker.com/tags/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D8%B3%D8%AA%D9%82%D9%84/"/>
    <content>
      <![CDATA[<blockquote><p>الـ VPS الجديد اللي لسه اشتريته زي باب مفيش له قفل، وكل سكريبت كيدز (Script Kiddies) في الدنيا بيدقوا عليه. المقال ده هياخدك بإيدك وتقفل الباب ده بإحكام، عشان مشروعك (openclaw) ما يجريش يمين وشمال ويبوظ لك الدنيا.</p></blockquote><h2 id="0-كلام-أول-أيه؟">0. كلام أول أيه؟</h2><p>لما تشتري VPS جديد، وتاخد الـ IP والـ root password وأنت طيران من الفرحة… بعد كده؟</p><p>ناس كتير بتعمل إيه؟ بتنزل السوفتوير على طول وتبدأ ترفع المشاريع.</p><p><strong>دي عادة خطيرة جداً.</strong></p><p>الـ VPS بتاعك ليه عنوان IP عام (Public IP)، ومعنى كده إن أي حد في الدنيا يقدر يحاول يتصل بيه. وفي الإعدادات اللي بتيجي على طول من الشركة:</p><ul><li>البورت (Port) مفتوح للعلن وهو <strong>22</strong></li><li>اسم اليوزر معروف للكل وهو <strong>root</strong></li><li>ومفيش حاجة بتحميك غير الباسوورد</li></ul><p>كل يوم في ملايين السكريبتات الأوتوماتيكية بتمسح رنج الـ IPs، وتحاول تكسر الباسووردات بالقوة (Brute-force). سيرفرك من أول لحظة ما يشتغل فيها، بيبقى تحت الهجوم.</p><p>عشان كده، <strong>أول حاجة لازم تعملها لما تاخد الـ VPS، مش تنزل سوفتوير، لا، ده لازم تعمل إعدادات أمان أساسية (Security Initialization)</strong>.</p><hr><h2 id="1-إحنا-هدفنا-إيه؟">1. إحنا هدفنا إيه؟</h2><p>الهدف من المقال ده هو:</p><ul><li>✅ إعداد <strong>وصول عن بُعد آمن</strong>: الدخول عبر مفاتيح SSH + استخدام منفذ غير افتراضي</li><li>✅ إنشاء <strong>مستخدم عادي</strong>: تجنّب استخدام root مباشرة</li><li>✅ ضبط <strong>الجدار الناري</strong>: فتح المنافذ الضرورية فقط</li><li>✅ تفعيل <strong>تسريع الشبكة</strong>: BBR لجعل شبكتك تنطلق بسرعة الصاروخ</li><li>✅ منع <strong>اختراق القوة الغاشمة</strong>: fail2ban لحظر عناوين IP الخبيثة تلقائيًا</li></ul><p>بعد الانتهاء من هذه الخطوات، سيكون لديك VPS مبني على أساس متين، وتقدر ترتاح وتنشر عليه مختلف الخدمات وأنت مطمئن.</p><hr><h2 id="2-التخطيط-والتفكير">2. التخطيط والتفكير</h2><h3 id="ليه-محتاجين-نعمل-كل-الإعدادات-دي؟">ليه محتاجين نعمل كل الإعدادات دي؟</h3><p>الـ VPS اللي لسه اشتريته زي بالظبط شقة لسه استلمتها “على الطوب”:</p><table><thead><tr><th>الوضع الافتراضي</th><th>المخاطرة</th><th>الحل اللي نطبقه</th></tr></thead><tbody><tr><td>الدخول بحساب root</td><td>صلاحيات واسعة، أخطاء مميتة</td><td>إنشاء مستخدم عادي + sudo</td></tr><tr><td>الدخول بكلمة المرور</td><td>قابلية الاختراق بالـ Brute Force</td><td>الدخول بمفاتيح SSH</td></tr><tr><td>المنفذ الافتراضي 22</td><td>هدف رئيسي للماسحات الضوئية</td><td>تغييره لمنفذ غير قياسي</td></tr><tr><td>الجدار الناري مغلق</td><td>كل المنافذ مكشوفة للعالم</td><td>استخدام UFW لفتح الضروري فقط</td></tr><tr><td>الشبكة الأصلية</td><td>فقدان حزم عالٍ وزمن استجابة كبير</td><td>خوارزمية تحكم الازدحام BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="الخطوات-الإجمالية">الخطوات الإجمالية</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>راح نمشي على هذا الترتيب خطوة بخطوة، ومع كل خطوة رح نشرح ليش نسويها بهذا الشكل.</p><h2 id="3-خطوات-التنفيذ">3. خطوات التنفيذ</h2><h3 id="3-1-أول-دخول-وتحديث-النظام">3.1 أول دخول وتحديث النظام</h3><h4 id="جلب-عنوان-IP-للخادم">جلب عنوان IP للخادم</h4><p>بعد ما تشتري VPS، مزود الخدمة راح يعطيك:</p><ul><li><strong>عنوان IP</strong>: مثل <code>192.168.1.100</code></li><li><strong>المنفذ (Port)</strong>: عادة يكون <code>22</code> (بعض مزودي الخدمة قد يغيرونه لمنفذ آخر)</li><li><strong>اسم المستخدم</strong>: غالباً يكون <code>root</code></li><li><strong>كلمة المرور</strong>: سلسلة عشوائية من الأحرف</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="الاتصال-عبر-SSH">الاتصال عبر SSH</h4><p><strong>لمستخدمي Mac / Linux</strong>: افتح موجه الأوامر (Terminal)، واكتب مباشرة:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>لمستخدمي Windows</strong>:</p><ul><li>ويندوز 10/11 يأتي مدمجاً معه OpenSSH، فتقدر تستخدم نفس الأمر السابق مباشرة في PowerShell أو CMD</li><li>أو تستخدم أدوات زي <a href="https://termius.com/">Termius</a> و <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>أول مرة تتصل فيها، رح يظهر لك تنبيه لتأكيد البصمة (Fingerprint):</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>هذا التنبيه basically بيقول لك: “أنا لا أعرف هذا الجهاز، هل أنت متأكد إنك تريد الاتصال به؟”</p><p>اكتب <code>yes</code> ثم اضغط Enter. بعدها اكتب كلمة المرور (<strong>انتبه: أثناء الكتابة مش رح تظهر أي أحرف على الشاشة، هذا تصميم أمان طبيعي</strong>), واضغط Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>إذا شفت رسالة مشابهة لهذي، معناته إنك نجحت في تسجيل الدخول:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>ليش لازم نتأكد من البصمة؟</strong></p><p>عشان نحمي نفسنا من هجوم “الرجل في الوسط” (Man-in-the-Middle). أول ما تتصل بالخادم، سجّل بصمته. إذا تغيرت البصمة في أي مرة جاية لما تتصل، معناها أن هناك احتمال واحد يسوّي نفسه خادمك ويسرق بياناتك.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="تعرّف-على-خادمك">تعرّف على خادمك</h4><p>أول ما تسجّل دخول، خذ لك لفة وافهم الوضع الأساسي لهالجهاز:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>احفظ هالمعلومات ببالكم، رح تحتاجونها بعدين لما تجون تحلون أي مشكلة.</p><h4 id="تحديث-النظام">تحديث النظام</h4><p>خلصنا من معلومات الخادم، أول شي لازم نسويه الحين هو تحديث النظام. صورة النظام بالخادم الجديد يمكن تكون من قبل كم شهر، ومن وقتها يمكن صدرت تحديثات أمنية:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>شرح المعطيات:</strong></p><ul><li><code>apt update</code>: تحديث فهرس الحزم (Packages)</li><li><code>apt full-upgrade</code>: ترقية كل البرامج، بما فيها النواة (Kernel)</li><li><code>-y</code>: تأكيد تلقائي، عشان ما تدخل “yes” يدوي</li><li><code>apt autoremove</code>: حذف الاعتماديات (Dependencies) اللي صارت مو ضرورية</li><li><code>apt autoclean</code>: تنظيف الكاش لحزم التثبيت اللي انزّلت</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ هالخطوة ممكن تاخذ كم دقيقة، يعتمد على حجم التحديثات. أحياناً بالوسط يطلب منك تأكيد، بشكل عام بس اتبع المنطق اللي يطلبه وروح فيها.</p></blockquote><h4 id="التحقق-من-الحاجة-لإعادة-التشغيل">التحقق من الحاجة لإعادة التشغيل</h4><p>بعد تحديث النواة، غالباً تحتاج تسوي ريستارت عشان التغييرات تاخذ مفعولها:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>إذا طلع لك تنبيه إنه لازم ريستارت:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>بعد الريستارت، لازم تعرف اتصال SSH من جديد.</p><h4 id="تثبيت-الأدوات-المستخدمة-بكثرة">تثبيت الأدوات المستخدمة بكثرة</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>وظيفة هذه الأدوات:</strong></p><table><thead><tr><th>الأداة</th><th>الاستخدام</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>يتيح للمستخدم العادي تنفيذ أوامر المدير (admin)</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>تنزيل الملفات</td><td></td></tr><tr><td><code>git</code></td><td>التحكم في الإصدارات (Version Control)</td><td></td></tr><tr><td><code>vim</code></td><td>محرر نصوص</td><td></td></tr><tr><td><code>htop</code></td><td>مراقب عمليات (Process Monitor) أجمل وأسهل</td><td></td></tr><tr><td><code>tree</code></td><td>عرض هيكل المجلدات على شكل شجرة</td><td></td></tr><tr><td><code>net-tools</code></td><td>أدوات شبكة (مثل ifconfig و netstat وغيرها)</td><td></td></tr><tr><td><code>ufw</code></td><td>جدار حماية (Firewall) بسيط وسهل الاستخدام</td><td></td></tr><tr><td><code>fail2ban</code></td><td>حماية من هجمات التخمين العنيف (Brute-force)</td><td></td></tr><tr><td><code>neofetch</code></td><td>عرض معلومات النظام بشكل أنيق</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-إنشاء-مستخدم-غير-root">3.2 إنشاء مستخدم غير root</h3><h4 id="ليه-ما-نستخدمش-root-بشكل-مباشر؟">ليه ما نستخدمش root بشكل مباشر؟</h4><p>صلاحيات مستخدم root كبيرة جداً، ولو زلّت يدك بـ <code>rm -rf /</code> ممكن تودي كل حاجة في لحظة. المفروض في الاستخدام اليومي تعتمد على مستخدم عادي، ولما تحتاج صلاحيات المدير تستخدم <code>sudo</code>.</p><blockquote><p>openclaw ده وحش بجد، إزاي نجرؤ نسيبه يستخدم root؟</p></blockquote><h4 id="إنشاء-المستخدم">إنشاء المستخدم</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>النظام هيطلب منك تعين كلمة المرور وتدخل شوية معلومات:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="منح-صلاحيات-sudo">منح صلاحيات sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>نتأكد من نجاحها:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>لو النتيجة <code>root</code>، يبقى تم ضبط sudo بنجاح.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>نصيحة صغيرة</strong></p><p>تقدر ترجع لمستخدم root عن طريق كتابة <code>exit</code>. في الخطوات الجاية هنكمل الإعداد باستخدام root، وبعد ما نخلص نرجع للمستخدم العادي.</p></blockquote><hr><h3 id="3-3-ضبط-تسجيل-الدخول-بمفتاح-SSH">3.3 ضبط تسجيل الدخول بمفتاح SSH</h3><h4 id="المصادقة-بالمفتاح-مقابل-المصادقة-بكلمة-المرور">المصادقة بالمفتاح مقابل المصادقة بكلمة المرور</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>المصادقة بالمفتاح أمن بكتير من كلمة المرور:</p><ul><li>كلمة المرور ممكن تتكسر بالـ Brute Force، لكن المفتاح ده مستحيل تقريباً</li><li>مش هتحط كلمة المرور كل مرة، فأسهل وأسرع</li><li>حتى لو اتسرقت كلمة المرور، من غير المفتاح الخاص مينقدرش يسجل دخول</li></ul><h4 id="الخطوة-الأولى-توليد-زوج-المفاتيح-على-جهازك-المحلي">الخطوة الأولى: توليد زوج المفاتيح على جهازك المحلي</h4><p>نفّذ الأمر ده على <strong>جهازك</strong> (مش السيرفر):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>هيطلب منك:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>اضغط Enter على طول عشان تستخدم المسار الافتراضي. إحنا هنا استخدمنا ./ittinker ، يعني الملف هيتبلش في المسار الحالي واسمه ittinker</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>تقدر تضع كلمة مرور للمفتاح (طبقة حماية زيادة)، أو تضغط Enter على طول وتسيبه فاضي.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>بعد ما يخلص التوليد، هتلاقي ملفين في مجلد <code>~/.ssh/</code> (دي الأسماء الافتراضية، لو ضغطت Enter قبل كده هيكونوا بالشكل ده):</p><ul><li><code>id_ed25519</code>: <strong>المفتاح الخاص</strong>، إياك يفشخ ولا يتسرب!</li><li><code>id_ed25519.pub</code>: <strong>المفتاح العام</strong>، ده اللي لازم ترفعه على السيرفر</li></ul><blockquote><p>💡 <strong>ed25519 مقابل RSA</strong></p><p><code>ed25519</code> هو الخوارزمية الموصى بيها حالياً، أكثر أماناً من RSA التقليدي ومفتاحه أقصر. لو نظامك قديم شوية وما بيدعمهوش، تقدر تستخدم <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>تفصيلة صغيرة، المفتاح اللي بيولّده ed25519 صغير حجمه، أما بتاع rsa فملفه كبير أوي، سألت الـ AI عرفت إن الحجم مالهوش علاقة، الموضوع كله بيعتمد على الخوارزمية نفسها.</p></blockquote><h4 id="الخطوة-التانية-ارفع-المفتاح-العام-على-السيرفر">الخطوة التانية: ارفع المفتاح العام على السيرفر</h4><p><strong>الطريقة الأولى: استخدام ssh-copy-id (الموصى بيها)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>بعد ما تدخل كلمة المرور، المفتاح العام هيتنسخ على السيرفر أوتوماتيك.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>الطريقة التانية: النسخ اليدوي</strong></p><p>لو <code>ssh-copy-id</code> مش متاح، تقدر تعملها يدويًا:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>انسخ الناتج (سلسلة طويلة من النص تبدأ بـ <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>الصلاحيات مهمة جدًا!</strong></p><p>SSH صارم جدًا بخصوص صلاحيات الملفات:</p><ul><li>مجلد <code>.ssh</code>: 700 (المستخدم بس اللي يقدر يدخله)</li><li>ملف <code>authorized_keys</code>: 600 (المستخدم بس اللي يقدر يقرأه ويكتب فيه)</li></ul><p>لو الصلاحيات مش صحيحة، SSH رح يرفض تسجيل الدخول بالمفتاح.</p></blockquote><h4 id="الخطوة-الثالثة-اختبار-تسجيل-الدخول-بالمفتاح">الخطوة الثالثة: اختبار تسجيل الدخول بالمفتاح</h4><p><strong>افتح نافذة Terminal جديدة</strong> (سيب النافذة القديمة مفتوحة، عشان لو في أي غلطة تقدر ترجع وتعدلها)، وجرّب تسجيل الدخول بالمفتاح:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>لو قدرت تسجل دخول من غير ما تكتب باسوورد، يبقى المفتاح اشتغل تمام! 🎉</p><p>(لو حطيت passphrase للمفتاح الخاص، رح يطلب منك باسوورد المفتاح، وده شيء طبيعي)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>هنا ضفنا بارامتر ‎-i‎، لأن المفتاح ده مش في المسار الافتراضي، إحنا حطينه في المسار الحالي. لو ما حددناه، النظام هيستخدم المفتاح الافتراضي.</p></blockquote><hr><h3 id="3-4-تقوية-أمان-SSH">3.4 تقوية أمان SSH</h3><p>دلوقتي تسجيل الدخول بالمفتاح شغال، يلا نشدّد أمان SSH:</p><ol><li>غيّر البورت الافتراضي (عشان تتجنب السكان)</li><li>أوقف تسجيل الدخول بالباسوورد</li><li>امنع الدخول المباشر بحساب root</li></ol><h4 id="تعديل-ملف-إعدادات-SSH">تعديل ملف إعدادات SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>ابحث عن الإعدادات التالية وقم بتعديلها (بعضها قد يكون مُعلّمًا كتعليق، فقط احذف <code>#</code> من أمامها):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>احفظ الملف واخرج (<code>ctrl + o</code>).</p><blockquote><p>للحفظ في Nano اضغط ctrl + o، سيطلب منك تأكيد اسم الملف، اضغط Enter مباشرة، وللخروج اضغط ctrl + x</p></blockquote><h4 id="إعادة-تشغيل-خدمة-SSH">إعادة تشغيل خدمة SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>تذكير مهم!</strong></p><p><strong>لا تغلق نافذة الطرفية الحالية!</strong> أولاً، اختبر الإعدادات الجديدة في نافذة جديدة للتأكد من إمكانية تسجيل الدخول بشكل طبيعي:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>إذا نجح تسجيل الدخول، حينها يمكنك إغلاق النافذة القديمة. أما إذا لم تتمكن من الدخول، فلا تزال لديك الفرصة لإصلاح الإعدادات من النافذة القديمة.</p></blockquote><blockquote><p>إذا كنت قد اشتريت خادمًا خفيفًا (Light Server)، فغالبًا لن تتمكن من تغيير هذا المنفذ، بينما خوادم ECS التقليدية تسمح بتعديله، انتبه لهذه النقطة.</p></blockquote><hr><h3 id="3-5-إعداد-جدار-حماية-UFW">3.5 إعداد جدار حماية UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) هو أداة جدار الحماية الافتراضية في Ubuntu، إعداداتها بسيطة لكنها قوية جدًا.</p><h4 id="الإعدادات-الأساسية">الإعدادات الأساسية</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="تفعيل-جدار-الحماية">تفعيل جدار الحماية</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>ستظهر لك رسالة:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>اكتب <code>y</code> للتأكيد.</p><h4 id="التحقق-من-الحالة">التحقق من الحالة</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 كان خطأ مطبعي مني، اعتمدوا على وضعكم الفعلي وخلاص</p></blockquote><p>المخرجات ستكون شبيهة بـ:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="مرجع-سريع-للأوامر-الشائعة">مرجع سريع للأوامر الشائعة</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-تفعيل-تسريع-BBR">3.6 تفعيل تسريع BBR</h3><p>BBR (اختصار لـ Bottleneck Bandwidth and Round-trip propagation time) هو خوارزمية تحكم في ازدحام TCP طوّرتها Google، ويمكنها تحسين أداء الشبكة بشكل ملحوظ.</p><h4 id="التفعيل-بنقرة-واحدة">التفعيل بنقرة واحدة</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="التحقق-من-التفعيل">التحقق من التفعيل</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>المخرجات المتوقعة:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>المخرجات ستكون شبيهة بـ:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>تأثير BBR</strong></p><p>بعد تفعيل BBR، خصوصًا في البيئات غير المستقرة أو ذات زمن الاستجابة العالي، ستلاحظ بوضوح:</p><ul><li>سرعة تحميل أسرع</li><li>عمليات SSH أكثر سلاسة</li><li>تحميل أسرع لصفحات الويب</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-إعداد-fail2ban-للحماية-من-محاولات-الاختراق-بالقوة">3.7 إعداد fail2ban للحماية من محاولات الاختراق بالقوة</h3><p>fail2ban راح يراقب ملفات السجلات (logs)، وأول ما يلاحظ IP فشل في تسجيل الدخول عدة مرات، راح يحظره تلقائيًا.</p><h4 id="الإعداد-الأساسي">الإعداد الأساسي</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>ابحث عن قسم <code>[sshd]</code>، وتأكد من الإعدادات التالية:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="تشغيل-الخدمة">تشغيل الخدمة</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="التحقق-من-الحالة-2">التحقق من الحالة</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>المخرجات ستكون مشابهة لـ:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="أوامر-شائعة">أوامر شائعة</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-اختياري-إدارة-عدة-خوادم-عبر-SSH-Config">3.8 [اختياري] إدارة عدة خوادم عبر SSH Config</h3><p>لو عندك أكتر من خادم، كل مرة تكتب <code>ssh -p 22000 user@ip</code> هتبقى مزعجة. تقدر تبسط الموضوع باستخدام SSH Config.</p><h4 id="ملف-الإعدادات">ملف الإعدادات</h4><p>على <strong>جهازك المحلي</strong> قم بتعديل <code>~/.ssh/config</code>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>أضف الإعدادات التالية:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="طريقة-الاستخدام">طريقة الاستخدام</h4><p>دلوقتي تقدر تتصل مباشرة باستخدام الاسم المستعار:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>ودي بتعفيك من حفظ الـ IP والبورت واسم المستخدم في كل مرة!</p><hr><h3 id="3-9-اختياري-السماح-لـ-Cloudflare-فقط-بالوصول">3.9 [اختياري] السماح لـ Cloudflare فقط بالوصول</h3><p>لو موقعك شغال بالكامل خلف Cloudflare، تقدر تظبط الإعدادات عشان تسمح بس لـ IP بتاع Cloudflare يوصل لبورتات 80/443، وده هيزود الأمان.</p><blockquote><p>⚠️ ملاحظة: الإعداد ده بيتطلب يكون دومينك متوصّل بالفعل على Cloudflare CDN.</p></blockquote><h4 id="سكربت-الإعداد-التلقائي">سكربت الإعداد التلقائي</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>السكربت ده هيقوم بـ:</p><ol><li>جلب أحدث نطاقات IP الرسمية من Cloudflare</li><li>إضافة قواعد UFW للسماح فقط لهذه الـ IP بالوصول إلى المنفذين 80/443</li><li>إعادة تحميل UFW</li></ol><h4 id="ضبط-التحديث-التلقائي">ضبط التحديث التلقائي</h4><p>نطاقات IP الخاصة بـ Cloudflare قد تتغير مع الوقت، لذا خلي النظام يسحبها ويحدّثها تلقائياً كل أسبوع:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-ضبط-المنطقة-الزمنية">3.10 ضبط المنطقة الزمنية</h3><p>غالباً المنطقة الزمنية الافتراضية تكون UTC، فالأفضل تغييرها لمنطقتك عشان تقدر تقرأ السجلات (Logs) بكل راحة:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-اختياري-تفعيل-التحديثات-الأمنية-التلقائية">3.11 [اختياري] تفعيل التحديثات الأمنية التلقائية</h3><p>خلِّ النظام يركّب التحصينات الأمنية لوحده، وريّح راسك من التدخل اليدوي في كل مرة:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>اختار “Yes” عشان تفعيل التحديث التلقائي.</p><blockquote><p>💡 الميزة دي بتركّب <strong>التحديثات الأمنية</strong> بشكل تلقائي، لكنها ما بترقّيك لإصدار رئيسي جديد، فاعتمد عليها وأنت مطمن.</p></blockquote><hr><h2 id="4-الخلاصة">4. الخلاصة</h2><h3 id="قائمة-التحقق-النهائية">قائمة التحقق النهائية</h3><p>بعد ما تخلص كل اللي فوق، مرّر على القائمة دي عشان تتأكد إن كل شيء تمام:</p><table><thead><tr><th>عنصر الفحص</th><th>الأمر</th><th>النتيجة المتوقعة</th></tr></thead><tbody><tr><td>النظام محدّث</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>لا توجد حزم للترقية</td></tr><tr><td>المستخدم العادي يستطيع استخدام sudo</td><td><code>sudo whoami</code></td><td>المخرجات <code>root</code></td></tr><tr><td>تسجيل الدخول بالمفتاح يعمل</td><td><code>ssh yourname@ip -p port</code></td><td>الدخول بدون كلمة مرور</td></tr><tr><td>تسجيل الدخول بكلمة المرور معطّل</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>منفذ SSH تم تغييره</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>المنفذ الذي حددته</td></tr><tr><td>الجدار الناري مفعّل</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR مفعّل</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban يعمل</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>المنطقة الزمنية مضبوطة</td><td><code>timedatectl</code></td><td>Asia/Shanghai أو منطقتك الزمنية</td></tr><tr><td>إعدادات SSH المحلية</td><td><code>cat ~/.ssh/config</code></td><td>تم ضبط اسم مستعار للخادم</td></tr></tbody></table><h3 id="مواقع-الملفات-المهمة">مواقع الملفات المهمة</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="أفضل-ممارسات-الأمان">أفضل ممارسات الأمان</h3><ol><li><strong>تحديث النظام بانتظام</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>مراجعة سجلات تسجيل الدخول دوريًا</strong>: <code>lastb</code> (محاولات الدخول الفاشلة)، <code>last</code> (محاولات الدخول الناجحة)</li><li><strong>متابعة حالات الحظر في fail2ban أولاً بأول</strong></li><li><strong>النسخ الاحتياطي قبل تعديل أي ملف إعدادات مهم</strong></li></ol><hr><h2 id="5-سجل-الأخطاء-والمشاكل">5. سجل الأخطاء والمشاكل</h2><h3 id="س1-فشل-تسجيل-الدخول-بالمفتاح،-ولا-يزال-يطلب-كلمة-المرور؟">س1: فشل تسجيل الدخول بالمفتاح، ولا يزال يطلب كلمة المرور؟</h3><p><strong>الأسباب المحتملة:</strong></p><ol><li><p><strong>مشكلة في الصلاحيات</strong> (الأكثر شيوعاً)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>لم يتم نسخ المفتاح العام بشكل صحيح</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>تدخل SELinux</strong> (في أنظمة CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="س2-بعد-تغيير-المنفذ-لم-تعد-قادراً-على-الاتصال؟">س2: بعد تغيير المنفذ لم تعد قادراً على الاتصال؟</h3><p><strong>خطوات التشخيص:</strong></p><ol><li><p>تأكد من أن المنفذ الجديد مفتوح في الجدار الناري:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>تأكد من أن إعدادات SSH صحيحة:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>تأكد من أن خدمة SSH قيد التشغيل:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>إذا لم تستطع الاتصال إطلاقاً، استخدم VNC/لوحة التحكم الخاصة بمزود الخدمة لتسجيل الدخول وإصلاح المشكلة.</p></li></ol><h3 id="س2-5-تغيير-المنفذ-لا-يطبق-إطلاقاً؟-الخوادم-السحابية-الخفيفة">س2.5: تغيير المنفذ لا يطبق إطلاقاً؟ (الخوادم السحابية الخفيفة)</h3><p><strong>الظاهرة</strong>: قمت بتغيير <code>/etc/ssh/sshd_config</code>، وبعد إعادة تشغيل الخدمة بقي المنفذ 22 يعمل، والمنفذ الجديد لم يُطبّق.</p><p><strong>طريقة التشخيص</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>إذا كان المخرج مشابهاً لـ:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>هذا يعني أن المنفذ 22 يُستمع إليه بواسطة <code>init</code> (PID 1)، وليس بواسطة عملية <code>sshd</code>.</p><p><strong>السبب</strong>: في بعض مزودي الخدمات السحابية، الـ SSH في «خوادم التطبيقات الخفيفة» أو «حاويات الـ instances» يتم إدارته عبر <strong>بروكسي على مستوى المنصة</strong>، وبالتالي إعدادات sshd داخل خادمك ما رح تنفع ولن تعمل.</p><p><strong>الحل</strong>:</p><table><thead><tr><th>نوع الـ instance</th><th>طريقة تعديل منفذ SSH</th></tr></thead><tbody><tr><td>ECS تقليدي</td><td>تعديل sshd_config ✅</td></tr><tr><td>خادم خفيف</td><td>ممكن تحتاج تعدله من لوحة تحكم السحابة، أو إنه ما يدعم التعديل إطلاقاً</td></tr><tr><td>حاوية (Container instance)</td><td>عادةً ما يدعم التعديل</td></tr></tbody></table><p>إذا كان الـ instance بتاعك ما يدعم تغيير المنفذ، <strong>تدابير الأمان الأخرى تصبح أهم بكثير</strong>:</p><ul><li>✅ إنشاء مستخدم عادي + تعطيل تسجيل الدخول عبر root</li><li>✅ تسجيل الدخول للـ SSH بمفتاح (Key) + تعطيل الدخول بكلمة المرور</li><li>✅ fail2ban للحماية من محاولات الاختراق العنيفة (Brute-force)</li></ul><p>لو طبقت هذي الإجراءات صح، مستوى الأمان بتاعك لسه عالي جداً.</p><h3 id="س3-fail2ban-حظرني-أنا؟">س3: fail2ban حظرني أنا؟</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="س4-بعد-تفعيل-UFW-ما-قدرت-أدخل-على-الموقع؟">س4: بعد تفعيل UFW ما قدرت أدخل على الموقع؟</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="س5-لما-شغّلت-أمر-قال-إنه-ما-يقدر-يلاقي-sudo؟">س5: لما شغّلت أمر قال إنه ما يقدر يلاقي sudo؟</h3><p>تثبيت Debian المصغّر (Minimal) ممكن ما يكون فيه sudo، سجّل دخولك كـ root وثبّته:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-سكربت-تهيئة-بضغطة-واحدة-استخدمه-بعد-ما-تعتاد-على-الخطوات">6. سكربت تهيئة بضغطة واحدة (استخدمه بعد ما تعتاد على الخطوات)</h2><p>إذا صرت تعرف الخطوات اللي فوق كويس، تقدر تستخدم هذا السكربت عشان تعمل تهيئة (Initialization) بسرعة.</p><blockquote><p>⚠️ <strong>ملاحظة</strong>: قبل تشغيل السكريبت، تأكد أولاً أنك جهّزت مفتاح SSH العام.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-بعد-كل-ده،-الأمان-اتحسّن-قد-إيه؟">7. بعد كل ده، الأمان اتحسّن قد إيه؟</h2><table><thead><tr><th>الخطوة</th><th>عملنا إيه</th><th>ليه مهم</th></tr></thead><tbody><tr><td>تحديث النظام</td><td>تثبيت أحدث التحديثات</td><td>إصلاح الثغرات المعروفة</td></tr><tr><td>إنشاء مستخدم جديد</td><td>بطلنا نستخدم root مباشرة</td><td>تقليل مخاطر الأخطاء البشرية</td></tr><tr><td>مفاتيح SSH</td><td>استبدلنا الباسورد بمفاتيح</td><td>مستحيل يتخترق بالـ brute-force</td></tr><tr><td>تغيير البورت</td><td>بعدنا عن بورت 22 الافتراضي</td><td>تقليل فرصة إن السيرفر يتمسح</td></tr><tr><td>تعطيل الباسورد</td><td>ال登录 بالمفتاح بس</td><td>قفل باب هجمات الباسورد نهائياً</td></tr><tr><td>تعطيل root</td><td>root مابيقدرش يدخل مباشرة</td><td>تصعيب المهمة على الهاكرز</td></tr><tr><td>جدار حماية UFW</td><td>فتحنا البورتات اللازمة بس</td><td>تقليل مساحة الهجوم</td></tr><tr><td>تسريع BBR</td><td>تحسين أداء الشبكة</td><td>رفع سرعة الوصول</td></tr><tr><td>fail2ban</td><td>حظر تلقائي للـ IPs الخبيثة</td><td>منع الهجمات المستمرة</td></tr></tbody></table><p>بعد كل ده، أمان سيرفرك بقى أحسن من <strong>90%</strong> من الـ VPSs اللي موجودة.</p><hr><h2 id="إشعار-للمقال-الجاي">إشعار للمقال الجاي</h2><p>في المقال الجاي هنتكلم عن <strong>مرجع سريع لإعداد ال登录 بمفاتيح SSH</strong>، وهنشرح بالتفصيل:</p><ul><li>طرق توليد المفاتيح على أنظمة تشغيل مختلفة</li><li>إدارة أكتر من مفتاح</li><li>إعداد SSH Agent</li><li>إعدادات عملاء SSH الشائعة</li></ul><hr><p><em>آخر تحديث لهذا المقال: يناير 2026</em></p><p><em>سلسلة صندوق أدوات المطوّر المستقل، تابعنا!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/ar/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/ar/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>استخدم VPS الجديد مثل باب غير مقفل، حيث يمكن لأي شخص في العالم الدخول. أول ما يجب فعله بعد الحصول على VPS ليس تثبيت البرامج، بل تهيئة الأمان: تسجيل الدخول باستخدام مفتاح SSH، منفذ غير افتراضي، مستخدم عادي، جدار الحماية، fail2ban، وتسريع BBR. هذا المقال سيساعدك على تقوية الأساس في الساعة الأولى.</summary>
    <title>أول ساعة بعد استلام VPS: دليل التهيئة الكامل من الخام إلى آمن وجاهز (خلّي OpenClaw أأمن)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Indie Dev Werkzeugkasten" scheme="https://blog.ittinker.com/categories/Indie-Dev-Werkzeugkasten/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="Linux" scheme="https://blog.ittinker.com/tags/Linux/"/>
    <category term="Serversicherheit" scheme="https://blog.ittinker.com/tags/Serversicherheit/"/>
    <category term="Indie Development" scheme="https://blog.ittinker.com/tags/Indie-Development/"/>
    <content>
      <![CDATA[<blockquote><p>Ein frisch gekaufter VPS ist wie eine unverschlossene Tür, an die weltweit Script-Kids klopfen. Dieser Artikel zeigt dir, wie du die Tür sicher verriegelst. Damit dein „openclaw“ nicht unkontrolliert herumstromert.</p></blockquote><h2 id="0-Vorab">0. Vorab</h2><p>Du hast dir gerade einen VPS gekauft, hast voller Vorfreude die IP und das root-Passwort in der Hand – und jetzt?</p><p>Die meisten machen dann einfach das: Direkt Software installieren und das Projekt deployen.</p><p><strong>Das ist ein gefährlicher Reflex.</strong></p><p>Dein VPS hat eine öffentliche IP-Adresse. Das bedeutet, dass jeder Mensch auf der ganzen Welt versuchen kann, sich dorthin zu verbinden. Und in der Standardkonfiguration gilt:</p><ul><li>Der Port <strong>22</strong> ist öffentlich zugänglich</li><li>Der Benutzername ist das allseits bekannte <strong>root</strong></li><li>Ein einziges Passwort schützt dich noch</li></ul><p>Jeden Tag scannen unzählige automatisierte Skripte ganze IP-Blöcke und versuchen mit gängigen Passwörtern, per Brute-Force einzudringen. Dein Server wird ab der ersten Sekunde nach dem Hochfahren bereits angegriffen.</p><p>Deshalb lautet die goldene Regel: <strong>Das Allererste nach dem VPS-Kauf ist nicht die Software-Installation, sondern die Sicherheits-Grundeinrichtung.</strong></p><hr><h2 id="1-Unser-Ziel">1. Unser Ziel</h2><p>Das Ziel dieses Artikels ist:</p><ul><li>✅ <strong>Sicheren Remote-Zugang</strong> einrichten: SSH-Login mit Keys + abweichender Port</li><li>✅ Einen <strong>normalen User</strong> anlegen: Nicht direkt als root arbeiten</li><li>✅ <strong>Firewall</strong> konfigurieren: Nur wirklich nötige Ports aufmachen</li><li>✅ <strong>Netzwerk-Boost</strong> aktivieren: Mit BBR richtig Gas geben</li><li>✅ <strong>Brute-Force-Angriffen</strong> vorbeugen: fail2ban bannt böswillige IPs automatisch</li></ul><p>Wenn du das alles durch hast, steht dein VPS auf einem soliden Fundament und du kannst da beruhigt deine Dienste deployen.</p><hr><h2 id="2-Planung-Gedanken">2. Planung &amp; Gedanken</h2><h3 id="Warum-diese-Konfiguration">Warum diese Konfiguration?</h3><p>Ein frisch gekaufter VPS ist wie eine nagelneue Wohnung im Rohbau:</p><table><thead><tr><th>Standardzustand</th><th>Risiko</th><th>Unsere Lösung</th></tr></thead><tbody><tr><td>Direkter Login als root</td><td>Zu hohe Rechte, fatal bei Fehlern</td><td>Normaler User + sudo</td></tr><tr><td>Login per Passwort</td><td>Anfällig für Brute-Force-Angriffe</td><td>SSH-Key-Login</td></tr><tr><td>Standard-Port 22</td><td>Liegt im Fokus von Scannern</td><td>Nicht-Standard-Port</td></tr><tr><td>Firewall aus</td><td>Alle Ports nach außen offen</td><td>UFW: Nur nötige Ports durchlassen</td></tr><tr><td>Natives Netzwerk</td><td>Hoher Paketverlust, hohe Latenz</td><td>BBR Congestion Control</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Der-grobe-Ablauf">Der grobe Ablauf</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Wir gehen genau in dieser Reihenfolge vor, und ich erkläre dir bei jedem Schritt, warum wir das eigentlich machen.</p><h2 id="3-Los-geht’s-Schritt-fur-Schritt">3. Los geht’s: Schritt-für-Schritt</h2><h3 id="3-1-Erster-Login-und-System-Update">3.1 Erster Login und System-Update</h3><h4 id="Server-IP-besorgen">Server-IP besorgen</h4><p>Sobald du deinen VPS gekauft hast, schickt dir der Anbieter:</p><ul><li><strong>IP-Adresse</strong>: z. B. <code>192.168.1.100</code></li><li><strong>Port</strong>: Meistens <code>22</code> (manche Provider nutzen abweichende Ports)</li><li><strong>Benutzername</strong>: In der Regel <code>root</code></li><li><strong>Passwort</strong>: Ein zufällig generierter String</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="SSH-Verbindung">SSH-Verbindung</h4><p><strong>Mac / Linux-User</strong>: Öffne das Terminal und tippe einfach Folgendes ein:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows-User</strong>:</p><ul><li>Windows 10/11 bringt OpenSSH direkt mit, du kannst den Befehl oben also einfach in PowerShell oder CMD nutzen</li><li>Oder du greifst auf Tools wie <a href="https://termius.com/">Termius</a> oder <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> zurück</li></ul><p>Beim ersten Verbinden poppt die Abfrage zum Bestätigen des Fingerprints auf:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Das System fragt dich im Prinzip: „Ich kenne diesen Rechner nicht – willst du dich wirklich verbinden?“</p><p>Tippe <code>yes</code> ein und drück Enter. Danach kommt das Passwort (<strong>Achtung: Bei der Eingabe wird nichts angezeigt, das ist normale Sicherheitsarchitektur</strong>), dann wieder Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Wenn du einen Prompt in dieser Art siehst, hast du dich erfolgreich eingeloggt:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Wozu eigentlich den Fingerprint checken?</strong></p><p>Das schützt dich vor sogenannten Man-in-the-Middle-Angriffen. Beim allerersten Login speicherst du den Fingerprint des Servers ab. Wenn der bei einer späteren Verbindung plötzlich anders aussieht, ist das ein Warnsignal – vielleicht versucht da jemand, sich als dein Server auszugeben.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Lern-deinen-Server-kennen">Lern deinen Server kennen</h4><p>Nach dem Login schauen wir uns erst mal an, auf welchem Gerät du da eigentlich gelandet bist:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Merke dir diese Infos, das wird dir später bei der Fehlersuche extrem helfen.</p><h4 id="System-Update">System-Update</h4><p>Jetzt, wo du weißt, wo du stehst, ist die erste echte Aufgabe: Bring das System auf den neuesten Stand. Das Image auf einem frischen Server ist oft schon ein paar Monate alt, und da zwischendurch bestimmt ein paar Sicherheits-Patches veröffentlicht wurden:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Was die Parameter bedeuten:</strong></p><ul><li><code>apt update</code>: Aktualisiert den Paket-Index</li><li><code>apt full-upgrade</code>: Zieht alle Updates für die Software – inklusive des Kernels</li><li><code>-y</code>: Bestätigt automatisch, du musst also nicht ständig “yes” eintippen</li><li><code>apt autoremove</code>: Räumt nicht mehr benötigte Abhängigkeiten auf</li><li><code>apt autoclean</code>: Leert den Cache der heruntergeladenen Installationspakete</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Dieser Schritt kann ein paar Minuten dauern, je nachdem, wie viele Updates anstehen. Wenn zwischendurch mal eine Bestätigung verlangt wird, einfach bestätigen und mitlaufen lassen.</p></blockquote><h4 id="Checken-ob-ein-Reboot-notig-ist">Checken, ob ein Reboot nötig ist</h4><p>Nach einem Kernel-Update musst du den Server meistens einmal neu starten, damit alles greift:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Wenn da steht, dass ein Neustart fällig ist:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Nach dem Reboot loggst du dich einfach per SSH wieder ein.</p><h4 id="Nutzliche-Tools-installieren">Nützliche Tools installieren</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Wofür du diese Tools brauchst:</strong></p><table><thead><tr><th>Tool</th><th>Zweck</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Normale Nutzer lassen Admin-Befehle ausführen</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Dateien herunterladen</td><td></td></tr><tr><td><code>git</code></td><td>Versionskontrolle</td><td></td></tr><tr><td><code>vim</code></td><td>Texteditor</td><td></td></tr><tr><td><code>htop</code></td><td>Schickere Prozessüberwachung</td><td></td></tr><tr><td><code>tree</code></td><td>Verzeichnisstruktur als Baum anzeigen</td><td></td></tr><tr><td><code>net-tools</code></td><td>Netzwerk-Tools (ifconfig, netstat etc.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Simple und handliche Firewall</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Schutz gegen Brute-Force-Angriffe</td><td></td></tr><tr><td><code>neofetch</code></td><td>Systeminfos schön aufbereitet</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Einen-Nicht-root-Benutzer-anlegen">3.2 Einen Nicht-root-Benutzer anlegen</h3><h4 id="Warum-nicht-direkt-root-nutzen">Warum nicht direkt root nutzen?</h4><p>Der root-User hat einfach viel zu viele Rechte – ein kleiner Tippfehler <code>rm -rf /</code> und alles ist weg. Für den Alltag nimmst du besser einen normalen User. Wenn du mal Admin-Rechte brauchst, holst du dir die einfach mit <code>sudo</code>.</p><blockquote><p>Der Lobster (openclaw) ist ein echtes Monster – dem würdest du doch auch nicht einfach root geben, oder?</p></blockquote><h4 id="Benutzer-anlegen">Benutzer anlegen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Das System fragt dich jetzt nach einem Passwort und ein paar weiteren Infos:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="sudo-Rechte-vergeben">sudo-Rechte vergeben</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Kurz testen:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Wenn <code>root</code> als Ausgabe erscheint, hast du sudo erfolgreich eingerichtet.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Pro-Tipp</strong></p><p>Mit <code>exit</code> springst du direkt zurück zum root-User. Für die nächsten Schritte bleiben wir erstmal im root-Kontext und richten alles ein. Danach wechseln wir wieder zum normalen User.</p></blockquote><hr><h3 id="3-3-SSH-Key-Login-einrichten">3.3 SSH-Key-Login einrichten</h3><h4 id="Key-Authentifizierung-vs-Passwort-Authentifizierung">Key-Authentifizierung vs. Passwort-Authentifizierung</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Key-Login ist deutlich sicherer als ein Passwort:</p><ul><li>Passwörter lassen sich bruteforcen, Keys quasi gar nicht</li><li>Du musst nicht jedes Mal ein Passwort tippen – viel bequemer</li><li>Selbst wenn dein Passwort geleakt wird, kommt ohne den privaten Key trotzdem niemand rein</li></ul><h4 id="Schritt-1-Schlusselpaar-lokal-generieren">Schritt 1: Schlüsselpaar lokal generieren</h4><p>Führe das auf <strong>deinem Rechner</strong> aus (nicht auf dem Server):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Dann erscheint folgende Abfrage:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Einfach mit Enter bestätigen, um den Standardpfad zu übernehmen. Wir verwenden hier <code>./ittinker</code> – das bedeutet, die Datei wird im aktuellen Verzeichnis unter dem Namen <code>ittinker</code> gespeichert.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Du kannst noch ein Passwort für den Key vergeben (für eine extra Sicherheitsschicht) oder einfach leer lassen und Enter drücken.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Wenn der Schlüssel generiert ist, findest du im Verzeichnis <code>~/.ssh/</code> zwei Dateien (hier mit den Standardnamen, sofern du vorher einfach Enter gedrückt hast):</p><ul><li><code>id_ed25519</code>: Der <strong>private Schlüssel</strong> – den darfst du auf keinen Fall weitergeben!</li><li><code>id_ed25519.pub</code>: Der <strong>öffentliche Schlüssel</strong> – der muss auf den Server hochgeladen werden</li></ul><blockquote><p>💡 <strong>ed25519 vs. RSA</strong></p><p><code>ed25519</code> ist der aktuell empfohlene Algorithmus – sicherer und mit kürzeren Keys als das klassische RSA. Falls dein System zu alt ist und ihn nicht unterstützt, kannst du <code>ssh-keygen -t rsa -b 4096</code> nutzen.</p></blockquote><blockquote><p>Ein kleiner Nebenaspekt: Ein ed25519-Key ist recht klein, während RSA-Dateien ziemlich groß werden. Hab mal eine KI gefragt – die Größe spielt keine Rolle, das liegt einfach an der Art des Algorithmus.</p></blockquote><h4 id="Schritt-2-Den-offentlichen-Schlussel-auf-den-Server-laden">Schritt 2: Den öffentlichen Schlüssel auf den Server laden</h4><p><strong>Variante A: Mit ssh-copy-id (empfohlen)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Nachdem du dein Passwort eingegeben hast, wird der öffentliche Schlüssel automatisch auf den Server kopiert.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Variante B: Manuell kopieren</strong></p><p>Falls <code>ssh-copy-id</code> nicht klappt, kannst du das auch manuell machen:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Kopiere die Ausgabe (ein langer Text, der mit <code>ssh-ed25519</code> beginnt).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Berechtigungen sind extrem wichtig!</strong></p><p>SSH ist da sehr streng mit den Dateirechten:</p><ul><li><code>.ssh</code> Verzeichnis: 700 (nur du selbst hast Zugriff)</li><li><code>authorized_keys</code> Datei: 600 (nur du selbst kannst lesen und schreiben)</li></ul><p>Wenn die Rechte nicht stimmen, verweigert SSH den Login mit dem Key.</p></blockquote><h4 id="Schritt-3-Key-Login-testen">Schritt 3: Key-Login testen</h4><p><strong>Öffne ein neues Terminal-Fenster</strong> (lass das alte offen, falls du was vermasselst hast du noch ein Backup), und test den Key-Login:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Wenn du dich jetzt ohne Passwort einloggen kannst, hast du es geschafft! 🎉</p><p>(Falls du für deinen Private Key eine Passphrase vergeben hast, wird er nach dem Key-Passwort fragen – das ist völlig normal)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Wir haben hier den Parameter -i drangehängt, weil dieser Key nicht im Standard-Pfad liegt, sondern im aktuellen Verzeichnis. Wenn wir das nicht angeben, nimmt das System einfach den Default-Key.</p></blockquote><hr><h3 id="3-4-SSH-absichern">3.4 SSH absichern</h3><p>Jetzt, wo der Key-Login läuft, bringen wir SSH auf Vordermann:</p><ol><li>Den Standard-Port ändern (schützt vor automatischen Scans)</li><li>Passwort-Login deaktivieren</li><li>Direkten Root-Login verbieten</li></ol><h4 id="SSH-Konfigurationsdatei-bearbeiten">SSH-Konfigurationsdatei bearbeiten</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Suche die folgenden Einstellungen und passe sie an (einige davon sind vielleicht auskommentiert – entferne einfach das <code>#</code> davor):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Speichern und beenden (<code>ctrl + o</code>).</p><blockquote><p>Bei Nano speicherst du mit Strg + O. Er fragt dann nach dem Dateinamen – einfach Enter drücken. Zum Beenden drückst du Strg + X.</p></blockquote><h4 id="SSH-Dienst-neu-starten">SSH-Dienst neu starten</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Wichtiger Hinweis!</strong></p><p><strong>Schließ nicht sofort dein aktuelles Terminal!</strong> Teste zuerst in einem neuen Fenster, ob du dich mit der neuen Konfiguration problemlos einloggen kannst:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Wenn das klappt, kannst du das alte Fenster schließen. Wenn du dich nicht einloggen kannst, kannst du die Konfiguration im noch offenen alten Fenster ganz entspannt reparieren.</p></blockquote><blockquote><p>Wenn du einen Lightweight-Server gemietet hast, lässt sich dieser Port meistens nicht ändern. Bei klassischen ECS-Instanzen klappt das hingegen problemlos – pass also gut auf, was du da hast.</p></blockquote><hr><h3 id="3-5-UFW-Firewall-einrichten">3.5 UFW-Firewall einrichten</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) ist das Standard-Firewall-Tool von Ubuntu. Super einfach zu konfigurieren, aber trotzdem richtig mächtig.</p><h4 id="Grundkonfiguration">Grundkonfiguration</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Firewall-aktivieren">Firewall aktivieren</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Dann kommt diese Abfrage:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Tippe <code>y</code> ein, um zu bestätigen.</p><h4 id="Status-prufen">Status prüfen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 war ein Tippfehler von mir – passt das einfach an eure eigenen Gegebenheiten an</p></blockquote><p>Die Ausgabe sieht dann ungefähr so aus:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Befehle-zum-schnellen-Nachschlagen">Befehle zum schnellen Nachschlagen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-BBR-Beschleunigung-aktivieren">3.6 BBR-Beschleunigung aktivieren</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) ist ein von Google entwickelter TCP-Staukontroll-Algorithmus, der die Netzwerkleistung spürbar verbessern kann.</p><h4 id="Mit-einem-Klick-aktivieren">Mit einem Klick aktivieren</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Prufen-ob-es-aktiv-ist">Prüfen, ob es aktiv ist</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Die Ausgabe sollte so aussehen:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Ausgabe ungefähr so:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Die Wirkung von BBR</strong></p><p>Nach der Aktivierung von BBR wirst du besonders bei instabilen Verbindungen oder hoher Latenz deutlich merken:</p><ul><li>Downloads sind schneller</li><li>SSH-Sitzungen laufen flüssiger</li><li>Seiten laden schneller</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-fail2ban-einrichten-gegen-Brute-Force-Angriffe">3.7 fail2ban einrichten gegen Brute-Force-Angriffe</h3><p>fail2ban überwacht deine Logs und bannt IPs automatisch, die zu oft erfolglos versucht haben, sich anzumelden.</p><h4 id="Grundkonfiguration-2">Grundkonfiguration</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Such den Bereich <code>[sshd]</code> und stell sicher, dass folgende Einstellungen drinstehen:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Dienst-starten">Dienst starten</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Status-prufen-2">Status prüfen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Die Ausgabe sieht ungefähr so aus:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Haufige-Befehle">Häufige Befehle</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Optional-Mehrere-Server-mit-SSH-Config-verwalten">3.8 [Optional] Mehrere Server mit SSH Config verwalten</h3><p>Wenn du mehrere Server hast, ist es super nervig, jedes Mal <code>ssh -p 22000 user@ip</code> einzutippen. Mit SSH Config kannst du dir das Leben leichter machen.</p><h4 id="Konfigurationsdatei">Konfigurationsdatei</h4><p>Bearbeite <code>~/.ssh/config</code> auf <strong>deinem lokalen Rechner</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Füge folgende Konfiguration hinzu:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Verwendung">Verwendung</h4><p>Jetzt kannst du dich direkt über den Alias verbinden:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Kein IP-, Port- oder Benutzernamen-Merkschema mehr nötig!</p><hr><h3 id="3-9-Optional-Zugriff-nur-uber-Cloudflare-erlauben">3.9 [Optional] Zugriff nur über Cloudflare erlauben</h3><p>Wenn deine Website komplett hinter Cloudflare läuft, kannst du die Ports 80/443 so einstellen, dass nur noch Cloudflare-IPs Zugriff haben. Das bringt extra Sicherheit.</p><blockquote><p>⚠️ Achtung: Für diese Konfiguration muss deine Domain bereits im Cloudflare CDN eingebunden sein.</p></blockquote><h4 id="Automatisches-Konfigurationsskript">Automatisches Konfigurationsskript</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Dieses Skript macht Folgendes:</p><ol><li>Hol dir die aktuellsten IP-Subnetze direkt von Cloudflare</li><li>Füge UFW-Regeln hinzu, damit nur noch diese IPs auf Port 80/443 zugreifen dürfen</li><li>Lade UFW neu</li></ol><h4 id="Geplantes-Update-einrichten">Geplantes Update einrichten</h4><p>Die IP-Subnetze von Cloudflare können sich mal ändern. Richten wir also ein wöchentliches Auto-Update ein:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Zeitzone-einstellen">3.10 Zeitzone einstellen</h3><p>Standardmäßig ist wahrscheinlich UTC eingestellt. Stell das auf deine eigene Zeitzone um, dann lassen sich Logs viel leichter lesen:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Optional-Automatische-Sicherheitsupdates-einrichten">3.11 [Optional] Automatische Sicherheitsupdates einrichten</h3><p>Lass das System Sicherheits-Patches automatisch installieren, dann musst du nicht jedes Mal per Hand ran:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Wähl hier „Yes&quot;, um die automatischen Updates zu aktivieren.</p><blockquote><p>💡 Die Funktion installiert automatisch <strong>Sicherheitsupdates</strong>, führt aber kein Upgrade auf eine ganz neue Major-Version durch. Ist also relativ sicher.</p></blockquote><hr><h2 id="4-Zusammenfassung">4. Zusammenfassung</h2><h3 id="Checkliste-fur-die-Initialisierung">Checkliste für die Initialisierung</h3><p>Wenn du mit der ganzen Konfiguration durch bist, geh diese Checkliste nochmal durch:</p><table><thead><tr><th>Checkpunkt</th><th>Befehl</th><th>Erwartetes Ergebnis</th></tr></thead><tbody><tr><td>System ist aktuell</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Keine aktualisierbaren Pakete</td></tr><tr><td>Normaler User kann sudo</td><td><code>sudo whoami</code></td><td>Ausgabe von <code>root</code></td></tr><tr><td>Key-Login funktioniert</td><td><code>ssh yourname@ip -p port</code></td><td>Login ohne Passwort</td></tr><tr><td>Passwort-Login deaktiviert</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH-Port geändert</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Dein selbst festgelegter Port</td></tr><tr><td>Firewall aktiv</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR aktiviert</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban läuft</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Zeitzone gesetzt</td><td><code>timedatectl</code></td><td>Asia/Shanghai oder deine Zeitzone</td></tr><tr><td>Lokale SSH-Config</td><td><code>cat ~/.ssh/config</code></td><td>Server-Alias eingerichtet</td></tr></tbody></table><h3 id="Wichtige-Dateipfade">Wichtige Dateipfade</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Security-Best-Practices">Security Best Practices</h3><ol><li><strong>System regelmäßig updaten</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Login-Logs regelmäßig checken</strong>: <code>lastb</code> (fehlgeschlagene Logins), <code>last</code> (erfolgreiche Logins)</li><li><strong>fail2ban-Bans im Blick behalten</strong></li><li><strong>Vor Änderungen an wichtigen Config-Dateien immer ein Backup machen</strong></li></ol><hr><h2 id="5-Troubleshooting-Log">5. Troubleshooting-Log</h2><h3 id="Q1-Key-Login-schlagt-fehl-und-er-will-trotzdem-ein-Passwort">Q1: Key-Login schlägt fehl und er will trotzdem ein Passwort?</h3><p><strong>Mögliche Ursachen:</strong></p><ol><li><p><strong>Berechtigungsproblem</strong> (häufigster Fall)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Public Key wurde nicht richtig kopiert</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux macht Ärger</strong> (bei CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Nach-dem-Port-Wechsel-keine-Verbindung-mehr">Q2: Nach dem Port-Wechsel keine Verbindung mehr?</h3><p><strong>Fehlersuche Schritt für Schritt:</strong></p><ol><li><p>Stell sicher, dass der neue Port in der Firewall freigegeben ist:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Prüf, ob die SSH-Konfiguration stimmt:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Geh sicher, dass der SSH-Dienst läuft:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Wenn gar nichts mehr geht, logg dich über die VNC-Konsole deines Anbieters ein und reparier es.</p></li></ol><h3 id="Q2-5-Der-Port-Wechsel-zieht-gar-nicht-erst-Cloud-Anbieter-Lite-Server">Q2.5: Der Port-Wechsel zieht gar nicht erst? (Cloud-Anbieter Lite-Server)</h3><p><strong>Symptom</strong>: Du hast <code>/etc/ssh/sshd_config</code> geändert, aber nach dem Neustart des Dienstes lauscht er immer noch auf Port 22 und der neue Port will nicht.</p><p><strong>Diagnose</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Wenn die Ausgabe in etwa so aussieht:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>dann lauscht auf Port 22 <code>init</code> (PID 1) und nicht etwa der <code>sshd</code>-Prozess.</p><p><strong>Warum?</strong> Bei einigen Cloud-Anbietern wird der SSH-Zugang bei „Lightweight Servern“ oder „Container-Instanzen über die Plattform-Ebene proxied. Deine interne sshd-Konfiguration auf dem Server wird dann komplett ignoriert.</p><p><strong>Die Lösung:</strong></p><table><thead><tr><th>Instanztyp</th><th>SSH-Port ändern</th></tr></thead><tbody><tr><td>Klassische ECS</td><td>sshd_config anpassen ✅</td></tr><tr><td>Lightweight Server</td><td>Eventuell nur über das Cloud-Dashboard änderbar oder gar nicht unterstützt</td></tr><tr><td>Container-Instanzen</td><td>Änderung in der Regel nicht unterstützt</td></tr></tbody></table><p>Wenn deine Instanz den Port-Wechsel nicht unterstützt, <strong>sind andere Sicherheitsmaßnahmen umso wichtiger</strong>:</p><ul><li>✅ Einen normalen User anlegen + root-Login deaktivieren</li><li>✅ Login per SSH-Key + Passwort-Login deaktivieren</li><li>✅ fail2ban gegen Brute-Force-Angriffe</li></ul><p>Wenn du diese Punkte sauber umsetzt, ist dein System trotzdem richtig gut abgesichert.</p><h3 id="Q3-fail2ban-hat-mich-selbst-ausgesperrt">Q3: fail2ban hat mich selbst ausgesperrt?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Nach-dem-Aktivieren-von-UFW-ist-die-Website-nicht-mehr-erreichbar">Q4: Nach dem Aktivieren von UFW ist die Website nicht mehr erreichbar?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-Beim-Ausfuhren-von-Befehlen-kommt-„sudo-nicht-gefunden“">Q5: Beim Ausführen von Befehlen kommt „sudo nicht gefunden“?</h3><p>Bei einer minimalen Debian-Installation fehlt sudo oft. Installiere es einfach als root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Ein-Klick-Init-Skript-fur-Fortgeschrittene">6. Ein-Klick-Init-Skript (für Fortgeschrittene)</h2><p>Wenn du die obigen Schritte schon draufhast, kannst du mit diesem Skript dein Setup im Handumdrehen initialisieren.</p><blockquote><p>⚠️ <strong>Achtung</strong>: Bevor du das Skript losjagst, stell sicher, dass dein SSH-Public-Key schon fertig ist.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Wie-viel-sicherer-ist-dein-Server-jetzt-eigentlich">7. Wie viel sicherer ist dein Server jetzt eigentlich?</h2><table><thead><tr><th>Schritt</th><th>Was du gemacht hast</th><th>Warum es wichtig ist</th></tr></thead><tbody><tr><td>System geupdatet</td><td>Neueste Patches installiert</td><td>Bekannte Lücken gestopft</td></tr><tr><td>Neuen User angelegt</td><td>Nicht mehr direkt als root eingeloggt</td><td>Weniger Risiko für Versehen</td></tr><tr><td>SSH-Key</td><td>Schlüssel statt Passwort</td><td>Kein Brute-Force mehr möglich</td></tr><tr><td>Port geändert</td><td>Weg vom Standard-Port 22</td><td>Geringere Chance, beim Scannen gefunden zu werden</td></tr><tr><td>Passwort-Login deaktiviert</td><td>Login nur noch mit Key</td><td>Passwort-Angriffe komplett ausgeschlossen</td></tr><tr><td>root-Login deaktiviert</td><td>root kann sich nicht mehr direkt einloggen</td><td>Erschwert Angreifern das Leben</td></tr><tr><td>UFW-Firewall</td><td>Nur nötige Ports offen</td><td>Angriffsfläche minimiert</td></tr><tr><td>BBR-Turbo</td><td>Netzwerk-Performance optimiert</td><td>Mehr Speed beim Zugriff</td></tr><tr><td>fail2ban</td><td>Böse IPs automatisch gebannt</td><td>Stoppt hartnäckige Angriffe</td></tr></tbody></table><p>Mit diesen Schritten ziehst du an <strong>90 %</strong> aller VPS auf dem Markt vorbei, was die Sicherheit angeht.</p><hr><h2 id="Was-im-nachsten-Teil-kommt">Was im nächsten Teil kommt</h2><p>Im nächsten Teil stürzen wir uns auf den <strong>SSH-Key-Login Setup-Cheatcode</strong> und gehen richtig ins Detail:</p><ul><li>Wie du auf verschiedenen Systemen Keys generierst</li><li>Mehrere Keys verwalten</li><li>SSH Agent einrichten</li><li>Die üblichen Einstellungen in gängigen SSH-Clients</li></ul><hr><p><em>Dieser Artikel wurde zuletzt aktualisiert: Januar 2026</em></p><p><em>Toolbox-Serie für Indie-Entwickler, abonniere gerne für mehr!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/de/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/de/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Ein neuer VPS ist wie eine unverschlossene Tür, an der die ganze Welt klopft. Das Erste, was du nach dem Kauf eines VPS tun musst, ist nicht, Software zu installieren, sondern die Sicherheit zu initialisieren: SSH-Schlüssel-Login, nicht standardmäßiger Port, normaler Benutzer, Firewall, fail2ban, BBR-Beschleunigung. Dieser Artikel zeigt dir, wie du deine Grundlagen in der ersten Stunde festlegst.</summary>
    <title>Deine erste Stunde mit dem VPS: Komplette Einrichtung von nacktem Server bis sicher nutzbar (mach dein OpenClaw sicherer)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Indie Hacker Toolbox" scheme="https://blog.ittinker.com/categories/Indie-Hacker-Toolbox/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="Linux" scheme="https://blog.ittinker.com/tags/Linux/"/>
    <category term="Server security" scheme="https://blog.ittinker.com/tags/Server-security/"/>
    <category term="Indie hacking" scheme="https://blog.ittinker.com/tags/Indie-hacking/"/>
    <content>
      <![CDATA[<blockquote><p>A freshly bought VPS is like an unlocked door with script kiddies knocking from all over the world. This guide walks you through locking that door tight, so your openclaw won’t go running wild.</p></blockquote><h2 id="0-Before-We-Begin">0. Before We Begin</h2><p>You just bought a VPS, excitedly grabbed the IP and root password, and now what?</p><p>Most folks just dive right in: installing software and deploying their projects.</p><p><strong>That’s a dangerous habit.</strong></p><p>Your VPS has a public IP, meaning anyone in the world can try to connect to it. And with the default setup:</p><ul><li>Port <strong>22</strong> is open to the public</li><li>The username is the universally known <strong>root</strong></li><li>Leaving just a single password to protect you</li></ul><p>Countless automated scripts are scanning IP ranges every single day, brute-forcing common passwords. The moment your server goes live, it’s already under attack.</p><p>So, <strong>the very first thing you do after getting a VPS isn’t installing software—it’s locking down security.</strong></p><hr><h2 id="1-Our-Goal">1. Our Goal</h2><p>The goal of this guide is:</p><ul><li>✅ Set up <strong>secure remote access</strong>: SSH key login + a non-default port</li><li>✅ Create a <strong>standard user</strong>: avoid using root directly</li><li>✅ Configure a <strong>firewall</strong>: only open the ports you actually need</li><li>✅ Enable <strong>network acceleration</strong>: let BBR make your network fly</li><li>✅ Prevent <strong>brute-force attacks</strong>: fail2ban auto-bans malicious IPs</li></ul><p>Once you’ve done all this, your VPS will have a rock-solid foundation, and you can deploy all sorts of services on it with total peace of mind.</p><hr><h2 id="2-Planning-Thinking">2. Planning &amp; Thinking</h2><h3 id="Why-bother-with-all-these-configurations">Why bother with all these configurations?</h3><p>A freshly bought VPS is a lot like a brand-new unfinished house:</p><table><thead><tr><th>Default State</th><th>Risk</th><th>Our Solution</th></tr></thead><tbody><tr><td>Logging in directly as root</td><td>Too much privilege, high risk of accidental damage</td><td>Create a standard user + sudo</td></tr><tr><td>Password login</td><td>Vulnerable to brute-force attacks</td><td>SSH key authentication</td></tr><tr><td>Default port 22</td><td>Prime target for port scanners</td><td>Switch to a non-standard port</td></tr><tr><td>Firewall disabled</td><td>All ports exposed to the internet</td><td>UFW: only allow essential ports</td></tr><tr><td>Native network</td><td>High packet loss, high latency</td><td>BBR congestion control algorithm</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="The-Overall-Workflow">The Overall Workflow</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>We’ll follow this exact order, and I’ll explain the “why” behind each step as we go.</p><h2 id="3-Step-by-Step-Guide">3. Step-by-Step Guide</h2><h3 id="3-1-First-Login-System-Update">3.1 First Login &amp; System Update</h3><h4 id="Grab-Your-Server-IP">Grab Your Server IP</h4><p>Once you’ve bought your VPS, your provider will give you:</p><ul><li><strong>IP address</strong>: like <code>192.168.1.100</code></li><li><strong>Port</strong>: usually <code>22</code> (some providers might change it to a different port)</li><li><strong>Username</strong>: usually <code>root</code></li><li><strong>Password</strong>: a randomly generated string</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="SSH-Connection">SSH Connection</h4><p><strong>Mac / Linux users</strong>: open your terminal and just type:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows users</strong>:</p><ul><li>Windows 10/11 comes with OpenSSH built-in, so you can run the command above directly in PowerShell or CMD</li><li>Or you can use tools like <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>The first time you connect, you’ll see a fingerprint confirmation prompt:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>It’s basically asking: “I don’t recognize this machine, are you sure you want to connect?”</p><p>Type <code>yes</code> and hit Enter. Then enter your password (<strong>note: no characters will show up as you type, this is a normal security feature</strong>) and hit Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>If you see a prompt like this, you’re successfully logged in:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Why verify the fingerprint?</strong></p><p>This is to prevent “man-in-the-middle” (MITM) attacks. By saving the server’s fingerprint on your first connection, you’ll know something’s up if it ever changes down the road—usually a sign someone might be spoofing your server.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Getting-to-know-your-server">Getting to know your server</h4><p>Once you’re logged in, let’s take a quick look at what this machine is packing:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Keep these details in mind—they’ll come in handy when troubleshooting later on.</p><h4 id="System-update">System update</h4><p>Alright, now that we’ve scoped out the server specs, the first real order of business is updating the system. Fresh server images can be a few months old, and there might be critical security patches waiting for you:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Here’s what those flags do:</strong></p><ul><li><code>apt update</code>: Updates the package index</li><li><code>apt full-upgrade</code>: Upgrades all installed packages, including the kernel</li><li><code>-y</code>: Automatically says “yes” to prompts so you don’t have to babysit it</li><li><code>apt autoremove</code>: Cleans up dependencies that are no longer needed</li><li><code>apt autoclean</code>: Clears out the cached downloaded package files</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ This step might take a few minutes, depending on how many updates are queued up. If it occasionally stops to ask for confirmation, just follow the prompts and you’ll be fine.</p></blockquote><h4 id="Checking-if-a-reboot-is-needed">Checking if a reboot is needed</h4><p>After a kernel update, you’ll usually need to reboot for it to take effect:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>If it tells you a reboot is required:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Once it reboots, you’ll need to SSH back in.</p><h4 id="Installing-essential-tools">Installing essential tools</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>What these tools are for:</strong></p><table><thead><tr><th>Tool</th><th>What it’s for</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Lets regular users run admin commands</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Download files</td><td></td></tr><tr><td><code>git</code></td><td>Version control</td><td></td></tr><tr><td><code>vim</code></td><td>Text editor</td><td></td></tr><tr><td><code>htop</code></td><td>A prettier process monitor</td><td></td></tr><tr><td><code>tree</code></td><td>Show directory structure as a tree</td><td></td></tr><tr><td><code>net-tools</code></td><td>Network tools (ifconfig, netstat, etc)</td><td></td></tr><tr><td><code>ufw</code></td><td>Simple and easy firewall</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Brute-force protection</td><td></td></tr><tr><td><code>neofetch</code></td><td>Display system info beautifully</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Creating-a-Non-Root-User">3.2 Creating a Non-Root User</h3><h4 id="Why-not-just-use-root">Why not just use root?</h4><p>The root user has way too much power. One typo with <code>rm -rf /</code> and everything is gone. For your daily operations, you should stick to a regular user and only use <code>sudo</code> when you actually need admin privileges.</p><blockquote><p>The openclaw is a monster—would you really dare to hand root privileges over to it?</p></blockquote><h4 id="Creating-the-User">Creating the User</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>The system will prompt you to set a password and fill in some basic info:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Granting-sudo-Privileges">Granting sudo Privileges</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Let’s verify it:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>If the output shows <code>root</code>, your sudo setup is good to go.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Pro Tip</strong></p><p>Type <code>exit</code> to switch back to the root user. We’ll keep using root for the rest of the setup, and once everything is configured, we’ll switch back to the regular user.</p></blockquote><hr><h3 id="3-3-Setting-Up-SSH-Key-Authentication">3.3 Setting Up SSH Key Authentication</h3><h4 id="Key-Authentication-vs-Password-Authentication">Key Authentication vs. Password Authentication</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Key authentication is way more secure than passwords:</p><ul><li>Passwords can be brute-forced; keys are practically impossible to crack</li><li>No need to type your password every time—much more convenient</li><li>Even if your password leaks, no one can log in without the private key</li></ul><h4 id="Step-1-Generate-a-Key-Pair-Locally">Step 1: Generate a Key Pair Locally</h4><p>Run this on <strong>your local machine</strong> (not the server):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>You’ll be prompted with:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Just hit Enter to accept the default path. Here we’re using <code>./ittinker</code>, which simply means it’ll be saved in your current directory with the filename <code>ittinker</code>.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>You can set a passphrase for the key (an extra layer of protection), or just hit Enter to leave it blank.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Once it’s done generating, you’ll see two files in the <code>~/.ssh/</code> directory (these are the default filenames you’ll get if you just hit Enter earlier):</p><ul><li><code>id_ed25519</code>: Your <strong>private key</strong>. Keep this absolutely safe and never leak it!</li><li><code>id_ed25519.pub</code>: Your <strong>public key</strong>. This is the one you’ll upload to the server.</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> is the currently recommended algorithm—it’s more secure and has a shorter key than traditional RSA. If your system is too old and doesn’t support it, you can fall back to <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>A quick side note: ed25519 generates a much smaller key file, whereas RSA files are pretty bulky. I actually asked an AI about this—turns out the file size doesn’t really matter, it’s just how the algorithms work.</p></blockquote><h4 id="Step-2-Upload-Your-Public-Key-to-the-Server">Step 2: Upload Your Public Key to the Server</h4><p><strong>Method A: Using ssh-copy-id (Recommended)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>After typing in your password, your public key will be automatically copied over to the server.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Method B: Manual Copy</strong></p><p>If <code>ssh-copy-id</code> doesn’t work, you can just do it manually:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Copy the output (that long string of text starting with <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Permissions are crucial!</strong></p><p>SSH is super strict about file permissions:</p><ul><li><code>.ssh</code> directory: 700 (only you can access it)</li><li><code>authorized_keys</code> file: 600 (only you can read and write to it)</li></ul><p>If the permissions are off, SSH will refuse to use the key for login.</p></blockquote><h4 id="Step-3-Test-your-key-based-login">Step 3: Test your key-based login</h4><p><strong>Open a new terminal window</strong> (keep the original one open just in case you mess up and need a backup), and test the key login:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>If you can log in without typing a password, your key setup is successful! 🎉</p><p>(If you set a passphrase for your private key, it’ll prompt you for that private key password—which is totally normal.)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>We added the -i flag here because our key isn’t in the default path. We put it in the current directory instead. If you don’t specify it, the system will just try to use the default key.</p></blockquote><hr><h3 id="3-4-Hardening-SSH-Security">3.4 Hardening SSH Security</h3><p>Now that key-based login is up and running, let’s lock down SSH:</p><ol><li>Change the default port (to dodge automated port scans)</li><li>Disable password authentication</li><li>Block direct root login</li></ol><h4 id="Edit-the-SSH-config-file">Edit the SSH config file</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Find and tweak the following settings (some might be commented out, so just remove the leading <code>#</code>):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Save and exit (<code>ctrl + o</code>).</p><blockquote><p>In Nano, you save by hitting ctrl + o. It’ll prompt you for the filename—just press Enter to confirm. To quit, hit ctrl + x.</p></blockquote><h4 id="Restart-the-SSH-service">Restart the SSH service</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Heads up!</strong></p><p><strong>Don’t close your current terminal just yet!</strong> First, open a new window and test if you can log in with the new setup:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>If it works, you’re good to close the old window. If you can’t log in, you can still fix the config from your original session.</p></blockquote><blockquote><p>If you bought a lightweight server, chances are you can’t change this port. Traditional ECS instances usually let you modify it, so just keep that in mind.</p></blockquote><hr><h3 id="3-5-Set-up-the-UFW-firewall">3.5 Set up the UFW firewall</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) is Ubuntu’s default firewall tool. It’s super simple to configure but packs a punch.</p><h4 id="Basic-setup">Basic setup</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Enable-the-firewall">Enable the firewall</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>It’ll prompt you:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Type <code>y</code> to confirm.</p><h4 id="Check-the-status">Check the status</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 was a typo on my end—just swap in whatever works for your own setup.</p></blockquote><p>Output looks like:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Common-Commands-Cheat-Sheet">Common Commands Cheat Sheet</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Enabling-BBR-Acceleration">3.6 Enabling BBR Acceleration</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) is a TCP congestion control algorithm developed by Google that can significantly boost your network performance.</p><h4 id="One-Click-Enable">One-Click Enable</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Verify-It’s-Enabled">Verify It’s Enabled</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Output should be:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Output looks like:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>What BBR Does</strong></p><p>Once BBR is up and running, especially on unstable networks or high-latency connections, you’ll noticeably feel:</p><ul><li>Faster download speeds</li><li>Smoother SSH sessions</li><li>Quicker webpage loading</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Setting-Up-fail2ban-to-Prevent-Brute-Force-Attacks">3.7 Setting Up fail2ban to Prevent Brute-Force Attacks</h3><p>fail2ban monitors your logs and automatically bans any IPs that rack up too many failed login attempts.</p><h4 id="Basic-Configuration">Basic Configuration</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Find the <code>[sshd]</code> section and make sure the following settings are in place:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Start-the-service">Start the service</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Check-the-status-2">Check the status</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>The output will look something like this:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Common-commands">Common commands</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Optional-Managing-Multiple-Servers-with-SSH-Config">3.8 [Optional] Managing Multiple Servers with SSH Config</h3><p>If you’re juggling multiple servers, typing out <code>ssh -p 22000 user@ip</code> every single time gets old fast. You can use SSH Config to make your life a lot easier.</p><h4 id="The-Config-File">The Config File</h4><p>Edit <code>~/.ssh/config</code> on <strong>your local machine</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Add your configurations:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="How-to-Use-It">How to Use It</h4><p>Now you can connect directly using an alias:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>No more memorizing IPs, ports, and usernames!</p><hr><h3 id="3-9-Optional-Restrict-Access-to-Cloudflare-Only">3.9 [Optional] Restrict Access to Cloudflare Only</h3><p>If your site sits entirely behind Cloudflare, you can lock down ports 80 and 443 so only Cloudflare’s IPs can reach them. It’s a great little security boost.</p><blockquote><p>⚠️ Heads up: This setup requires your domain to already be proxied through the Cloudflare CDN.</p></blockquote><h4 id="Auto-Configuration-Script">Auto-Configuration Script</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>This script will:</p><ol><li>Grab the latest IP ranges straight from Cloudflare</li><li>Add UFW rules to only allow those IPs to hit ports 80/443</li><li>Reload UFW</li></ol><h4 id="Set-Up-Scheduled-Updates">Set Up Scheduled Updates</h4><p>Cloudflare’s IP ranges can change over time, so let’s set this to auto-update every week:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Set-Your-Timezone">3.10 Set Your Timezone</h3><p>The default timezone is probably UTC. Let’s switch it to your local timezone so reading logs is a breeze:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Optional-Set-Up-Automatic-Security-Updates">3.11 [Optional] Set Up Automatic Security Updates</h3><p>Let the system install security patches automatically so you don’t have to do it manually every time:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Select “Yes” to enable automatic updates.</p><blockquote><p>💡 This will automatically install <strong>security updates</strong> only. It won’t upgrade your system to a major new release, so it’s pretty safe to leave on.</p></blockquote><hr><h2 id="4-Wrap-Up">4. Wrap Up</h2><h3 id="Post-Setup-Checklist">Post-Setup Checklist</h3><p>Once you’ve got all the above configured, run through this checklist to double-check everything:</p><table><thead><tr><th>Check</th><th>Command</th><th>Expected Result</th></tr></thead><tbody><tr><td>System is up to date</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>No packages to upgrade</td></tr><tr><td>Regular user can sudo</td><td><code>sudo whoami</code></td><td>Outputs <code>root</code></td></tr><tr><td>Key-based login works</td><td><code>ssh yourname@ip -p port</code></td><td>Logs in without a password</td></tr><tr><td>Password login is disabled</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH port changed</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>The port you set</td></tr><tr><td>Firewall is enabled</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR is enabled</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban is running</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Timezone is set</td><td><code>timedatectl</code></td><td>Asia/Shanghai or your timezone</td></tr><tr><td>Local SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>Server alias configured</td></tr></tbody></table><h3 id="Key-File-Locations">Key File Locations</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Security-Best-Practices">Security Best Practices</h3><ol><li><strong>Update your system regularly</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Check login logs regularly</strong>: <code>lastb</code> (failed logins), <code>last</code> (successful logins)</li><li><strong>Keep an eye on fail2ban bans</strong></li><li><strong>Back up important config files before making changes</strong></li></ol><hr><h2 id="5-Troubleshooting">5. Troubleshooting</h2><h3 id="Q1-Key-based-login-failed-still-asking-for-a-password">Q1: Key-based login failed, still asking for a password?</h3><p><strong>Possible reasons:</strong></p><ol><li><p><strong>Permission issues</strong> (most common)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Public key wasn’t copied correctly</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux interference</strong> (on CentOS/RHEL systems)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Can’t-connect-after-changing-the-port">Q2: Can’t connect after changing the port?</h3><p><strong>Troubleshooting steps:</strong></p><ol><li><p>Make sure the new port is open in your firewall:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Double-check your SSH config:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Verify the SSH service is actually running:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>If you’re completely locked out, use your cloud provider’s VNC or web console to log in and fix it.</p></li></ol><h3 id="Q2-5-Port-change-not-taking-effect-at-all-On-lightweight-cloud-servers">Q2.5: Port change not taking effect at all? (On lightweight cloud servers)</h3><p><strong>Symptom</strong>: You changed <code>/etc/ssh/sshd_config</code>, but after restarting the service, port 22 is still listening and the new port isn’t working.</p><p><strong>How to diagnose it</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>If the output looks something like this:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>It means port 22 is being listened on by <code>init</code> (PID 1), not the <code>sshd</code> process.</p><p><strong>Why?</strong>: Some cloud providers’ “Lightweight Servers” or “Container Instances” proxy SSH at the <strong>platform layer</strong>, meaning your server’s internal sshd config won’t take effect at all.</p><p><strong>The Fix</strong>:</p><table><thead><tr><th>Instance Type</th><th>How to Change SSH Port</th></tr></thead><tbody><tr><td>Traditional ECS</td><td>Edit sshd_config ✅</td></tr><tr><td>Lightweight Server</td><td>Might need to be changed in the cloud console, or not supported at all</td></tr><tr><td>Container Instance</td><td>Usually not supported</td></tr></tbody></table><p>If your instance doesn’t support changing the port, <strong>other security measures become even more critical</strong>:</p><ul><li>✅ Create a standard user + disable root login</li><li>✅ Use SSH key authentication + disable password login</li><li>✅ Use fail2ban to block brute-force attacks</li></ul><p>Nail these down, and your server will still be highly secure.</p><h3 id="Q3-fail2ban-banned-me-by-mistake">Q3: fail2ban banned me by mistake?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Website-inaccessible-after-enabling-UFW">Q4: Website inaccessible after enabling UFW?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-“sudo-command-not-found”-when-running-commands">Q5: “sudo: command not found” when running commands?</h3><p>A minimal Debian install might not come with sudo. Install it using root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-One-Click-Init-Script-For-When-You’re-Comfortable">6. One-Click Init Script (For When You’re Comfortable)</h2><p>Once you’re familiar with the steps above, you can use this script to fast-track the setup.</p><blockquote><p>⚠️ <strong>Heads up</strong>: Before running the script, make sure you’ve already got your SSH public key ready.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-How-Much-More-Secure-Are-We-Now">7. How Much More Secure Are We Now?</h2><table><thead><tr><th>Step</th><th>What We Did</th><th>Why It Matters</th></tr></thead><tbody><tr><td>System Update</td><td>Installed the latest patches</td><td>Fixes known vulnerabilities</td></tr><tr><td>Created a New User</td><td>Stopped logging in directly as root</td><td>Reduces the risk of accidental mishaps</td></tr><tr><td>SSH Keys</td><td>Swapped passwords for keys</td><td>Brute-force attacks become impossible</td></tr><tr><td>Changed the Port</td><td>Ditched the default port 22</td><td>Lowers the chances of getting scanned</td></tr><tr><td>Disabled Passwords</td><td>Key-only login allowed</td><td>Completely eliminates password attacks</td></tr><tr><td>Disabled Root</td><td>Root can’t log in directly</td><td>Makes an attacker’s job much harder</td></tr><tr><td>UFW Firewall</td><td>Only opened necessary ports</td><td>Shrinks the attack surface</td></tr><tr><td>BBR Acceleration</td><td>Optimized network performance</td><td>Speeds up access</td></tr><tr><td>fail2ban</td><td>Auto-bans malicious IPs</td><td>Stops persistent attacks</td></tr></tbody></table><p>Once you’ve done all this, your server is already more secure than <strong>90%</strong> of the VPS instances out there. Give yourself a pat on the back!</p><hr><h2 id="What’s-Coming-Up-Next">What’s Coming Up Next</h2><p>In the next post, we’ll dive into a <strong>Quick Reference for SSH Key Login Setup</strong>, covering the nitty-gritty details like:</p><ul><li>How to generate keys on different operating systems</li><li>Managing multiple keys</li><li>SSH Agent configuration</li><li>Common SSH client settings</li></ul><hr><p><em>This post was last updated: January 2026</em></p><p><em>Indie Dev Toolbox Series—hit that follow button!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/en/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/en/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Secure your new VPS in 1 hour: set up SSH key login, non-default ports, ordinary users, firewall, fail2ban, and BBR acceleration. Follow this guide to lock down your server and keep script kiddies out.</summary>
    <title>Your First Hour With a New VPS: A Complete Bare-to-Secure Setup Guide (Make Your OpenClaw Safer)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Caja de herramientas para devs independientes" scheme="https://blog.ittinker.com/categories/Caja-de-herramientas-para-devs-independientes/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="SSH Remoto" scheme="https://blog.ittinker.com/tags/SSH-Remoto/"/>
    <category term="Seguridad del servidor" scheme="https://blog.ittinker.com/tags/Seguridad-del-servidor/"/>
    <category term="Indie Dev" scheme="https://blog.ittinker.com/tags/Indie-Dev/"/>
    <content>
      <![CDATA[<blockquote><p>Un VPS recién comprado es como una puerta sin cerradura, y hay script kiddies por todo el mundo tocando el timbre. En este post te enseño a ponerle buen cerrojo. Para que tu openclaw no salga correteando por ahí.</p></blockquote><h2 id="0-Antes-de-empezar">0. Antes de empezar</h2><p>Acabas de comprar un VPS, te emocionas al recibir la IP y la contraseña de root, ¿y luego qué?</p><p>Lo que hace mucha gente es: empezar a instalar software y desplegar el proyecto directamente.</p><p><strong>Ese es un hábito peligroso.</strong></p><p>Tu VPS tiene una IP pública, lo que significa que cualquier persona en el mundo puede intentar conectarse a él. Y con la configuración por defecto:</p><ul><li>El puerto expuesto es el <strong>22</strong></li><li>El usuario es el archiconocido <strong>root</strong></li><li>Solo te queda una contraseña para protegerte</li></ul><p>Cada día, infinidad de scripts automatizados están escaneando rangos de IPs, intentando ataques de fuerza bruta con contraseñas comunes. Desde el instante en que tu servidor se conecta, ya está bajo ataque.</p><p>Por eso, <strong>lo primero que debes hacer al recibir tu VPS no es instalar software, sino dejar la seguridad a punto</strong>.</p><hr><h2 id="1-Nuestro-objetivo">1. Nuestro objetivo</h2><p>El objetivo de este artículo es:</p><ul><li>✅ Montar <strong>acceso remoto seguro</strong>: login con llaves SSH + un puerto que no sea el de por defecto</li><li>✅ Crear un <strong>usuario normal</strong>: evita usar root directamente</li><li>✅ Configurar el <strong>firewall</strong>: abre solo los puertos imprescindibles</li><li>✅ Activar la <strong>aceleración de red</strong>: con BBR la conexión sale volando</li><li>✅ Frenar los <strong>ataques de fuerza bruta</strong>: fail2ban banea solito las IPs maliciosas</li></ul><p>Con todo esto listo, tu VPS va a tener una base sólida para que puedas desplegar servicios con tranquilidad.</p><hr><h2 id="2-Plan-y-reflexion">2. Plan y reflexión</h2><h3 id="¿Por-que-hacer-toda-esta-configuracion">¿Por qué hacer toda esta configuración?</h3><p>Un VPS recién comprado es como un piso recién entregado, a medio terminar:</p><table><thead><tr><th>Estado por defecto</th><th>Riesgo</th><th>Nuestra solución</th></tr></thead><tbody><tr><td>Acceso directo con usuario root</td><td>Privilegios excesivos, un error puede ser fatal</td><td>Crear usuario normal + sudo</td></tr><tr><td>Acceso por contraseña</td><td>Vulnerable a ataques de fuerza bruta</td><td>Acceso SSH con llaves</td></tr><tr><td>Puerto 22 por defecto</td><td>Es el primer objetivo de los escáneres</td><td>Cambiar a un puerto no estándar</td></tr><tr><td>Firewall apagado</td><td>Todos los puertos expuestos</td><td>UFW para abrir solo lo necesario</td></tr><tr><td>Red nativa</td><td>Alta pérdida de paquetes y mucha latencia</td><td>Algoritmo de control de congestión BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Flujo-general">Flujo general</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Vamos a seguir este orden paso a paso, y te explicaré el porqué de cada cosa.</p><h2 id="3-Pasos-a-seguir">3. Pasos a seguir</h2><h3 id="3-1-Primer-acceso-y-actualizacion-del-sistema">3.1 Primer acceso y actualización del sistema</h3><h4 id="Conseguir-la-IP-del-servidor">Conseguir la IP del servidor</h4><p>Una vez que compras el VPS, tu proveedor te va a dar:</p><ul><li><strong>Dirección IP</strong>: por ejemplo <code>192.168.1.100</code></li><li><strong>Puerto</strong>: normalmente es <code>22</code> (algunos proveedores lo cambian por otro)</li><li><strong>Usuario</strong>: por lo general <code>root</code></li><li><strong>Contraseña</strong>: una cadena de caracteres generada aleatoriamente</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Conexion-por-SSH">Conexión por SSH</h4><p><strong>Usuarios de Mac / Linux</strong>: abran la terminal y escriban directamente:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Usuarios de Windows</strong>:</p><ul><li>Windows 10/11 ya incluye OpenSSH, así que pueden usar el comando anterior directamente en PowerShell o CMD</li><li>O pueden usar herramientas como <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>La primera vez que se conecten verán un mensaje para confirmar la huella digital:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Básicamente les pregunta: «No conozco esta máquina, ¿seguro que quieres conectarte?»</p><p>Escriban <code>yes</code> y presionen Enter. Luego escriban la contraseña (<strong>ojo: al escribirla no se muestra ningún carácter, es una medida de seguridad totalmente normal</strong>) y presionen Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Si ven un mensaje parecido a este, ¡ya están dentro!:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>¿Por qué verificar la huella digital?</strong></p><p>Para prevenir ataques de “man-in-the-middle”. La primera vez que te conectas, anotas la huella digital del servidor. Si en el futuro cambia al intentar conectarte, es una señal de que alguien podría estar suplantando tu servidor.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Conociendo-tu-servidor">Conociendo tu servidor</h4><p>Nada más iniciar sesión, échale un ojo al estado general de la máquina:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Guarda bien esta información, te hará falta más adelante cuando tengas que solucionar algún problema.</p><h4 id="Actualizacion-del-sistema">Actualización del sistema</h4><p>Una vez que ya conoces la info de tu servidor, la primera tarea seria es actualizar el sistema. La imagen del sistema de un servidor nuevo puede tener ya unos meses, y es muy probable que se hayan publicado parches de seguridad desde entonces:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Explicación de los parámetros:</strong></p><ul><li><code>apt update</code>: actualiza el índice de paquetes</li><li><code>apt full-upgrade</code>: actualiza todos los paquetes, incluido el kernel</li><li><code>-y</code>: confirma automáticamente, así no tienes que escribir “yes” a mano</li><li><code>apt autoremove</code>: elimina las dependencias que ya no se necesitan</li><li><code>apt autoclean</code>: limpia la caché de los paquetes de instalación descargados</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Este paso puede tardar unos minutos, dependiendo de la cantidad de actualizaciones. Si te pide confirmación en algún momento, básicamente dile que sí y sigue la corriente.</p></blockquote><h4 id="Comprobar-si-hace-falta-reiniciar">Comprobar si hace falta reiniciar</h4><p>Después de actualizar el kernel, normalmente hace falta reiniciar para que los cambios surtan efecto:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Si te sale un aviso de que hay que reiniciar:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Tras el reinicio, tendrás que volver a conectarte por SSH.</p><h4 id="Instalar-herramientas-de-uso-comun">Instalar herramientas de uso común</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>¿Para qué sirven estas herramientas?:</strong></p><table><thead><tr><th>Herramienta</th><th>Uso</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Permite a usuarios normales ejecutar comandos de administrador</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Descargar archivos</td><td></td></tr><tr><td><code>git</code></td><td>Control de versiones</td><td></td></tr><tr><td><code>vim</code></td><td>Editor de texto</td><td></td></tr><tr><td><code>htop</code></td><td>Monitor de procesos más visual</td><td></td></tr><tr><td><code>tree</code></td><td>Muestra la estructura de directorios en forma de árbol</td><td></td></tr><tr><td><code>net-tools</code></td><td>Herramientas de red (ifconfig, netstat, etc.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Un firewall sencillo y fácil de usar</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Protección contra ataques de fuerza bruta</td><td></td></tr><tr><td><code>neofetch</code></td><td>Muestra la información del sistema de forma bonita</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Crear-un-usuario-no-root">3.2 Crear un usuario no root</h3><h4 id="¿Por-que-no-usar-root-directamente">¿Por qué no usar root directamente?</h4><p>El usuario root tiene demasiados privilegios. Con un simple resbalón tecleando <code>rm -rf /</code>, puedes borrar todo sin remedio. Para el día a día, conviene usar un usuario normal y recurrir a <code>sudo</code> solo cuando necesites permisos de administrador.</p><blockquote><p>La langosta (openclaw) es un monstruo, ¿cómo se te ocurre darle acceso root?</p></blockquote><h4 id="Crear-el-usuario">Crear el usuario</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>El sistema te pedirá que establezcas una contraseña y algunos datos adicionales:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Otorgar-permisos-sudo">Otorgar permisos sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Comprobemos que funciona:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Si el resultado es <code>root</code>, significa que sudo se configuró correctamente.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Tip</strong></p><p>Si escribes <code>exit</code> volverás al usuario root. Para los siguientes pasos seguiremos configurando como root y, al terminar, cambiaremos al usuario normal.</p></blockquote><hr><h3 id="3-3-Configurar-acceso-por-clave-SSH">3.3 Configurar acceso por clave SSH</h3><h4 id="Autenticacion-por-clave-vs-por-contrasena">Autenticación por clave vs. por contraseña</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>La autenticación por clave es muchísimo más segura que la de contraseña:</p><ul><li>Las contraseñas se pueden crackear por fuerza bruta; adivinar una clave es prácticamente imposible</li><li>No tienes que escribir la contraseña cada vez, lo cual es mucho más cómodo</li><li>Aunque tu contraseña se filtre, sin la clave privada nadie podrá iniciar sesión</li></ul><h4 id="Paso-1-Generar-el-par-de-claves-en-tu-equipo-local">Paso 1: Generar el par de claves en tu equipo local</h4><p>Ejecuta esto en <strong>tu ordenador</strong> (no en el servidor):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Te saldrá este aviso:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Simplemente pulsa Enter para usar la ruta por defecto. Aquí hemos usado ./ittinker, lo que significa que se guardará en el directorio actual con el nombre ittinker.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Puedes ponerle una contraseña a la clave (para tener una capa extra de protección) o simplemente pulsar Enter y dejarlo en blanco.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Cuando termine, verás dos archivos en el directorio <code>~/.ssh/</code> (estos son los nombres por defecto, así te quedarán si has pulsado Enter antes):</p><ul><li><code>id_ed25519</code>: la <strong>clave privada</strong>, ¡que jamás debes filtrar!</li><li><code>id_ed25519.pub</code>: la <strong>clave pública</strong>, que tienes que subir al servidor</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> es el algoritmo recomendado a día de hoy: más seguro que el clásico RSA y con claves más cortas. Si tu sistema es muy antiguo y no lo soporta, puedes tirar por <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Un pequeño detalle: la clave que genera ed25519 es bastante más pequeña, mientras que el archivo de RSA es muy grande. Se lo pregunté a la IA y me enteré de que el tamaño da igual, lo que importa es el algoritmo.</p></blockquote><h4 id="Paso-2-Sube-la-clave-publica-al-servidor">Paso 2: Sube la clave pública al servidor</h4><p><strong>Método A: Usar ssh-copy-id (recomendado)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Tras meter la contraseña, la clave pública se copiará al servidor automáticamente.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Método B: Copiar a mano</strong></p><p>Si <code>ssh-copy-id</code> no te funciona, puedes hacerlo a mano:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Copia el texto que te arroja la consola (es una cadena bastante larga que empieza con <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>¡Ojo con los permisos!</strong></p><p>SSH es súper estricto con los permisos de los archivos:</p><ul><li>Directorio <code>.ssh</code>: 700 (acceso exclusivo para ti)</li><li>Archivo <code>authorized_keys</code>: 600 (lectura y escritura solo para ti)</li></ul><p>Si los permisos no están bien, SSH se negará en redondo a usar tu llave para iniciar sesión.</p></blockquote><h4 id="Paso-3-Probar-el-inicio-de-sesion-con-llave">Paso 3: Probar el inicio de sesión con llave</h4><p><strong>Abre una ventana de terminal nueva</strong> (no cierres la original por si metes la pata y necesitas revertir los cambios) y prueba acceder con tu llave:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Si logras entrar sin que te pida la contraseña, ¡ya quedó lista la configuración de la llave! 🎉</p><p>(Si le pusiste una passphrase a tu llave privada, te pedirá esa contraseña; es un comportamiento totalmente normal)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Aquí le pasamos el parámetro -i porque esta llave no está en la ruta por defecto, sino en el directorio actual. Si no se lo especificamos, el sistema intentará usar la llave por defecto.</p></blockquote><hr><h3 id="3-4-Reforzando-la-seguridad-de-SSH">3.4 Reforzando la seguridad de SSH</h3><p>Ya que el inicio de sesión con llave te funciona, vamos a blindar un poco más el SSH:</p><ol><li>Cambiar el puerto por defecto (para esquivar a los bots que escanean la red)</li><li>Desactivar el inicio de sesión con contraseña</li><li>Bloquear el acceso directo del usuario root</li></ol><h4 id="Editar-el-archivo-de-configuracion-de-SSH">Editar el archivo de configuración de SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Busca y modifica las siguientes opciones (algunas quizás estén comentadas, así que borra el <code>#</code> del principio):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Guarda y sal del editor (<code>ctrl + o</code>).</p><blockquote><p>En Nano, para guardar es Ctrl + O; te pedirá el nombre del archivo, dale directamente Enter, y para salir es Ctrl + X.</p></blockquote><h4 id="Reiniciar-el-servicio-SSH">Reiniciar el servicio SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>¡Ojo con esto!</strong></p><p><strong>¡No cierres la terminal actual!</strong> Primero abre una ventana nueva y prueba si puedes iniciar sesión con la nueva configuración:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Si logras entrar, entonces ya puedes cerrar la ventana vieja. Si te quedas fuera, todavía puedes arreglar la configuración desde la sesión anterior.</p></blockquote><blockquote><p>Si compraste un servidor ligero, lo más probable es que este puerto no se pueda cambiar; en cambio, los servidores ECS tradicionales sí lo permiten. Tenlo en cuenta.</p></blockquote><hr><h3 id="3-5-Configurar-el-firewall-UFW">3.5 Configurar el firewall UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) es la herramienta de firewall que viene por defecto en Ubuntu. Es súper fácil de configurar, pero potente a la vez.</p><h4 id="Configuracion-basica">Configuración básica</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Activar-el-firewall">Activar el firewall</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Te mostrará este mensaje:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Escribe <code>y</code> para confirmar.</p><h4 id="Comprobar-el-estado">Comprobar el estado</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>El 23022 fue un error de tipeo mío, simplemente ajusten eso según su propio caso.</p></blockquote><p>La salida será algo como:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Chuleta-de-comandos-habituales">Chuleta de comandos habituales</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Activar-la-aceleracion-BBR">3.6 Activar la aceleración BBR</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) es un algoritmo de control de congestión TCP desarrollado por Google que mejora significativamente el rendimiento de la red.</p><h4 id="Activarlo-con-un-solo-comando">Activarlo con un solo comando</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Verificar-si-esta-activado">Verificar si está activado</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>La salida debería ser:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>La salida será algo como:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>El efecto de BBR</strong></p><p>Tras activar BBR, especialmente en entornos con red inestable o alta latencia, notarás claramente:</p><ul><li>Descargas más rápidas</li><li>Operaciones SSH más fluidas</li><li>Carga de páginas más veloz</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Configurar-fail2ban-para-prevenir-ataques-de-fuerza-bruta">3.7 Configurar fail2ban para prevenir ataques de fuerza bruta</h3><p>fail2ban monitoriza los registros y, si detecta una IP con múltiples intentos de inicio de sesión fallidos, la bloquea automáticamente.</p><h4 id="Configuracion-basica-2">Configuración básica</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Busca la sección <code>[sshd]</code> y asegúrate de tener la siguiente configuración:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Levantar-el-servicio">Levantar el servicio</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Revisar-el-estado">Revisar el estado</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>El resultado será algo parecido a esto:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Comandos-mas-usados">Comandos más usados</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Opcional-Gestionar-varios-servidores-con-SSH-Config">3.8 [Opcional] Gestionar varios servidores con SSH Config</h3><p>Si tienes varios servidores, escribir <code>ssh -p 22000 user@ip</code> cada vez es un rollo. Puedes usar SSH Config para simplificarlo.</p><h4 id="Archivo-de-configuracion">Archivo de configuración</h4><p>Edita <code>~/.ssh/config</code> en <strong>tu computadora local</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Añade la configuración:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Como-usarlo">Cómo usarlo</h4><p>Ahora puedes conectarte directamente usando el alias:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>¡Te ahorras tener que memorizar la IP, el puerto y el nombre de usuario!</p><hr><h3 id="3-9-Opcional-Permitir-el-acceso-solo-desde-Cloudflare">3.9 [Opcional] Permitir el acceso solo desde Cloudflare</h3><p>Si tu web está completamente detrás de Cloudflare, puedes configurar el firewall para que solo las IP de Cloudflare puedan acceder a los puertos 80/443 y darle un extra de seguridad.</p><blockquote><p>⚠️ Ojo: para esta configuración, tu dominio ya debe estar apuntando a Cloudflare CDN.</p></blockquote><h4 id="Script-de-configuracion-automatica">Script de configuración automática</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Este script se encarga de:</p><ol><li>Consigue los rangos de IP más recientes desde la página oficial de Cloudflare</li><li>Añade reglas en UFW para que solo esas IPs puedan acceder a los puertos 80/443</li><li>Recarga UFW</li></ol><h4 id="Programar-actualizaciones-automaticas">Programar actualizaciones automáticas</h4><p>Los rangos de IP de Cloudflare pueden cambiar, así que vamos a configurar una actualización automática semanal:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Configurar-la-zona-horaria">3.10 Configurar la zona horaria</h3><p>La zona horaria por defecto seguramente sea UTC. Cámbiala a tu zona local para que te sea más cómodo leer los logs:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Opcional-Configurar-actualizaciones-de-seguridad-automaticas">3.11 [Opcional] Configurar actualizaciones de seguridad automáticas</h3><p>Deja que el sistema instale los parches de seguridad por su cuenta y olídate de hacerlo a mano cada vez:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Selecciona «Sí» para activar las actualizaciones automáticas.</p><blockquote><p>💡 Esta función instala automáticamente las <strong>actualizaciones de seguridad</strong>, pero no te subirá a versiones mayores nuevas, así que es bastante seguro.</p></blockquote><hr><h2 id="4-Resumen">4. Resumen</h2><h3 id="Checklist-de-inicializacion">Checklist de inicialización</h3><p>Cuando termines toda la configuración anterior, repasa todo con esta checklist:</p><table><thead><tr><th>Verificación</th><th>Comando</th><th>Resultado esperado</th></tr></thead><tbody><tr><td>Sistema actualizado</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>No hay paquetes para actualizar</td></tr><tr><td>Usuario normal puede usar sudo</td><td><code>sudo whoami</code></td><td>Devuelve <code>root</code></td></tr><tr><td>Login por clave funciona</td><td><code>ssh yourname@ip -p port</code></td><td>Entra sin pedir contraseña</td></tr><tr><td>Login por contraseña deshabilitado</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>Puerto SSH modificado</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>El puerto que configuraste</td></tr><tr><td>Firewall activado</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR activado</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban en ejecución</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Zona horaria configurada</td><td><code>timedatectl</code></td><td>Asia/Shanghai o tu zona horaria</td></tr><tr><td>Config SSH local</td><td><code>cat ~/.ssh/config</code></td><td>Alias del servidor configurado</td></tr></tbody></table><h3 id="Ubicacion-de-archivos-clave">Ubicación de archivos clave</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Mejores-practicas-de-seguridad">Mejores prácticas de seguridad</h3><ol><li><strong>Actualiza el sistema regularmente</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Revisa los logs de acceso con frecuencia</strong>: <code>lastb</code> (logins fallidos), <code>last</code> (logins exitosos)</li><li><strong>Mantente al tanto de los bloqueos de fail2ban</strong></li><li><strong>Haz siempre un backup antes de tocar archivos de configuración importantes</strong></li></ol><hr><h2 id="5-Registro-de-incidencias">5. Registro de incidencias</h2><h3 id="Q1-¿Fallo-el-login-por-clave-y-te-sigue-pidiendo-contrasena">Q1: ¿Falló el login por clave y te sigue pidiendo contraseña?</h3><p><strong>Posibles causas:</strong></p><ol><li><p><strong>Problema de permisos</strong> (lo más común)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>La clave pública no se copió correctamente</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Interferencia de SELinux</strong> (sistemas CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-¿No-puedes-conectarte-despues-de-cambiar-el-puerto">Q2: ¿No puedes conectarte después de cambiar el puerto?</h3><p><strong>Pasos para revisar:</strong></p><ol><li><p>Confirma que el nuevo puerto esté abierto en el firewall:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Verifica que la configuración de SSH esté correcta:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Asegúrate de que el servicio SSH esté corriendo:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Si no hay forma de conectarse, entra por la consola VNC de tu proveedor para arreglarlo.</p></li></ol><h3 id="Q2-5-¿El-cambio-de-puerto-no-surte-efecto-Servidores-ligeros-en-la-nube">Q2.5: ¿El cambio de puerto no surte efecto? (Servidores ligeros en la nube)</h3><p><strong>Síntoma</strong>: Modificaste <code>/etc/ssh/sshd_config</code>, pero al reiniciar el servicio el puerto 22 sigue activo y el nuevo puerto no funciona.</p><p><strong>Cómo diagnosticarlo</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Si el resultado es algo como:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Significa que el puerto 22 lo está escuchando <code>init</code> (PID 1), y no el proceso de <code>sshd</code>.</p><p><strong>Motivo</strong>: En algunos proveedores de nube, el SSH de los «servidores de aplicaciones ligeros» o «instancias de contenedor» pasa por un <strong>proxy a nivel de plataforma</strong>, así que la configuración de sshd dentro de tu servidor no hace nada.</p><p><strong>Solución</strong>:</p><table><thead><tr><th>Tipo de instancia</th><th>Cómo cambiar el puerto SSH</th></tr></thead><tbody><tr><td>ECS tradicional</td><td>Modificar sshd_config ✅</td></tr><tr><td>Servidor ligero</td><td>Puede que tengas que cambiarlo desde el panel de la nube, o que directamente no se pueda</td></tr><tr><td>Instancia de contenedor</td><td>Normalmente no se puede cambiar</td></tr></tbody></table><p>Si tu instancia no soporta cambiar el puerto, <strong>las demás medidas de seguridad pesan más</strong>:</p><ul><li>✅ Crear un usuario normal + deshabilitar el login de root</li><li>✅ Login por clave SSH + deshabilitar el login por contraseña</li><li>✅ fail2ban para frenar los ataques de fuerza bruta</li></ul><p>Si aplicas bien estas medidas, la seguridad sigue siendo alta.</p><h3 id="Q3-¿fail2ban-me-bloqueo-a-mi-mismo">Q3: ¿fail2ban me bloqueó a mí mismo?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-¿UFW-dejo-el-sitio-inaccesible-tras-activarlo">Q4: ¿UFW dejó el sitio inaccesible tras activarlo?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-¿Al-ejecutar-un-comando-te-dice-que-no-encuentra-sudo">Q5: ¿Al ejecutar un comando te dice que no encuentra sudo?</h3><p>La instalación mínima de Debian puede no traer sudo; instálalo como root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Script-de-inicializacion-con-un-clic-para-cuando-ya-le-tengas-agarre">6. Script de inicialización con un clic (para cuando ya le tengas agarre)</h2><p>Si ya te sientes cómodo con los pasos anteriores, usa este script para inicializar rápido.</p><blockquote><p>⚠️ <strong>Ojo</strong>: Antes de ejecutar el script, asegúrate de tener lista tu llave pública de SSH.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Con-todo-esto-¿cuanto-mejoro-la-seguridad">7. Con todo esto, ¿cuánto mejoró la seguridad?</h2><table><thead><tr><th>Paso</th><th>Qué hicimos</th><th>Por qué es importante</th></tr></thead><tbody><tr><td>Actualizar el sistema</td><td>Instalar los últimos parches</td><td>Corrige vulnerabilidades conocidas</td></tr><tr><td>Crear un nuevo usuario</td><td>Dejar de usar root directamente</td><td>Reduce el riesgo de errores</td></tr><tr><td>Llaves SSH</td><td>Usar llaves en vez de contraseñas</td><td>Imposible de vulnerar por fuerza bruta</td></tr><tr><td>Cambiar el puerto</td><td>Esquivar el puerto 22 por defecto</td><td>Baja la probabilidad de que te escaneen</td></tr><tr><td>Deshabilitar contraseñas</td><td>Solo permitir login con llave</td><td>Elimina por completo los ataques de contraseñas</td></tr><tr><td>Deshabilitar root</td><td>root no puede iniciar sesión directo</td><td>Sube la dificultad para los atacantes</td></tr><tr><td>Firewall UFW</td><td>Abrir solo los puertos necesarios</td><td>Reduce la superficie de ataque</td></tr><tr><td>Aceleración BBR</td><td>Optimizar el rendimiento de red</td><td>Mejora la velocidad de acceso</td></tr><tr><td>fail2ban</td><td>Bloquear IPs maliciosas automáticamente</td><td>Previene ataques persistentes</td></tr></tbody></table><p>Con todo esto, la seguridad de tu servidor ya supera a la del <strong>90%</strong> de los VPS.</p><hr><h2 id="Avance-del-proximo-articulo">Avance del próximo artículo</h2><p>En el próximo artículo hablaremos sobre la <strong>Guía rápida de configuración para login con llaves SSH</strong>, donde veremos más a detalle:</p><ul><li>Cómo generar llaves en distintos sistemas</li><li>Gestión de múltiples llaves</li><li>Configuración de SSH Agent<br>| Ajustes comunes para clientes SSH</li></ul><hr><p><em>Este artículo se actualizó por última vez: enero de 2026</em></p><p><em>Serie sobre el kit de herramientas del indie dev. ¡No te pierdas las próximas entregas!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/es/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/es/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>¡Consigue tu VPS lista para usar en una hora! Aprende a proteger tu servidor con SSH de clave, puertos no predeterminados, usuarios regulares, firewall, fail2ban y BBR. ¡Sigue estos pasos para asegurar tu VPS desde el principio!</summary>
    <title>Tu primera hora con el VPS: guía completa de bare metal a seguro y listo (haz que tu OpenClaw sea más seguro)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Boîte à outils de l'indé dev" scheme="https://blog.ittinker.com/categories/Boite-a-outils-de-l-inde-dev/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="Indie Dev" scheme="https://blog.ittinker.com/tags/Indie-Dev/"/>
    <category term="SSH à distance" scheme="https://blog.ittinker.com/tags/SSH-a-distance/"/>
    <category term="Sécurité serveur" scheme="https://blog.ittinker.com/tags/Securite-serveur/"/>
    <content>
      <![CDATA[<blockquote><p>Un VPS tout neuf, c’est une porte ouverte. Des petits malins du monde entier viennent y frapper. Dans ce tuto, on va mettre un sacré verrou. Et faire en sorte que ton openclaw ne file pas n’importe où.</p></blockquote><h2 id="0-Avant-de-commencer">0. Avant de commencer</h2><p>Tu viens de prendre un VPS, tu récupères ton IP et ton mot de passe root, super excité. Et après ?</p><p>Le réflexe de beaucoup de monde, c’est de foncer : on installe des trucs, on déploie des projets.</p><p><strong>C’est une mauvaise habitude.</strong></p><p>Ton VPS a une IP publique, ce qui veut dire que n’importe qui sur la planète peut essayer de s’y connecter. Et avec la config par défaut :</p><ul><li>Le port <strong>22</strong> est grand ouvert</li><li>Le nom d’utilisateur est le grand classique <strong>root</strong></li><li>Il ne te reste plus que ton mot de passe pour te protéger</li></ul><p>Chaque jour, une tripotée de scripts automatisés scannent des plages d’IP pour tenter des attaques par force brute avec des mots de passe courants. Dès la seconde où ton serveur est en ligne, il se prend déjà des attaques.</p><p>Donc, <strong>la toute première chose à faire quand tu mets la main sur un VPS, ce n’est pas d’installer des logiciels, mais de le sécuriser de A à Z</strong>.</p><hr><h2 id="1-L’objectif">1. L’objectif</h2><p>L’objectif de cet article, c’est de :</p><ul><li>✅ Mettre en place un <strong>accès distant sécurisé</strong> : connexion par clé SSH + port non standard</li><li>✅ Créer un <strong>utilisateur standard</strong> : éviter de bosser directement en root</li><li>✅ Configurer le <strong>pare-feu</strong> : n’ouvrir que les ports strictement nécessaires</li><li>✅ Activer l’<strong>accélération réseau</strong> : BBR pour faire décoller le réseau</li><li>✅ Se protéger du <strong>brute force</strong> : fail2ban pour bannir automatiquement les IP malveillantes</li></ul><p>Une fois tout ça en place, ton VPS aura une base super solide, et tu pourras y déployer tes services l’esprit tranquille.</p><hr><h2 id="2-Reflexion-et-plan">2. Réflexion et plan</h2><h3 id="Pourquoi-faire-toutes-ces-configs">Pourquoi faire toutes ces configs ?</h3><p>Un VPS tout juste acheté, c’est un peu comme un appart livré brut de décoffrage :</p><table><thead><tr><th>Config par défaut</th><th>Risque</th><th>Notre solution</th></tr></thead><tbody><tr><td>Connexion directe en root</td><td>Privilèges trop élevés, une mauvaise manip et c’est la catastrophe</td><td>Créer un user standard + sudo</td></tr><tr><td>Connexion par mot de passe</td><td>Vulnerable au brute force</td><td>Connexion SSH par clé</td></tr><tr><td>Port 22 par défaut</td><td>La cible n°1 des scanners</td><td>Passer sur un port non standard</td></tr><tr><td>Pare-feu désactivé</td><td>Tous les ports exposés à l’air libre</td><td>UFW : on n’ouvre que le strict nécessaire</td></tr><tr><td>Réseau natif</td><td>Taux de perte de paquets élevé, latence importante</td><td>Algorithme de contrôle de congestion BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Le-deroule">Le déroulé</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>On va suivre cet ordre de marche, et je t’expliquerai à chaque étape pourquoi on fait ça.</p><h2 id="3-Les-etapes">3. Les étapes</h2><h3 id="3-1-Premiere-connexion-et-mise-a-jour-du-systeme">3.1 Première connexion et mise à jour du système</h3><h4 id="Recuperer-l’IP-du-serveur">Récupérer l’IP du serveur</h4><p>Une fois que tu as acheté ton VPS, ton fournisseur va te filer :</p><ul><li><strong>Adresse IP</strong> : par exemple <code>192.168.1.100</code></li><li><strong>Port</strong> : généralement <code>22</code> (certains fournisseurs le changent)</li><li><strong>Nom d’utilisateur</strong> : généralement <code>root</code></li><li><strong>Mot de passe</strong> : une chaîne de caractères générée aléatoirement</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Connexion-SSH">Connexion SSH</h4><p><strong>Utilisateurs Mac / Linux</strong> : ouvrez le terminal et tapez directement :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Utilisateurs Windows</strong> :</p><ul><li>Windows 10/11 intègre OpenSSH, vous pouvez donc utiliser la commande ci-dessus directement dans PowerShell ou CMD</li><li>Ou utilisez des outils comme <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a>, etc.</li></ul><p>Lors de la première connexion, vous verrez une invite de confirmation d’empreinte :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Il vous demande : « Je ne connais pas cette machine, tu es sûr de vouloir te connecter ? »</p><p>Tapez <code>yes</code> puis appuyez sur Entrée. Ensuite, saisissez votre mot de passe (<strong>attention : aucun caractère ne s’affiche pendant la saisie, c’est une mesure de sécurité normale</strong>), et appuyez sur Entrée.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Si vous voyez une invite comme celle-ci, cela signifie que la connexion a réussi :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Pourquoi vérifier l’empreinte ?</strong></p><p>C’est pour se prémunir contre les attaques de l’homme du milieu (Man-in-the-Middle). Lors de la toute première connexion, on enregistre l’empreinte du serveur. Si jamais elle change lors d’une connexion ultérieure, ça veut dire que quelqu’un est peut-être en train d’usurper l’identité de ton serveur.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Faire-connaissance-avec-ton-serveur">Faire connaissance avec ton serveur</h4><p>Une fois connecté, la première étape, c’est de jeter un œil à l’état général de la machine :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Garde ces infos en tête, elles te seront utiles plus tard pour dépanner si besoin.</p><h4 id="Mise-a-jour-du-systeme">Mise à jour du système</h4><p>Maintenant qu’on a fait le tour des infos du serveur, la première vraie chose à faire, c’est de mettre le système à jour. L’image système d’un serveur tout neuf date peut-être de quelques mois, et des correctifs de sécurité ont pu sortir depuis :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Explication des options :</strong></p><ul><li><code>apt update</code> : met à jour l’index des paquets</li><li><code>apt full-upgrade</code> : met à niveau tous les logiciels, noyau inclus</li><li><code>-y</code> : confirmation automatique, pas besoin de taper “yes” à la main</li><li><code>apt autoremove</code> : supprime les dépendances qui ne sont plus utiles</li><li><code>apt autoclean</code> : nettoie le cache des paquets téléchargés</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Cette étape peut prendre quelques minutes, selon le nombre de mises à jour. De temps en temps, il te demandera de confirmer un truc, là tu fais juste confiance au système et tu valides.</p></blockquote><h4 id="Verifier-si-un-redemarrage-est-necessaire">Vérifier si un redémarrage est nécessaire</h4><p>Après une mise à jour du noyau, il faut généralement redémarrer pour que ça prenne effet :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>S’il te dit qu’il faut redémarrer :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Après le redémarrage, il faudra te reconnecter en SSH.</p><h4 id="Installer-les-outils-usuels">Installer les outils usuels</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>À quoi servent ces outils :</strong></p><table><thead><tr><th>Outil</th><th>Usage</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Permet aux utilisateurs normaux d’exécuter des commandes admin</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Télécharger des fichiers</td><td></td></tr><tr><td><code>git</code></td><td>Gestion de versions</td><td></td></tr><tr><td><code>vim</code></td><td>Éditeur de texte</td><td></td></tr><tr><td><code>htop</code></td><td>Un moniteur de processus plus agréable à l’œil</td><td></td></tr><tr><td><code>tree</code></td><td>Afficher l’arborescence des dossiers</td><td></td></tr><tr><td><code>net-tools</code></td><td>Outils réseau (ifconfig, netstat, etc.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Un pare-feu simple et efficace</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Se protéger contre le brute-force</td><td></td></tr><tr><td><code>neofetch</code></td><td>Afficher les infos système avec style</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-Creer-un-utilisateur-non-root">3.2 Créer un utilisateur non-root</h3><h4 id="Pourquoi-ne-pas-utiliser-root-directement">Pourquoi ne pas utiliser root directement ?</h4><p>L’utilisateur root a des pouvoirs beaucoup trop étendus. Une simple erreur de saisie avec <code>rm -rf /</code> et c’est la catastrophe totale. Pour ton usage au quotidien, utilise plutôt un utilisateur normal. Tu n’aura recours aux droits d’admin qu’en cas de besoin avec <code>sudo</code>.</p><blockquote><p>Le homard (openclaw) est une vraie bête sauvage, tu n’oserais quand même pas lui filer les clés du royaume avec root, non ?</p></blockquote><h4 id="Creer-l’utilisateur">Créer l’utilisateur</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Le système va te demander de définir un mot de passe et de remplir quelques infos :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Donner-les-droits-sudo">Donner les droits sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>On vérifie ça tout de suite :</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Si ça te renvoie <code>root</code>, c’est que sudo est bien configuré.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Petite astuce</strong></p><p>Tape <code>exit</code> pour revenir à l’utilisateur root. Pour la suite des opérations, on va continuer à configurer le serveur avec root, et on basculera sur l’utilisateur normal une fois que tout sera prêt.</p></blockquote><hr><h3 id="3-3-Configurer-la-connexion-par-cle-SSH">3.3 Configurer la connexion par clé SSH</h3><h4 id="Authentification-par-cle-vs-par-mot-de-passe">Authentification par clé vs par mot de passe</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>La connexion par clé est infiniment plus sûre qu’un simple mot de passe :</p><ul><li>Un mot de passe peut se faire cracker par force brute, une clé c’est quasiment mission impossible</li><li>Pas besoin de taper ton mot de passe à chaque connexion, c’est tellement plus pratique</li><li>Même si ton mot de passe fuite, sans la clé privée personne ne pourra se connecter</li></ul><h4 id="Etape-1-Generer-la-paire-de-cles-en-local">Étape 1 : Générer la paire de clés en local</h4><p>Lance ça sur <strong>ton ordinateur</strong> (pas sur le serveur) :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Ça va te demander :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Fais juste Entrée pour garder le chemin par défaut. Ici on a utilisé ./ittinker, ce qui veut dire que ça va se sauvegarder dans le dossier courant, sous le nom de ittinker.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Tu peux définir un mot de passe pour ta clé (une couche de sécurité en plus), ou juste faire Entrée pour laisser vide.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Une fois la génération terminée, tu trouveras deux fichiers dans le dossier <code>~/.ssh/</code> (voici les noms par défaut, si tu as juste fait Entrée avant) :</p><ul><li><code>id_ed25519</code> : ta <strong>clé privée</strong>, à ne surtout jamais fuiter !</li><li><code>id_ed25519.pub</code> : ta <strong>clé publique</strong>, à envoyer sur le serveur</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> est l’algo recommandé aujourd’hui : plus sécurisé et avec des clés plus courtes que le bon vieux RSA. Si ton système est trop vieux et ne le supporte pas, tu peux te rabattre sur <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Petit détail technique : la clé générée par ed25519 est assez petite, alors que les fichiers RSA sont balèzes. J’ai demandé à une IA pour être sûr, et en fait la taille du fichier n’a pas d’importance, c’est juste lié à l’algo.</p></blockquote><h4 id="Etape-2-Envoyer-la-cle-publique-sur-le-serveur">Étape 2 : Envoyer la clé publique sur le serveur</h4><p><strong>Méthode A : utiliser ssh-copy-id (recommandée)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Après avoir tapé ton mot de passe, la clé publique sera automatiquement copiée sur le serveur.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Méthode B : copier manuellement</strong></p><p>Si <code>ssh-copy-id</code> ne fonctionne pas, tu peux tout à fait le faire à la main :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Copie le contenu affiché (une longue chaîne qui commence par <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Les permissions, c’est crucial !</strong></p><p>SSH est très strict sur les permissions des fichiers :</p><ul><li>Dossier <code>.ssh</code> : 700 (accessible uniquement par ton utilisateur)</li><li>Fichier <code>authorized_keys</code> : 600 (lecture et écriture uniquement pour ton utilisateur)</li></ul><p>Si les permissions ne sont pas bonnes, SSH refusera tout simplement d’utiliser la clé pour se connecter.</p></blockquote><h4 id="Etape-3-Tester-la-connexion-par-cle">Étape 3 : Tester la connexion par clé</h4><p><strong>Ouvre un nouveau terminal</strong> (garde l’ancien ouvert, au cas où tu ferais une fausse manip pour pouvoir rattraper le coup), et teste la connexion par clé :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Si tu peux te connecter sans avoir à taper ton mot de passe, c’est gagné, la clé est bien configurée ! 🎉</p><p>(Par contre, si tu as mis un passphrase sur ta clé privée, le système te le demandera, c’est tout à fait normal)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Ici j’ai rajouté le paramètre -i, parce que cette clé n’est pas dans le chemin par défaut, mais bien dans le dossier courant. Si on ne le précise pas, le système va chercher la clé par défaut.</p></blockquote><hr><h3 id="3-4-Securiser-SSH">3.4 Sécuriser SSH</h3><p>Maintenant que la connexion par clé fonctionne, on va passer à la sécurisation de SSH :</p><ol><li>Changer le port par défaut (pour éviter de se faire scanner)</li><li>Désactiver la connexion par mot de passe</li><li>Interdire la connexion directe en root</li></ol><h4 id="Editer-le-fichier-de-configuration-SSH">Éditer le fichier de configuration SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Repérez et modifiez les paramètres suivants (certains sont peut-être en commentaire, retirez simplement le <code>#</code> au début) :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Sauvegardez et quittez (<code>ctrl + o</code>).</p><blockquote><p>Sous Nano, pour sauvegarder c’est Ctrl + O. Il vous demandera le nom du fichier, faites juste Entrée. Pour quitter, c’est Ctrl + X.</p></blockquote><h4 id="Redemarrer-le-service-SSH">Redémarrer le service SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Attention, c’est important !</strong></p><p><strong>Ne fermez pas votre terminal actuel !</strong> D’abord, testez dans une nouvelle fenêtre si la nouvelle config vous permet de vous connecter :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Si ça marche, vous pouvez fermer l’ancienne fenêtre. Si vous n’arrivez pas à vous connecter, vous pouvez toujours corriger la config dans l’ancienne fenêtre.</p></blockquote><blockquote><p>Si vous avez pris un serveur léger, il y a de fortes chances que ce port ne puisse pas être modifié. Les ECS classiques le permettent, faites donc bien attention.</p></blockquote><hr><h3 id="3-5-Configurer-le-pare-feu-UFW">3.5 Configurer le pare-feu UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) est l’outil pare-feu par défaut sur Ubuntu. Simple à configurer, mais redoutable.</p><h4 id="Configuration-de-base">Configuration de base</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Activer-le-pare-feu">Activer le pare-feu</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Il vous demandera :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Tapez <code>y</code> pour confirmer.</p><h4 id="Verifier-le-statut">Vérifier le statut</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022, c’est une faute de frappe de ma part, adaptez-vous juste à votre propre situation.</p></blockquote><p>Ça devrait donner un truc comme ça :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Aide-memoire-des-commandes-courantes">Aide-mémoire des commandes courantes</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Activer-l’acceleration-BBR">3.6 Activer l’accélération BBR</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time), c’est un algorithme de contrôle de congestion TCP développé par Google. Il peut vraiment donner un coup de fouet aux performances réseau de votre serveur.</p><h4 id="Activation-en-un-clin-d’oeil">Activation en un clin d’œil</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Verifier-que-c’est-bien-active">Vérifier que c’est bien activé</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Vous devriez obtenir :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Un truc comme ça :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>L’impact de BBR</strong></p><p>Une fois BBR activé, surtout si votre connexion est instable ou que vous avez une forte latence, vous allez clairement sentir la différence :</p><ul><li>Vos téléchargements seront bien plus rapides</li><li>Vos sessions SSH seront plus fluides</li><li>Le chargement des pages web sera beaucoup plus réactif</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Configurer-fail2ban-pour-bloquer-le-brute-force">3.7 Configurer fail2ban pour bloquer le brute-force</h3><p>fail2ban, c’est l’outil parfait pour surveiller vos logs. Dès qu’il repère une IP qui rate ses identifiants à répétition, il la bannit automatiquement.</p><h4 id="Configuration-de-base-2">Configuration de base</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Repérez la section <code>[sshd]</code> et assurez-vous d’avoir cette configuration :</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Demarrer-le-service">Démarrer le service</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Verifier-le-statut-2">Vérifier le statut</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Le résultat ressemble à ça :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Commandes-courantes">Commandes courantes</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Optionnel-Gerer-plusieurs-serveurs-avec-SSH-Config">3.8 [Optionnel] Gérer plusieurs serveurs avec SSH Config</h3><p>Si tu as plusieurs serveurs, taper <code>ssh -p 22000 user@ip</code> à chaque fois, c’est vite relou. Tu peux utiliser SSH Config pour simplifier tout ça.</p><h4 id="Le-fichier-de-configuration">Le fichier de configuration</h4><p>Sur <strong>ton ordinateur local</strong>, édite <code>~/.ssh/config</code> :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Ajoute la configuration suivante :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Comment-l’utiliser">Comment l’utiliser</h4><p>Maintenant, tu peux te connecter directement avec l’alias :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Plus besoin de te rappeler de l’IP, du port et du nom d’utilisateur !</p><hr><h3 id="3-9-Optionnel-Restreindre-l’acces-a-Cloudflare-uniquement">3.9 [Optionnel] Restreindre l’accès à Cloudflare uniquement</h3><p>Si ton site est complètement derrière Cloudflare, tu peux configurer le pare-feu pour n’autoriser que les IP de Cloudflare sur les ports 80/443. Ça rajoute une bonne couche de sécurité.</p><blockquote><p>⚠️ Attention : pour cette config, il faut que ton domaine soit déjà relié au CDN de Cloudflare.</p></blockquote><h4 id="Le-script-de-configuration-automatique">Le script de configuration automatique</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Ce script va :</p><ol><li>Récupère les derniers blocs IP directement depuis le site officiel de Cloudflare</li><li>Ajoute des règles UFW pour autoriser uniquement ces IP à accéder aux ports 80/443</li><li>Recharge UFW</li></ol><h4 id="Planifier-la-mise-a-jour-automatique">Planifier la mise à jour automatique</h4><p>Les blocs IP de Cloudflare peuvent changer, alors on va automatiser la mise à jour chaque semaine :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Configurer-le-fuseau-horaire">3.10 Configurer le fuseau horaire</h3><p>Le fuseau horaire par défaut est probablement UTC. Passe-le sur ton fuseau horaire local, c’est beaucoup plus pratique pour relire les logs :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Optionnel-Activer-les-mises-a-jour-de-securite-automatiques">3.11 [Optionnel] Activer les mises à jour de sécurité automatiques</h3><p>Laisse le système installer les correctifs de sécurité tout seul, ça t’évite d’avoir à le faire à la main à chaque fois :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Choisis « Yes » pour activer les mises à jour automatiques.</p><blockquote><p>💡 Cette fonctionnalité installe uniquement les <strong>mises à jour de sécurité</strong>, elle ne fait pas monter de version majeure automatiquement, donc c’est plutôt safe.</p></blockquote><hr><h2 id="4-Bilan">4. Bilan</h2><h3 id="Checklist-de-fin-d’initialisation">Checklist de fin d’initialisation</h3><p>Une fois toutes ces configs en place, utilise cette checklist pour vérifier que tout est bon :</p><table><thead><tr><th>Élément à vérifier</th><th>Commande</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>Système à jour</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Aucun paquet à mettre à jour</td></tr><tr><td>L’utilisateur standard peut utiliser sudo</td><td><code>sudo whoami</code></td><td>Sortie <code>root</code></td></tr><tr><td>Connexion par clé OK</td><td><code>ssh yourname@ip -p port</code></td><td>Connexion sans mot de passe</td></tr><tr><td>Connexion par mot de passe désactivée</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>Port SSH modifié</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Le port que tu as défini</td></tr><tr><td>Pare-feu activé</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR activé</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban en cours d’exécution</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Fuseau horaire configuré</td><td><code>timedatectl</code></td><td>Asia/Shanghai ou ton fuseau horaire</td></tr><tr><td>SSH Config local</td><td><code>cat ~/.ssh/config</code></td><td>Alias du serveur configuré</td></tr></tbody></table><h3 id="Emplacement-des-fichiers-cles">Emplacement des fichiers clés</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Bonnes-pratiques-de-securite">Bonnes pratiques de sécurité</h3><ol><li><strong>Mettre à jour le système régulièrement</strong> : <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Vérifier régulièrement les logs de connexion</strong> : <code>lastb</code> (connexions échouées), <code>last</code> (connexions réussies)</li><li><strong>Garder un œil sur les bannissements de fail2ban</strong></li><li><strong>Toujours sauvegarder les fichiers de configuration importants avant de les modifier</strong></li></ol><hr><h2 id="5-Journal-des-anomalies">5. Journal des anomalies</h2><h3 id="Q1-Echec-de-la-connexion-par-cle-le-mot-de-passe-est-toujours-demande">Q1 : Échec de la connexion par clé, le mot de passe est toujours demandé ?</h3><p><strong>Causes possibles :</strong></p><ol><li><p><strong>Problème de permissions</strong> (le plus courant)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Clé publique mal copiée</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Interférence de SELinux</strong> (sur les systèmes CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Plus-moyen-de-se-connecter-apres-avoir-change-le-port">Q2 : Plus moyen de se connecter après avoir changé le port ?</h3><p><strong>Étapes de dépannage :</strong></p><ol><li><p>Vérifie que le nouveau port est bien ouvert dans le pare-feu :</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Vérifie que la configuration SSH est correcte :</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Vérifie que le service SSH tourne bien :</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Si tu n’as vraiment plus aucun accès, utilise la console VNC de ton fournisseur pour te connecter et réparer ça.</p></li></ol><h3 id="Q2-5-Le-changement-de-port-ne-prend-tout-simplement-pas-effet-Serveurs-legers-du-cloud">Q2.5 : Le changement de port ne prend tout simplement pas effet ? (Serveurs légers du cloud)</h3><p><strong>Symptôme</strong> : tu as modifié <code>/etc/ssh/sshd_config</code>, mais après avoir relancé le service, le port 22 est toujours là et le nouveau port ne marche pas.</p><p><strong>Méthode de diagnostic</strong> :</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Si tu obtiens un résultat qui ressemble à ça :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Cela signifie que le port 22 est surveillé par <code>init</code> (PID 1), et non par le processus <code>sshd</code>.</p><p><strong>Pourquoi ?</strong> Chez certains hébergeurs, le SSH des « serveurs d’application légers » ou des « instances de conteneurs » passe par un <strong>proxy géré par la plateforme</strong>. Du coup, la configuration de sshd sur ton serveur n’a aucun effet.</p><p><strong>La solution :</strong></p><table><thead><tr><th>Type d’instance</th><th>Comment modifier le port SSH</th></tr></thead><tbody><tr><td>ECS classique</td><td>Modifier sshd_config ✅</td></tr><tr><td>Serveur léger</td><td>Souvent à modifier depuis la console du cloud, ou pas supporté du tout</td></tr><tr><td>Instance de conteneur</td><td>Généralement pas modifiable</td></tr></tbody></table><p>Si ton instance ne permet pas de changer le port, <strong>les autres mesures de sécurité deviennent encore plus cruciales</strong> :</p><ul><li>✅ Créer un utilisateur standard + désactiver le login root</li><li>✅ Connexion SSH par clé + désactiver l’authentification par mot de passe</li><li>✅ fail2ban pour bloquer le brute-force</li></ul><p>Si tu appliques tout ça correctement, ton niveau de sécurité reste excellent.</p><h3 id="Q3-fail2ban-m’a-bloque-moi-meme">Q3 : fail2ban m’a bloqué moi-même ?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-UFW-active-et-plus-d’acces-au-site">Q4 : UFW activé, et plus d’accès au site ?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-La-commande-indique-que-sudo-est-introuvable">Q5 : La commande indique que sudo est introuvable ?</h3><p>L’installation minimale de Debian n’inclut pas toujours sudo. Installe-le en tant que root :</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Script-d’initialisation-en-un-clic-a-utiliser-une-fois-a-l’aise">6. Script d’initialisation en un clic (à utiliser une fois à l’aise)</h2><p>Si tu as bien en tête toutes les étapes ci-dessus, tu peux utiliser ce script pour initialiser ton serveur en un clin d’œil.</p><blockquote><p>⚠️ <strong>Attention</strong> : avant de lancer le script, assure-toi d’avoir déjà ta clé publique SSH sous la main.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Une-fois-tout-ca-en-place-c’est-quoi-le-gain-de-securite">7. Une fois tout ça en place, c’est quoi le gain de sécurité ?</h2><table><thead><tr><th>Étape</th><th>Ce qu’on a fait</th><th>Pourquoi c’est important</th></tr></thead><tbody><tr><td>Mettre à jour le système</td><td>Installer les derniers patchs</td><td>Corriger les failles connues</td></tr><tr><td>Créer un nouvel utilisateur</td><td>Ne plus utiliser root directement</td><td>Réduire le risque de mauvaises manip</td></tr><tr><td>Clés SSH</td><td>Remplacer les mots de passe par des clés</td><td>Impossible à cracker par force brute</td></tr><tr><td>Changer le port</td><td>Ne plus utiliser le port 22 par défaut</td><td>Moins de chances de se faire scanner</td></tr><tr><td>Désactiver le mot de passe</td><td>N’autoriser que la connexion par clé</td><td>Stop net aux attaques sur les mots de passe</td></tr><tr><td>Désactiver root</td><td>root ne peut plus se connecter directement</td><td>On complique la tâche des attaquants</td></tr><tr><td>Pare-feu UFW</td><td>N’ouvrir que les ports nécessaires</td><td>Réduire la surface d’attaque</td></tr><tr><td>Accélération BBR</td><td>Optimiser les perfs réseau</td><td>Booster la vitesse d’accès</td></tr><tr><td>fail2ban</td><td>Bannir automatiquement les IP malveillantes</td><td>Bloquer les attaques récurrentes</td></tr></tbody></table><p>Une fois que t’as fait tout ça, ton serveur est déjà plus sécurisé que <strong>90 %</strong> des VPS.</p><hr><h2 id="Prochain-article">Prochain article</h2><p>Dans le prochain épisode, on attaque <strong>le guide express pour configurer la connexion par clé SSH</strong>, avec plus de détails sur :</p><ul><li>Comment générer des clés selon ton système</li><li>Gérer plusieurs clés</li><li>Configurer SSH Agent</li><li>Régler les clients SSH les plus courants</li></ul><hr><p><em>Article mis à jour pour la dernière fois : janvier 2026</em></p><p><em>Série « Boîte à outils du développeur indépendant », abonne-toi !</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/fr/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/fr/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Découvrez comment sécuriser votre nouveau VPS en 1 heure ! Configurez SSH, changez le port par défaut, créez un utilisateur ordinaire, activez le pare-feu, fail2ban et BBR pour protéger votre serveur contre les scripts malveillants.</summary>
    <title>La première heure avec ton VPS : de la bare metal à une config sécurisée et prête à l'emploi (pour sécuriser ton OpenClaw)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Perkakas Indie Developer" scheme="https://blog.ittinker.com/categories/Perkakas-Indie-Developer/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="Indie Dev" scheme="https://blog.ittinker.com/tags/Indie-Dev/"/>
    <category term="Keamanan server" scheme="https://blog.ittinker.com/tags/Keamanan-server/"/>
    <content>
      <![CDATA[<blockquote><p>VPS baru beli itu ibarat pintu yang gak dikunci, anak-anak script kiddie dari seluruh dunia lagi nyoba ngetuk. Artikel ini bakal ngajarin kamu buat ngunci pintu itu rapat. Biar “lobak laut” (openclaw) kamu gak kabur ke mana-mana dan nggak ngelakuin hal aneh-aneh.</p></blockquote><h2 id="0-Sekilas-Pengantar">0. Sekilas Pengantar</h2><p>Baru aja beli VPS, keburu semangat ngedapetin IP dan password root, terus apa lagi nih?</p><p>Kebanyakan orang langsung ngelakuin ini: buru-buru install software, langsung <em>deploy</em> proyek.</p><p><strong>Ini kebiasaan yang bahaya.</strong></p><p>VPS kamu punya IP publik, artinya siapa aja di seluruh dunia bisa nyoba nyambungin ke situ. Dan dengan konfigurasi <em>default</em>-nya:</p><ul><li>Port <strong>22</strong>-nya kebuka untuk umum</li><li>Username-nya <strong>root</strong> yang udah rahasia umum</li><li>Cuma nyisain satu password buat jadi penjaga</li></ul><p>Setiap hari ada banyak banget skrip otomatis yang nyiap-nyiap IP, nyoba <em>brute-force</em> pake password-password umum. Dari detik pertama server kamu online, itu udah pada nyerang.</p><p>Jadi, <strong>hal pertama yang harus kamu lakuin abis dapet VPS bukan install software, tapi ngelakuin inisialisasi keamanan.</strong></p><hr><h2 id="1-Target-yang-Dicapai">1. Target yang Dicapai</h2><p>Target dari artikel ini adalah:</p><ul><li>✅ Bangun <strong>akses remote yang aman</strong>: login SSH pakai key + bukan port default</li><li>✅ Bikin <strong>user biasa</strong>: hindari pakai root langsung</li><li>✅ Setup <strong>firewall</strong>: buka port yang perlu aja</li><li>✅ Aktifkan <strong>akselerasi jaringan</strong>: BBR bikin koneksi makin ngebut</li><li>✅ Cegah <strong>brute force</strong>: fail2ban auto-blokir IP jahat</li></ul><p>Kalau semua udah beres, VPS kamu punya fondasi yang kuat buat deploy macem-macem service dengan tenang.</p><hr><h2 id="2-Rencana-Pemikiran">2. Rencana &amp; Pemikiran</h2><h3 id="Kenapa-mesti-setup-gini">Kenapa mesti setup gini?</h3><p>VPS yang baru dibeli itu ibarat rumah kosongan baru diserahin:</p><table><thead><tr><th>Kondisi Default</th><th>Risiko</th><th>Solusi Kita</th></tr></thead><tbody><tr><td>Login langsung root</td><td>Hak akses kelewat besar, risiko fatal kalau salah klik</td><td>Bikin user biasa + sudo</td></tr><tr><td>Login pakai password</td><td>Rawan di-brute force</td><td>Login pakai SSH Key</td></tr><tr><td>Port default 22</td><td>Jadi incaran scanner</td><td>Ganti ke port non-standar</td></tr><tr><td>Firewall dimatikan</td><td>Semua port terekspos ke luar</td><td>UFW: cuma buka port yang dipakai</td></tr><tr><td>Jaringan bawaan</td><td>Packet loss tinggi, latency besar</td><td>Algoritma kontrol kongesti BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Alur-Kerja-Keseluruhan">Alur Kerja Keseluruhan</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Kita ngopreknya ngikut urutan ini, dan di tiap langkah aku jelasin kenapa kita lakuin begini.</p><h2 id="3-Langkah-langkah-Eksekusi">3. Langkah-langkah Eksekusi</h2><h3 id="3-1-Login-Pertama-Kali-Update-Sistem">3.1 Login Pertama Kali &amp; Update Sistem</h3><h4 id="Dapetin-IP-Server">Dapetin IP Server</h4><p>Setelah beli VPS, provider bakal ngasih kamu:</p><ul><li><strong>Alamat IP</strong>: contohnya <code>192.168.1.100</code></li><li><strong>Port</strong>: biasanya <code>22</code> (beberapa provider kadang ubah ke port lain)</li><li><strong>Username</strong>: umumnya <code>root</code></li><li><strong>Password</strong>: deretan karakter acak yang sudah di-generate</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Koneksi-SSH">Koneksi SSH</h4><p><strong>Pengguna Mac / Linux</strong>: buka Terminal, langsung ketik:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Pengguna Windows</strong>:</p><ul><li>Windows 10/11 udah bawaan OpenSSH, jadi kamu bisa langsung pakai perintah di atas di PowerShell atau CMD</li><li>Atau pakai tools kayak <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a>, dll.</li></ul><p>Saat pertama kali connect, nanti muncul prompt konfirmasi fingerprint kayak gini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Intinya dia nanya: “Aku belum kenal mesin ini, kamu yakin mau connect?”</p><p>Ketik <code>yes</code> lalu tekan Enter. Terus masukkan password (<strong>catatan: pas ngetik nggak ada karakter yang muncul, ini fitur keamanan normal kok</strong>), lalu Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Kalau kamu lihat prompt kayak gini, berarti login berhasil:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Kenapa harus cek fingerprint?</strong></p><p>Ini untuk mencegah “serangan man-in-the-middle”. Saat pertama kali connect, catat fingerprint server. Nanti kalau pas connect lagi fingerprint-nya berubah, berarti ada kemungkinan orang lain menyamar sebagai server kamu.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Kenalan-dengan-server-kamu">Kenalan dengan server kamu</h4><p>Setelah login, cek dulu kondisi dasar mesin ini:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Catat info-info ini, nanti berguna banget buat nge-trouble shooting kalau ada masalah.</p><h4 id="Update-sistem">Update sistem</h4><p>Sudah ngerti kondisi servernya? Langkah pertama yang paling penting adalah update sistem. Image sistem di server baru mungkin masih versi dari beberapa bulan lalu, dan bisa jadi sudah ada patch keamanan yang rilis sejak itu:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Penjelasan parameter:</strong></p><ul><li><code>apt update</code>: Update indeks paket software</li><li><code>apt full-upgrade</code>: Upgrade semua software, termasuk kernel</li><li><code>-y</code>: Auto-confirm, jadi nggak perlu ketik “yes” manual</li><li><code>apt autoremove</code>: Hapus dependency yang udah nggak kepakai</li><li><code>apt autoclean</code>: Bersihin cache installer yang udah di-download</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Langkah ini mungkin butuh beberapa menit, tergantung seberapa banyak update-nya. Kadang di tengah-tengah ada konfirmasi, tinggal ikutin aja arahannya.</p></blockquote><h4 id="Cek-apakah-perlu-reboot">Cek apakah perlu reboot</h4><p>Setelah update kernel, biasanya butuh reboot biar perubahannya berlaku:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Kalau ada notifikasi untuk reboot:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Setelah reboot, kamu perlu connect SSH lagi.</p><h4 id="Install-tools-yang-sering-dipakai">Install tools yang sering dipakai</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Fungsi tools ini buat apa sih:</strong></p><table><thead><tr><th>Tool</th><th>Fungsi</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Bikin user biasa jalanin command admin</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Download file</td><td></td></tr><tr><td><code>git</code></td><td>Version control</td><td></td></tr><tr><td><code>vim</code></td><td>Text editor</td><td></td></tr><tr><td><code>htop</code></td><td>Process monitor yang lebih cakep</td><td></td></tr><tr><td><code>tree</code></td><td>Tampilin struktur direktori pohon</td><td></td></tr><tr><td><code>net-tools</code></td><td>Network tools (ifconfig, netstat, dll)</td><td></td></tr><tr><td><code>ufw</code></td><td>Firewall simpel dan gampang dipakai</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Anti brute-force</td><td></td></tr><tr><td><code>neofetch</code></td><td>Tampilin info sistem dengan cakep</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-Membuat-user-non-root">3.2 Membuat user non-root</h3><h4 id="Kenapa-nggak-langsung-pakai-root">Kenapa nggak langsung pakai root?</h4><p>Izin user root itu terlalu luas, sedikit salah klik <code>rm -rf /</code> semua bisa hilang seketika. Untuk operasi sehari-hari, mendingan pakai user biasa. Kalau butuh izin admin, baru gunakan <code>sudo</code>.</p><blockquote><p>Lobster (openclaw) itu ibarat monster, masa sih berani kasih akses root ke dia?</p></blockquote><h4 id="Membuat-user">Membuat user</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Sistem bakal minta kamu buat set password dan ngisi beberapa info:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Ngasih-izin-sudo">Ngasih izin sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Coba dicek dulu:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Kalau output-nya <code>root</code>, berarti konfigurasi sudo-nya udah berhasil.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Tips Kecil</strong></p><p>Ketik <code>exit</code> buat balik lagi ke user root. Untuk langkah-langkah selanjutnya, kita tetap pakai root buat konfigurasi, nanti setelah kelar baru balik lagi ke user biasa.</p></blockquote><hr><h3 id="3-3-Setup-login-SSH-pakai-SSH-Key">3.3 Setup login SSH pakai SSH Key</h3><h4 id="Autentikasi-Key-vs-Autentikasi-Password">Autentikasi Key vs Autentikasi Password</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Autentikasi pakai key jauh lebih aman dibanding password:</p><ul><li>Password bisa di-brute force, tapi key nyaris mustahil</li><li>Nggak perlu input password tiap kali login, jauh lebih praktis</li><li>Biarpun password bocor, selama nggak punya private key tetep nggak bakal bisa login</li></ul><h4 id="Langkah-1-Bikin-pasangan-key-di-lokal">Langkah 1: Bikin pasangan key di lokal</h4><p>Jalankan ini di <strong>komputer kamu</strong> (bukan di server):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Nanti bakal muncul prompt kayak gini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Tinggal tekan Enter aja buat pakai path default. Di sini kita pakai <code>./ittinker</code>, artinya filenya bakal disimpen di folder saat ini dengan nama <code>ittinker</code>.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Kamu bisa set passphrase buat kunci ini (bikin ada lapisan keamanan ekstra), atau langsung tekan Enter buat dikosongin.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Setelah selesai dibikin, kamu bakal nemu dua file di direktori <code>~/.ssh/</code> (ini nama file default-nya kalau tadi kamu tekan Enter):</p><ul><li><code>id_ed25519</code>: <strong>Private key</strong>, jangan sampai bocor ke siapa pun ya!</li><li><code>id_ed25519.pub</code>: <strong>Public key</strong>, ini yang harus di-upload ke server.</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> ini algoritma yang paling direkomendasiin sekarang. Dibanding RSA jadul, ini lebih aman dan ukuran kuncinya lebih pendek. Tapi kalau sistem kamu terlalu lawas dan belum mendukung, bisa pakai <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Sedikit trivia: kunci yang dibikin ed25519 itu ukurannya kecil, sedangkan file RSA itu gedean banget. Waktu itu aku tanya ke AI baru tau, ternyata ukuran file nggak masalah, itu cuma beda algoritma aja.</p></blockquote><h4 id="Langkah-Kedua-Upload-Public-Key-ke-Server">Langkah Kedua: Upload Public Key ke Server</h4><p><strong>Cara A: Pakai ssh-copy-id (Direkomendasiin)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Setelah masukin password, public key bakal otomatis tersalin ke server.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Cara B: Salin Manual</strong></p><p>Kalau <code>ssh-copy-id</code> nggak bisa dipakai, kamu bisa ngelakuinnya secara manual:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Copy isi output-nya (teks panjang yang diawali dengan <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Permission itu penting banget!</strong></p><p>SSH itu ketat soal permission file:</p><ul><li>Direktori <code>.ssh</code>: 700 (cuma user sendiri yang bisa akses)</li><li>File <code>authorized_keys</code>: 600 (cuma user sendiri yang bisa baca dan tulis)</li></ul><p>Kalau permission-nya nggak pas, SSH bakal nolak buat login pake kunci.</p></blockquote><h4 id="Langkah-Ketiga-Tes-Login-Pake-Kunci">Langkah Ketiga: Tes Login Pake Kunci</h4><p><strong>Buka jendela terminal baru</strong> (biarin jendela lama tetap kebuka, jangan ditutup, jaga-jaga kalau konfigurasinya salah masih bisa dibenerin), terus coba tes login pake kunci:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Kalau kamu bisa login tanpa dimintain password, berarti konfigurasi kuncinya udah berhasil! 🎉</p><p>(Mungkin kamu bakal dimintain password kunci kalau tadi nyetting passphrase buat private key-nya, ini normal kok)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Di sini kita nambahin parameter -i, soalnya kunci ini bukan disimpen di path default, tapi di path saat ini. Kalau nggak ditentuin, sistem bakal make kunci default.</p></blockquote><hr><h3 id="3-4-Ngerapatkan-Keamanan-SSH">3.4 Ngerapatkan Keamanan SSH</h3><p>Sekarang login pake kunci udah jalan, ayo kita keraskan keamanan SSH-nya:</p><ol><li>Ubah port default (biarin nggak gampang ke-scan)</li><li>Matiin login pake password</li><li>Larang root buat login langsung</li></ol><h4 id="Edit-konfigurasi-SSH">Edit konfigurasi SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Cari dan ubah konfigurasi berikut (beberapa mungkin di-comment, jadi hapus tanda <code>#</code> di depannya):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Simpan dan keluar (<code>ctrl + o</code>).</p><blockquote><p>Di Nano, cara simpannya tekan ctrl + o, nanti bakal dimintain nama file, langsung tekan Enter aja. Kalau mau keluar, tekan ctrl + x.</p></blockquote><h4 id="Restart-service-SSH">Restart service SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Penting!</strong></p><p><strong>Jangan tutup terminal yang sekarang!</strong> Tes dulu konfigurasi barunya di jendela baru, bisa login normal nggak:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Kalau bisa login, baru tutup jendela yang lama. Kalau nggak bisa masuk, kamu masih bisa perbaiki konfigurasinya di jendela lama.</p></blockquote><blockquote><p>Kalau kamu beli server tipe lightweight, kemungkinan besar port ini nggak bisa diganti. Kalau ECS tradisional biasanya bisa diubah, jadi perhatikan ya.</p></blockquote><hr><h3 id="3-5-Setup-Firewall-UFW">3.5 Setup Firewall UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) itu tool firewall bawaan Ubuntu, settingnya gampang tapi fiturnya powerful.</p><h4 id="Konfigurasi-dasar">Konfigurasi dasar</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Aktifkan-firewall">Aktifkan firewall</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Nanti muncul prompt kayak gini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Ketik <code>y</code> buat konfirmasi.</p><h4 id="Cek-status">Cek status</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 itu typo saya, kalian sesuaikan saja pakai nilai masing-masing ya</p></blockquote><p>Output-nya kira-kira begini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Cheat-Sheet-Perintah-yang-Sering-Dipakai">Cheat Sheet Perintah yang Sering Dipakai</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Mengaktifkan-BBR-untuk-Mempercepat-Koneksi">3.6 Mengaktifkan BBR untuk Mempercepat Koneksi</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) itu algoritma kontrol kemacetan TCP buatan Google, bisa ningkatin performa jaringan kamu secara signifikan.</p><h4 id="Aktifkan-Sekali-Klik">Aktifkan Sekali Klik</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Cek-Apakah-Sudah-Aktif">Cek Apakah Sudah Aktif</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Output-nya harusnya:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Output-nya kira-kira begini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Efek BBR</strong></p><p>Setelah BBR aktif, apalagi kalau jaringannya lagi nggak stabil atau ping-nya tinggi, kamu bakal langsung ngerasain:</p><ul><li>Kecepatan download makin ngebut</li><li>Operasi SSH jadi lebih mulus</li><li>Loading halaman web jadi lebih cepat</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Setup-fail2ban-buat-Cegah-Brute-Force">3.7 Setup fail2ban buat Cegah Brute Force</h3><p>fail2ban ini bakal ngawasin log server kamu, kalau nemu IP yang gagal login berkali-kali, bakal otomatis di-ban.</p><h4 id="Konfigurasi-Dasar">Konfigurasi Dasar</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Cari bagian <code>[sshd]</code>, pastikanin konfigurasinya kayak gini:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Menjalankan-service">Menjalankan service</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Cek-status-2">Cek status</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Output-nya kira-kira kayak gini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Perintah-yang-sering-dipakai">Perintah yang sering dipakai</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Opsional-Kelola-banyak-server-pakai-SSH-Config">3.8 [Opsional] Kelola banyak server pakai SSH Config</h3><p>Kalau kamu punya banyak server, capek banget kan harus ketik <code>ssh -p 22000 user@ip</code> tiap kali mau connect? Kamu bisa sederhanain pakai SSH Config.</p><h4 id="File-konfigurasi">File konfigurasi</h4><p>Edit <code>~/.ssh/config</code> di <strong>komputer lokal kamu</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Tambahin konfigurasi ini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Cara-pakainya">Cara pakainya</h4><p>Sekarang kamu bisa langsung connect pakai alias:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Gak perlu lagi pusing hafalin IP, port, atau username!</p><hr><h3 id="3-9-Opsional-Izinin-akses-cuma-dari-Cloudflare">3.9 [Opsional] Izinin akses cuma dari Cloudflare</h3><p>Kalau web kamu sepenuhnya ada di belakang Cloudflare, kamu bisa atur biar port 80/443 cuma bisa diakses oleh IP Cloudflare. Ini bakal nambah lapisan keamanan ekstra.</p><blockquote><p>⚠️ Catatan: Konfigurasi ini wajib domain kamu udah diarahin ke Cloudflare CDN dulu.</p></blockquote><h4 id="Script-konfigurasi-otomatis">Script konfigurasi otomatis</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Script ini bakal:</p><ol><li>Ambil rentang IP terbaru langsung dari Cloudflare</li><li>Tambahkan aturan UFW, cuma izinin IP ini buat akses port 80/443</li><li>Reload UFW</li></ol><h4 id="Atur-pembaruan-otomatis">Atur pembaruan otomatis</h4><p>Rentang IP Cloudflare bisa berubah, jadi atur saja biar auto-update tiap minggu:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Atur-zona-waktu">3.10 Atur zona waktu</h3><p>Zona waktu default-nya kemungkinan UTC. Ubah ke zona waktu lokalmu biar gampang pas baca log:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Opsional-Atur-auto-security-update">3.11 [Opsional] Atur auto security update</h3><p>Biar sistem otomatis pasang security patch, repot banget kalau harus manual terus:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Pilih “Yes” buat aktifin auto-update.</p><blockquote><p>💡 Fitur ini otomatis pasang <strong>security update</strong> doang, nggak akan otomatis upgrade ke major version yang baru, jadi lumayan aman.</p></blockquote><hr><h2 id="4-Kesimpulan">4. Kesimpulan</h2><h3 id="Checklist-inisialisasi">Checklist inisialisasi</h3><p>Setelah kelar ngelakuin konfigurasi di atas, cek sekali lagi pakai checklist ini:</p><table><thead><tr><th>Hal yang Dicek</th><th>Perintah</th><th>Hasil yang Diharapkan</th></tr></thead><tbody><tr><td>Sistem sudah di-update</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Tidak ada paket yang bisa di-upgrade</td></tr><tr><td>User biasa bisa sudo</td><td><code>sudo whoami</code></td><td>Output <code>root</code></td></tr><tr><td>Login pakai SSH key berfungsi</td><td><code>ssh yourname@ip -p port</code></td><td>Login tanpa perlu password</td></tr><tr><td>Login pakai password sudah dimatikan</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>Port SSH sudah diganti</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Port yang kamu set sendiri</td></tr><tr><td>Firewall sudah aktif</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR sudah diaktifkan</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban sedang berjalan</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Zona waktu sudah diatur</td><td><code>timedatectl</code></td><td>Asia/Shanghai atau zona waktu kamu</td></tr><tr><td>SSH Config lokal</td><td><code>cat ~/.ssh/config</code></td><td>Alias server sudah dikonfigurasi</td></tr></tbody></table><h3 id="Lokasi-File-Penting">Lokasi File Penting</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Praktik-Keamanan-Terbaik">Praktik Keamanan Terbaik</h3><ol><li><strong>Update sistem secara rutin</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Cek log login secara berkala</strong>: <code>lastb</code> (login gagal), <code>last</code> (login berhasil)</li><li><strong>Pantau status ban dari fail2ban</strong></li><li><strong>Backup dulu file konfigurasi penting sebelum diubah</strong></li></ol><hr><h2 id="5-Catatan-Masalah">5. Catatan Masalah</h2><h3 id="Q1-Login-SSH-key-gagal-tetap-diminta-password">Q1: Login SSH key gagal, tetap diminta password?</h3><p><strong>Kemungkinan penyebabnya:</strong></p><ol><li><p><strong>Masalah izin</strong> (paling sering terjadi)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Public key tidak tersalin dengan benar</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Interferensi SELinux</strong> (di sistem CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Setelah-ganti-port-tiba-tiba-nggak-bisa-konek">Q2: Setelah ganti port, tiba-tiba nggak bisa konek?</h3><p><strong>Langkah pengecekan:</strong></p><ol><li><p>Pastikan port baru sudah dibuka di firewall:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Pastikan konfigurasi SSH sudah benar:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Pastikan service SSH sedang berjalan:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Kalau bener-bener nggak bisa konek sama sekali, gunakan VNC/konsol dari penyedia cloud kamu untuk login dan memperbaikinya.</p></li></ol><h3 id="Q2-5-Ganti-port-tapi-sama-sekali-nggak-berlaku-Server-Lite-cloud-provider">Q2.5: Ganti port tapi sama sekali nggak berlaku? (Server Lite cloud provider)</h3><p><strong>Gejala</strong>: Udah ubah <code>/etc/ssh/sshd_config</code>, tapi setelah service direstart port 22 masih aktif dan port barunya nggak kunjung berlaku.</p><p><strong>Cara diagnosa</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Kalau outputnya mirip kayak gini:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Berarti port 22 masih didengarkan oleh <code>init</code> (PID 1), bukan oleh proses <code>sshd</code>.</p><p><strong>Alasannya</strong>: SSH di “Light Application Server” atau “Container Instance” dari sebagian cloud provider di-proksi langsung di <strong>tingkat platform</strong>, jadi konfigurasi sshd di dalam server kamu nggak akan berefek.</p><p><strong>Solusinya</strong>:</p><table><thead><tr><th>Tipe Instance</th><th>Cara Ganti Port SSH</th></tr></thead><tbody><tr><td>ECS Tradisional</td><td>Edit sshd_config ✅</td></tr><tr><td>Light Server</td><td>Mungkin harus diubah via console cloud, atau malah nggak didukung sama sekali</td></tr><tr><td>Container Instance</td><td>Biasanya nggak didukung untuk diganti</td></tr></tbody></table><p>Kalau instance kamu nggak mendukung ganti port, <strong>langkah keamanan lain jauh lebih penting</strong>:</p><ul><li>✅ Bikin user biasa + matikan login root</li><li>✅ Login pakai SSH key + matikan login pakai password</li><li>✅ Pakai fail2ban buat nangkal brute force</li></ul><p>Kalau langkah-langkah ini udah di-handle dengan bener, keamanan server kamu tetap terjaga kok.</p><h3 id="Q3-fail2ban-malah-nge-blok-IP-sendiri">Q3: fail2ban malah nge-blok IP sendiri?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Setelah-UFW-diaktifin-web-jadi-nggak-bisa-diakses">Q4: Setelah UFW diaktifin, web jadi nggak bisa diakses?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-Pas-ngejalanin-command-malah-ketemu-error-“sudo-not-found”">Q5: Pas ngejalanin command malah ketemu error “sudo not found”?</h3><p>Debian minimal install kadang nggak include sudo, jadi install dulu pake root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Script-inisialisasi-sekali-jalan-dipake-kalau-udah-paham">6. Script inisialisasi sekali jalan (dipake kalau udah paham)</h2><p>Kalau kamu udah paham dan terbiasa sama langkah-langkah di atas, tinggal pake script ini buat inisialisasi server dengan cepat.</p><blockquote><p>⚠️ <strong>Catatan</strong>: Sebelum menjalankan skrip, pastikan kamu sudah siapin SSH public key-nya ya.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Setelah-ngelakuin-semua-ini-seberapa-aman-sih-server-nya">7. Setelah ngelakuin semua ini, seberapa aman sih server-nya?</h2><table><thead><tr><th>Langkah</th><th>Apa yang dilakukan</th><th>Kenapa penting</th></tr></thead><tbody><tr><td>Update sistem</td><td>Install patch terbaru</td><td>Nutup celah keamanan yang udah diketahui</td></tr><tr><td>Bikin user baru</td><td>Ngga langsung pake root lagi</td><td>Ngurangin risiko salah ketik/klik</td></tr><tr><td>SSH Key</td><td>Ganti password pake kunci</td><td>Anti di-brute force</td></tr><tr><td>Ganti port</td><td>Ngumpet dari port default 22</td><td>Ngurangin peluang ke-scan</td></tr><tr><td>Matikan login password</td><td>Cuma boleh login pake kunci</td><td>Stop serangan password secara total</td></tr><tr><td>Matikan root</td><td>Root ngga bisa langsung login</td><td>Bikin penyerang susah masuk</td></tr><tr><td>Firewall UFW</td><td>Buka port yang penting aja</td><td>Ngurangin titik rawan serangan</td></tr><tr><td>BBR Acceleration</td><td>Optimalkan performa jaringan</td><td>Bikin akses makin ngebut</td></tr><tr><td>fail2ban</td><td>Auto-banned IP jahat</td><td>Nangkal serangan yang terus-terusan</td></tr></tbody></table><p>Kalau semua langkah di atas udah kamu lakuin, tingkat keamanan server kamu udah ngalahin <strong>90%</strong> VPS lain di luar sana.</p><hr><h2 id="Sneak-Peek-Artikel-Selanjutnya">Sneak Peek Artikel Selanjutnya</h2><p>Di artikel selanjutnya kita bakal bahas <strong>Cepat Setup SSH Key Login</strong>, bakal dibahas lebih detail nih:</p><ul><li>Cara bikin kunci di berbagai sistem operasi</li><li>Manajemen beberapa kunci sekaligus</li><li>Setup SSH Agent</li><li>Settingan SSH client yang sering dipake</li></ul><hr><p><em>Artikel ini terakhir diperbarui: Januari 2026</em></p><p><em>Seri kotak peralatan indie developer, follow yuk!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/id/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/id/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>VPS baru seperti pintu yang tidak terkunci, semua script kiddie di dunia menggodanya. Hal pertama yang harus dilakukan saat menerima VPS bukanlah menginstal perangkat lunak, tapi melakukan inisialisasi keamanan: login SSH dengan kunci, port non-standar, pengguna biasa, firewall, fail2ban, percepatan BBR. Artikel ini akan membantu Anda membangun fondasi yang kuat dalam satu jam pertama.</summary>
    <title>Jam pertama setelah VPS jatuh ke tangan: panduan lengkap dari bare metal jadi aman dan siap pakai (biar OpenClaw-mu makin aman)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Cassetta degli attrezzi per sviluppatori indipendenti" scheme="https://blog.ittinker.com/categories/Cassetta-degli-attrezzi-per-sviluppatori-indipendenti/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="Sicurezza del server" scheme="https://blog.ittinker.com/tags/Sicurezza-del-server/"/>
    <category term="Sviluppo indipendente" scheme="https://blog.ittinker.com/tags/Sviluppo-indipendente/"/>
    <content>
      <![CDATA[<blockquote><p>Un VPS appena acquistato è come una porta senza serratura, con script kiddie di tutto il mondo che bussano alla porta. Questo articolo ti guida a mettere una bella serratura. Così il tuo “gamberetto” (openclaw) non se ne va in giro a combinare guai.</p></blockquote><h2 id="0-Prima-di-iniziare">0. Prima di iniziare</h2><p>Hai appena preso un VPS, tutto gasato con IP e password di root in mano, e poi?</p><p>L’approccio di molti è: partire subito a installare roba e deployare progetti.</p><p><strong>È un’abitudine pericolosa.</strong></p><p>Il tuo VPS ha un IP pubblico, il che significa che chiunque nel mondo può provare a connettersi. E nella configurazione di default:</p><ul><li>La porta esposta è la <strong>22</strong></li><li>L’utente è il classico <strong>root</strong></li><li>A proteggerti è rimasta solo una password</li></ul><p>Ogni giorno un’infinità di script automatizzati scansiona interi range di IP, provando a forzare l’accesso con password comuni. Il tuo server è già sotto attacco dal momento esatto in cui va online.</p><p>Quindi, <strong>la primissima cosa da fare appena ottenuto un VPS non è installare software, ma eseguire l’hardening iniziale</strong>.</p><hr><h2 id="1-L’obiettivo">1. L’obiettivo</h2><p>L’obiettivo di questo articolo è:</p><ul><li>✅ Metti in piedi un <strong>accesso remoto sicuro</strong>: login con chiave SSH + porta non di default</li><li>✅ Crea un <strong>utente normale</strong>: evita di usare direttamente root</li><li>✅ Configura il <strong>firewall</strong>: apri solo le porte strettamente necessarie</li><li>✅ Attiva l’<strong>accelerazione di rete</strong>: con BBR la connessione decolla</li><li>✅ Blocca i <strong>tentativi di brute-force</strong>: fail2ban banna in automatico gli IP malevoli</li></ul><p>Fatto tutto questo, il tuo VPS avrà una base solida e potrai distribuire i tuoi servizi in tutta tranquillità.</p><hr><h2 id="2-Pianificazione-e-ragionamento">2. Pianificazione e ragionamento</h2><h3 id="Perche-fare-tutte-queste-configurazioni">Perché fare tutte queste configurazioni?</h3><p>Un VPS appena acquistato è come un appartamento appena consegnato, grezzo e da sistemare:</p><table><thead><tr><th>Situazione di default</th><th>Rischio</th><th>La nostra soluzione</th></tr></thead><tbody><tr><td>Login diretto con root</td><td>Troppi permessi, rischio altissimo se sbagli</td><td>Creare un utente normale + sudo</td></tr><tr><td>Login con password</td><td>Vulnerabile a attacchi brute-force</td><td>Login con chiave SSH</td></tr><tr><td>Porta 22 di default</td><td>Primo bersaglio degli scanner</td><td>Cambiare a una porta non standard</td></tr><tr><td>Firewall disattivato</td><td>Tutte le porte esposte</td><td>UFW: aprire solo le porte necessarie</td></tr><tr><td>Rete nativa</td><td>Tasso di packet loss alto, latenza elevata</td><td>Algoritmo di controllo della congestione BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Flusso-generale">Flusso generale</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Seguiamo esattamente quest’ordine, e ti spiego il perché di ogni passaggio man mano che andiamo avanti.</p><h2 id="3-Passaggi-operativi">3. Passaggi operativi</h2><h3 id="3-1-Primo-accesso-e-aggiornamento-del-sistema">3.1 Primo accesso e aggiornamento del sistema</h3><h4 id="Recuperare-l’IP-del-server">Recuperare l’IP del server</h4><p>Dopo aver comprato il VPS, il provider ti darà:</p><ul><li><strong>Indirizzo IP</strong>: ad esempio <code>192.168.1.100</code></li><li><strong>Porta</strong>: di solito è <code>22</code> (alcuni provider potrebbero usarne una diversa)</li><li><strong>Username</strong>: di solito è <code>root</code></li><li><strong>Password</strong>: una stringa di caratteri generata casualmente</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Connessione-SSH">Connessione SSH</h4><p><strong>Utenti Mac / Linux</strong>: aprite il terminale e digitate direttamente:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Utenti Windows</strong>:</p><ul><li>Windows 10/11 ha OpenSSH già integrato, quindi potete usare lo stesso comando direttamente in PowerShell o CMD</li><li>In alternativa, potete appoggiarvi a tool come <a href="https://termius.com/">Termius</a> o <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>Al primo accesso vi imbatterete in un avviso per confermare l’impronta digitale:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>In pratica vi sta chiedendo: «Non conosco questa macchina, sei sicuro di volerti connettere?»</p><p>Digitate <code>yes</code> e premete Invio. Poi inserite la password (<strong>attenzione: mentre la digitate non comparirà nessun carattere a schermo, è una normale misura di sicurezza</strong>) e premete di nuovo Invio.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Se vi ritrovate davanti a un prompt simile a questo, il login è andato a buon fine:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Perché verificare l’impronta digitale?</strong></p><p>Serve a prevenire gli attacchi “man-in-the-middle”. Al primo accesso ti segni l’impronta digitale del server: se in futuro dovesse cambiare, significa che qualcuno potrebbe star fingendo di essere il tuo server.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Prendi-confidenza-con-il-tuo-server">Prendi confidenza con il tuo server</h4><p>Appena fatto login, diamo un’occhiata alle informazioni di base di questa macchina:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Tieni a mente queste info, ti torneranno utili più avanti per risolvere eventuali problemi.</p><h4 id="Aggiornamento-del-sistema">Aggiornamento del sistema</h4><p>Dopo aver controllato le info del server, la prima cosa seria da fare è aggiornare il sistema. L’immagine di sistema di un server nuovo potrebbe risalire a qualche mese fa, e nel frattempo potrebbero essere usciti dei patch di sicurezza:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Spiegazione dei parametri:</strong></p><ul><li><code>apt update</code>: aggiorna l’indice dei pacchetti</li><li><code>apt full-upgrade</code>: aggiorna tutti i software, kernel compreso</li><li><code>-y</code>: conferma automatica, così non devi digitare yes a mano</li><li><code>apt autoremove</code>: rimuove le dipendenze che non servono più</li><li><code>apt autoclean</code>: pulisce la cache dei pacchetti di installazione scaricati</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Questo passaggio potrebbe richiedere qualche minuto, dipende da quanti aggiornamenti ci sono. Se ogni tanto ti chiede conferma, praticamente basta seguire la sua logica e vai tranquillo.</p></blockquote><h4 id="Controlla-se-serve-un-riavvio">Controlla se serve un riavvio</h4><p>Dopo un aggiornamento del kernel, in genere serve un riavvio per farlo andare effettivamente:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Se ti dice che serve riavviare:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Dopo il riavvio dovrai riconnetterti via SSH.</p><h4 id="Installa-gli-strumenti-di-uso-comune">Installa gli strumenti di uso comune</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>A cosa servono 'sti attrezzi:</strong></p><table><thead><tr><th>Strumento</th><th>Uso</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Permette agli utenti normali di eseguire comandi come amministratore</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Scaricare file</td><td></td></tr><tr><td><code>git</code></td><td>Controllo versione</td><td></td></tr><tr><td><code>vim</code></td><td>Editor di testo</td><td></td></tr><tr><td><code>htop</code></td><td>Monitor dei processi più carino</td><td></td></tr><tr><td><code>tree</code></td><td>Mostra la struttura delle directory ad albero</td><td></td></tr><tr><td><code>net-tools</code></td><td>Strumenti di rete (ifconfig, netstat, ecc.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Firewall semplice e facile da usare</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Protezione contro il brute-force</td><td></td></tr><tr><td><code>neofetch</code></td><td>Mostra le informazioni di sistema in modo carino</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Creare-un-utente-non-root">3.2 Creare un utente non root</h3><h4 id="Perche-non-usare-direttamente-root">Perché non usare direttamente root?</h4><p>I permessi dell’utente root sono troppo ampi: un semplice errore di distrazione con <code>rm -rf /</code> e saluta tutto. Per le operazioni di tutti i giorni usa un utente normale; quando ti servono i privilegi di amministratore, basta lanciare <code>sudo</code>.</p><blockquote><p>L’aragosta (openclaw) è una bestia, mica posso darle l’accesso root!</p></blockquote><h4 id="Creare-l’utente">Creare l’utente</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Il sistema ti chiederà di impostare una password e qualche altra informazione:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Assegnare-i-privilegi-sudo">Assegnare i privilegi sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Facciamo una verifica:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Se l’output è <code>root</code>, significa che sudo è configurato correttamente.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Dritta</strong></p><p>Se digiti <code>exit</code> torni all’utente root. Per le prossime configurazioni continuiamo a usare root, poi, a lavoro finito, passeremo al nostro utente normale.</p></blockquote><hr><h3 id="3-3-Configurare-il-login-con-chiavi-SSH">3.3 Configurare il login con chiavi SSH</h3><h4 id="Autenticazione-a-chiave-vs-autenticazione-a-password">Autenticazione a chiave vs autenticazione a password</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>L’autenticazione a chiave è molto più sicura della password:</p><ul><li>Le password possono subire attacchi brute force, le chiavi praticamente impossibili</li><li>Niente più password da digitare ogni volta, molto più comodo</li><li>Anche se la password venisse compromessa, senza la chiave privata non entra nessuno</li></ul><h4 id="Passaggio-1-generare-la-coppia-di-chiavi-in-locale">Passaggio 1: generare la coppia di chiavi in locale</h4><p>Esegui sul <strong>tuo computer</strong> (non sul server):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Ti verrà chiesto:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Premi direttamente Invio per usare il percorso predefinito. Noi qui abbiamo usato ./ittinker, che significa semplicemente salvare il file nella directory corrente con il nome ittinker.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Puoi impostare una password per la chiave (uno strato extra di protezione) oppure premere direttamente Invio per lasciare vuoto.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Una volta completata la generazione, troverai due file nella directory <code>~/.ssh/</code> (qui sotto ci sono i nomi predefiniti, se hai premuto Invio prima verranno chiamati così):</p><ul><li><code>id_ed25519</code>: la <strong>chiave privata</strong>, non deve mai assolutamente finire in mani sbagliate!</li><li><code>id_ed25519.pub</code>: la <strong>chiave pubblica</strong>, da caricare sul server</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> è l’algoritmo attualmente consigliato, più sicuro e con chiavi più corte rispetto al tradizionale RSA. Se il tuo sistema è troppo vecchio e non lo supporta, puoi usare <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Un piccolo dettaglio: le chiavi generate con ed25519 sono più piccole, mentre i file RSA sono grandi. L’ho chiesto all’AI e ho scoperto che le dimensioni non contano, dipende solo dal tipo di algoritmo.</p></blockquote><h4 id="Passaggio-due-carica-la-chiave-pubblica-sul-server">Passaggio due: carica la chiave pubblica sul server</h4><p><strong>Metodo A: usa ssh-copy-id (consigliato)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Dopo aver inserito la password, la chiave pubblica verrà copiata automaticamente sul server.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Metodo B: copia manuale</strong></p><p>Se <code>ssh-copy-id</code> non è disponibile, puoi farlo manualmente:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Copia l’output (una lunga stringa di testo che inizia con <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>I permessi sono fondamentali!</strong></p><p>SSH è molto pignolo sui permessi dei file:</p><ul><li><code>.ssh</code> directory: 700 (accessibile solo dal tuo utente)</li><li><code>authorized_keys</code> file: 600 (leggibile e scrivibile solo dal tuo utente)</li></ul><p>Se i permessi non sono esatti, SSH rifiuterà di usare la chiave per il login.</p></blockquote><h4 id="Passaggio-3-Testa-il-login-con-la-chiave">Passaggio 3: Testa il login con la chiave</h4><p><strong>Apri una nuova finestra del terminale</strong> (non chiudere quella originale, così se sbagli qualcosa puoi sempre rimediare) e testa il login con la chiave:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Se riesci ad accedere senza inserire la password, la configurazione della chiave è andata a buon fine! 🎉</p><p>(Se hai impostato una passphrase per la chiave privata, ti verrà chiesta: è del tutto normale)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Qui abbiamo aggiunto il parametro -i perché questa chiave non si trova nel percorso predefinito, ma nella directory corrente. Se non lo specifichi, il sistema userà la chiave di default.</p></blockquote><hr><h3 id="3-4-Rafforzare-la-sicurezza-di-SSH">3.4 Rafforzare la sicurezza di SSH</h3><p>Ora che il login con la chiave funziona, andiamo a blindare un po’ la configurazione SSH:</p><ol><li>Cambia la porta predefinita (così eviti le scansioni automatiche)</li><li>Disabilita il login con password</li><li>Impedisci il login diretto come root</li></ol><h4 id="Modifica-il-file-di-configurazione-SSH">Modifica il file di configurazione SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Trova e modifica le seguenti impostazioni (alcune potrebbero essere commentate, rimuovi il <code>#</code> all’inizio):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Salva ed esci (<code>ctrl + o</code>).</p><blockquote><p>Con Nano, per salvare premi ctrl + o: ti chiederà di confermare il nome del file, premi semplicemente Invio. Per uscire, invece, ctrl + x.</p></blockquote><h4 id="Riavvia-il-servizio-SSH">Riavvia il servizio SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Attenzione!</strong></p><p><strong>Non chiudere il terminale attuale!</strong> Prima di farlo, apri una nuova finestra e verifica se riesci ad accettare con la nuova configurazione:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Se il login va a buon fine, puoi chiudere la vecchia finestra. Se non riesci a entrare, puoi comunque correggere la configurazione dalla sessione precedente.</p></blockquote><blockquote><p>Se hai acquistato un server leggero, è molto probabile che questa porta non sia modificabile. I classici ECS lo permettono, quindi fai attenzione.</p></blockquote><hr><h3 id="3-5-Configura-il-firewall-UFW">3.5 Configura il firewall UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) è lo strumento firewall predefinito di Ubuntu: facile da configurare, ma molto potente.</p><h4 id="Configurazione-di-base">Configurazione di base</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Abilita-il-firewall">Abilita il firewall</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Ti verrà mostrato questo prompt:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Digita <code>y</code> per confermare.</p><h4 id="Verifica-lo-stato">Verifica lo stato</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 è un refuso mio, regolatevi in base alla vostra situazione reale</p></blockquote><p>Output tipo:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Cheat-sheet-dei-comandi-principali">Cheat sheet dei comandi principali</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Attiva-l’accelerazione-BBR">3.6 Attiva l’accelerazione BBR</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) è un algoritmo di controllo della congestione TCP sviluppato da Google, in grado di migliorare nettamente le prestazioni di rete.</p><h4 id="Attivazione-con-un-clic">Attivazione con un clic</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Verifica-che-sia-attivo">Verifica che sia attivo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>L’output dovrebbe essere:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Output tipo:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>L’effetto di BBR</strong></p><p>Una volta attivato BBR, soprattutto in ambienti con rete instabile o latenza elevata, noterai chiaramente:</p><ul><li>Download più veloci</li><li>Operazioni SSH più fluide</li><li>Caricamento delle pagine più rapido</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Configura-fail2ban-per-difenderti-dai-brute-force">3.7 Configura fail2ban per difenderti dai brute-force</h3><p>fail2ban monitora i log e banna automaticamente gli IP dopo ripetuti tentativi di login falliti.</p><h4 id="Configurazione-di-base-2">Configurazione di base</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Trova la sezione <code>[sshd]</code> e assicurati di avere questa configurazione:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Avvia-i-servizi">Avvia i servizi</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Controlla-lo-stato">Controlla lo stato</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>L’output sarà simile a questo:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Comandi-utili">Comandi utili</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Opzionale-Gestire-piu-server-con-SSH-Config">3.8 [Opzionale] Gestire più server con SSH Config</h3><p>Se hai più server, digitare <code>ssh -p 22000 user@ip</code> ogni volta è una vera scocciatura. Puoi semplificare tutto usando SSH Config.</p><h4 id="File-di-configurazione">File di configurazione</h4><p>Modifica il file <code>~/.ssh/config</code> sul <strong>tuo computer locale</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Aggiungi questa configurazione:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Come-usarlo">Come usarlo</h4><p>Ora puoi connetterti direttamente usando l’alias:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Niente più stress a ricordare IP, porte e nomi utente!</p><hr><h3 id="3-9-Opzionale-Consentire-l’accesso-solo-a-Cloudflare">3.9 [Opzionale] Consentire l’accesso solo a Cloudflare</h3><p>Se il tuo sito si trova completamente dietro Cloudflare, puoi impostare le regole del firewall in modo da consentire l’accesso alle porte 80/443 solo agli IP di Cloudflare, mettendo così una bella sicurezza in più.</p><blockquote><p>⚠️ Attenzione: per fare questa configurazione, il tuo dominio deve essere già integrato con la CDN di Cloudflare.</p></blockquote><h4 id="Script-di-configurazione-automatica">Script di configurazione automatica</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Questo script si occuperà di:</p><ol><li>Prendi i range IP ufficiali più recenti direttamente da Cloudflare</li><li>Aggiungi le regole UFW per consentire l’accesso alle porte 80/443 solo a questi IP</li><li>Ricarica UFW</li></ol><h4 id="Impostare-l’aggiornamento-automatico">Impostare l’aggiornamento automatico</h4><p>I range IP di Cloudflare possono cambiare nel tempo, quindi impostiamo un aggiornamento automatico settimanale:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Impostare-il-fuso-orario">3.10 Impostare il fuso orario</h3><p>Il fuso orario di default potrebbe essere UTC: cambialo con il tuo per rendere la lettura dei log molto più comoda:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Opzionale-Configurare-gli-aggiornamenti-di-sicurezza-automatici">3.11 [Opzionale] Configurare gli aggiornamenti di sicurezza automatici</h3><p>Facciamo in modo che il sistema installi da solo le patch di sicurezza, così non devi pensarci ogni volta a mano:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Scegli “Yes” per attivare gli aggiornamenti automatici.</p><blockquote><p>💡 Questa funzione si occupa di installare solo gli <strong>aggiornamenti di sicurezza</strong>, senza fare il salto a nuove major version. Quindi è abbastanza sicuro.</p></blockquote><hr><h2 id="4-Riepilogo">4. Riepilogo</h2><h3 id="Checklist-di-inizializzazione">Checklist di inizializzazione</h3><p>Finita tutta la configurazione, usa questa checklist per fare un giro di controllo:</p><table><thead><tr><th>Cosa verificare</th><th>Comando</th><th>Risultato atteso</th></tr></thead><tbody><tr><td>Sistema aggiornato</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Nessun pacchetto da aggiornare</td></tr><tr><td>L’utente normale può usare sudo</td><td><code>sudo whoami</code></td><td>Output <code>root</code></td></tr><tr><td>Login con chiave funzionante</td><td><code>ssh yourname@ip -p port</code></td><td>Accesso senza password</td></tr><tr><td>Login con password disabilitato</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>Porta SSH modificata</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>La porta che hai impostato</td></tr><tr><td>Firewall attivo</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR attivato</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban in esecuzione</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Fuso orario impostato</td><td><code>timedatectl</code></td><td>Asia/Shanghai o il tuo fuso orario</td></tr><tr><td>SSH Config locale</td><td><code>cat ~/.ssh/config</code></td><td>Alias del server configurato</td></tr></tbody></table><h3 id="Posizione-dei-file-chiave">Posizione dei file chiave</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Best-practice-di-sicurezza">Best practice di sicurezza</h3><ol><li><strong>Aggiorna regolarmente il sistema</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Controlla spesso i log di accesso</strong>: <code>lastb</code> (login falliti), <code>last</code> (login riusciti)</li><li><strong>Tieni d’occhio i ban di fail2ban</strong></li><li><strong>Fai un backup prima di modificare i file di configurazione importanti</strong></li></ol><hr><h2 id="5-Troubleshooting">5. Troubleshooting</h2><h3 id="Q1-Login-con-chiave-fallito-ti-chiede-ancora-la-password">Q1: Login con chiave fallito, ti chiede ancora la password?</h3><p><strong>Possibili cause:</strong></p><ol><li><p><strong>Problemi di permessi</strong> (il più comune)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Chiave pubblica non copiata correttamente</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Interferenza di SELinux</strong> (su sistemi CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Dopo-aver-cambiato-la-porta-non-riesci-piu-a-connetterti">Q2: Dopo aver cambiato la porta non riesci più a connetterti?</h3><p><strong>Passaggi per risolvere:</strong></p><ol><li><p>Assicurati che la nuova porta sia aperta nel firewall:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Verifica che la configurazione di SSH sia corretta:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Controlla che il servizio SSH sia in esecuzione:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Se non riesci proprio a connetterti, usa la console VNC del tuo provider per accedere e sistemare il problema.</p></li></ol><h3 id="Q2-5-Il-cambio-di-porta-non-ha-proprio-effetto-Server-lightweight-dei-provider-cloud">Q2.5: Il cambio di porta non ha proprio effetto? (Server lightweight dei provider cloud)</h3><p><strong>Sintomo</strong>: hai modificato <code>/etc/ssh/sshd_config</code>, ma dopo aver riavviato il servizio la porta 22 risulta ancora aperta e quella nuova non funziona.</p><p><strong>Come diagnosticare</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Se l’output è simile a questo:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>significa che la porta 22 è in ascolto da parte di <code>init</code> (PID 1), e non dal processo <code>sshd</code>.</p><p><strong>Perché</strong>: con alcuni provider cloud, l’SSH dei loro “server applicativi leggeri” o delle “istanze container” passa tramite un <strong>proxy a livello di piattaforma</strong>, quindi le configurazioni di sshd che fai dentro il tuo server non hanno alcun effetto.</p><p><strong>Soluzione</strong>:</p><table><thead><tr><th>Tipo di istanza</th><th>Come modificare la porta SSH</th></tr></thead><tbody><tr><td>ECS tradizionale</td><td>Modifica sshd_config ✅</td></tr><tr><td>Server leggero</td><td>Forse va fatto dal pannello di controllo del cloud, oppure non è proprio supportato</td></tr><tr><td>Istanza container</td><td>Di solito non è supportato</td></tr></tbody></table><p>Se la tua istanza non supporta il cambio di porta, <strong>le altre misure di sicurezza diventano ancora più importanti</strong>:</p><ul><li>✅ Creare un utente normale + disabilitare il login root</li><li>✅ Login SSH con chiave + disabilitare il login con password</li><li>✅ fail2ban per fermare gli attacchi brute-force</li></ul><p>Se metti in pratica queste misure, il livello di sicurezza resta comunque molto alto.</p><h3 id="Q3-fail2ban-mi-ha-bannato-da-solo">Q3: fail2ban mi ha bannato da solo?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Dopo-aver-attivato-UFW-il-sito-non-e-piu-raggiungibile">Q4: Dopo aver attivato UFW il sito non è più raggiungibile?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-Eseguendo-un-comando-mi-dice-che-non-trova-sudo">Q5: Eseguendo un comando mi dice che non trova sudo?</h3><p>Sull’installazione minimale di Debian potrebbe non esserci sudo, installalo usando root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Script-di-inizializzazione-con-un-clic-da-usare-quando-hai-preso-confidenza">6. Script di inizializzazione con un clic (da usare quando hai preso confidenza)</h2><p>Se hai già familiarità con i passaggi precedenti, puoi usare questo script per inizializzare tutto in un attimo.</p><blockquote><p>⚠️ <strong>Attenzione</strong>: prima di lanciare lo script, assicurati di avere già pronta la tua chiave pubblica SSH.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Fatto-tutto-questo-quanto-e-migliorata-la-sicurezza">7. Fatto tutto questo, quanto è migliorata la sicurezza?</h2><table><thead><tr><th>Passaggio</th><th>Cosa abbiamo fatto</th><th>Perché è importante</th></tr></thead><tbody><tr><td>Aggiornamento del sistema</td><td>Installazione delle ultime patch</td><td>Risolve le vulnerabilità note</td></tr><tr><td>Creazione di un nuovo utente</td><td>Non usare più direttamente root</td><td>Riduce il rischio di errori umani</td></tr><tr><td>Chiavi SSH</td><td>Sostituzione della password con una chiave</td><td>Impossibile da forzare con attacchi brute force</td></tr><tr><td>Cambio di porta</td><td>Evitare la porta 22 di default</td><td>Riduce le probabilità di essere scansionati</td></tr><tr><td>Disabilitazione della password</td><td>Accesso solo tramite chiave</td><td>Elimina alla radice gli attacchi basati su password</td></tr><tr><td>Disabilitazione di root</td><td>root non può fare login diretto</td><td>Alza l’asticella per gli attacchi</td></tr><tr><td>Firewall UFW</td><td>Apertura solo delle porte necessarie</td><td>Riduce la superficie di attacco</td></tr><tr><td>Accelerazione BBR</td><td>Ottimizzazione delle prestazioni di rete</td><td>Aumenta la velocità di accesso</td></tr><tr><td>fail2ban</td><td>Ban automatico degli IP malevoli</td><td>Blocca gli attacchi prolungati</td></tr></tbody></table><p>Con questa messa a punto, la sicurezza del tuo server ha già superato quella di <strong>90%</strong> dei VPS.</p><hr><h2 id="Anteprima-del-prossimo-articolo">Anteprima del prossimo articolo</h2><p>Nel prossimo parleremo di <strong>Configurazione rapida del login con chiavi SSH</strong>, entrando più nel dettaglio su:</p><ul><li>Come generare le chiavi sui diversi sistemi operativi</li><li>Gestione di chiavi multiple</li><li>Configurazione di SSH Agent</li><li>Impostazioni dei client SSH più comuni</li></ul><hr><p><em>Ultimo aggiornamento dell’articolo: gennaio 2026</em></p><p><em>Serie “Cassetta degli attrezzi per indie developer”, seguimi!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/it/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/it/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Il tuo nuovo VPS è come una porta senza lucchetto, con tutti gli script kiddie che bussano. La prima cosa da fare dopo aver ricevuto il tuo VPS non è installare software, ma inizializzare la sicurezza: login con chiave SSH, porta non predefinita, utente normale, firewall, fail2ban e accelerazione BBR. Questo articolo ti guiderà a rafforzare le fondamenta nel primo ora.</summary>
    <title>Il primo ora con la tua VPS: guida completa da macchina nuda a server sicuro e pronto (per rendere più sicuro il tuo OpenClaw)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="इंडी डेवलपर टूलबॉक्स" scheme="https://blog.ittinker.com/categories/%E0%A4%87%E0%A4%82%E0%A4%A1%E0%A5%80-%E0%A4%A1%E0%A5%87%E0%A4%B5%E0%A4%B2%E0%A4%AA%E0%A4%B0-%E0%A4%9F%E0%A5%82%E0%A4%B2%E0%A4%AC%E0%A5%89%E0%A4%95%E0%A5%8D%E0%A4%B8/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="रिमोट SSH" scheme="https://blog.ittinker.com/tags/%E0%A4%B0%E0%A4%BF%E0%A4%AE%E0%A5%8B%E0%A4%9F-SSH/"/>
    <category term="सर्वर सुरक्षा" scheme="https://blog.ittinker.com/tags/%E0%A4%B8%E0%A4%B0%E0%A5%8D%E0%A4%B5%E0%A4%B0-%E0%A4%B8%E0%A5%81%E0%A4%B0%E0%A4%95%E0%A5%8D%E0%A4%B7%E0%A4%BE/"/>
    <category term="इंडी हैकिंग" scheme="https://blog.ittinker.com/tags/%E0%A4%87%E0%A4%82%E0%A4%A1%E0%A5%80-%E0%A4%B9%E0%A5%88%E0%A4%95%E0%A4%BF%E0%A4%82%E0%A4%97/"/>
    <content>
      <![CDATA[<blockquote><p>नया खरीदा हुआ VPS बिल्कुल एक बिना ताले का दरवाज़ा है, दुनिया भर के स्क्रिप्ट किड्स इस पर दस्तक दे रहे हैं। ये लेख आपको दरवाज़ा सुरक्षित करना सिखाएगा। ताकि आपका लॉबस्टर (openclaw) यहाँ-वहाँ भागकर शैतानी न करे।</p></blockquote><h2 id="0、शुरुआत-से-पहले">0、शुरुआत से पहले</h2><p>अभी-अभी एक नया VPS खरीदा है, IP और root पासवर्ड मिलते ही आप उत्साह में हैं, फिर?</p><p>ज़्यादातर लोग क्या करते हैं: सीधे सॉफ्टवेयर इंस्टॉल करना और प्रोजेक्ट डिप्लॉय करना शुरू कर देते हैं।</p><p><strong>ये एक खतरनाक आदत है।</strong></p><p>आपके VPS का एक पब्लिक IP है, मतलब दुनिया में कोई भी इससे कनेक्ट करने की कोशिश कर सकता है। और डिफ़ॉल्ट कॉन्फ़िगरेशन में:</p><ul><li>पोर्ट पब्लिक रूप से खुला है <strong>22</strong></li><li>यूज़रनेम सबको पता है: <strong>root</strong></li><li>बस एक पासवर्ड आपकी सुरक्षा कर रहा है</li></ul><p>हर रोज़ अनगिनत ऑटोमेटेड स्क्रिप्ट IP रेंज स्कैन कर रही हैं और आम पासवर्ड से ब्रूट-फ़ोर्स अटैक करने की कोशिश कर रही हैं। आपका सर्वर जिस पल ऑनलाइन होता है, उसी पल से अटैक हो रहा है।</p><p>इसलिए, <strong>VPS मिलते ही सबसे पहला काम सॉफ्टवेयर इंस्टॉल करना नहीं, बल्कि सुरक्षा सेटअप करना है</strong>।</p><hr><h2 id="1、हमारा-लक्ष्य">1、हमारा लक्ष्य</h2><p>इस लेख का लक्ष्य ये है:</p><ul><li>✅ <strong>Secure remote access</strong> सेटअप करना: SSH key लॉगिन + डिफ़ॉल्ट पोर्ट को बदलना</li><li>✅ एक <strong>नॉर्मल यूज़र</strong> बनाना: सीधे root का इस्तेमाल करने से बचें</li><li>✅ <strong>फ़ायरवॉल</strong> कॉन्फ़िगर करना: सिर्फ़ ज़रूरी पोर्ट ही खोलें</li><li>✅ <strong>नेटवर्क बूस्ट</strong> चालू करना: BBR से नेटवर्क को उड़ान दें</li><li>✅ <strong>ब्रूट-फ़ोर्स अटैक</strong> रोकना: fail2ban से खतरनाक IP अपने-आप बैन करें</li></ul><p>ये सब कर लेने के बाद, आपके VPS की नींव एकदम मज़बूत हो जाएगी और फिर आप बेफ़िक्र होकर अपनी किसी भी सर्विस को डिप्लॉय कर सकते हैं।</p><hr><h2 id="2-प्लान-और-सोच">2. प्लान और सोच</h2><h3 id="ये-सब-कॉन्फ़िगरेशन-करने-की-ज़रूरत-क्यों-है">ये सब कॉन्फ़िगरेशन करने की ज़रूरत क्यों है?</h3><p>नया ख़रीदा हुआ VPS बिल्कुल उसी तरह है जैसे किसी नए मकान का खाली कच्चा कमरा:</p><table><thead><tr><th>डिफ़ॉल्ट स्थिति</th><th>जोखिम</th><th>हमारा समाधान</th></tr></thead><tbody><tr><td>root यूज़र से सीधे लॉगिन</td><td>बहुत ज़्यादा परमिशन, गलती से बड़ा नुक़सान हो सकता है</td><td>नया नॉर्मल यूज़र बनाएं + sudo</td></tr><tr><td>पासवर्ड से लॉगिन</td><td>ब्रूट-फ़ोर्स अटैक हो सकता है</td><td>SSH की (key) से लॉगिन</td></tr><tr><td>डिफ़ॉल्ट पोर्ट 22</td><td>स्कैनर इसे सबसे पहले टारगेट करते हैं</td><td>किसी नॉन-स्टैंडर्ड पोर्ट पर शिफ्ट करें</td></tr><tr><td>फ़ायरवॉल बंद</td><td>सारे पोर्ट बाहर की दुनिया के लिए खुले</td><td>UFW से सिर्फ़ ज़रूरी पोर्ट ही खोलें</td></tr><tr><td>नेटिव नेटवर्क</td><td>पैकेट लॉस ज़्यादा, लेटेंसी भी बढ़ी हुई</td><td>BBR कंजेशन कंट्रोल एल्गोरिदम</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="पूरा-प्रोसेस">पूरा प्रोसेस</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>हम इसी क्रम से सब कुछ सेट अप करेंगे, और हर स्टेप पर मैं आपको बताऊंगा कि ऐसा क्यों कर रहे हैं।</p><h2 id="3-ऑपरेशन-स्टेप्स">3. ऑपरेशन स्टेप्स</h2><h3 id="3-1-पहली-बार-लॉगिन-और-सिस्टम-अपडेट">3.1 पहली बार लॉगिन और सिस्टम अपडेट</h3><h4 id="सर्वर-का-IP-पता-लें">सर्वर का IP पता लें</h4><p>VPS ख़रीदने के बाद, आपकी होस्टिंग प्रोवाइडर आपको ये चीज़ें देगी:</p><ul><li><strong>IP address</strong>: Jaise ki <code>192.168.1.100</code></li><li><strong>Port</strong>: Aam taur par <code>22</code> hota hai (kuch providers isse badal dete hain)</li><li><strong>Username</strong>: Aam taur par <code>root</code> hota hai</li><li><strong>Password</strong>: Ek randomly generate kiya hua character string</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="SSH-Connection">SSH Connection</h4><p><strong>Mac / Linux users</strong>: Terminal kholo, aur direct type karo:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows users</strong>:</p><ul><li>Windows 10/11 mein OpenSSH pehle se bana hota hai, toh aap upar wala command directly PowerShell ya CMD mein chala sakte ho</li><li>Ya fir <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> jaise tools use kar sakte ho</li></ul><p>Pehli baar connect karne par fingerprint confirmation prompt dikhega:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Yeh basically pooch raha hai: “Main is machine ko nahi jaanta, kya tum sure ho ki tumhe isse connect karna hai?”</p><p><code>yes</code> type karo aur Enter dabao. Uske baad password type karo (<strong>dhyaan rakhna: type karte waqt screen par kuch nahi dikhega, yeh normal security feature hai</strong>), aur Enter dabao.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Agar aapko is tarah ka prompt dikhe, toh iska matlab login successful hai:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Fingerprint confirm kyun zaroori hai?</strong></p><p>Yeh “Man-in-the-Middle attack” se bachne ke liye hai. Pehli baar connect karte waqt server ka fingerprint note kar lijiye. Agar baad mein connect karne par fingerprint badal gaya hai, toh iska matlab hai ki shayad koi aapke server ka nakli roop dhaar kar raha hai.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Apne-server-se-pehchaan-karein">Apne server se pehchaan karein</h4><p>Login karne ke baad, pehle is machine ki basic haalat samajh lijiye:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Yi sab info yaad rakhiye, aage chal kar koi problem troubleshoot karne time kaam aayegi.</p><h4 id="System-Update">System Update</h4><p>Server ki info check karne ke baad, sabse pehla kaam hai system ko update karna. Naya server purana image use kar raha ho sakta hai, aur is dauraan kai security patches release ho chuke honge:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Parameters ka matlab:</strong></p><ul><li><code>apt update</code>: Package index update karta hai</li><li><code>apt full-upgrade</code>: Saare software upgrade karta hai, kernel bhi isme shamil hai</li><li><code>-y</code>: Automatically confirm karta hai, manually ‘yes’ type karne ki zaroorat nahi</li><li><code>apt autoremove</code>: Jo dependencies ab zaroorat nahi unhe delete kar deta hai</li><li><code>apt autoclean</code>: Download kiye gaye install packages ke cache ko saaf kar deta hai</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Is step mein kuch minute lag sakte hain, depend karta hai kitne updates hain. Beech mein kabhi-kabhi confirm karne ko bole toh, basically jo uski logic ho wahi follow kar lijiye.</p></blockquote><h4 id="Reboot-zaroorat-check-karein">Reboot zaroorat check karein</h4><p>Kernel update ke baad aam taur par effect dikhane ke liye reboot karna padta hai:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Agar reboot karne ko kahe:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Reboot ke baad aapko dobara SSH connection establish karna hoga.</p><h4 id="Common-tools-install-karein">Common tools install karein</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>ये टूल्स किस काम आते हैं:</strong></p><table><thead><tr><th>टूल</th><th>काम</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>सामान्य यूज़र्स को एडमिन कमांड चलाने दें</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>फ़ाइलें डाउनलोड करना</td><td></td></tr><tr><td><code>git</code></td><td>वर्शन कंट्रोल</td><td></td></tr><tr><td><code>vim</code></td><td>टेक्स्ट एडिटर</td><td></td></tr><tr><td><code>htop</code></td><td>बेहतरीन लगने वाला प्रोसेस मॉनिटर</td><td></td></tr><tr><td><code>tree</code></td><td>डायरेक्टरी स्ट्रक्चर ट्री व्यू में दिखाना</td><td></td></tr><tr><td><code>net-tools</code></td><td>नेटवर्क टूल्स (ifconfig, netstat आदि)</td><td></td></tr><tr><td><code>ufw</code></td><td>आसान और बढ़िया फ़ायरवॉल</td><td></td></tr><tr><td><code>fail2ban</code></td><td>ब्रूट-फ़ोर्स अटैक रोकना</td><td></td></tr><tr><td><code>neofetch</code></td><td>सिस्टम जानकारी सुंदर तरीके से दिखाना</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-Non-root-user-banayein">3.2 Non-root user banayein</h3><h4 id="Root-ka-direct-use-kyun-na-karein">Root ka direct use kyun na karein?</h4><p>Root user ke paas bohot zyada permissions hote hain, ek chhoti si galti se <code>rm -rf /</code> sab khatam ho sakta hai. Daily tasks ke liye ek normal user use karna chahiye, aur jab admin wali permissions ki zaroorat ho, tabhi <code>sudo</code> ka use karein.</p><blockquote><p>Lobster (openclaw) toh ek monster hai, isko root access kaise de sakte hain?</p></blockquote><h4 id="User-banayein">User banayein</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>System aapse password aur kuch aur details set karne ko kahega:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Sudo-permissions-dein">Sudo permissions dein</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Check kar lein:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Agar output <code>root</code> aata hai, toh iska matlab sudo successfully configure ho gaya hai.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Pro Tip</strong></p><p><code>exit</code> type karke aap wapas root user mein switch kar sakte hain. Aage ke setup steps hum root use karke complete karenge, aur jab sab kuch ho jaye, tab wapas normal user par switch kar lenge.</p></blockquote><hr><h3 id="3-3-SSH-Key-login-setup-karein">3.3 SSH Key login setup karein</h3><h4 id="Key-authentication-vs-Password-authentication">Key authentication vs Password authentication</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Key authentication password se kaafi zyada secure hota hai:</p><ul><li>Passwords ko brute-force kiya ja sakta hai, keys ko lagbhag nahi</li><li>Baar-baar password daalne ki zaroorat nahi, kaafi convenient hai</li><li>Agar password leak bhi ho jaye, toh bhi private key ke bina login nahi hoga</li></ul><h4 id="Step-1-Local-par-key-pair-generate-karein">Step 1: Local par key pair generate karein</h4><p><strong>अपने अपने कंप्यूटर</strong> (सर्वर नहीं) पर ये रन करो:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>ये प्रॉम्प्ट आएगा:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>बस Enter मारकर डिफ़ॉल्ट पाथ इस्तेमाल कर लो। हमने यहाँ ./ittinker इस्तेमाल किया है, मतलब फ़ाइल तुम्हारी मौजूदा डायरेक्टरी में ittinker नाम से सेव हो जाएगी।</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>तुम चाहो तो की के लिए पासवर्ड सेट कर सकते हो (एक एक्स्ट्रा लेयर सिक्योरिटी के लिए), या फिर सीधा Enter मारकर इसे खाली छोड़ सकते हो।</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>जनरेट हो जाने के बाद, तुम्हें <code>~/.ssh/</code> डायरेक्टरी में दो फ़ाइलें दिखेंगी (नीचे डिफ़ॉल्ट नाम दिए हैं, अगर आगे तुमने सीधा Enter मारा तो ऐसे ही बनेंगी):</p><ul><li><code>id_ed25519</code>: <strong>प्राइवेट की</strong>, इसे किसी भी कीमत पर लीक नहीं करना!</li><li><code>id_ed25519.pub</code>: <strong>पब्लिक की</strong>, इसे सर्वर पर अपलोड करना है</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> फ़िलहाल सबसे ज़्यादा रेकमेंडेड अल्गोरिदम है, ये पुराने RSA से ज़्यादा सिक्योर है और इसकी की भी छोटी होती है। अगर तुम्हारा सिस्टम बहुत पुराना है और इसे सपोर्ट नहीं करता, तो तुम <code>ssh-keygen -t rsa -b 4096</code> का इस्तेमाल कर सकते हो।</p></blockquote><blockquote><p>एक छोटी सी बात, ed25519 से बनी की काफी छोटी होती है, जबकि RSA की फ़ाइल काफी बड़ी होती है। मैंने AI से पूछा तब पता चला, साइज़ से कोई मतलब नहीं है, ये अल्गोरिदम पर निर्भर करता है।</p></blockquote><h4 id="स्टेप-दो-पब्लिक-की-को-सर्वर-पर-अपलोड-करो">स्टेप दो: पब्लिक की को सर्वर पर अपलोड करो</h4><p><strong>तरीका A: ssh-copy-id का इस्तेमाल (रेकमेंडेड)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>पासवर्ड डालते ही, तुम्हारी पब्लिक की अपने-आप सर्वर पर कॉपी हो जाएगी।</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>तरीका B: मैन्युअली कॉपी करना</strong></p><p>अगर <code>ssh-copy-id</code> काम नहीं कर रहा है, तो आप इसे मैन्युअली भी कर सकते हैं:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>आउटपुट में जो कंटेंट मिलेगा उसे कॉपी कर लें (एक लंबा टेक्स्ट जो <code>ssh-ed25519</code> से शुरू होता है)।</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>परमिशन बहुत मायने रखती है!</strong></p><p>SSH फ़ाइल परमिशन को लेकर काफी स्ट्रिक्ट होता है:</p><ul><li><code>.ssh</code> डायरेक्टरी: 700 (सिर्फ यूजर ही एक्सेस कर सकता है)</li><li><code>authorized_keys</code> फ़ाइल: 600 (सिर्फ यूजर ही पढ़ और लिख सकता है)</li></ul><p>अगर परमिशन गलत हुए, तो SSH की लॉगिन करने से मना कर देगा।</p></blockquote><h4 id="स्टेप-3-की-लॉगिन-टेस्ट-करना">स्टेप 3: की लॉगिन टेस्ट करना</h4><p><strong>एक नया टर्मिनल विंडो खोलें</strong> (पुराना विंडो बंद मत करना, अगर कॉन्फ़िग में कुछ गलती हो जाए तो पछाड़ लेने के लिए), और की लॉगिन टेस्ट करें:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>अगर बिना पासवर्ड डाले लॉगिन हो जाता है, तो समझ लो आपकी की सफलतापूर्वक कॉन्फ़िगर हो गई है! 🎉</p><p>(अगर आपने प्राइवेट की पर कोई passphrase सेट किया है, तो वह प्राइवेट की का पासवर्ड डालने के लिए कहेगा, यह बिल्कुल नॉर्मल है)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>यहाँ हमने एक -i पैरामीटर जोड़ा है, क्योंकि इस की को हमने डिफ़ॉल्ट पाथ पर नहीं, बल्कि मौजूदा पाथ में रखा है। अगर हम इसे स्पेसिफाई नहीं करेंगे, तो सिस्टम डिफ़ॉल्ट की का इस्तेमाल करेगा।</p></blockquote><hr><h3 id="3-4-SSH-सुरक्षा-हार्डनिंग-Hardening">3.4 SSH सुरक्षा हार्डनिंग (Hardening)</h3><p>अब जबकि की लॉगिन काम करने लगा है, तो चलिए SSH को और सुरक्षित करते हैं:</p><ol><li>डिफ़ॉल्ट पोर्ट बदलें (ताकि स्कैन होने से बच सकें)</li><li>पासवर्ड लॉगिन डिसेबल करें</li><li>root का डायरेक्ट लॉगिन बंद करें</li></ol><h4 id="SSH-कॉन्फ़िग-फ़ाइल-एडिट-करना">SSH कॉन्फ़िग फ़ाइल एडिट करना</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>नीचे दिए गए सेटिंग्स को ढूँढकर उन्हें मॉडिफ़ाई कर लें (कुछ कॉमेंट आउट हो सकते हैं, तो आगे लगा <code>#</code> हटा दें):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>फ़ाइल सेव करके बाहर निकल जाएँ (<code>ctrl + o</code>)।</p><blockquote><p>Nano में सेव करने के लिए ctrl + o दबाएँ, यह फ़ाइल का नाम पूछेगा तो बस एंटर दबा दें, और बाहर निकलने के लिए ctrl + x दबाएँ।</p></blockquote><h4 id="SSH-सर्विस-रीस्टार्ट-करना">SSH सर्विस रीस्टार्ट करना</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>ज़रूरी चेतावनी!</strong></p><p><strong>मौजूदा टर्मिनल विंडो बंद मत करना!</strong> पहले एक नई विंडो खोलकर टेस्ट कर लें कि नई सेटिंग्स से लॉगिन हो पा रहा है या नहीं:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>अगर लॉगिन हो जाता है, तभी पुरानी विंडो बंद करें। अगर लॉगिन नहीं हो पा रहा है, तो आप पुरानी विंडो से ही कॉन्फ़िग ठीक कर सकते हैं।</p></blockquote><blockquote><p>अगर आपने लाइटवेट सर्वर लिया है, तो ज़्यादातर इस पोर्ट को बदला नहीं जा सकता, जबकि पारंपरिक ECS में इसे मॉडिफ़ाई किया जा सकता है, इसलिए इस बात का ध्यान रखें।</p></blockquote><hr><h3 id="3-5-UFW-फ़ायरवॉल-सेटअप-करना">3.5 UFW फ़ायरवॉल सेटअप करना</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) Ubuntu का डिफ़ॉल्ट फ़ायरवॉल टूल है, इसका सेटअप बहुत आसान है लेकिन यह काफ़ी पावरफुल है।</p><h4 id="बेसिक-सेटअप">बेसिक सेटअप</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="फ़ायरवॉल-चालू-करना">फ़ायरवॉल चालू करना</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>यह प्रॉम्प्ट करेगा:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>कन्फ़र्म करने के लिए <code>y</code> टाइप करें।</p><h4 id="स्टेटस-चेक-करना">स्टेटस चेक करना</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 मेरी टाइपिंग की गलती थी, आप लोग अपनी实际情况 के हिसाब से ही सेट कर लेना</p></blockquote><p>आउटपुट कुछ ऐसा आएगा:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="कमांड्स-की-चीटशीट">कमांड्स की चीटशीट</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-BBR-एक्सेलेरेशन-चालू-करना">3.6 BBR एक्सेलेरेशन चालू करना</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) Google द्वारा बनाया गया एक TCP कंजेशन कंट्रोल एल्गोरिदम है, जो आपके नेटवर्क की परफॉरमेंस काफी बेहतर कर देता है।</p><h4 id="एक-क्लिक-में-चालू-करें">एक क्लिक में चालू करें</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="चालू-हुआ-या-नहीं-उसे-वेरिफाई-करें">चालू हुआ या नहीं, उसे वेरिफाई करें</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>आउटपुट कुछ ऐसा होना चाहिए:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>आउटपुट कुछ ऐसा आएगा:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>BBR का असर</strong></p><p>BBR चालू करने के बाद, खासकर तब जब नेटवर्क अस्थिर हो या लेटेंसी बहुत ज्यादा हो, आपको साफ महसूस होगा कि:</p><ul><li>डाउनलोड स्पीड तेज़ हो गई है</li><li>SSH ऑपरेशन्स ज्यादा स्मूद हो गए हैं</li><li>वेबपेज जल्दी लोड हो रहे हैं</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-ब्रूट-फोर्स-अटैक-रोकने-के-लिए-fail2ban-सेटअप-करना">3.7 ब्रूट-फोर्स अटैक रोकने के लिए fail2ban सेटअप करना</h3><p>fail2ban आपके लॉग्स पर नज़र रखता है, और जिन IP से बार-बार लॉगिन फेल होता है, उन्हें अपने आप ब्लॉक कर देता है।</p><h4 id="बेसिक-कॉन्फ़िगरेशन">बेसिक कॉन्फ़िगरेशन</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p><code>[sshd]</code> सेक्शन ढूँढ़ें, और नीचे दी गई कॉन्फ़िगरेशन सेट करें:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="सर्विस-शुरू-करना">सर्विस शुरू करना</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="स्टेटस-चेक-करना-2">स्टेटस चेक करना</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>आउटपुट कुछ ऐसा दिखेगा:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="कॉमन-कमांड्स">कॉमन कमांड्स</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-वैकल्पिक-SSH-Config-से-कई-सर्वर्स-को-मैनेज-करना">3.8 [वैकल्पिक] SSH Config से कई सर्वर्स को मैनेज करना</h3><p>अगर आपके पास कई सर्वर्स हैं, तो हर बार <code>ssh -p 22000 user@ip</code> टाइप करना काफी पेंच है। इसे आसान बनाने के लिए आप SSH Config का इस्तेमाल कर सकते हैं।</p><h4 id="कॉन्फ़िग-फ़ाइल">कॉन्फ़िग फ़ाइल</h4><p><strong>अपने लोकल कंप्यूटर</strong> पर <code>~/.ssh/config</code> एडिट करें:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>कॉन्फ़िगरेशन ऐड करें:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="इस्तेमाल-कैसे-करें">इस्तेमाल कैसे करें</h4><p>अब आप सीधे एलियास (alias) से कनेक्ट कर सकते हैं:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>अब IP, पोर्ट और यूज़रनेम याद रखने का झंझट खत्म!</p><hr><h3 id="3-9-वैकल्पिक-सिर्फ़-Cloudflare-का-एक्सेस-देना">3.9 [वैकल्पिक] सिर्फ़ Cloudflare का एक्सेस देना</h3><p>अगर आपकी वेबसाइट पूरी तरह से Cloudflare के पीछे है, तो आप सेट कर सकते हैं कि 80/443 पोर्ट्स पर सिर्फ़ Cloudflare के IPs का ही एक्सेस हो, इससे सिक्योरिटी बढ़ जाएगी।</p><blockquote><p>⚠️ ध्यान दें: इस कॉन्फ़िगरेशन के लिए ज़रूरी है कि आपका डोमेन पहले से ही Cloudflare CDN से कनेक्ट हो।</p></blockquote><h4 id="ऑटो-कॉन्फ़िग-स्क्रिप्ट">ऑटो-कॉन्फ़िग स्क्रिप्ट</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>यह स्क्रिप्ट ये करेगी:</p><ol><li>Cloudflare ki official site se latest IP ranges lo</li><li>UFW rules add karo, taaki sirf inhi IPs ko 80/443 access mile</li><li>UFW ko dobara reload karo</li></ol><h4 id="Scheduled-Update-Set-Karein">Scheduled Update Set Karein</h4><p>Cloudflare ke IP ranges kabhi badh bhi sakte hain, isliye har hafte automatic update set kar lo:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Timezone-Set-Karein">3.10 Timezone Set Karein</h3><p>Default timezone shayad UTC ho, apne local timezone mein set karo taaki logs check karna aasaan ho:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Optional-Automatic-Security-Updates-Configure-Karein">3.11 [Optional] Automatic Security Updates Configure Karein</h3><p>System ko khud hi security patches install karne do, taaki baar-baar manually karna na pade:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Automatic updates enable karne ke liye “Yes” select karo.</p><blockquote><p>💡 Yeh feature <strong>security updates</strong> toh khud install kar deta hai, lekin kisi naye major version mein upgrade nahi karta, isliye kaafi safe hai.</p></blockquote><hr><h2 id="4-Summary">4. Summary</h2><h3 id="Initialization-Checklist">Initialization Checklist</h3><p>Upar ki saari configuration complete karne ke baad, is checklist se ek baar check kar lo:</p><table><thead><tr><th>जाँच का मद</th><th>कमांड</th><th>अपेक्षित रिज़ल्ट</th></tr></thead><tbody><tr><td>सिस्टम अपडेट है</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>कोई अपग्रेड के लिए पैकेज नहीं</td></tr><tr><td>साधारण यूज़र sudo कर सकता है</td><td><code>sudo whoami</code></td><td>आउटपुट <code>root</code></td></tr><tr><td>की-बेस्ड लॉगिन काम कर रहा है</td><td><code>ssh yourname@ip -p port</code></td><td>बिना पासवर्ड लॉगिन</td></tr><tr><td>पासवर्ड लॉगिन बंद है</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH पोर्ट बदल दिया गया है</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>आपके द्वारा सेट किया गया पोर्ट</td></tr><tr><td>फ़ायरवॉल चालू है</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR ऑन है</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban चल रहा है</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>टाइमज़ोन सेट है</td><td><code>timedatectl</code></td><td>Asia/Shanghai या आपका टाइमज़ोन</td></tr><tr><td>लोकल SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>सर्वर उपनाम कॉन्फ़िगर है</td></tr></tbody></table><h3 id="ज़रूरी-फ़ाइलों-का-लोकेशन">ज़रूरी फ़ाइलों का लोकेशन</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="सिक्योरिटी-की-बेस्ट-प्रैक्टिस">सिक्योरिटी की बेस्ट प्रैक्टिस</h3><ol><li><strong>सिस्टम को समय-समय पर अपडेट करते रहें</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>लॉगिन लॉग्स समय-समय पर चेक करें</strong>: <code>lastb</code> (फेल्ड लॉगिन), <code>last</code> (सक्सेसफुल लॉगिन)</li><li><strong>fail2ban की बैनिंग पर हमेशा नज़र रखें</strong></li><li><strong>ज़रूरी कॉन्फ़िग फ़ाइलों को बदलने से पहले बैकअप ज़रूर लें</strong></li></ol><hr><h2 id="5-ट्रबलशूटिंग-लॉग">5. ट्रबलशूटिंग लॉग</h2><h3 id="Q1-की-बेस्ड-लॉगिन-फेल-हो-रहा-है-और-बार-बार-पासवर्ड-माँग-रहा-है">Q1: की-बेस्ड लॉगिन फेल हो रहा है, और बार-बार पासवर्ड माँग रहा है?</h3><p><strong>संभावित कारण:</strong></p><ol><li><p><strong>अनुमति (Permission) की दिक्कत</strong> (सबसे आम कारण)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Public Key सही से कॉपी नहीं हुआ</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux का रुकावट आना</strong> (CentOS/RHEL सिस्टम में)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-पोर्ट-बदलने-के-बाद-कनेक्ट-नहीं-हो-पा-रहे">Q2: पोर्ट बदलने के बाद कनेक्ट नहीं हो पा रहे?</h3><p><strong>ट्रबलशूटिंग के स्टेप्स:</strong></p><ol><li><p>पक्का करें कि नया पोर्ट फायरवॉल में ओपन है:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>सुनिश्चित करें कि SSH कॉन्फ़िगरेशन सही है:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>चेक करें कि SSH सर्विस रन कर रही है:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>अगर बिल्कुल कनेक्ट नहीं हो रहे, तो अपने क्लाउड प्रोवाइडर के VNC/कंसोल का इस्तेमाल करके लॉगिन करें और ठीक करें।</p></li></ol><h3 id="Q2-5-पोर्ट-बदलना-बिल्कुल-असर-नहीं-कर-रहा-क्लाउड-प्रोवाइडर-के-लाइटवेट-सर्वर-में">Q2.5: पोर्ट बदलना बिल्कुल असर नहीं कर रहा? (क्लाउड प्रोवाइडर के लाइटवेट सर्वर में)</h3><p><strong>लक्षण</strong>: आपने <code>/etc/ssh/sshd_config</code> बदल दिया, सर्विस रीस्टार्ट करने के बाद भी पोर्ट 22 अब भी चालू है और नया पोर्ट काम नहीं कर रहा।</p><p><strong>डायग्नोसिस का तरीका</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>अगर आउटपुट कुछ ऐसा आता है:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>इसका मतलब है कि पोर्ट 22 को <code>init</code> (PID 1) सुन रहा है, न कि <code>sshd</code> प्रोसेस।</p><p><strong>वजह</strong>: कुछ क्लाउड प्रोवाइडर्स के ‘Light Application Server’ या ‘Container Instance’ का SSH पूरी तरह से <strong>प्लेटफ़ॉर्म लेयर द्वारा प्रॉक्सी</strong> किया जाता है, इसलिए आपके सर्वर के अंदर की sshd कॉन्फ़िगरेशन का कोई असर नहीं पड़ता।</p><p><strong>समाधान</strong>:</p><table><thead><tr><th>इंस्टेंस टाइप</th><th>SSH पोर्ट बदलने का तरीका</th></tr></thead><tbody><tr><td>पारंपरिक ECS</td><td>sshd_config में बदलाव करें ✅</td></tr><tr><td>लाइटवेट सर्वर</td><td>शायद क्लाउड कंसोल से बदलना पड़े, या शायद यह सपोर्ट ही न करे</td></tr><tr><td>कंटेनर इंस्टेंस</td><td>आमतौर पर बदलने का सपोर्ट नहीं होता</td></tr></tbody></table><p>अगर आपका इंस्टेंस पोर्ट बदलने का सपोर्ट नहीं करता, तो <strong>बाकी सिक्योरिटी उपाय और भी ज़्यादा ज़रूरी हो जाते हैं</strong>:</p><ul><li>✅ एक नॉर्मल यूज़र बनाएं + root लॉगिन डिसेबल करें</li><li>✅ SSH की (key) से लॉगिन + पासवर्ड लॉगिन डिसेबल करें</li><li>✅ ब्रूट-फ़ोर्स अटैक रोकने के लिए fail2ban इस्तेमाल करें</li></ul><p>अगर आपने इन सब उपायों को ठीक से लागू कर लिया, तो आपकी सिक्योरिटी फिर भी काफ़ी बढ़िया रहेगी।</p><h3 id="Q3-fail2ban-ने-मुझे-ही-ब्लॉक-कर-दिया">Q3: fail2ban ने मुझे ही ब्लॉक कर दिया?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-UFW-चालू-करने-के-बाद-वेबसाइट-एक्सेस-नहीं-हो-रही">Q4: UFW चालू करने के बाद वेबसाइट एक्सेस नहीं हो रही?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-कमांड-रन-करने-पर-sudo-नहीं-मिल-रहा">Q5: कमांड रन करने पर sudo नहीं मिल रहा?</h3><p>Debian के मिनिमल इंस्टॉलेशन में sudo पहले से नहीं होता, इसलिए root के ज़रिए इंस्टॉल करें:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-वन-क्लिक-इनिशियलाइज़ेशन-स्क्रिप्ट-हाथ-बन-जाने-के-बाद-इस्तेमाल-के-लिए">6. वन-क्लिक इनिशियलाइज़ेशन स्क्रिप्ट (हाथ बन जाने के बाद इस्तेमाल के लिए)</h2><p>अगर आप ऊपर बताए गए सभी स्टेप्स से अच्छी तरह वाक़िफ़ हो चुके हैं, तो आप इस स्क्रिप्ट का इस्तेमाल करके चुटकी में इनिशियलाइज़ेशन कर सकते हैं।</p><blockquote><p>⚠️ <strong>ध्यान दें</strong>: स्क्रिप्ट चलाने से पहले, पक्का कर लें कि आपके पास आपकी SSH पब्लिक की तैयार है।</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-ये-सब-करने-के-बाद-सिक्योरिटी-कितनी-बेहतर-हुई">7. ये सब करने के बाद, सिक्योरिटी कितनी बेहतर हुई?</h2><table><thead><tr><th>स्टेप</th><th>क्या किया</th><th>क्यों ज़रूरी है</th></tr></thead><tbody><tr><td>सिस्टम अपडेट</td><td>लेटेस्ट पैच इंस्टॉल किए</td><td>ज्ञात वल्नरेबिलिटी (कमज़ोरियों) को फिक्स करने के लिए</td></tr><tr><td>नया यूज़र बनाना</td><td>अब सीधे root का इस्तेमाल नहीं करेंगे</td><td>गलती से कुछ गड़बड़ होने का रिस्क कम हुआ</td></tr><tr><td>SSH की</td><td>पासवर्ड की जगह की का इस्तेमाल</td><td>इसे ब्रूट-फ़ोर्स से हैक नहीं किया जा सकता</td></tr><tr><td>पोर्ट बदलना</td><td>डिफ़ॉल्ट पोर्ट 22 से बच गए</td><td>स्कैन होने के चांस कम हो गए</td></tr><tr><td>पासवर्ड डिसेबल करना</td><td>अब सिर्फ़ की से ही लॉगिन होगा</td><td>पासवर्ड अटैक का खतरा पूरी तरह खत्म</td></tr><tr><td>root डिसेबल करना</td><td>root अब सीधे लॉगिन नहीं कर सकता</td><td>हैकर्स के लिए अटैक करना और भी मुश्किल</td></tr><tr><td>UFW फ़ायरवॉल</td><td>सिर्फ़ ज़रूरी पोर्ट्स ही खुले</td><td>अटैक सरफ़ेस यानी गड़बड़ होने का एरिया कम हुआ</td></tr><tr><td>BBR एक्सिलरेशन</td><td>नेटवर्क परफ़ॉरमेंस ऑप्टिमाइज़ की</td><td>ऐक्सेस स्पीड बेहतर हुई</td></tr><tr><td>fail2ban</td><td>मज़ाकिया/खतरनाक IP को ऑटोमैटिक ब्लॉक करता है</td><td>लगातार होने वाले अटैक्स को रोकने के लिए</td></tr></tbody></table><p>ये सब सेटअप कर लेने के बाद, आपके सर्वर की सिक्योरिटी <strong>90%</strong> VPS से बेहतर हो चुकी है।</p><hr><h2 id="अगले-आर्टिकल-की-झलक">अगले आर्टिकल की झलक</h2><p>अगले भाग में हम <strong>SSH की लॉगिन कॉन्फ़िगरेशन क्विक रेफ़रेंस</strong> पर बात करेंगे, जिसमें हम इन बातों को और डिटेल में देखेंगे:</p><ul><li>अलग-अलग OS में की जनरेट करने का तरीका</li><li>कई की का मैनेजमेंट</li><li>SSH Agent कॉन्फ़िगरेशन</li><li>कुछ आम SSH क्लाइंट सेटिंग्स</li></ul><hr><p><em>इस आर्टिकल को आखिरी बार अपडेट किया गया: जनवरी 2026</em></p><p><em>इंडी डेवलपर टूलबॉक्स सीरीज़, फ़ॉलो करने के लिए आपका स्वागत है!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/hi/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/hi/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>नए VPS को सुरक्षित करने के लिए पहले घंटे में क्या करना है: SSH कुंजी लॉगिन, गैर-डिफ़ॉल्ट पोर्ट, सामान्य उपयोगकर्ता, फ़ायरवॉल, fail2ban, BBR त्वरण।</summary>
    <title>VPS मिलते ही पहला घंटा: नंगे सर्वर से सुरक्षित और इस्तेमाल-लायक बनने तक का पूरा इनिशियलाइज़ेशन गाइड (अपने OpenClaw को और सुरक्षित बनाओ)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="インディー開発者ツールボックス" scheme="https://blog.ittinker.com/categories/%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%BC%E9%96%8B%E7%99%BA%E8%80%85%E3%83%84%E3%83%BC%E3%83%AB%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="Linux" scheme="https://blog.ittinker.com/tags/Linux/"/>
    <category term="リモートSSH" scheme="https://blog.ittinker.com/tags/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88SSH/"/>
    <category term="サーバーセキュリティ" scheme="https://blog.ittinker.com/tags/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3/"/>
    <category term="個人開発" scheme="https://blog.ittinker.com/tags/%E5%80%8B%E4%BA%BA%E9%96%8B%E7%99%BA/"/>
    <content>
      <![CDATA[<blockquote><p>買いたての VPS は、まるで鍵のかかっていないドアみたいなもの。世界中のスクリプトキディたちがノックしまくってます。この記事じゃ、そのドアにしっかり鍵をかける方法を案内するよ。君の「ザリガニ」が外に脱走してウロチョロしないようにね。</p></blockquote><h2 id="0、はじめに">0、はじめに</h2><p>VPS を買って、ワクワクしながら IP と root パスワードを受け取った。で、次はどうする？</p><p>多くの人がやりがちなのは：すぐにソフトを入れ始めて、プロジェクトをデプロイしちゃうこと。</p><p><strong>これは危険な習慣だよ。</strong></p><p>君の VPS にはパブリック IP が付いてる。つまり、世界中の誰でも接続を試みることができるってこと。しかもデフォルト設定のままだと：</p><ul><li>ポートは誰でも見える <strong>22</strong> 番が開放っきり</li><li>ユーザー名は誰もが知ってる <strong>root</strong></li><li>君を守っているのはパスワードたった一つ</li></ul><p>毎日、無数の自動化スクリプトが IP 範囲をスキャンして、よくあるパスワードでブルートフォース攻撃を仕掛けてる。君のサーバーは、オンラインになったその瞬間から、すでに攻撃されてるんだ。</p><p>だから、<strong>VPS を手に入れてから最初にやるべきことは、ソフトを入れることじゃなく、セキュリティの初期設定なんだよ</strong>。</p><hr><h2 id="1、目指すゴール">1、目指すゴール</h2><p>この記事の目標は：</p><ul><li>✅ <strong>セキュアなリモートアクセス</strong>を確立：SSH鍵ログイン＋デフォルト以外のポートに変更</li><li>✅ <strong>一般ユーザー</strong>を作成：rootの直接使用を避ける</li><li>✅ <strong>ファイアウォール</strong>を設定：必要なポートだけ開放</li><li>✅ <strong>ネットワーク加速</strong>を有効化：BBRでネットワークを爆速化</li><li>✅ <strong>ブルートフォース攻撃</strong>を防止：fail2banで悪意あるIPを自動でブロック</li></ul><p>ここまで済ませれば、VPSの基盤はバッチリ。あとは安心していろんなサービスをデプロイできるよ。</p><hr><h2 id="2、計画と思考">2、計画と思考</h2><h3 id="なぜこの設定をするの？">なぜこの設定をするの？</h3><p>買いたてのVPSは、引き渡されたばかりのスケルトンの部屋みたいなもの。</p><table><thead><tr><th>デフォルト状態</th><th>リスク</th><th>僕たちの解決策</th></tr></thead><tbody><tr><td>rootユーザーで直接ログイン</td><td>権限が強すぎて誤操作のリスクが高い</td><td>一般ユーザー作成 ＋ sudo</td></tr><tr><td>パスワードログイン</td><td>ブルートフォース攻撃の標的に</td><td>SSH鍵ログイン</td></tr><tr><td>デフォルトの22番ポート</td><td>スキャナーに真っ先に狙われる</td><td>非標準ポートに変更</td></tr><tr><td>ファイアウォール無効</td><td>全ポートが外部に公開される</td><td>UFWで必要なポートだけ許可</td></tr><tr><td>ネイティブネットワーク</td><td>パケロス率高、レイテンシ大</td><td>BBR輻輳制御アルゴリズム</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="全体の流れ">全体の流れ</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>この順番で作業を進めていこう。各ステップで「なぜこれをするのか」も解説していくよ。</p><h2 id="3、作業手順">3、作業手順</h2><h3 id="3-1-初回ログインとシステム更新">3.1 初回ログインとシステム更新</h3><h4 id="サーバーIPを確認">サーバーIPを確認</h4><p>VPSを契約すると、プロバイダーから次の情報が届くよ：</p><ul><li><strong>IP アドレス</strong>：たとえば <code>192.168.1.100</code></li><li><strong>ポート</strong>：通常は <code>22</code>（プロバイダによっては別のポートに変更されていることもあります）</li><li><strong>ユーザー名</strong>：通常は <code>root</code></li><li><strong>パスワード</strong>：ランダムに生成された文字列</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="SSH-接続">SSH 接続</h4><p><strong>Mac / Linux ユーザー</strong>：ターミナルを開いて、そのまま以下を入力：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows ユーザー</strong>：</p><ul><li>Windows 10/11 には OpenSSH が標準で入っているので、PowerShell や CMD でそのまま上記のコマンドが使えます</li><li>あるいは <a href="https://termius.com/">Termius</a> や <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> などのツールを使うのもアリです</li></ul><p>初めて接続すると、フィンガープリントの確認プロンプトが出ます：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>これは「このマシンは知らないけど、本当に接続していい？」と聞いてきてるんです。</p><p><code>yes</code> と入力して Enter。続いてパスワードを入力します（<strong>入力中は何も表示されませんが、これは正常なセキュリティ仕様です</strong>）、Enter を押します。</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>こんな感じの表示が出たら、ログイン成功です：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>なぜフィンガープリントを確認するの？</strong></p><p>これは「中間者攻撃（Man-in-the-Middle Attack）」を防ぐためです。初回接続時にサーバーのフィンガープリントを記録しておき、以降の接続でフィンガープリントが変わっていたら、誰かがあなたのサーバーを装っている可能性があります。</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="まずはサーバーの様子を知ろう">まずはサーバーの様子を知ろう</h4><p>ログインできたら、まずはこのマシンの基本情報をチェックしておきましょう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>この情報は後でトラブルシューティングするときに役立つので、頭の片隅に置いておいてくださいね。</p><h4 id="システムをアップデートする">システムをアップデートする</h4><p>サーバーの情報を確認したら、最初にやるべきことはシステムのアップデートです。新しいサーバーのOSイメージは数ヶ月前のものかもしれないし、その間にセキュリティパッチがリリースされている可能性がありますからね：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>パラメーターの解説：</strong></p><ul><li><code>apt update</code>：パッケージインデックスを更新</li><li><code>apt full-upgrade</code>：カーネルを含むすべてのソフトをアップグレード</li><li><code>-y</code>：自動で「yes」と答えるので、手動で入力する必要なし</li><li><code>apt autoremove</code>：不要になった依存パッケージを削除</li><li><code>apt autoclean</code>：ダウンロードしたパッケージのキャッシュをクリーンアップ</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ このステップは更新量によっては数分かかることがあります。途中で確認を求められることもありますが、基本的には画面の指示に従えば大丈夫ですよ。</p></blockquote><h4 id="再起動が必要か確認する">再起動が必要か確認する</h4><p>カーネルのアップデート後は、反映のために再起動が必要になることがよくあります：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>もし再起動が必要と表示されたら：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>再起動後は、再度 SSH 接続し直す必要があります。</p><h4 id="よく使うツールをインストールする">よく使うツールをインストールする</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>これらのツールは何に使うもの？：</strong></p><table><thead><tr><th>ツール</th><th>用途</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>一般ユーザーに管理者コマンドを実行させる</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>ファイルをダウンロード</td><td></td></tr><tr><td><code>git</code></td><td>バージョン管理</td><td></td></tr><tr><td><code>vim</code></td><td>テキストエディタ</td><td></td></tr><tr><td><code>htop</code></td><td>見やすいプロセスモニター</td><td></td></tr><tr><td><code>tree</code></td><td>ディレクトリ構造をツリー表示</td><td></td></tr><tr><td><code>net-tools</code></td><td>ネットワークユーティリティ（ifconfig、netstat など）</td><td></td></tr><tr><td><code>ufw</code></td><td>シンプルで使いやすいファイアウォール</td><td></td></tr><tr><td><code>fail2ban</code></td><td>ブルートフォース攻撃対策</td><td></td></tr><tr><td><code>neofetch</code></td><td>システム情報をオシャレに表示</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-root以外のユーザーを作成する">3.2 root以外のユーザーを作成する</h3><h4 id="なぜ-root-で直接作業しないのか？">なぜ root で直接作業しないのか？</h4><p>root ユーザーは権限が強すぎるので、ちょっと手が滑って <code>rm -rf /</code> と打っただけで全部吹き飛びます。普段の作業は一般ユーザーで行い、管理者権限が必要なときだけ <code>sudo</code> を使うのが基本ですよ。</p><blockquote><p>龙虾（openclaw）はモンスターみたいなものだし、root を渡すなんて恐れ多いですよね？</p></blockquote><h4 id="ユーザーを作成する">ユーザーを作成する</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>パスワードや各種情報の入力を求められるので、画面の指示に従って設定します：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="sudo-権限を付与する">sudo 権限を付与する</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>確認してみよう：</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>出力が <code>root</code> になっていれば、sudo の設定はバッチリ成功です。<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>ちょっとしたコツ</strong></p><p><code>exit</code> と入力すれば root ユーザーに戻れます。この後の設定作業は引き続き root で進めて、すべて終わったら一般ユーザーに切り替えましょう。</p></blockquote><hr><h3 id="3-3-SSH-鍵認証を設定する">3.3 SSH 鍵認証を設定する</h3><h4 id="鍵認証-vs-パスワード認証">鍵認証 vs パスワード認証</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>鍵認証はパスワード認証よりずっと安全です：</p><ul><li>パスワードは総当たり攻撃で破られるリスクがありますが、鍵ならほぼ不可能です</li><li>毎回パスワードを入力しなくていいので、圧倒的にラクです</li><li>仮にパスワードが漏洩しても、秘密鍵がなければログインできません</li></ul><h4 id="ステップ1：ローカルで鍵ペアを生成する">ステップ1：ローカルで鍵ペアを生成する</h4><p><strong>自分のPC</strong>（サーバーじゃないよ）で実行しよう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>こんな感じで聞かれる：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>そのまま Enter を押してデフォルトのパスで OK。ここでは <code>./ittinker</code> を使ってるけど、要するに現在のディレクトリに <code>ittinker</code> って名前で保存するってこと。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>パスフレーズを設定してワンポイント保護を追加してもいいし、そのまま Enter で空欄のままでも大丈夫。</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>生成が完了したら、<code>~/.ssh/</code> ディレクトリに2つのファイルができてるはず（以下はデフォルトのファイル名。先ほど Enter を押した場合はこうなるよ）：</p><ul><li><code>id_ed25519</code>：<strong>秘密鍵</strong>。絶対に漏らしちゃダメ！</li><li><code>id_ed25519.pub</code>：<strong>公開鍵</strong>。これはサーバーにアップロードする</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> は現時点で推奨されるアルゴリズム。従来の RSA より安全で、鍵も短い。もしお使いのシステムが古くて対応していない場合は、<code>ssh-keygen -t rsa -b 4096</code> を使えば OK。</p></blockquote><blockquote><p>細かい話だけど、ed25519 で生成した鍵は結構小さい。一方 RSA はファイルがでかい。AI に聞いてみたら、サイズは関係なくてアルゴリズムの違いらしい。</p></blockquote><h4 id="ステップ2：公開鍵をサーバーにアップロードする">ステップ2：公開鍵をサーバーにアップロードする</h4><p><strong>方法 A：ssh-copy-id を使う（おすすめ）</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>パスワードを入力すれば、公開鍵が自動でサーバーにコピーされるよ。</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>方法 B：手動でコピーする</strong></p><p>もし <code>ssh-copy-id</code> が使えない場合は、手動でやりましょう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>出力された内容（<code>ssh-ed25519</code> から始まる長い文字列）をコピーします。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>権限は超重要！</strong></p><p>SSH はファイルの権限に厳格です：</p><ul><li><code>.ssh</code> ディレクトリ：700（ユーザー本人のみアクセス可能）</li><li><code>authorized_keys</code> ファイル：600（ユーザー本人のみ読み書き可能）</li></ul><p>権限が間違っていると、SSH は鍵を使ったログインを拒否します。</p></blockquote><h4 id="ステップ3：鍵ログインをテストする">ステップ3：鍵ログインをテストする</h4><p><strong>新しいターミナルウィンドウを開き</strong>（元のウィンドウは念のため閉じずに残しておきましょう。設定を間違えた時の保険になります）、鍵ログインをテストしてみましょう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>パスワードを入力せずにログインできたら、鍵の設定は成功です！🎉</p><p>（秘密鍵にパスフレーズを設定している場合は、秘密鍵のパスワード入力を求められますが、これは正常な動作です）<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>ここで -i パラメータを追加しているのは、今回の鍵がデフォルトのパスではなく現在のパスに置かれているためです。指定しないと、システムはデフォルトの鍵を使おうとします。</p></blockquote><hr><h3 id="3-4-SSHのセキュリティ強化">3.4 SSHのセキュリティ強化</h3><p>鍵ログインが使えるようになったので、次は SSH をさらに堅牢にしていきましょう：</p><ol><li>デフォルトポートの変更（スキャン対策）</li><li>パスワードログインの無効化</li><li>root の直接ログイン禁止</li></ol><h4 id="SSH設定ファイルを編集する">SSH設定ファイルを編集する</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>以下の設定を見つけて変更しよう（コメントアウトされている場合は、先頭の <code>#</code> を削除してね）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>保存して終了しよう（<code>ctrl + o</code>）。</p><blockquote><p>Nanoでの保存は ctrl + o。ファイル名を聞かれたらそのまま Enter を押せばOK。終了は ctrl + x だよ。</p></blockquote><h4 id="SSHサービスを再起動する">SSHサービスを再起動する</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>重要な注意点！</strong></p><p><strong>今開いているターミナルは閉じないで！</strong> まずは新しいウィンドウを開いて、新しい設定でログインできるかテストしてみよう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>ログインできたら、古いウィンドウを閉じてOK。もしうまくログインできなくても、古いウィンドウで設定を修正できるから安心してね。</p></blockquote><blockquote><p>もし軽量サーバーを借りているなら、このポートは変更できない可能性が高いよ。従来のECSなら変更できるから、その辺は要注意ね。</p></blockquote><hr><h3 id="3-5-UFWファイアウォールの設定">3.5 UFWファイアウォールの設定</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW（Uncomplicated Firewall）はUbuntuのデフォルトファイアウォールツール。シンプルだけど強力なんだ。</p><h4 id="基本設定">基本設定</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="ファイアウォールを有効にする">ファイアウォールを有効にする</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>こんなプロンプトが出るよ：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p><code>y</code> と入力して確認しよう。</p><h4 id="ステータスの確認">ステータスの確認</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022は私の打ち間違いです。各自の環境に合わせて適宜読み替えてくださいね。</p></blockquote><p>出力はこんな感じ：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="よく使うコマンドチートシート">よく使うコマンドチートシート</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-BBRアクセラレーションを有効にする">3.6 BBRアクセラレーションを有効にする</h3><p>BBR（Bottleneck Bandwidth and Round-trip propagation time）は、Googleが開発したTCP輻輳制御アルゴリズムで、ネットワークパフォーマンスを大幅に向上させることができます。</p><h4 id="ワンクリックで有効化">ワンクリックで有効化</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="有効になったか確認する">有効になったか確認する</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>出力はこうなればOK：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>出力はこんな感じ：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>BBRの効果</strong></p><p>BBRを有効にすると、特にネットワークが不安定だったりレイテンシが高い環境下で、こんな違いをはっきり実感できるはず：</p><ul><li>ダウンロード速度が速くなる</li><li>SSH操作がもっさりしなくなる</li><li>Webページの読み込みが速くなる</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-fail2banでブルートフォース攻撃を防ぐ設定">3.7 fail2banでブルートフォース攻撃を防ぐ設定</h3><p>fail2banはログを監視し、何度もログインに失敗したIPを見つけると自動でアクセスをブロックしてくれます。</p><h4 id="基本設定-2">基本設定</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p><code>[sshd]</code> の部分を見つけて、以下の設定になっているか確認してください：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="サービスを起動">サービスを起動</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="状態を確認">状態を確認</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>出力はこんな感じになります：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="よく使うコマンド">よく使うコマンド</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-オプション-SSH-Config-で複数サーバーを管理">3.8 [オプション] SSH Config で複数サーバーを管理</h3><p>サーバーが複数あると、毎回 <code>ssh -p 22000 user@ip</code> を打つのが面倒ですよね。そんなときは SSH Config を使ってスッキリさせましょう。</p><h4 id="設定ファイル">設定ファイル</h4><p><strong>自分のローカルPC</strong> で <code>~/.ssh/config</code> を編集します：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>設定を追加します：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="使い方">使い方</h4><p>これでエイリアスを使って直接接続できます：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>IP、ポート、ユーザー名を覚えておく手間がなくなりますよ！</p><hr><h3 id="3-9-オプション-Cloudflare-からのアクセスのみ許可">3.9 [オプション] Cloudflare からのアクセスのみ許可</h3><p>もしサイトが完全に Cloudflare の背後で動いているなら、80/443 ポートへのアクセスを Cloudflare の IP だけに限定して、セキュリティを強化できます。</p><blockquote><p>⚠️ 注意：この設定を行うには、ドメインがすでに Cloudflare CDN に接続されている必要があります。</p></blockquote><h4 id="自動設定スクリプト">自動設定スクリプト</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>このスクリプトがやること：</p><ol><li>Cloudflare の公式から最新の IP レンジを取得する</li><li>UFW のルールを追加して、これらの IP だけに 80/443 ポートへのアクセスを許可する</li><li>UFW をリロードする</li></ol><h4 id="自動更新をスケジュールする">自動更新をスケジュールする</h4><p>Cloudflare の IP レンジは変わる可能性があるので、毎週自動で更新されるように設定しておこう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-タイムゾーンの設定">3.10 タイムゾーンの設定</h3><p>デフォルトのタイムゾーンは UTC になっているはず。ログを見るときのために、自分のタイムゾーンに変更しておこう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-オプション-自動セキュリティアップデートの設定">3.11 [オプション] 自動セキュリティアップデートの設定</h3><p>システムにセキュリティパッチを自動でインストールさせておけば、いちいち手動で作業する手間が省ける：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>「Yes」を選んで自動更新を有効にしよう。</p><blockquote><p>💡 この機能は<strong>セキュリティアップデート</strong>だけを自動でインストールしてくれる。新しいメジャーバージョンへのアップグレードは行わないから、比較的安全だ。</p></blockquote><hr><h2 id="4-まとめ">4. まとめ</h2><h3 id="初期化チェックリスト">初期化チェックリスト</h3><p>以上の設定が終わったら、このリストで最終チェックしてみよう：</p><table><thead><tr><th>チェック項目</th><th>コマンド</th><th>期待される結果</th></tr></thead><tbody><tr><td>システムは最新か</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>アップグレード可能なパッケージなし</td></tr><tr><td>一般ユーザーで sudo 可能か</td><td><code>sudo whoami</code></td><td><code>root</code> と出力される</td></tr><tr><td>鍵認証ログインは正常か</td><td><code>ssh yourname@ip -p port</code></td><td>パスワードなしでログインできる</td></tr><tr><td>パスワードログインは無効化されているか</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSHポートは変更済みか</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>自分で設定したポート</td></tr><tr><td>ファイアウォールは有効か</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBRは有効か</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2banは稼働中か</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>タイムゾーンは設定済みか</td><td><code>timedatectl</code></td><td>Asia/Shanghai または自分のタイムゾーン</td></tr><tr><td>ローカルの SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>サーバーのエイリアスが設定済み</td></tr></tbody></table><h3 id="主要ファイルの場所">主要ファイルの場所</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="セキュリティのベストプラクティス">セキュリティのベストプラクティス</h3><ol><li><strong>システムを定期的にアップデートする</strong>：<code>apt update &amp;&amp; apt upgrade</code></li><li><strong>ログインログを定期的にチェックする</strong>：<code>lastb</code>（ログイン失敗）、<code>last</code>（ログイン成功）</li><li><strong>fail2banのブロック状況をこまめに確認する</strong></li><li><strong>重要な設定ファイルは変更前に必ずバックアップを取る</strong></li></ol><hr><h2 id="5、トラブルシューティング">5、トラブルシューティング</h2><h3 id="Q1：鍵認証ログインに失敗し、パスワードを求められる？">Q1：鍵認証ログインに失敗し、パスワードを求められる？</h3><p><strong>考えられる原因：</strong></p><ol><li><p><strong>パーミッションの問題</strong>（一番よくあるやつ）</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>公開鍵のコピーがうまくいっていない</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinuxの干渉</strong>（CentOS/RHEL系の場合）</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2：ポートを変えたら繋がらなくなった？">Q2：ポートを変えたら繋がらなくなった？</h3><p><strong>トラブルシューティング手順：</strong></p><ol><li><p>新しいポートがファイアウォールで開放されているか確認：</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>SSHの設定が正しいか確認：</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>SSHサービスがちゃんと動いているか確認：</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>それでも全く繋がらない場合は、クラウド業者のVNC/コンソールからログインして修復しよう。</p></li></ol><h3 id="Q2-5：ポート変更が全然反映されない？（クラウド業者の軽量サーバーの場合）">Q2.5：ポート変更が全然反映されない？（クラウド業者の軽量サーバーの場合）</h3><p><strong>現象</strong>：<code>/etc/ssh/sshd_config</code>を変更してサービスを再起動しても、22番ポートが生き残ったままで、新しいポートが反映されていない。</p><p><strong>診断方法</strong>：</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>もし出力がこんな感じだったら：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>これは、22番ポートをリッスンしているのが <code>init</code>（PID 1）であって、<code>sshd</code> プロセスではないってことだよ。</p><p><strong>原因</strong>：一部のクラウド事業者が提供する「軽量アプリケーションサーバー」や「コンテナインスタンス」では、SSH が<strong>プラットフォームレイヤーでプロキシ</strong>されているため、サーバー内部の sshd 設定が反映されません。</p><p><strong>解決策</strong>：</p><table><thead><tr><th>インスタンスタイプ</th><th>SSH ポートの変更方法</th></tr></thead><tbody><tr><td>従来の ECS</td><td>sshd_config を変更 ✅</td></tr><tr><td>軽量サーバー</td><td>クラウドのコンソールから変更する必要があるか、そもそも対応していない</td></tr><tr><td>コンテナインスタンス</td><td>基本的に変更不可</td></tr></tbody></table><p>お使いのインスタンスでポート変更に対応していない場合は、<strong>他のセキュリティ対策がより重要</strong>になります：</p><ul><li>✅ 一般ユーザーの作成 + root ログインの無効化</li><li>✅ SSH 鍵認証の利用 + パスワードログインの無効化</li><li>✅ fail2ban によるブルートフォース攻撃対策</li></ul><p>これらをしっかりやっておけば、セキュリティレベルは依然として高く保てますよ。</p><h3 id="Q3：fail2ban-で自分をブロックしちゃった？">Q3：fail2ban で自分をブロックしちゃった？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4：UFW-を有効化したらサイトにアクセスできなくなった？">Q4：UFW を有効化したらサイトにアクセスできなくなった？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5：コマンドを実行すると-sudo-が見つからないって出る？">Q5：コマンドを実行すると sudo が見つからないって出る？</h3><p>Debian の最小構成インストールだと sudo が入っていないことがあるので、root でインストールしましょう：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6、ワンクリック初期化スクリプト（慣れてきたら使おう）">6、ワンクリック初期化スクリプト（慣れてきたら使おう）</h2><p>上記の手順にすっかり慣れたら、このスクリプトでサクッと初期化できます。</p><blockquote><p>⚠️ <strong>注意</strong>：スクリプトを実行する前に、SSH 公開鍵の準備ができているか確認しておこうね。</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7、ここまでやると、セキュリティはどれくらい上がった？">7、ここまでやると、セキュリティはどれくらい上がった？</h2><table><thead><tr><th>手順</th><th>やったこと</th><th>なぜ重要か</th></tr></thead><tbody><tr><td>システム更新</td><td>最新パッチをインストール</td><td>既知の脆弱性を修正</td></tr><tr><td>新規ユーザー作成</td><td>root を直接使わないように</td><td>誤操作リスクを減らす</td></tr><tr><td>SSH 鍵</td><td>パスワードの代わりに鍵を使う</td><td>総当たり攻撃で破られない</td></tr><tr><td>ポート変更</td><td>デフォルトの 22 を避ける</td><td>スキャンで見つかる確率を下げる</td></tr><tr><td>パスワード無効化</td><td>鍵ログインのみ許可</td><td>パスワード攻撃を完全に防ぐ</td></tr><tr><td>root 無効化</td><td>root で直接ログイン不可</td><td>攻撃の難易度を上げる</td></tr><tr><td>UFW ファイアウォール</td><td>必要なポートだけ開放</td><td>攻撃対象領域を減らす</td></tr><tr><td>BBR 加速</td><td>ネットワーク性能を最適化</td><td>アクセス速度を向上</td></tr><tr><td>fail2ban</td><td>悪意ある IP を自動でブロック</td><td>執拗な攻撃を防ぐ</td></tr></tbody></table><p>ここまでやれば、あなたのサーバーのセキュリティは VPS ユーザーの <strong>90%</strong> を超えたことになるよ。</p><hr><h2 id="次回予告">次回予告</h2><p>次回は <strong>SSH 鍵ログイン設定クイックリファレンス</strong> を解説していくよ。こんな内容をもう少し詳しく紹介するね：</p><ul><li>OS 別の鍵生成方法<br>|複数鍵の管理</li><li>SSH Agent の設定</li><li>主要な SSH クライアントの設定</li></ul><hr><p><em>この記事の最終更新：2026年1月</em></p><p><em>独立開発者ツールボックス・シリーズ、ぜひフォローしてね！</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/ja/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/ja/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>新しいVPSは、全世界のスクリプトキッドたちが叩いている、鍵の掛けられていないドアのようです。VPSを手に入れた最初のことは、ソフトウェアをインストールすることではなく、セキュリティの初期化です：SSHキーログイン、デフォルト以外のポート、一般ユーザー、ファイアウォール、fail2ban、BBRアクセラレーション。この記事では、最初の1時間で基礎を固める方法を紹介します。</summary>
    <title>VPS入手後の最初の1時間：裸機から安全・使える状態までの完全初期化ガイド（OpenClawをより安全にしよう）</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="인디 개발자 툴박스" scheme="https://blog.ittinker.com/categories/%EC%9D%B8%EB%94%94-%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%88%B4%EB%B0%95%EC%8A%A4/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="원격 SSH" scheme="https://blog.ittinker.com/tags/%EC%9B%90%EA%B2%A9-SSH/"/>
    <category term="서버 보안" scheme="https://blog.ittinker.com/tags/%EC%84%9C%EB%B2%84-%EB%B3%B4%EC%95%88/"/>
    <category term="인디 개발" scheme="https://blog.ittinker.com/tags/%EC%9D%B8%EB%94%94-%EA%B0%9C%EB%B0%9C/"/>
    <content>
      <![CDATA[<blockquote><p>새로 산 VPS는 자물쇠 없는 현관문이나 다름없어요. 전 세계의 스크립트 키디들이 끊임없이 문을 두드리고 있죠. 이 글에서는 그 문을 확실히 잠그는 방법을 알려드릴게요. 여러분의 openclaw가 함부로 밖으로 나돌아다니지 않도록 말이에요.</p></blockquote><h2 id="0-들어가며">0. 들어가며</h2><p>VPS 한 대를 새로 샀고, 신나서 IP와 root 비밀번호를 받았다면 그다음은 뭘까요?</p><p>많은 분들이 이렇게 하시더라고요: 곧바로 소프트웨어 설치하고 프로젝트 배포를 시작해버리죠.</p><p><strong>이건 아주 위험한 습관이에요.</strong></p><p>여러분의 VPS에는 공인 IP가 달려 있습니다. 즉, 전 세계 누구나 접속을 시도해볼 수 있다는 뜻이죠. 게다가 기본 설정 상태에서는:</p><ul><li>포트는 <strong>22</strong>로 탁 트여 있고</li><li>사용자 이름은 누구나 아는 <strong>root</strong>이며</li><li>남은 건 비밀번호 하나뿐입니다</li></ul><p>매일 수많은 자동화 스크립트가 IP 대역을 스캔하면서 흔한 비밀번호로 무차별 대입 공격을 시도합니다. 서버가 온라인에 올라가는 순간부터 이미 공격받고 있는 거예요.</p><p>그러니까 <strong>VPS를 손에 넣자마자 해야 할 첫 번째 일은 소프트웨어 설치가 아니라 보안 초기화</strong>입니다.</p><hr><h2 id="1-목표">1. 목표</h2><p>이 글의 목표는:</p><ul><li>✅ <strong>안전한 원격 접속 환경 구축</strong>: SSH 키 로그인 + 기본 포트 번호 변경</li><li>✅ <strong>일반 사용자 계정 생성</strong>: root 계정 직접 사용은 피하기</li><li>✅ <strong>방화벽 설정</strong>: 꼭 필요한 포트만 열어두기</li><li>✅ <strong>네트워크 가속 활성화</strong>: BBR로 네트워크 속도 날려버리기</li><li>✅ <strong>무차별 대입 공격(Brute Force) 방지</strong>: fail2ban으로 악성 IP 자동 차단하기</li></ul><p>이 세팅들까지 마치고 나면, 여러분의 VPS는 탄탄한 기반을 갖추게 되어 각종 서비스를 안심하고 마음껏 배포할 수 있어요.</p><hr><h2 id="2-계획-및-고민">2. 계획 및 고민</h2><h3 id="왜-이런-세팅을-해야-할까요">왜 이런 세팅을 해야 할까요?</h3><p>막 구매한 VPS는 입주하기 딱 좋은 상태로 넘겨받은 맨집(?)과 같아요.</p><table><thead><tr><th>기본 상태</th><th>위험</th><th>우리의 해결책</th></tr></thead><tbody><tr><td>root 계정 바로 로그인</td><td>권한 과다, 잘못된 조작 시 치명적</td><td>일반 사용자 생성 + sudo</td></tr><tr><td>비밀번호 로그인</td><td>무차별 대입 공격에 뚫림</td><td>SSH 키 로그인</td></tr><tr><td>기본 22번 포트</td><td>스캐너들의 주요 타겟</td><td>비표준 포트로 변경</td></tr><tr><td>방화벽 꺼짐</td><td>모든 포트가 외부에 노출</td><td>UFW로 필요한 포트만 허용</td></tr><tr><td>기본 네트워크</td><td>패킷 손실률 높음, 지연 큼</td><td>BBR 혼잡 제어 알고리즘</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="전체-흐름">전체 흐름</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>이 순서대로 하나씩 진행해 볼게요. 각 단계마다 왜 이렇게 하는지도 쭉 설명해 드릴게요.</p><h2 id="3-작업-단계">3. 작업 단계</h2><h3 id="3-1-최초-로그인-및-시스템-업데이트">3.1 최초 로그인 및 시스템 업데이트</h3><h4 id="서버-IP-확인">서버 IP 확인</h4><p>VPS를 구매하면, 서비스 제공업체에서 다음 정보들을 보내줄 거예요:</p><ul><li><strong>IP 주소</strong>: 예를 들어 <code>192.168.1.100</code></li><li><strong>포트</strong>: 보통 <code>22</code>이에요 (업체에 따라 다른 포트로 바꾸기도 해요)</li><li><strong>사용자 이름</strong>: 보통 <code>root</code>예요</li><li><strong>비밀번호</strong>: 무작위로 생성된 문자열이에요</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="SSH-접속하기">SSH 접속하기</h4><p><strong>Mac / Linux 사용자</strong>: 터미널을 열고 바로 입력하세요:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows 사용자</strong>:</p><ul><li>Windows 10/11에는 OpenSSH가 기본 내장되어 있어서 PowerShell이나 CMD에서 바로 위 명령어를 쓸 수 있어요</li><li>아니면 <a href="https://termius.com/">Termius</a>나 <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> 같은 툴을 써도 좋아요</li></ul><p>처음 접속하면 이런 지문(fingerprint) 확인 메시지가 뜰 거예요:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>“이 서버가 처음이네. 정말 연결할까요?” 하고 물어보는 겁니다.</p><p><code>yes</code>을 입력하고 엔터를 치세요. 그다음 비밀번호를 입력하고(<strong>주의: 입력할 때 화면에 아무 글자도 안 보이는데, 이건 정상적인 보안 기능이니까 당황하지 마세요</strong>) 엔터를 치시면 됩니다.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>이런 식으로 프롬프트가 뜨면 로그인 성공입니다:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>지문을 확인하는 이유는?</strong></p><p>'중간자 공격(Man-in-the-Middle)'을 방지하기 위해서예요. 첫 접속 때 서버 지문을 기록해두면, 나중에 접속했을 때 지문이 바뀌어 있다면 누군가가 당신의 서버를 사칭하고 있을 가능성이 있다는 뜻이죠.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="서버와-친해지기">서버와 친해지기</h4><p>로그인했다면, 우선 이 녀석의 기본 상태부터 파악해볼까요?</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>이 정보는 나중에 문제를 찾아낼 때 요긴하게 쓰이니 잘 기억해두세요.</p><h4 id="시스템-업데이트">시스템 업데이트</h4><p>서버 정보 파악이 끝났다면, 정식으로 할 첫 번째 일은 바로 시스템 업데이트예요. 새 서버의 OS 이미지는 몇 달 전 것일 수도 있고, 그동안 보안 패치가 꽤 나왔을 수 있거든요.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>옵션 설명:</strong></p><ul><li><code>apt update</code>: 패키지 인덱스 업데이트</li><li><code>apt full-upgrade</code>: 커널을 포함한 모든 소프트웨어 업그레이드</li><li><code>-y</code>: 자동 확인(yes)으로, 일일이 입력할 필요 없음</li><li><code>apt autoremove</code>: 더 이상 필요 없는 의존성 패키지 삭제</li><li><code>apt autoclean</code>: 다운로드한 패키지 캐시 정리</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ 업데이트 양에 따라 이 단계는 몇 분 정도 걸릴 수 있어요. 중간에 가끔 확인을 요구하면, 그냥 안내에 따라 진행하면 돼요.</p></blockquote><h4 id="재부팅이-필요한지-확인">재부팅이 필요한지 확인</h4><p>커널 업데이트 후에는 보통 재부팅을 해야 적용돼요.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>재부팅이 필요하다는 메시지가 뜬다면:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>재부팅 후에는 SSH 연결을 다시 맺어주면 됩니다.</p><h4 id="자주-쓰는-도구-설치">자주 쓰는 도구 설치</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>이 도구들이 대체 뭘 하는 건지 한번 볼게요:</strong></p><table><thead><tr><th>도구</th><th>용도</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>일반 사용자가 관리자 명령 실행</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>파일 다운로드</td><td></td></tr><tr><td><code>git</code></td><td>버전 관리</td><td></td></tr><tr><td><code>vim</code></td><td>텍스트 에디터</td><td></td></tr><tr><td><code>htop</code></td><td>더 보기 좋은 프로세스 모니터</td><td></td></tr><tr><td><code>tree</code></td><td>디렉터리 구조를 트리 형태로 표시</td><td></td></tr><tr><td><code>net-tools</code></td><td>네트워크 도구 (ifconfig, netstat 등)</td><td></td></tr><tr><td><code>ufw</code></td><td>간편한 방화벽</td><td></td></tr><tr><td><code>fail2ban</code></td><td>무차별 대입 공격 방지</td><td></td></tr><tr><td><code>neofetch</code></td><td>시스템 정보 예쁘게 표시</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-non-root-유저-만들기">3.2 non-root 유저 만들기</h3><h4 id="root로-바로-쓰면-안-되나요">root로 바로 쓰면 안 되나요?</h4><p>root 유저는 권한이 너무 세서, 손 한 번 삐끗해서 <code>rm -rf /</code> 치면 날리는 게 순식간이에요. 평소엔 일반 유저로 작업하고, 관리자 권한이 필요할 때만 <code>sudo</code> 쓰는 게 안전합니다.</p><blockquote><p>랍스터(openclaw)는 괴물인데, 감히 root 권한을 쥐여줄 수가 있나요?</p></blockquote><h4 id="유저-생성하기">유저 생성하기</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>그러면 비밀번호랑 기본 정보들을 설정하라고 프롬프트가 뜹니다:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="sudo-권한-부여하기">sudo 권한 부여하기</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>잘 됐는지 확인해 볼까요?</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>출력 결과가 <code>root</code> 라면 sudo 설정이 끝난 겁니다.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>꿀팁</strong></p><p><code>exit</code> 를 입력하면 다시 root 유저로 돌아갑니다. 앞으로의 설정 작업은 root 상태에서 진행하고, 다 끝난 뒤에 일반 유저로 전환할게요.</p></blockquote><hr><h3 id="3-3-SSH-키-로그인-설정하기">3.3 SSH 키 로그인 설정하기</h3><h4 id="키-인증-vs-비밀번호-인증">키 인증 vs 비밀번호 인증</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>키 인증이 비밀번호보다 훨씬 안전합니다:</p><ul><li>비밀번호는 무차별 대입 공격(brute-force)으로 뚫릴 수 있지만, 키는 거의 불가능해요</li><li>매번 비밀번호 안 쳐도 돼서 훨씬 편합니다</li><li>비밀번호가 유출돼도 개인 키가 없으면 로그인 자체가 안 됩니다</li></ul><h4 id="1단계-로컬에서-키-페어-생성하기">1단계: 로컬에서 키 페어 생성하기</h4><p><strong>내 컴퓨터</strong>(서버 말고)에서 아래 명령어를 실행해 봅시다:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>그러면 이런 메시지가 뜰 거예요:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>그냥 엔터 치면 기본 경로로 저장됩니다. 저희는 여기서 ./ittinker를 사용했는데, 이건 현재 경로에 ittinker라는 이름으로 저장한다는 뜻이에요.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>키에 비밀번호(패스프레이즈)를 설정해서 보안을 한 겹 더 추가할 수도 있고, 그냥 엔터 쳐서 비워둬도 됩니다.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>생성이 끝나면 <code>~/.ssh/</code> 디렉토리에 두 개의 파일이 생긴 걸 확인할 수 있어요(아래는 기본 파일명이라서, 앞에서 그냥 엔터를 쳤다면 이렇게 됩니다):</p><ul><li><code>id_ed25519</code>: <strong>개인 키</strong>입니다. 절대 외부에 유출되면 안 돼요!</li><li><code>id_ed25519.pub</code>: <strong>공개 키</strong>입니다. 이건 서버로 업로드해야 해요.</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code>는 현재 권장되는 알고리즘으로, 전통적인 RSA보다 더 안전하고 키 길이도 짧아요. 만약 시스템이 너무 구버전이라 지원하지 않는다면 <code>ssh-keygen -t rsa -b 4096</code>를 사용하시면 됩니다.</p></blockquote><blockquote><p>한 가지 팁을 드리자면, ed25519로 생성된 키는 꽤 작은 반면 RSA 파일은 꽤 큽니다. AI한테 물어보고 나서야 알게 됐는데, 파일 크기는 상관없고 알고리즘 특성 때문에 그런 거래요.</p></blockquote><h4 id="2단계-서버에-공개-키-업로드하기">2단계: 서버에 공개 키 업로드하기</h4><p><strong>방법 A: ssh-copy-id 사용하기(권장)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>비밀번호를 입력하면 공개 키가 서버로 자동 복사됩니다.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>방법 B: 수동으로 복사하기</strong></p><p><code>ssh-copy-id</code>가 작동하지 않는다면, 수동으로 직접 설정해도 됩니다:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>출력된 내용(<code>ssh-ed25519</code>로 시작하는 긴 문자열)을 복사하세요.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>권한 설정이 정말 중요해요!</strong></p><p>SSH는 파일 권한에 민감하게 반응하거든요:</p><ul><li><code>.ssh</code> 디렉토리: 700 (본인만 접근 가능)</li><li><code>authorized_keys</code> 파일: 600 (본인만 읽고 쓰기 가능)</li></ul><p>권한이 맞지 않으면, SSH가 키를 이용한 로그인을 거부해버립니다.</p></blockquote><h4 id="3단계-키-로그인-테스트">3단계: 키 로그인 테스트</h4><p><strong>새 터미널 창을 하나 더 띄워서</strong> (기존 창은 혹시 몰라 닫지 말고 그냥 두세요. 설정이 꼬였을 때 피신처가 되니까요), 키 로그인이 잘 되는지 테스트해봅시다:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>비밀번호 입력 없이 로그인이 되면, 키 설정이 성공한 겁니다! 🎉</p><p>(만약 개인 키에 passphrase를 설정하셨다면, 개인 키 비밀번호를 입력하라는 프롬프트가 뜰 텐데 이건 정상입니다.)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>여기서 -i 옵션을 추가한 건, 이 키를 기본 경로가 아니라 현재 경로에 두었기 때문이에요. 명시적으로 지정해주지 않으면 시스템이 기본 키를 사용하려고 할 겁니다.</p></blockquote><hr><h3 id="3-4-SSH-보안-강화">3.4 SSH 보안 강화</h3><p>자, 이제 키 로그인이 잘 되니까 SSH를 한층 더 단단하게 묶어볼까요:</p><ol><li>기본 포트 번호 바꾸기 (무차별 스캔 피하기)</li><li>비밀번호 로그인 막기</li><li>root 계정으로 직접 로그인 금지하기</li></ol><h4 id="SSH-설정-파일-수정하기">SSH 설정 파일 수정하기</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>아래 설정들을 찾아서 수정해 줍니다. (앞에 주석 처리(<code>#</code>)가 되어 있다면 <code>#</code>를 지워주세요):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>저장하고 빠져나옵니다 (<code>ctrl + o</code>).</p><blockquote><p>Nano에서 저장은 <code>ctrl + o</code>예요. 파일명을 물어보면 그냥 엔터 치시면 되고, 종료는 <code>ctrl + x</code>입니다.</p></blockquote><h4 id="SSH-서비스-재시작">SSH 서비스 재시작</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>중요한 당부!</strong></p><p><strong>지금 띄워진 터미널 창은 절대 닫지 마세요!</strong> 먼저 새 창을 열어서 바꾼 설정으로 정상 로그인되는지 테스트해 보세요:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>로그인이 잘 되면 그때 예전 창을 닫으시면 됩니다. 만약 접속이 안 된다면, 아까 창에서 설정 다시 고치면 되니까 조급해하지 마세요.</p></blockquote><blockquote><p>만약 가벼운 서버(Light Server)를 구매하셨다면 이 포트를 변경할 수 없을 확률이 높아요. 반면 전통적인 ECS는 수정이 가능하니 참고해 주세요.</p></blockquote><hr><h3 id="3-5-UFW-방화벽-설정하기">3.5 UFW 방화벽 설정하기</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW(Uncomplicated Firewall)는 Ubuntu의 기본 방화벽 도구입니다. 설정은 식은 죽 먹기지만 기능은 아주 강력하죠.</p><h4 id="기본-설정">기본 설정</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="방화벽-활성화">방화벽 활성화</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>이런 메시지가 뜰 거예요:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p><code>y</code>를 입력해서 확인해 줍니다.</p><h4 id="상태-확인하기">상태 확인하기</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022은 제가 오타 난 거예요. 여러분은 각자 상황에 맞게 알아서 설정하시면 됩니다!</p></blockquote><p>출력 결과는 이런 식으로 나올 거예요:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="자주-쓰는-명령어-치트시트">자주 쓰는 명령어 치트시트</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-BBR-가속-켜기">3.6 BBR 가속 켜기</h3><p>BBR(Bottleneck Bandwidth and Round-trip propagation time)은 Google에서 개발한 TCP 혼잡 제어 알고리즘인데, 네트워크 성능을 확 끌어올려 줍니다.</p><h4 id="한-번에-켜기">한 번에 켜기</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="켜졌는지-확인하기">켜졌는지 확인하기</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>출력 결과는 이래야 합니다:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>출력 결과는 이런 식으로 나올 거예요:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>BBR 효과</strong></p><p>BBR을 켜면, 특히 네트워크가 불안정하거나 지연이 심한 환경에서 이런 게 체감될 거예요:</p><ul><li>다운로드 속도가 훨씬 빨라지고</li><li>SSH 작업이 더 쾌적해지며</li><li>웹페이지 로딩도 빨라집니다</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-무차별-대입-방어를-위해-fail2ban-설정하기">3.7 무차별 대입 방어를 위해 fail2ban 설정하기</h3><p>fail2ban은 로그를 모니터링하다가 로그인 실패가 반복된 IP를 발견하면 알아서 차단해 줍니다.</p><h4 id="기본-설정-2">기본 설정</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p><code>[sshd]</code> 부분을 찾아서 아래 설정으로 맞춰주세요:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="서비스-실행">서비스 실행</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="상태-확인">상태 확인</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>출력 결과는 대략 이런 식입니다:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="자주-쓰는-명령어">자주 쓰는 명령어</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-선택-SSH-Config로-여러-서버-관리하기">3.8 [선택] SSH Config로 여러 서버 관리하기</h3><p>서버가 여러 대라면 매번 <code>ssh -p 22000 user@ip</code> 입력하기 귀찮겠죠. SSH Config를 쓰면 이걸 깔끔하게 단순화할 수 있어요.</p><h4 id="설정-파일">설정 파일</h4><p><strong>내 로컬 PC</strong>에서 <code>~/.ssh/config</code> 파일을 편집해 봅시다:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>설정을 추가해 줍니다:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="사용-방법">사용 방법</h4><p>이제 바로 별칭(alias)으로 접속할 수 있어요:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>IP, 포트, 사용자 이름을 일일이 외울 필요가 없어졌네요!</p><hr><h3 id="3-9-선택-Cloudflare-접근만-허용하기">3.9 [선택] Cloudflare 접근만 허용하기</h3><p>웹사이트가 완전히 Cloudflare 뒤에 있다면, 80/443 포트에 대해 Cloudflare IP만 접근하도록 설정해서 보안을 한층 더 끌어올릴 수 있어요.</p><blockquote><p>⚠️ 주의: 이 설정을 적용하려면 도메인이 이미 Cloudflare CDN에 연결되어 있어야 합니다.</p></blockquote><h4 id="자동-설정-스크립트">자동 설정 스크립트</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>이 스크립트는 다음 작업을 수행합니다:</p><ol><li>Cloudflare 공식 홈페이지에서 최신 IP 대역 가져오기</li><li>UFW 규칙을 추가해서 이 IP들만 80/443 포트 접근을 허용하기</li><li>UFW 다시 불러오기</li></ol><h4 id="자동-업데이트-예약-설정하기">자동 업데이트 예약 설정하기</h4><p>Cloudflare의 IP 대역은 바뀔 수 있으니까, 매주 자동으로 업데이트되게 설정해 둡시다:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-타임존-설정">3.10 타임존 설정</h3><p>기본 타임존이 UTC로 되어 있을 텐데, 로그 확인하기 편하게 본인이 계신 곳의 타임존으로 바꿔주세요:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-선택-자동-보안-업데이트-설정하기">3.11 [선택] 자동 보안 업데이트 설정하기</h3><p>시스템이 알아서 보안 패치를 설치하게 두면, 매번 수동으로 작업할 필요가 없어져서 편해요:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>'Yes’를 선택해서 자동 업데이트를 켜주세요.</p><blockquote><p>💡 이 기능은 <strong>보안 업데이트</strong>만 알아서 설치해 줍니다. 새로운 메이저 버전으로는 자동 업그레이드하지 않기 때문에 비교적 안전해요.</p></blockquote><hr><h2 id="4-정리">4. 정리</h2><h3 id="초기-설정-체크리스트">초기 설정 체크리스트</h3><p>위 설정들을 다 마치셨다면, 이 체크리스트로 한 번 더 점검해 보세요:</p><table><thead><tr><th>확인 항목</th><th>명령어</th><th>예상 결과</th></tr></thead><tbody><tr><td>시스템 업데이트 완료</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>업그레이드할 패키지 없음</td></tr><tr><td>일반 사용자 sudo 권한</td><td><code>sudo whoami</code></td><td><code>root</code> 출력</td></tr><tr><td>키 로그인 정상 작동</td><td><code>ssh yourname@ip -p port</code></td><td>비밀번호 없이 로그인됨</td></tr><tr><td>비밀번호 로그인 비활성화</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH 포트 변경됨</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>설정한 포트</td></tr><tr><td>방화벽 활성화됨</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR 활성화됨</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban 실행 중</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>시간대 설정됨</td><td><code>timedatectl</code></td><td>Asia/Shanghai 또는 본인 시간대</td></tr><tr><td>로컬 SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>서버 별칭 설정됨</td></tr></tbody></table><h3 id="주요-파일-위치">주요 파일 위치</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="보안-모범-사례">보안 모범 사례</h3><ol><li><strong>시스템 주기적 업데이트</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>로그인 로그 정기 점검</strong>: <code>lastb</code>(로그인 실패), <code>last</code>(로그인 성공)</li><li><strong>fail2ban 차단 상태 수시로 확인</strong></li><li><strong>중요 설정 파일 수정 전 백업 필수</strong></li></ol><hr><h2 id="5-트러블슈팅-기록">5. 트러블슈팅 기록</h2><h3 id="Q1-키-로그인이-실패해서-계속-비밀번호를-요구하네요">Q1: 키 로그인이 실패해서 계속 비밀번호를 요구하네요?</h3><p><strong>의심해 볼 수 있는 원인:</strong></p><ol><li><p><strong>권한 문제</strong> (가장 흔한 사례)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>공개키가 제대로 복사되지 않음</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux 간섭</strong> (CentOS/RHEL 시스템)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-포트를-바꾸고-나니-연결이-안-되나요">Q2: 포트를 바꾸고 나니 연결이 안 되나요?</h3><p><strong>문제 해결 단계:</strong></p><ol><li><p>방화벽에서 새 포트가 열려 있는지 확인하세요:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>SSH 설정이 제대로 되어 있는지 확인하세요:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>SSH 서비스가 실행 중인지 확인하세요:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>아예 연결이 안 된다면, 클라우드 서비스 제공자의 VNC/콘솔로 접속해서 복구하세요.</p></li></ol><h3 id="Q2-5-포트를-바꿨는데-아예-적용이-안-되나요-클라우드-업체-경량-서버-기준">Q2.5: 포트를 바꿨는데 아예 적용이 안 되나요? (클라우드 업체 경량 서버 기준)</h3><p><strong>증상</strong>: <code>/etc/ssh/sshd_config</code>를 수정하고 서비스를 재시작했는데도 22번 포트가 그대로 살아있고 새 포트는 적용되지 않는 현상.</p><p><strong>진단 방법</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>출력 결과가 아래와 비슷하다면:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>22번 포트는 <code>sshd</code> 프로세스가 아니라 <code>init</code>(PID 1)이 리스닝하고 있다는 뜻입니다.</p><p><strong>원인</strong>: 일부 클라우드 업체의 '라이트 애플리케이션 서버’나 '컨테이너 인스턴스’는 SSH가 <strong>플랫폼 레이어에서 프록시</strong> 처리됩니다. 그래서 서버 내부의 sshd 설정은 먹히지 않아요.</p><p><strong>해결 방법</strong>:</p><table><thead><tr><th>인스턴스 유형</th><th>SSH 포트 변경 방법</th></tr></thead><tbody><tr><td>전통적 ECS</td><td>sshd_config 수정 ✅</td></tr><tr><td>라이트 서버</td><td>클라우드 콘솔에서 변경해야 하거나, 아예 지원하지 않을 수 있음</td></tr><tr><td>컨테이너 인스턴스</td><td>보통 변경 미지원</td></tr></tbody></table><p>만약 인스턴스에서 포트 변경을 지원하지 않는다면, <strong>다른 보안 조치가 훨씬 더 중요해집니다</strong>:</p><ul><li>✅ 일반 사용자 생성 + root 로그인 비활성화</li><li>✅ SSH 키 로그인 + 비밀번호 로그인 비활성화</li><li>✅ fail2ban으로 무차별 대입(Brute-force) 방어</li></ul><p>이 조치들만 확실히 세팅해 두면 보안성은 여전히 아주 높습니다.</p><h3 id="Q3-fail2ban이-나를-차단해버렸어요">Q3: fail2ban이 나를 차단해버렸어요?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-UFW-활성화-후-웹사이트에-접속이-안-돼요">Q4: UFW 활성화 후 웹사이트에 접속이 안 돼요?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-명령어를-실행했는데-sudo를-찾을-수-없다고-떠요">Q5: 명령어를 실행했는데 sudo를 찾을 수 없다고 떠요?</h3><p>Debian 최소 설치 버전에는 sudo가 없을 수 있어요. root로 설치해 주세요:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-원클릭-초기화-스크립트-익숙해진-후-사용">6. 원클릭 초기화 스크립트 (익숙해진 후 사용)</h2><p>위 단계들에 이미 익숙해지셨다면, 이 스크립트로 빠르게 초기화할 수 있어요.</p><blockquote><p>⚠️ <strong>주의</strong>: 스크립트를 실행하기 전에 SSH 공개 키를 미리 준비해 두셨는지 확인하세요.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-여기까지-따라오셨다면-보안은-얼마나-좋아졌을까요">7. 여기까지 따라오셨다면, 보안은 얼마나 좋아졌을까요?</h2><table><thead><tr><th>단계</th><th>작업 내용</th><th>중요한 이유</th></tr></thead><tbody><tr><td>시스템 업데이트</td><td>최신 패치 설치</td><td>알려진 취약점 해결</td></tr><tr><td>새 사용자 생성</td><td>root 계정 직접 사용 중단</td><td>실수로 인한 위험 감소</td></tr><tr><td>SSH 키 도입</td><td>비밀번호 대신 키 사용</td><td>무차별 대입 공격 불가</td></tr><tr><td>포트 변경</td><td>기본 포트 22번 회피</td><td>스캔에 노출될 확률 감소</td></tr><tr><td>비밀번호 로그인 차단</td><td>키 로그인만 허용</td><td>비밀번호 공격 원천 차단</td></tr><tr><td>root 로그인 금지</td><td>root 직접 접속 차단</td><td>공격 난이도 상승</td></tr><tr><td>UFW 방화벽 설정</td><td>필수 포트만 개방</td><td>공격 표면 축소</td></tr><tr><td>BBR 가속</td><td>네트워크 성능 최적화</td><td>접속 속도 향상</td></tr><tr><td>fail2ban 적용</td><td>악성 IP 자동 차단</td><td>지속적 공격 방지</td></tr></tbody></table><p>여기까지 다 세팅하셨다면, 여러분의 서버 보안은 이미 전체 VPS의 **90%**를 뛰어넘었습니다.</p><hr><h2 id="다음-글-미리보기">다음 글 미리보기</h2><p>다음 글에서는 <strong>SSH 키 로그인 설정 퀵 가이드</strong>를 다룰 예정입니다. 아래 내용들을 더 자세히 파볼게요:</p><ul><li>다양한 OS에서 키 생성하는 방법</li><li>여러 개의 키 관리하기</li><li>SSH Agent 설정</li><li>자주 쓰는 SSH 클라이언트 설정</li></ul><hr><p><em>이 글의 마지막 업데이트: 2026년 1월</em></p><p><em>인디 개발자 툴박스 시리즈, 팔로우 환영해요!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/ko/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/ko/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>새로 구입한 VPS는 잠금이 풀린 문과 같습니다. 전 세계의 스크립트 키드들이 문을 두드리고 있습니다. VPS를 받은 후 첫 번째 일은 소프트웨어를 설치하는 것이 아니라 보안 초기화를 하는 것입니다. SSH 키 로그인, 기본값이 아닌 포트, 일반 사용자, 방화벽, fail2ban, BBR 가속을 사용하여 첫 번째 시간에 기반을 단단히 잡는 방법을 알려드리겠습니다.</summary>
    <title>VPS 개통 후 첫 1시간: 아무것도 없는 상태에서 안전하게 쓸 수 있게 세팅하는 완전 초기화 가이드 (너의 OpenClaw 더 안전하게 만들기)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Indie dev gereedschapskist" scheme="https://blog.ittinker.com/categories/Indie-dev-gereedschapskist/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="Serverbeveiliging" scheme="https://blog.ittinker.com/tags/Serverbeveiliging/"/>
    <category term="Indie dev" scheme="https://blog.ittinker.com/tags/Indie-dev/"/>
    <content>
      <![CDATA[<blockquote><p>Een verse VPS is als een deur zonder slot, waar scriptkiddies over de hele wereld op staan te kloppen. In dit artikel help ik je om die deur goed op slot te doen. Zodat je ‘openclaw’ niet zomaar over straat rondzwiert.</p></blockquote><h2 id="0-Even-vooraf">0. Even vooraf</h2><p>Net een VPS gekocht, vol enthousiasme je IP en root-wachtwoord binnengehaald, en dan?</p><p>Wat veel mensen doen: direct aan de slag met software installeren en projecten deployen.</p><p><strong>Dat is een gevaarlijke gewoonte.</strong></p><p>Je VPS heeft een publiek IP, wat betekent dat iedereen ter wereld kan proberen er verbinding mee te maken. En in de standaardconfiguratie is dit het geval:</p><ul><li>Poort <strong>22</strong> staat open</li><li>De gebruikersnaam is het alom bekende <strong>root</strong></li><li>Er staat nog maar één wachtwoord tussen jou en de boosdoeners</li></ul><p>Elke dag scannen talloze geautomatiseerde scripts IP-reeks om met bekende wachtwoorden brute-force aanvallen uit te voeren. Vanaf het moment dat je server live gaat, is deze al onder vuur.</p><p>Dus, <strong>het allereerste wat je moet doen zodra je een VPS hebt, is niet direct software installeren, maar de boel beveiligen</strong>.</p><hr><h2 id="1-Wat-we-gaan-bereiken">1. Wat we gaan bereiken</h2><p>Het doel van dit artikel is:</p><ul><li>✅ Krijg <strong>veilige toegang op afstand</strong> voor elkaar: inloggen met SSH-keys + een niet-standaard poort</li><li>✅ Maak een <strong>gewone gebruiker</strong> aan: niet direct als root werken</li><li>✅ Stel een <strong>firewall</strong> in: alleen de poorten openen die je écht nodig hebt</li><li>✅ Zet <strong>netwerkversnelling</strong> aan: met BBR vliegt je verbinding door de lucht</li><li>✅ Voorkom <strong>brute-force aanvallen</strong>: fail2ban bant kwaadwillende IP’s automatisch</li></ul><p>Heb je dit allemaal gedaan? Dan staat je VPS op een rotsvaste basis en kun je er gerust allerlei diensten op gaan uitrollen.</p><hr><h2 id="2-Planning-en-bedenkingen">2. Planning en bedenkingen</h2><h3 id="Waarom-zou-je-dit-allemaal-doen">Waarom zou je dit allemaal doen?</h3><p>Een VPS die je net hebt gekocht is eigenlijk net een kaal, onafgebouwd huis:</p><table><thead><tr><th>Standaardinstelling</th><th>Risico</th><th>Onze oplossing</th></tr></thead><tbody><tr><td>Direct inloggen als root</td><td>Te veel rechten, risico op fatale fouten</td><td>Een gewone gebruiker aanmaken + sudo</td></tr><tr><td>Inloggen met wachtwoord</td><td>Kwetsbaar voor brute-force aanvallen</td><td>Inloggen via SSH-sleutel</td></tr><tr><td>Standaardpoort 22</td><td>Eerst doelwit voor scanners</td><td>Overschakelen naar een niet-standaardpoort</td></tr><tr><td>Firewall uit</td><td>Alle poorten blootgesteld aan buiten</td><td>UFW alleen essentiële poorten openen</td></tr><tr><td>Standaard netwerk</td><td>Hoog pakketverlies, hoge latency</td><td>BBR-congestiecontrolealgoritme</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Het-globale-overzicht">Het globale overzicht</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>We gaan in deze volgorde aan de slag, en bij elke stap leg ik uit waarom we het zo doen.</p><h2 id="3-Stappenplan">3. Stappenplan</h2><h3 id="3-1-Eerste-keer-inloggen-en-systeem-updaten">3.1 Eerste keer inloggen en systeem updaten</h3><h4 id="Server-IP-achterhalen">Server-IP achterhalen</h4><p>Nadat je een VPS hebt gekocht, krijg je van de provider:</p><ul><li><strong>IP-adres</strong>: zoiets als <code>192.168.1.100</code></li><li><strong>Poort</strong>: meestal <code>22</code> (sommige providers gebruiken een andere poort)</li><li><strong>Gebruikersnaam</strong>: meestal <code>root</code></li><li><strong>Wachtwoord</strong>: een willekeurig gegenereerde tekenreeks</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Verbinding-maken-via-SSH">Verbinding maken via SSH</h4><p><strong>Mac / Linux-gebruikers</strong>: open je terminal en typ direct:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows-gebruikers</strong>:</p><ul><li>Windows 10/11 heeft OpenSSH ingebouwd, dus je kunt het bovenstaande commando direct in PowerShell of CMD gebruiken</li><li>Of gebruik tools zoals <a href="https://termius.com/">Termius</a> of <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>Bij de eerste verbinding krijg je een prompt om de fingerprint te bevestigen:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Dit vraagt eigenlijk: “Ik ken deze machine niet, weet je zeker dat je wilt verbinden?”</p><p>Typ <code>yes</code> en druk op Enter. Typ daarna je wachtwoord (<strong>let op: tijdens het typen worden er geen tekens weergegeven, dit is een normale beveiligingsfunctie</strong>) en druk op Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Als je een prompt ziet die hierop lijkt, is het je gelukt om in te loggen:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Waarom zou je de fingerprint controleren?</strong></p><p>Dit is om “man-in-the-middle-aanvallen” te voorkomen. De eerste keer dat je verbinding maakt, sla je de fingerprint van de server op. Als de fingerprint bij een latere verbinding opeens anders is, betekent dit dat iemand zich mogelijk als jouw server voordoet.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Maak-even-kennis-met-je-server">Maak even kennis met je server</h4><p>Zodra je bent ingelogd, is het handig om eerst even te kijken hoe deze machine in elkaar zit:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Onthoud deze informatie, want daar ga je later naar terugkijken als je problemen moet opsporen.</p><h4 id="Systeem-updaten">Systeem updaten</h4><p>Nu je de serverinfo hebt bekeken, is het eerste klusje het systeem updaten. De image van een nieuwe server is mogelijk al een paar maanden oud, en ondertussen kunnen er best al beveiligingspatches zijn uitgebracht:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Wat deze parameters doen:</strong></p><ul><li><code>apt update</code>: de pakketindex bijwerken</li><li><code>apt full-upgrade</code>: alle software upgraden, inclusief de kernel</li><li><code>-y</code>: automatisch bevestigen, zodat je niet handmatig “yes” hoeft in te typen</li><li><code>apt autoremove</code>: afhankelijkheden die niet meer nodig zijn verwijderen</li><li><code>apt autoclean</code>: de cache met gedownloade pakketten opruimen</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Deze stap kan een paar minuten duren, afhankelijk van hoeveel updates er zijn. Af en toe moet je tussendoor iets bevestigen; volg gewoon de prompts en je bent goed.</p></blockquote><h4 id="Controleren-of-een-herstart-nodig-is">Controleren of een herstart nodig is</h4><p>Na een kernel-update is een herstart meestal nodig voordat deze actief wordt:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Als er wordt aangegeven dat je moet herstarten:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Na de herstart moet je opnieuw via SSH verbinding maken.</p><h4 id="Handige-tools-installeren">Handige tools installeren</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Waar deze tools voor dienen:</strong></p><table><thead><tr><th>Tool</th><th>Doel</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Gewone gebruikers beheerderscommando’s laten uitvoeren</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Bestanden downloaden</td><td></td></tr><tr><td><code>git</code></td><td>Versiebeheer</td><td></td></tr><tr><td><code>vim</code></td><td>Teksteditor</td><td></td></tr><tr><td><code>htop</code></td><td>Mooiere weergave van processen</td><td></td></tr><tr><td><code>tree</code></td><td>Mapstructuur als boomweergave</td><td></td></tr><tr><td><code>net-tools</code></td><td>Netwerktools (ifconfig, netstat, enz.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Simpele, gebruiksvriendelijke firewall</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Bescherming tegen brute-force aanvallen</td><td></td></tr><tr><td><code>neofetch</code></td><td>Systeeminformatie mooi weergeven</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-Een-niet-root-gebruiker-aanmaken">3.2 Een niet-root gebruiker aanmaken</h3><h4 id="Waarom-niet-gewoon-direct-root-gebruiken">Waarom niet gewoon direct root gebruiken?</h4><p>De root-gebruiker heeft veel te veel rechten. Eén kleine vergissing en <code>rm -rf /</code> is alles weg. Voor je dagelijkse dingetjes gebruik je gewoon een gewone gebruiker; als je even admin-rechten nodig hebt, gebruik je <code>sudo</code>.</p><blockquote><p>Een kreeft (openclaw) is echt een beest, hoe durf je die root-rechten zomaar af te staan?</p></blockquote><h4 id="Gebruiker-aanmaken">Gebruiker aanmaken</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Het systeem vraagt je nu om een wachtwoord in te stellen en wat extra info in te vullen:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Sudo-rechten-verlenen">Sudo-rechten verlenen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Even controleren:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Als de output <code>root</code> is, is je sudo-config succesvol geregeld.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Handige tip</strong></p><p>Met <code>exit</code> ga je weer terug naar de root-gebruiker. Voor de volgende stappen blijven we even root om alles in te stellen, en zodra dat klaar is, schakelen we weer over naar de gewone gebruiker.</p></blockquote><hr><h3 id="3-3-SSH-sleutels-instellen-voor-inloggen">3.3 SSH-sleutels instellen voor inloggen</h3><h4 id="Sleutelauthenticatie-vs-wachtwoordauthenticatie">Sleutelauthenticatie vs. wachtwoordauthenticatie</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Inloggen met een sleutel is véél veiliger dan met een wachtwoord:</p><ul><li>Een wachtwoord kan je brute-forcen, een sleutel vrijwel niet</li><li>Je hoeft niet elke keer je wachtwoord in te tikken, makkelijker dus</li><li>Zelfs als je wachtwoord lekt, kom je er niet in zonder de private sleutel</li></ul><h4 id="Stap-1-Lokaal-een-sleutelpaar-genereren">Stap 1: Lokaal een sleutelpaar genereren</h4><p>Voer dit uit op <strong>je eigen computer</strong> (dus niet op de server):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Je krijgt dan deze prompt te zien:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Druk gewoon op Enter om het standaardpad te gebruiken. Wij gebruiken hier <code>./ittinker</code>, wat simpelweg betekent dat het bestand <code>ittinker</code> in de huidige map wordt opgeslagen.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Je kunt een wachtwoord voor je key instellen (een extra beveiligingslaag), of gewoon op Enter drukken om hem leeg te laten.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Als het genereren klaar is, zie je twee bestanden in de map <code>~/.ssh/</code> (dit zijn de standaardnamen als je steeds op Enter hebt gedrukt):</p><ul><li><code>id_ed25519</code>: de <strong>private key</strong>. Laat deze absoluut nooit uitlekken!</li><li><code>id_ed25519.pub</code>: de <strong>public key</strong>. Deze moet je naar de server uploaden.</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> is momenteel het aanbevolen algoritme. Het is veiliger en de key is korter dan de traditionele RSA. Als je systeem te oud is en het niet ondersteunt, kun je <code>ssh-keygen -t rsa -b 4096</code> gebruiken.</p></blockquote><blockquote><p>Klein detail: een ed25519-key is best compact, terwijl een RSA-bestand veel groter is. Ik moest het aan AI vragen, maar blijkbaar maakt de grootte niet uit; dat ligt gewoon aan het algoritme.</p></blockquote><h4 id="Stap-2-Upload-de-public-key-naar-de-server">Stap 2: Upload de public key naar de server</h4><p><strong>Methode A: Gebruik ssh-copy-id (aanbevolen)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Nadat je het wachtwoord hebt ingevoerd, wordt de public key automatisch naar de server gekopieerd.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Methode B: Handmatig kopiëren</strong></p><p>Als <code>ssh-copy-id</code> niet werkt, kun je het ook gewoon handmatig doen:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Kopieer de output (een lange tekst die begint met <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Permissies zijn superbelangrijk!</strong></p><p>SSH is best streng als het om bestandsrechten gaat:</p><ul><li><code>.ssh</code> map: 700 (alleen jijzelf mag erbij)</li><li><code>authorized_keys</code> bestand: 600 (alleen jijzelf mag lezen en schrijven)</li></ul><p>Kloppen de rechten niet? Dan weigert SSH de key te gebruiken en kun je er niet mee inloggen.</p></blockquote><h4 id="Stap-3-Test-je-key-login">Stap 3: Test je key-login</h4><p><strong>Open een nieuw terminalvenster</strong> (laat het oude venster open, voor het geval je iets verkeerd hebt ingesteld en nog even terug kunt), en test de key-login:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Lukt het om in te loggen zonder dat je een wachtwoord hoeft in te typen? Dan is je key succesvol ingesteld! 🎉</p><p>(Heb je een passphrase voor je private key ingesteld? Dan vraagt hij om dat wachtwoord in te typen. Heel normaal, geen zorgen.)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>We hebben hier een -i parameter toegevoegd, omdat we deze key niet in het standaardpad hebben staan, maar in de huidige map. Als je dat niet expliciet aangeeft, pakt het systeem namelijk de standaardkey.</p></blockquote><hr><h3 id="3-4-SSH-beveiliging-aanscherpen">3.4 SSH beveiliging aanscherpen</h3><p>Nu key-login werkt, gaan we SSH nog wat verder beveiligen:</p><ol><li>Verander de standaardpoort (zo voorkom je dat je constant gescand wordt)</li><li>Zet wachtwoord-login uit</li><li>Verbied directe root-login</li></ol><h4 id="SSH-configuratiebestand-aanpassen">SSH-configuratiebestand aanpassen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Zoek de volgende instellingen op en pas ze aan (sommige staan mogelijk uit als commentaar, haal dan de <code>#</code> aan het begin weg):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Opslaan en afsluiten (<code>ctrl + o</code>).</p><blockquote><p>In Nano sla je op met ctrl + o. Hij vraagt dan om de bestandsnaam, gewoon op Enter drukken. Afsluiten doe je met ctrl + x.</p></blockquote><h4 id="SSH-service-herstarten">SSH-service herstarten</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Belangrijke waarschuwing!</strong></p><p><strong>Sluit je huidige terminal nog niet!</strong> Test eerst in een nieuw venster of je met de nieuwe instellingen gewoon kunt inloggen:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Lukt dat? Dan kun je het oude venster veilig sluiten. Kun je er niet in? Dan kun je de configuratie in het oude venster nog herstellen.</p></blockquote><blockquote><p>Als je een lichte server hebt aangeschaft, is de kans groot dat je deze poort niet kunt aanpassen. Bij een traditionele ECS lukt dat wel, dus let daar even op.</p></blockquote><hr><h3 id="3-5-UFW-firewall-instellen">3.5 UFW-firewall instellen</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) is de standaard firewall-tool van Ubuntu. Makkelijk in te stellen, maar toch behoorlijk krachtig.</p><h4 id="Basisconfiguratie">Basisconfiguratie</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Firewall-inschakelen">Firewall inschakelen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Je krijgt dan de volgende melding:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Typ <code>y</code> om te bevestigen.</p><h4 id="Status-controleren">Status controleren</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 was een typo van mij, pas het gewoon aan naar je eigen situatie</p></blockquote><p>Output zoiets:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Handige-commando’s-snelgids">Handige commando’s snelgids</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-BBR-versnelling-aanzetten">3.6 BBR-versnelling aanzetten</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) is een TCP-congestiecontrole-algoritme dat door Google is ontwikkeld. Het kan je netwerkprestaties aanzienlijk verbeteren.</p><h4 id="Met-een-klik-aanzetten">Met één klik aanzetten</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Controleren-of-het-aan-staat">Controleren of het aan staat</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>De output zou dit moeten zijn:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Output zoiets:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Het effect van BBR</strong></p><p>Nadat je BBR hebt aangezet, merk je vooral in instabiele netwerkomgevingen of bij hoge latency duidelijk dat:</p><ul><li>Downloads sneller zijn</li><li>SSH-operaties soepeler verlopen</li><li>Webpagina’s sneller laden</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-fail2ban-instellen-tegen-brute-force-aanvallen">3.7 fail2ban instellen tegen brute-force aanvallen</h3><p>fail2ban houdt je logs in de gaten en blokkeert automatisch IP-adressen die meerdere keren proberen in te loggen zonder succes.</p><h4 id="Basisconfiguratie-2">Basisconfiguratie</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Zoek het <code>[sshd]</code> gedeelte op en zorg dat de volgende instellingen kloppen:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Start-de-services">Start de services</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Check-de-status">Check de status</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>De output ziet er ongeveer zo uit:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Handige-commando’s">Handige commando’s</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Optioneel-Meerdere-servers-beheren-met-SSH-Config">3.8 [Optioneel] Meerdere servers beheren met SSH Config</h3><p>Als je meerdere servers hebt, is het elke keer typen van <code>ssh -p 22000 user@ip</code> best vervelend. Je kunt dit flink versimpelen met SSH Config.</p><h4 id="Configuratiebestand">Configuratiebestand</h4><p>Pas op <strong>je eigen lokale computer</strong> het bestand <code>~/.ssh/config</code> aan:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Voeg de volgende configuratie toe:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Hoe-te-gebruiken">Hoe te gebruiken</h4><p>Nu kun je direct met de alias verbinden:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Geen gedoe meer met het onthouden van IP-adressen, poorten en gebruikersnamen!</p><hr><h3 id="3-9-Optioneel-Alleen-Cloudflare-toestaan">3.9 [Optioneel] Alleen Cloudflare toestaan</h3><p>Als je website volledig achter Cloudflare draait, kun je de poorten 80/443 zo instellen dat alleen Cloudflare IP’s erbij mogen. Dat maakt je setup direct een stuk veiliger.</p><blockquote><p>⚠️ Let op: Voor deze configuratie moet je domein al aan het Cloudflare CDN gekoppeld zijn.</p></blockquote><h4 id="Automatisch-configuratiescript">Automatisch configuratiescript</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Dit script doet het volgende:</p><ol><li>Haal de nieuwste IP-reeksen op van de officiële Cloudflare-pagina</li><li>Voeg UFW-regels toe zodat alleen deze IP’s poort 80/443 mogen benaderen</li><li>Herlaad UFW</li></ol><h4 id="Automatische-updates-instellen">Automatische updates instellen</h4><p>Cloudflare’s IP-reeksen kunnen in de loop der tijd veranderen. Zet daarom een wekelijkse automatische update op:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Tijdzone-instellen">3.10 Tijdzone instellen</h3><p>De standaardtijdzone is waarschijnlijk UTC. verander dit naar je eigen tijdzone, dat is een stuk makkelijker bij het lezen van logs:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Optioneel-Automatische-beveiligingsupdates-instellen">3.11 [Optioneel] Automatische beveiligingsupdates instellen</h3><p>Laat je systeem zelf beveiligingspatches installeren, scheelt je weer een handmatige actie:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Kies “Yes” om automatische updates in te schakelen.</p><blockquote><p>💡 Deze functie installeert automatisch <strong>beveiligingsupdates</strong>, maar zal je niet zomaar upgraden naar een gloednieuwe hoofdversie. Vrij veilig dus.</p></blockquote><hr><h2 id="4-Samenvatting">4. Samenvatting</h2><h3 id="Checklist-voor-de-installatie">Checklist voor de installatie</h3><p>Nadat je alles hebt geconfigureerd, loop deze checklist even na om te controleren of je niks bent vergeten:</p><table><thead><tr><th>Controlepunt</th><th>Commando</th><th>Verwacht resultaat</th></tr></thead><tbody><tr><td>Systeem is bijgewerkt</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Geen pakketten om te upgraden</td></tr><tr><td>Normale gebruiker kan sudoen</td><td><code>sudo whoami</code></td><td>Output <code>root</code></td></tr><tr><td>Inloggen met key werkt</td><td><code>ssh yourname@ip -p port</code></td><td>Inloggen zonder wachtwoord</td></tr><tr><td>Wachtwoord-inloggen staat uit</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH-poort is aangepast</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Jouw ingestelde poort</td></tr><tr><td>Firewall staat aan</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR is ingeschakeld</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban draait</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Tijdzone is ingesteld</td><td><code>timedatectl</code></td><td>Asia/Shanghai of jouw tijdzone</td></tr><tr><td>Lokale SSH-config</td><td><code>cat ~/.ssh/config</code></td><td>Server-alias is geconfigureerd</td></tr></tbody></table><h3 id="Locatie-van-belangrijke-bestanden">Locatie van belangrijke bestanden</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Best-practices-voor-veiligheid">Best practices voor veiligheid</h3><ol><li><strong>Update je systeem regelmatig</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Check je inloglogs regelmatig</strong>: <code>lastb</code> (mislukte inlogpogingen), <code>last</code> (geslaagde inlogpogingen)</li><li><strong>Houd fail2ban-bans goed in de gaten</strong></li><li><strong>Maak altijd even een backup voordat je belangrijke config-bestanden aanpast</strong></li></ol><hr><h2 id="5-Foutlogboek">5. Foutlogboek</h2><h3 id="Q1-Inloggen-met-key-lukt-niet-en-blijft-om-wachtwoord-vragen">Q1: Inloggen met key lukt niet en blijft om wachtwoord vragen?</h3><p><strong>Mogelijke oorzaken:</strong></p><ol><li><p><strong>Permissieprobleem</strong> (komt het vaakst voor)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Public key niet correct gekopieerd</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux bemoeit zich ermee</strong> (op CentOS/RHEL systemen)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Na-het-wijzigen-van-de-poort-kun-je-er-niet-meer-in">Q2: Na het wijzigen van de poort kun je er niet meer in?</h3><p><strong>Stappen om het te checken:</strong></p><ol><li><p>Controleer of de nieuwe poort in de firewall is geopend:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Controleer of de SSH-configuratie klopt:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Controleer of de SSH-service draait:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Als je er helemaal niet meer in komt, log dan in via de VNC/console van je provider om het op te lossen.</p></li></ol><h3 id="Q2-5-Poort-wijzigen-werkt-helemaal-niet-Lightweight-cloud-servers-van-providers">Q2.5: Poort wijzigen werkt helemaal niet? (Lightweight cloud servers van providers)</h3><p><strong>Symptoom</strong>: Je hebt <code>/etc/ssh/sshd_config</code> aangepast, maar na het herstarten van de service luistert hij nog steeds op poort 22 en is de nieuwe poort niet actief.</p><p><strong>Diagnostiek</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Als de output er ongeveer zo uitziet:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Dan betekent dit dat poort 22 wordt beluisterd door <code>init</code> (PID 1), en niet door het <code>sshd</code> proces.</p><p><strong>Waarom komt dat?</strong>: Bij sommige cloudproviders wordt de SSH voor hun “lichtgewicht applicatieservers” of “container instances” afgehandeld via een <strong>proxy in het platform</strong>. De sshd-instellingen op je server zelf doen dan niks.</p><p><strong>De oplossing</strong>:</p><table><thead><tr><th>Type instance</th><th>Hoe pas je de SSH-poort aan?</th></tr></thead><tbody><tr><td>Traditionele ECS</td><td>Pas sshd_config aan ✅</td></tr><tr><td>Lichtgewicht server</td><td>Mogelijk via de cloudconsole, of wordt helemaal niet ondersteund</td></tr><tr><td>Container instance</td><td>Vaak niet aanpasbaar</td></tr></tbody></table><p>Kun je de poort op jouw instance niet aanpassen? Dan worden <strong>andere beveiligingsmaatregelen ineens een stuk belangrijker</strong>:</p><ul><li>✅ Maak een gewone gebruiker aan + zet root-login uit</li><li>✅ Login via SSH-sleutels + zet wachtwoordlogin uit</li><li>✅ Gebruik fail2ban tegen brute-force aanvallen</li></ul><p>Zolang je dit maar goed regelt, blijf je behoorlijk veilig.</p><h3 id="Q3-Heeft-fail2ban-mijzelf-geblokkeerd">Q3: Heeft fail2ban mijzelf geblokkeerd?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Kun-je-je-site-niet-meer-bereiken-nadat-UFW-aan-staat">Q4: Kun je je site niet meer bereiken nadat UFW aan staat?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-Krijg-je-de-melding-“sudo-niet-gevonden”-bij-het-uitvoeren-van-commando’s">Q5: Krijg je de melding “sudo niet gevonden” bij het uitvoeren van commando’s?</h3><p>Bij een minimale Debian-installatie zit sudo er vaak niet bij. Installeer het dan even als root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-One-click-initialisatiescript-als-je-de-smaak-te-pakken-hebt">6. One-click initialisatiescript (als je de smaak te pakken hebt)</h2><p>Als je de bovenstaande stappen eenmaal goed onder de knie hebt, kun je dit script gebruiken om alles in één keer te initialiseren.</p><blockquote><p>⚠️ <strong>Let op</strong>: Voordat je het script draait, zorg ervoor dat je je SSH-public key al klaar hebt staan.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Hoeveel-veiliger-is-je-server-nu-eigenlijk">7. Hoeveel veiliger is je server nu eigenlijk?</h2><table><thead><tr><th>Stap</th><th>Wat je gedaan hebt</th><th>Waarom het belangrijk is</th></tr></thead><tbody><tr><td>Systeem updaten</td><td>Nieuwste patches geïnstalleerd</td><td>Dicht bekende kwetsbaarheden</td></tr><tr><td>Nieuwe gebruiker aangemaakt</td><td>Niet meer direct als root ingelogd</td><td>Minder kans op per ongeluk foute acties</td></tr><tr><td>SSH-sleutels</td><td>Sleutels in plaats van wachtwoorden</td><td>Niet meer te kraken via brute force</td></tr><tr><td>Poort gewijzigd</td><td>Weg van de standaardpoort 22</td><td>Minder kans om gescand te worden</td></tr><tr><td>Wachtwoorden uitgeschakeld</td><td>Alleen inloggen met sleutels</td><td>Wachtwoordaanvallen definitief onmogelijk</td></tr><tr><td>Root uitgeschakeld</td><td>Root kan niet meer direct inloggen</td><td>Moeilijker voor aanvallers</td></tr><tr><td>UFW-firewall</td><td>Alleen noodzakelijke poorten open</td><td>Kleine aanvalsoppervlakte</td></tr><tr><td>BBR-versnelling</td><td>Netwerkprestaties geoptimaliseerd</td><td>Snellere toegang</td></tr><tr><td>fail2ban</td><td>Automatisch kwaadaardige IP’s bannen</td><td>Stopt doorlopende aanvallen</td></tr></tbody></table><p>Met deze stappen is je server al veiliger dan <strong>90%</strong> van alle VPS’en.</p><hr><h2 id="Volgende-post-preview">Volgende post preview</h2><p>In de volgende post duiken we in de <strong>SSH-sleutel inlogconfiguratie cheat sheet</strong>, waarin we de volgende punten gedetailleerd behandelen:</p><ul><li>Sleutels genereren op verschillende besturingssystemen</li><li>Meerdere sleutels beheren</li><li>SSH Agent configureren<br>| Veelvoorkomende SSH-client instellingen</li></ul><hr><p><em>Deze post is voor het laatst bijgewerkt: januari 2026</em></p><p><em>Onafhankelijke ontwikkelaars toolkit-serie, abonneer je om op de hoogte te blijven!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/nl/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/nl/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Beschrijving: Je nieuwe VPS is als een onbeveiligde deur waar alle scripts van de wereld op kloppen. De eerste stap na aanschaf is niet het installeren van software, maar veiligheidsinitialisatie: SSH-sleutellogin, niet-standaardpoorten, gewone gebruikers, firewall, fail2ban en BBR-versnelling. Deze tutorial leidt je door het eerste uur om een solide basis te leggen.</summary>
    <title>Je eerste uur met je VPS: complete setup van kale server naar veilig en klaar voor gebruik (maak je OpenClaw veiliger)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="Indie hacking" scheme="https://blog.ittinker.com/tags/Indie-hacking/"/>
    <category term="ZdalnySSH" scheme="https://blog.ittinker.com/tags/ZdalnySSH/"/>
    <category term="Bezpieczeństwo serwera" scheme="https://blog.ittinker.com/tags/Bezpieczenstwo-serwera/"/>
    <content>
      <![CDATA[<blockquote><p>Świeżo kupiony VPS jest jak otwarte na oścież drzwi, w które puka cała armia skrypt-kiddies z całego świata. W tym artykule pokażę Ci, jak założyć solidną kłódkę. Żeby Twój “rak” (openclaw) nie włóczył się, gdzie popadnie.</p></blockquote><h2 id="0-Slowo-wstepu">0. Słowo wstępu</h2><p>Kupiłeś właśnie VPS-a, z radością wpisujesz IP i hasło roota, a potem?</p><p>Większość ludzi robi tak: od razu rzuca się do instalacji softu i deployu projektu.</p><p><strong>To fatalny nawyk.</strong></p><p>Twój VPS ma publiczny IP, co oznacza, że dosłownie każdy na świecie może spróbować się do niego podłączyć. W domyślnej konfiguracji:</p><ul><li>otwarty jest port <strong>22</strong></li><li>nazwa użytkownika to powszechnie znany <strong>root</strong></li><li>chroni Cię już tylko jedno hasło</li></ul><p>Codziennie miliony zautomatyzowanych skryptów skanują pule adresów IP, próbując siłowo złamać popularne hasła. Od sekundy, w której Twój serwer pojawia się w sieci, jest już pod ostrzałem.</p><p>Dlatego <strong>pierwsza rzecz po wdrożeniu VPS-a to nie instalacja oprogramowania, ale security setup</strong>.</p><hr><h2 id="1-Cel">1. Cel</h2><p>Celem tego poradnika jest:</p><ul><li>✅ Zbuduj <strong>bezpieczny dostęp zdalny</strong>: logowanie kluczem SSH + zmiana domyślnego portu</li><li>✅ Stwórz <strong>zwykłego użytkownika</strong>: unikaj pracy bezpośrednio na koncie root</li><li>✅ Skonfiguruj <strong>firewall</strong>: otwórz tylko te porty, które są naprawdę potrzebne</li><li>✅ Włącz <strong>akcelerację sieci</strong>: dzięki BBR sieć dostanie skrzydeł</li><li>✅ Zablokuj <strong>atak brute-force</strong>: fail2ban automatycznie banuje złośliwe IP</li></ul><p>Gby to ogarniesz, Twój VPS będzie miał solidne fundamenty i z czystym sumieniem będziesz mógł na nim deployować różne usługi.</p><hr><h2 id="2-Plan-i-przemyslenia">2. Plan i przemyślenia</h2><h3 id="Po-co-to-wszystko-konfigurowac">Po co to wszystko konfigurować?</h3><p>Świeżo kupiony VPS jest jak mieszkanie z rynku pierwotnego, dopiero co oddane do remontu:</p><table><thead><tr><th>Stan domyślny</th><th>Ryzyko</th><th>Nasze rozwiązanie</th></tr></thead><tbody><tr><td>Logowanie jako root</td><td>Zbyt wysokie uprawnienia, błąd może być fatalny</td><td>Stworzenie zwykłego usera + sudo</td></tr><tr><td>Logowanie hasłem</td><td>Podatność na ataki brute-force</td><td>Logowanie kluczem SSH</td></tr><tr><td>Domyślny port 22</td><td>Główny cel skanerów</td><td>Zmiana na niestandardowy port</td></tr><tr><td>Firewall wyłączony</td><td>Wszystkie porty otwarte na świat</td><td>UFW – przepuszczamy tylko to, co trzeba</td></tr><tr><td>Domyślny network</td><td>Wysoki packet loss, duże opóźnienia</td><td>Algorytm kontroli przeciążenia BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Ogolny-plan-dzialania">Ogólny plan działania</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Idziemy krok po kroku w takiej kolejności, a przy każdym kroku tłumaczę, dlaczego właśnie tak.</p><h2 id="3-Kroki-do-wykonania">3. Kroki do wykonania</h2><h3 id="3-1-Pierwsze-logowanie-i-aktualizacja-systemu">3.1 Pierwsze logowanie i aktualizacja systemu</h3><h4 id="Zdobadz-IP-serwera">Zdobądź IP serwera</h4><p>Po zakupie VPS dostajesz od dostawcy:</p><ul><li><strong>Adres IP</strong>: np. <code>192.168.1.100</code></li><li><strong>Port</strong>: zazwyczaj <code>22</code> (niektórzy providerzy mogą go zmienić)</li><li><strong>Nazwa użytkownika</strong>: domyślnie <code>root</code></li><li><strong>Hasło</strong>: wygenerowany losowo ciąg znaków</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Polaczenie-przez-SSH">Połączenie przez SSH</h4><p><strong>Użytkownicy Mac / Linux</strong>: odpal terminal i wpisz po prostu:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Użytkownicy Windows</strong>:</p><ul><li>Windows 10/11 ma wbudowanego OpenSSH, więc powyższą komendę odpalisz bezpośrednio w PowerShellu lub CMD</li><li>Ewentualnie zgrabnie sprawdzi się <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> i tym podobne narzędzia</li></ul><p>Przy pierwszym połączeniu wyskoczy zapytanie o potwierdzenie odcisku palca:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>To pytanie brzmi wprost: „Nie znam tej maszyny, na pewno chcesz się połączyć?”</p><p>Wpisz <code>yes</code> i walnij Enter. Potem podaj hasło (<strong>uwaga: podczas wpisywania nic się nie wyświetli – to normalny mechanizm bezpieczeństwa</strong>) i ponownie daj Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Jeśli zobaczysz coś w tym stylu, to znak, że jesteś w systemie:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Po co w ogóle sprawdzać ten odcisk?</strong></p><p>Żeby się uchronić przed atakiem typu man-in-the-middle. Przy pierwszym logowaniu zapisujesz odcisk palca serwera, a jeśli przy kolejnej próbie połączenia nagle się zmieni, to znak, że ktoś może podszywa się pod Twoją maszynę.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Pierwsze-spotkanie-z-serwerem">Pierwsze spotkanie z serwerem</h4><p>Jak już się zalogujesz, warto na luzie sprawdzić, z czym w ogóle masz do czynienia:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Zapamiętaj te info — przyda się później, jak przyjdzie coś debugować.</p><h4 id="Aktualizacja-systemu">Aktualizacja systemu</h4><p>Skoro już wiesz, co masz pod maską, pierwszy poważny krok to update systemu. Obraz na nowym serwerze może być sprzed kilku miesięcy, a od tego czasu pewnie spłynęły już jakieś łatki bezpieczeństwa:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Co oznaczają te flagi:</strong></p><ul><li><code>apt update</code>: odświeża indeks pakietów</li><li><code>apt full-upgrade</code>: podbija wersje całego softu, łącznie z kernelem</li><li><code>-y</code>: zgadza się automatycznie, nie musisz ręcznie walić “yes”</li><li><code>apt autoremove</code>: czyści niepotrzebne zależności</li><li><code>apt autoclean</code>: czyści cache pobranych pakietów instalacyjnych</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Ten krok może zająć kilka minut, zależnie od tego, ile aktualizacji ma w sobie. Czasem w trakcie poprosi o potwierdzenie — po prostu idź za tym, co podpowiada.</p></blockquote><h4 id="Sprawdzenie-czy-trzeba-zrestartowac">Sprawdzenie, czy trzeba zrestartować</h4><p>Po aktualizacji kernela zazwyczaj trzeba odpalić reboot, żeby zmiany weszły w życie:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Jeśli system krzyczy, że restart jest konieczny:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Po restarcie musisz połączyć się przez SSH od nowa.</p><h4 id="Instalacja-narzedzi-ktorych-uzywasz-na-co-dzien">Instalacja narzędzi, których używasz na co dzień</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Do czego służą te narzędzia:</strong></p><table><thead><tr><th>Narzędzie</th><th>Zastosowanie</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Pozwala zwykłym użytkownikom odpalać komendy jako administrator</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Pobieranie plików</td><td></td></tr><tr><td><code>git</code></td><td>Kontrola wersji</td><td></td></tr><tr><td><code>vim</code></td><td>Edytor tekstu</td><td></td></tr><tr><td><code>htop</code></td><td>Ładniejszy monitor procesów</td><td></td></tr><tr><td><code>tree</code></td><td>Pokazuje strukturę katalogów jako drzewo</td><td></td></tr><tr><td><code>net-tools</code></td><td>Narzędzia sieciowe (ifconfig, netstat itd.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Prosty i przyjazny firewall</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Ochrona przed atakami brute-force</td><td></td></tr><tr><td><code>neofetch</code></td><td>Wyświetla info o systemie w ładnej formie</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Tworzenie-uzytkownika-innego-niz-root">3.2 Tworzenie użytkownika innego niż root</h3><h4 id="Dlaczego-nie-uzywac-po-prostu-roota">Dlaczego nie używać po prostu roota?</h4><p>Uprawnienia konta root są po prostu zbyt szerokie — jedno nieostrożne <code>rm -rf /</code> i wszystkiego możesz się pozbyć. Do codziennej pracy używaj zwykłego konta, a do sudo przełączaj się dopiero wtedy, gdy potrzebujesz uprawnień administratora (czyli wpisujesz <code>sudo</code>).</p><blockquote><p>Rak (openclaw) to istny potwór — no jak w ogóle puszczać go na roota?</p></blockquote><h4 id="Tworzenie-uzytkownika">Tworzenie użytkownika</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>System poprosi Cię o ustawienie hasła i podanie kilku dodatkowych informacji:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Nadawanie-uprawnien-sudo">Nadawanie uprawnień sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Sprawdźmy, czy działa:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Jeśli zobaczysz w odpowiedzi <code>root</code>, to znaczy, że konfiguracja sudo się udała.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Pro tip</strong></p><p>Wpisując <code>exit</code>, wrócisz do konta root. W kolejnych krokach konfigurację będziemy robić dalej jako root, a dopiero na koniec przełączymy się na zwykłego użytkownika.</p></blockquote><hr><h3 id="3-3-Konfiguracja-logowania-po-kluczu-SSH">3.3 Konfiguracja logowania po kluczu SSH</h3><h4 id="Logowanie-kluczem-vs-logowanie-haslem">Logowanie kluczem vs logowanie hasłem</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Logowanie kluczem jest nieporównywalnie bezpieczniejsze od hasła:</p><ul><li>Hasło da się złamać brute force’em, klucza w praktyce nie</li><li>Nie musisz wpisywać hasła przy każdym logowaniu — o wiele wygodniej</li><li>Nawet jeśli hasło wycieknie, bez prywatnego klucza nikt się nie dostanie</li></ul><h4 id="Krok-1-Generowanie-pary-kluczy-na-lokalnym-komputerze">Krok 1: Generowanie pary kluczy na lokalnym komputerze</h4><p>Uruchom to na <strong>swoim komputerze</strong> (nie na serwerze):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Pojawi się taki komunikat:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Po prostu wciśnij Enter, żeby użyć domyślnej ścieżki. My tu użyliśmy <code>./ittinker</code>, co oznacza, że plik o nazwie <code>ittinker</code> zostanie zapisany w bieżącym katalogu.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Możesz ustawić hasło do klucza (dodatkowa warstwa ochrony), albo po prostu wcisnąć Enter i zostawić puste.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Gdy klucz zostanie wygenerowany, w katalogu <code>~/.ssh/</code> znajdziesz dwa pliki (to domyślne nazwy, które dostaniesz, jeśli wcześniej wszędzie wciskałeś Enter):</p><ul><li><code>id_ed25519</code>: <strong>klucz prywatny</strong>, absolutnie nie może wyciec!</li><li><code>id_ed25519.pub</code>: <strong>klucz publiczny</strong>, ten musisz wrzucić na serwer</li></ul><blockquote><p>💡 <strong>ed25519 czy RSA?</strong></p><p><code>ed25519</code> to obecnie rekomendowany algorytm, bezpieczniejszy i z krótszym kluczem niż tradycyjne RSA. Jeśli twój system jest zbyt stary i go nie obsługuje, użyj <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Mała ciekawostka: klucze wygenerowane przez ed25519 są całkiem małe, a pliki RSA potrafią być spore. Pytałem AI i się okazało, że rozmiar nie ma znaczenia — to po prostu wynika z samego algorytmu.</p></blockquote><h4 id="Krok-2-Wrzucenie-klucza-publicznego-na-serwer">Krok 2: Wrzucenie klucza publicznego na serwer</h4><p><strong>Sposób A: Użycie ssh-copy-id (polecam)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Po wpisaniu hasła, klucz publiczny zostanie automatycznie skopiowany na serwer.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Sposób B: Ręczne kopiowanie</strong></p><p>Jeśli <code>ssh-copy-id</code> nie zadziała, możesz to zrobić ręcznie:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Skopiuj to, co wypluje komenda (długi ciąg znaków zaczynający się od <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Uprawnienia to podstawa!</strong></p><p>SSH jest bardzo restrykcyjne, jeśli chodzi o uprawnienia plików:</p><ul><li>Katalog <code>.ssh</code>: 700 (dostęp ma tylko właściciel)</li><li>Plik <code>authorized_keys</code>: 600 (tylko właściciel może czytać i zapisywać)</li></ul><p>Jeśli uprawnienia będą złe, SSH po prostu zablokuje logowanie kluczem.</p></blockquote><h4 id="Krok-3-Test-logowania-kluczem">Krok 3: Test logowania kluczem</h4><p><strong>Otwórz nowe okno terminala</strong> (nie zamykaj tego poprzedniego, na wypadek gdybyś coś zepsuł w konfiguracji i potrzebował ratunku) i przetestuj logowanie:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Jeśli zalogujesz się bez podawania hasła, to znaczy, że konfiguracja klucza się udała! 🎉</p><p>(Jeśli ustawiłeś passphrase dla swojego klucza prywatnego, system poprosi Cię o jego wpisanie – to zupełnie normalne)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Dodaliśmy tu parametr -i, ponieważ nasz klucz nie leży w domyślnej ścieżce, ale w obecnym katalogu. Jeśli go nie wskażesz, system spróbuje użyć domyślnego klucza.</p></blockquote><hr><h3 id="3-4-Zabezpieczenie-SSH">3.4 Zabezpieczenie SSH</h3><p>Skoro logowanie kluczem już działa, zabezpieczmy trochę nasze SSH:</p><ol><li>Zmień domyślny port (żebyś nie był łatwym celem dla skanerów)</li><li>Wyłącz logowanie hasłem</li><li>Zablokuj bezpośrednie logowanie jako root</li></ol><h4 id="Edycja-pliku-konfiguracyjnego-SSH">Edycja pliku konfiguracyjnego SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Znajdź i zmodyfikuj poniższe ustawienia (niektóre mogą być zakomentowane, więc po prostu usuń znak <code>#</code> z przodu):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Zapisz zmiany i wyjdź (<code>ctrl + o</code>).</p><blockquote><p>W Nano zapisywanie to ctrl + o – zapyta o nazwę pliku, więc po prostu wciskasz Enter, a żeby wyjść, używasz ctrl + x.</p></blockquote><h4 id="Restart-uslugi-SSH">Restart usługi SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Ważna uwaga!</strong></p><p><strong>Nie zamykaj obecnego terminala!</strong> Najpierw otwórz nowe okno i sprawdź, czy z nową konfiguracją zalogujesz się bez problemu:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Jeśli logowanie przebiegło pomyślnie, możesz zamknąć stare okno. Jeśli nie możesz się zalogować, wciąż masz stare okno, w którym możesz naprawić konfigurację.</p></blockquote><blockquote><p>Jeśli kupiłeś lekki serwer, najprawdopodobniej nie zmienisz tego portu, natomiast tradycyjne ECS pozwala na modyfikację – miej to na uwadze.</p></blockquote><hr><h3 id="3-5-Konfiguracja-zapory-sieciowej-UFW">3.5 Konfiguracja zapory sieciowej UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) to domyślne narzędzie zapory sieciowej w Ubuntu – proste w konfiguracji, ale z potężnymi możliwościami.</p><h4 id="Podstawowa-konfiguracja">Podstawowa konfiguracja</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Wlaczenie-zapory">Włączenie zapory</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Pojawi się komunikat:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Wpisz <code>y</code>, aby potwierdzić.</p><h4 id="Sprawdzenie-statusu">Sprawdzenie statusu</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 to moja literówka, po prostu dostosujcie to do własnej sytuacji</p></blockquote><p>Wynik powinien wyglądać mniej więcej tak:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Sciagawka-z-przydatnych-komend">Ściągawka z przydatnych komend</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Wlaczamy-akceleracje-BBR">3.6 Włączamy akcelerację BBR</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) to algorytm kontroli przeciążenia TCP opracowany przez Google, który potrafi zauważalnie podkręcić wydajność sieciową.</p><h4 id="Wlaczanie-jednym-kliknieciem">Włączanie jednym kliknięciem</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Sprawdzamy-czy-dziala">Sprawdzamy, czy działa</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Wynik powinien wyglądać tak:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Wynik mniej więcej taki:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Jak działa BBR</strong></p><p>Po włączeniu BBR, zwłaszcza przy niestabilnym połączeniu lub dużych opóźnieniach, od razu poczujesz różnicę:</p><ul><li>Pobieranie idzie szybciej</li><li>Praca przez SSH jest płynniejsza</li><li>Strony ładują się szybciej</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Konfiguracja-fail2ban-przeciw-atakom-brute-force">3.7 Konfiguracja fail2ban przeciw atakom brute-force</h3><p>fail2ban monitoruje logi i automatycznie banuje IP, które zbyt często próbują się zalogować bez skutku.</p><h4 id="Podstawowa-konfiguracja-2">Podstawowa konfiguracja</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Znajdź sekcję <code>[sshd]</code> i upewnij się, że masz takie ustawienia:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Uruchamianie-uslugi">Uruchamianie usługi</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Sprawdzanie-statusu">Sprawdzanie statusu</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Wyjście będzie wyglądać mniej więcej tak:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Przydatne-komendy">Przydatne komendy</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Opcjonalnie-Zarzadzanie-wieloma-serwerami-z-SSH-Config">3.8 [Opcjonalnie] Zarządzanie wieloma serwerami z SSH Config</h3><p>Jeśli masz kilka serwerów, wpisywanie za każdym razem <code>ssh -p 22000 user@ip</code> bywa mega uciążliwe. Możesz to sobie mocno ułatwić, używając SSH Config.</p><h4 id="Plik-konfiguracyjny">Plik konfiguracyjny</h4><p>Na <strong>swoim lokalnym komputerze</strong> edytuj plik <code>~/.ssh/config</code>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Dodaj konfigurację:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Jak-tego-uzywac">Jak tego używać</h4><p>Teraz możesz łączyć się bezpośrednio, używając aliasu:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Koniec z pamiętaniem adresów IP, portów i nazw użytkowników!</p><hr><h3 id="3-9-Opcjonalnie-Dostep-tylko-dla-Cloudflare">3.9 [Opcjonalnie] Dostęp tylko dla Cloudflare</h3><p>Jeśli Twoja stroda stoi całkowicie za Cloudflare, możesz skonfigurować dostęp do portów 80/443 tak, by miały go tylko adresy IP Cloudflare. To mocno podbija bezpieczeństwo.</p><blockquote><p>⚠️ Uwaga: ta konfiguracja wymaga, żeby Twoja domena była już podpięta pod Cloudflare CDN.</p></blockquote><h4 id="Skrypt-do-automatycznej-konfiguracji">Skrypt do automatycznej konfiguracji</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Ten skrypt zrobi:</p><ol><li>Pobierz najnowsze zakresy IP prosto z Cloudflare</li><li>Dodaj reguły w UFW, żeby dostęp do portów 80/443 miały tylko te IP</li><li>Przeładuj UFW</li></ol><h4 id="Skonfiguruj-automatyczne-aktualizacje">Skonfiguruj automatyczne aktualizacje</h4><p>Zakresy IP Cloudflare mogą się z czasem zmienić, więc ustawmy cotygodniową automatyczną aktualizację:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Ustaw-strefe-czasowa">3.10 Ustaw strefę czasową</h3><p>Domyślna strefa czasowa to prawdopodobnie UTC. Zmień ją na swoją, żeby łatwiej czytać logi:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Opcjonalnie-Skonfiguruj-automatyczne-aktualizacje-bezpieczenstwa">3.11 [Opcjonalnie] Skonfiguruj automatyczne aktualizacje bezpieczeństwa</h3><p>Niech system sam instaluje łatki bezpieczeństwa — oszczędzisz sobie ręcznej roboty przy każdej aktualizacji:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Wybierz „Yes”, żeby włączyć automatyczne aktualizacje.</p><blockquote><p>💡 Ta funkcja instaluje <strong>tylko aktualizacje bezpieczeństwa</strong> — nie uaktualni systemu do nowej dużej wersji, więc jest dość bezpieczna.</p></blockquote><hr><h2 id="4-Podsumowanie">4. Podsumowanie</h2><h3 id="Lista-kontrolna-po-inicjalizacji">Lista kontrolna po inicjalizacji</h3><p>Po wykonaniu powyższych kroków przejdź jeszcze raz przez tę listę kontrolną:</p><table><thead><tr><th>Sprawdzana rzecz</th><th>Polecenie</th><th>Oczekiwany rezultat</th></tr></thead><tbody><tr><td>System jest zaktualizowany</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Brak pakietów do aktualizacji</td></tr><tr><td>Zwykły użytkownik ma uprawnienia sudo</td><td><code>sudo whoami</code></td><td>Zwraca <code>root</code></td></tr><tr><td>Logowanie kluczem działa</td><td><code>ssh yourname@ip -p port</code></td><td>Logowanie bez hasła</td></tr><tr><td>Logowanie hasłem wyłączone</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>Port SSH zmieniony</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Port, który ustawiłeś</td></tr><tr><td>Zapora sieciowa (firewall) włączona</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR włączone</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban działa</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Strefa czasowa ustawiona</td><td><code>timedatectl</code></td><td>Asia/Shanghai lub Twoja strefa</td></tr><tr><td>Lokalny SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>Skonfigurowany alias serwera</td></tr></tbody></table><h3 id="Lokalizacja-kluczowych-plikow">Lokalizacja kluczowych plików</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Najlepsze-praktyki-bezpieczenstwa">Najlepsze praktyki bezpieczeństwa</h3><ol><li><strong>Regularnie aktualizuj system</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Sprawdzaj logi logowania</strong>: <code>lastb</code> (nieudane próby), <code>last</code> (udane logowania)</li><li><strong>Bieżąco monitoruj bany nałożone przez fail2ban</strong></li><li><strong>Zawsze rób kopię zapasową ważnych plików konfiguracyjnych przed ich modyfikacją</strong></li></ol><hr><h2 id="5-Rejestr-problemow">5. Rejestr problemów</h2><h3 id="Q1-Logowanie-kluczem-nie-dziala-i-nadal-prosi-o-haslo">Q1: Logowanie kluczem nie działa i nadal prosi o hasło?</h3><p><strong>Możliwe przyczyny:</strong></p><ol><li><p><strong>Kwestie uprawnień</strong> (najczęstsza sytuacja)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Klucz publiczny nie został poprawnie skopiowany</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Interferencja SELinux</strong> (w systemach CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Po-zmianie-portu-nie-mozesz-sie-polaczyc">Q2: Po zmianie portu nie możesz się połączyć?</h3><p><strong>Kroki do sprawdzenia:</strong></p><ol><li><p>Upewnij się, że nowy port jest otwarty na firewallu:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Sprawdź, czy konfiguracja SSH jest poprawna:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Upewnij się, że usługa SSH działa:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Jeśli nie możesz się w ogóle połączyć, użyj konsoli VNC u dostawcy chmury, żeby się zalogować i to naprawić.</p></li></ol><h3 id="Q2-5-Zmiana-portu-w-ogole-nie-dziala-Lekkie-serwery-chmurowe">Q2.5: Zmiana portu w ogóle nie działa? (Lekkie serwery chmurowe)</h3><p><strong>Objaw</strong>: Zmieniłeś <code>/etc/ssh/sshd_config</code>, a po restarcie usługi port 22 nadal nasłuchuje, a nowy port nie działa.</p><p><strong>Jak to zdiagnozować</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Jeśli wynik wygląda mniej więcej tak:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Oznacza to, że port 22 jest nasłuchiwany przez <code>init</code> (PID 1), a nie przez proces <code>sshd</code>.</p><p><strong>Dlaczego tak się dzieje?</strong> W przypadku niektórych dostawców chmurowych SSH w ich „lekkich serwerach aplikacyjnych” czy „instancjach kontenerowych” jest obsługiwane przez <strong>warstwę platformy</strong>, przez co konfiguracja sshd wewnątrz twojego serwera po prostu nie działa.</p><p><strong>Jak to rozwiązać?</strong>:</p><table><thead><tr><th>Typ instancji</th><th>Jak zmienić port SSH</th></tr></thead><tbody><tr><td>Tradycyjny VPS/ECS</td><td>Edycja sshd_config ✅</td></tr><tr><td>Lekki serwer</td><td>Może wymagać zmiany w panelu chmury, albo w ogóle nie obsługuje zmiany</td></tr><tr><td>Instancja kontenerowa</td><td>Zazwyczaj nie obsługuje zmiany</td></tr></tbody></table><p>Jeśli twoja instancja nie pozwala na zmianę portu, <strong>inne zabezpieczenia stają się jeszcze ważniejsze</strong>:</p><ul><li>✅ Tworzenie zwykłego użytkownika + wyłączenie logowania jako root</li><li>✅ Logowanie SSH kluczem + wyłączenie logowania hasłem</li><li>✅ fail2ban chroniący przed atakami brute-force</li></ul><p>Jeśli ogarniesz te kroki, twoje bezpieczeństwo i tak będzie na wysokim poziomie.</p><h3 id="Q3-fail2ban-zablokowal-mnie-samego">Q3: fail2ban zablokował mnie samego?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Po-wlaczeniu-UFW-nie-da-sie-wejsc-na-strone">Q4: Po włączeniu UFW nie da się wejść na stronę?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-Przy-wykonywaniu-komendy-wywala-blad-ze-nie-ma-sudo">Q5: Przy wykonywaniu komendy wywala błąd, że nie ma sudo?</h3><p>Minimalna instalacja Debiana może nie mieć sudo, zainstaluj je z poziomu roota:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Skrypt-do-jednorazowej-inicjalizacji-dla-zaawansowanych">6. Skrypt do jednorazowej inicjalizacji (dla zaawansowanych)</h2><p>Jeśli masz już w małym palcu powyższe kroki, możesz użyć tego skryptu, żeby błyskawicznie wszystko zainicjować.</p><blockquote><p>⚠️ <strong>Uwaga</strong>: Zanim odpalisz skrypt, upewnij się, że masz już przygotowany klucz publiczny SSH.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Ile-zyskujesz-na-bezpieczenstwie-po-tych-krokach">7. Ile zyskujesz na bezpieczeństwie po tych krokach?</h2><table><thead><tr><th>Krok</th><th>Co zrobiliśmy</th><th>Dlaczego to ważne</th></tr></thead><tbody><tr><td>Aktualizacja systemu</td><td>Instalacja najnowszych łatek</td><td>Łata znane luki</td></tr><tr><td>Stworzenie nowego usera</td><td>Koniec z logowaniem po rootie</td><td>Zmniejsza ryzyko wpadki</td></tr><tr><td>Klucze SSH</td><td>Logowanie kluczem zamiast hasłem</td><td>Odporne na brute-force</td></tr><tr><td>Zmiana portu</td><td>Unikamy domyślnego 22</td><td>Mniejsze szanse na wykrycie przez skanery</td></tr><tr><td>Wyłączenie haseł</td><td>Logowanie tylko kluczem</td><td>Całkowity koniec ataków na hasła</td></tr><tr><td>Wyłączenie roota</td><td>Brak bezpośredniego logowania na roota</td><td>Podnosi poprzeczkę dla atakujących</td></tr><tr><td>Firewall UFW</td><td>Otwarte tylko niezbędne porty</td><td>Zmniejsza powierzchnię ataku</td></tr><tr><td>Akceleracja BBR</td><td>Optymalizacja wydajności sieci</td><td>Szybszy dostęp i lepszy ping</td></tr><tr><td>fail2ban</td><td>Automatyczny ban złośliwych IP</td><td>Chroni przed uporczywymi atakami</td></tr></tbody></table><p>Po tym wszystkim Twoja fura jest bezpieczniejsza niż <strong>90%</strong> VPS-ów na rynku.</p><hr><h2 id="Zapowiedz-kolejnego-wpisu">Zapowiedź kolejnego wpisu</h2><p>W następnym wpisie weźmiemy na warsztat <strong>Szybki przewodnik po konfiguracji logowania kluczem SSH</strong> i wejdziemy w szczegóły:</p><ul><li>Generowanie kluczy na różnych systemach</li><li>Zarządzanie wieloma kluczami</li><li>Konfiguracja SSH Agent</li><li>Ustawienia popularnych klientów SSH</li></ul><hr><p><em>Ten wpis ostatnio zaktualizowano: styczeń 2026</em></p><p><em>Seria: Przybornik niezależnego dewelopera. Bądź na bieżąco i obserwuj!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/pl/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/pl/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Oto tłumaczenie opisu strony internetowej na język polski:</summary>
    <title>Pierwsza godzina z nowym VPS: kompletny przewodnik po inicjalizacji od gołej maszyny po bezpieczny i gotowy do pracy serwer (niech Twój OpenClaw będzie bezpieczniejszy)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Caixa de ferramentas para devs independentes" scheme="https://blog.ittinker.com/categories/Caixa-de-ferramentas-para-devs-independentes/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="Segurança do servidor" scheme="https://blog.ittinker.com/tags/Seguranca-do-servidor/"/>
    <category term="Desenvolvimento independente" scheme="https://blog.ittinker.com/tags/Desenvolvimento-independente/"/>
    <content>
      <![CDATA[<blockquote><p>Um VPS recém-comprado é como uma porta destrancada, com script kiddies do mundo inteiro batendo nela. Este artigo te ajuda a colocar uma boa fechadura. Pra deixar seu openclaw (lagostim) quieto no canto, sem correr pra lá e pra cá.</p></blockquote><h2 id="0-Antes-de-comecar">0. Antes de começar</h2><p>Você acabou de comprar um VPS, pegou o IP e a senha de root todo animado, e aí?</p><p>O que muita gente faz é: sair instalando software e subindo o projeto na hora.</p><p><strong>Esse é um hábito perigoso.</strong></p><p>Seu VPS tem um IP público, o que significa que qualquer pessoa no mundo pode tentar se conectar a ele. E, na configuração padrão:</p><ul><li>A porta exposta é a <strong>22</strong></li><li>O usuário é o onipresente <strong>root</strong></li><li>Só te resta uma senha te protegendo</li></ul><p>Todo dia rodam milhares de scripts automatizados escaneando faixas de IP, tentando força bruta com senhas comuns. Desde o segundo em que seu servidor fica no ar, ele já está sob ataque.</p><p>Por isso, <strong>a primeira coisa a fazer ao pegar seu VPS não é instalar software, e sim fazer a configuração de segurança inicial</strong>.</p><hr><h2 id="1-O-objetivo">1. O objetivo</h2><p>O objetivo deste artigo é:</p><ul><li>✅ Garanta <strong>acesso remoto seguro</strong>: login por chave SSH + porta não padrão</li><li>✅ Crie um <strong>usuário comum</strong>: evite usar o root diretamente</li><li>✅ Configure o <strong>firewall</strong>: abra apenas as portas necessárias</li><li>✅ Ative a <strong>aceleração de rede</strong>: o BBR vai dar um gás na sua conexão</li><li>✅ Evite <strong>força bruta</strong>: o fail2ban bloqueia IPs maliciosos automaticamente</li></ul><p>Com tudo isso no lugar, seu VPS vai ter uma base sólida pra você deployar qualquer serviço com tranquilidade.</p><hr><h2 id="2-Planejando">2. Planejando</h2><h3 id="Por-que-fazer-essas-configuracoes">Por que fazer essas configurações?</h3><p>Um VPS recém-comprado é como um apartamento recém-entregue, ainda na obra grossa:</p><table><thead><tr><th>Situação padrão</th><th>Risco</th><th>Nossa solução</th></tr></thead><tbody><tr><td>Login direto com root</td><td>Privilégios altos, erro de operação tem consequências graves</td><td>Criar usuário comum + sudo</td></tr><tr><td>Login por senha</td><td>Pode ser alvo de força bruta</td><td>Login por chave SSH</td></tr><tr><td>Porta 22 padrão</td><td>Escaneado por bots</td><td>Mudar para porta não padrão</td></tr><tr><td>Firewall desativado</td><td>Todas as portas expostas</td><td>UFW libera só o necessário</td></tr><tr><td>Rede nativa</td><td>Perda de pacotes alta, latência alta</td><td>Algoritmo de controle BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Fluxo-geral">Fluxo geral</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Vamos seguir essa ordem, e eu explico o porquê de cada passo.</p><h2 id="3-Passos-de-operacao">3. Passos de operação</h2><h3 id="3-1-Primeiro-login-e-atualizacao-do-sistema">3.1 Primeiro login e atualização do sistema</h3><h4 id="Pegar-o-IP-do-servidor">Pegar o IP do servidor</h4><p>Depois de comprar o VPS, o provedor vai te dar:</p><ul><li><strong>Endereço IP</strong>: algo como <code>192.168.1.100</code></li><li><strong>Porta</strong>: geralmente é <code>22</code> (alguns provedores mudam para outra porta)</li><li><strong>Nome de usuário</strong>: normalmente <code>root</code></li><li><strong>Senha</strong>: uma string de caracteres gerada aleatoriamente</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Conexao-via-SSH">Conexão via SSH</h4><p><strong>Usuários de Mac / Linux</strong>: abram o terminal e digitem direto:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Usuários de Windows</strong>:</p><ul><li>O Windows 10/11 já vem com OpenSSH nativo, então dá pra usar o comando acima direto no PowerShell ou no CMD</li><li>Ou então usem ferramentas como <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> e afins</li></ul><p>Na primeira conexão, vai aparecer um aviso de confirmação de fingerprint:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>É basicamente o sistema perguntando: “Não conheço essa máquina, tem certeza que quer conectar?”</p><p>Digitem <code>yes</code> e apertem Enter. Depois, digitem a senha (<strong>atenção: nada vai aparecer na tela enquanto você digita, isso é normal e é uma medida de segurança</strong>), e apertem Enter de novo.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Se apareceu um aviso parecido com esse, é porque o login deu certo:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Por que confirmar a fingerprint?</strong></p><p>Isso serve para evitar o temido “ataque man-in-the-middle”. Na primeira conexão, você anota a fingerprint do servidor. Se ela mudar nas próximas vezes que você conectar, é um sinal de que alguém pode estar se passando pelo seu servidor.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Conhecendo-seu-servidor">Conhecendo seu servidor</h4><p>Depois de logar, vamos dar uma olhada nas informações básicas dessa máquina:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Guarda essas informações, vão ser úteis quando você precisar debugar algum problema no futuro.</p><h4 id="Atualizacao-do-sistema">Atualização do sistema</h4><p>Sabendo como está o servidor, a primeira coisa séria a fazer é atualizar o sistema. A imagem do sistema de um servidor novo pode ter vários meses, e nesse meio tempo provavelmente já saíram vários patches de segurança:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Explicando os parâmetros:</strong></p><ul><li><code>apt update</code>: atualiza o índice de pacotes</li><li><code>apt full-upgrade</code>: faz o upgrade de todos os softwares, incluindo o kernel</li><li><code>-y</code>: confirma automaticamente, sem precisar digitar “yes” na mão</li><li><code>apt autoremove</code>: remove dependências que não são mais necessárias</li><li><code>apt autoclean</code>: limpa o cache dos pacotes baixados</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Esse passo pode levar alguns minutos, dependendo do volume de atualizações. Se pedir alguma confirmação no meio do caminho, basicamente é só seguir o fluxo dele.</p></blockquote><h4 id="Checando-se-precisa-reiniciar">Checando se precisa reiniciar</h4><p>Depois de atualizar o kernel, geralmente é preciso reiniciar para a atualização fazer efeito:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Se ele avisar que precisa reiniciar:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Depois de reiniciar, você vai precisar conectar via SSH de novo.</p><h4 id="Instalando-ferramentas-basicas">Instalando ferramentas básicas</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Para que servem essas ferramentas:</strong></p><table><thead><tr><th>Ferramenta</th><th>Uso</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Permite usuários comuns rodar comandos de admin</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Baixar arquivos</td><td></td></tr><tr><td><code>git</code></td><td>Controle de versão</td><td></td></tr><tr><td><code>vim</code></td><td>Editor de texto</td><td></td></tr><tr><td><code>htop</code></td><td>Monitor de processos mais bonito</td><td></td></tr><tr><td><code>tree</code></td><td>Mostra a estrutura de diretórios em árvore</td><td></td></tr><tr><td><code>net-tools</code></td><td>Ferramentas de rede (ifconfig, netstat, etc.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Firewall simples e fácil de usar</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Proteção contra força bruta</td><td></td></tr><tr><td><code>neofetch</code></td><td>Mostra informações do sistema de forma bonita</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Criar-um-usuario-nao-root">3.2 Criar um usuário não-root</h3><h4 id="Por-que-nao-usar-o-root-direto">Por que não usar o root direto?</h4><p>O usuário root tem poder demais. Num descuido simples com o <code>rm -rf /</code> e já era, perdeu tudo. Para o dia a dia, o ideal é usar um usuário comum e só apelar para o <code>sudo</code> quando precisar de privilégios de administrador.</p><blockquote><p>O lobster (openclaw) é uma verdadeira fera, imagine dar logo o root pra ele, hein?</p></blockquote><h4 id="Criando-o-usuario">Criando o usuário</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>O sistema vai pedir para você definir uma senha e preencher alguns dados:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Concedendo-privilegios-sudo">Concedendo privilégios sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Testando para ver se funcionou:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Se a saída for <code>root</code>, significa que o sudo foi configurado com sucesso.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Dica de ouro</strong></p><p>Digitando <code>exit</code> você volta a ser o usuário root. Nas próximas etapas, vamos continuar usando o root para fazer as configurações e, quando tudo estiver pronto, aí sim voltamos para o usuário comum.</p></blockquote><hr><h3 id="3-3-Configurar-login-por-chave-SSH">3.3 Configurar login por chave SSH</h3><h4 id="Autenticacao-por-chave-vs-por-senha">Autenticação por chave vs. por senha</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>A autenticação por chave é bem mais segura do que usar senha:</p><ul><li>Senhas podem sofrer ataque de força bruta, já as chaves são praticamente impossíveis de quebrar</li><li>Você não precisa digitar a senha toda vez, muito mais prático</li><li>Mesmo que sua senha vaze, sem a chave privada ninguém consegue logar</li></ul><h4 id="Passo-1-Gerar-o-par-de-chaves-na-sua-maquina-local">Passo 1: Gerar o par de chaves na sua máquina local</h4><p>Execute no <strong>seu computador</strong> (não no servidor):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Vai aparecer a seguinte mensagem:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Só dá Enter para usar o caminho padrão. Aqui usamos ./ittinker , ou seja, o arquivo vai ser salvo no diretório atual com o nome ittinker</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Você pode definir uma senha para a chave (uma camada extra de proteção) ou simplesmente dar Enter para deixar em branco.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Quando terminar a geração, você vai ver dois arquivos no diretório <code>~/.ssh/</code> (abaixo estão os nomes padrão, que é o que acontece se você só der Enter):</p><ul><li><code>id_ed25519</code>: <strong>chave privada</strong>, jamais pode vazar!</li><li><code>id_ed25519.pub</code>: <strong>chave pública</strong>, essa vai para o servidor</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> é o algoritmo recomendado hoje em dia, mais seguro e com chaves mais curtas que o RSA tradicional. Se o seu sistema for muito antigo e não suportar, pode usar <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Um detalhe pequeno: a chave gerada pelo ed25519 é bem menorzinha, enquanto o arquivo do RSA é grande. Fui perguntar a IA pra entender, e o tamanho não importa, depende do algoritmo mesmo.</p></blockquote><h4 id="Passo-2-Enviar-a-chave-publica-para-o-servidor">Passo 2: Enviar a chave pública para o servidor</h4><p><strong>Método A: Usar ssh-copy-id (recomendado)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Depois de digitar a senha, a chave pública é copiada para o servidor automaticamente.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Método B: Copiar manualmente</strong></p><p>Se o <code>ssh-copy-id</code> não estiver disponível, você pode fazer de forma manual:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Copie o conteúdo gerado (um texto longo que começa com <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Permissões são muito importantes!</strong></p><p>O SSH é bem chato com as permissões dos arquivos:</p><ul><li>Diretório <code>.ssh</code>: 700 (só você consegue acessar)</li><li>Arquivo <code>authorized_keys</code>: 600 (só você consegue ler e escrever)</li></ul><p>Se as permissões estiverem erradas, o SSH vai se recusar a usar a chave para o login.</p></blockquote><h4 id="Passo-tres-testar-o-login-por-chave">Passo três: testar o login por chave</h4><p><strong>Abra uma nova janela do terminal</strong> (deixe a original aberta, caso algo dê errado você ainda tem como voltar atrás) e teste o login com a chave:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Se você conseguir logar sem precisar digitar a senha, a configuração da chave foi um sucesso! 🎉</p><p>(Se você definiu uma passphrase para a sua chave privada, ele vai pedir essa senha, isso é totalmente normal)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Aqui adicionamos o parâmetro -i porque essa chave não está no caminho padrão, mas sim no diretório atual. Se não especificar, o sistema vai usar a chave padrão.</p></blockquote><hr><h3 id="3-4-Reforcando-a-seguranca-do-SSH">3.4 Reforçando a segurança do SSH</h3><p>Agora que o login por chave já está funcionando, vamos deixar o SSH mais blindado:</p><ol><li>Mudar a porta padrão (para evitar ser escaneado)</li><li>Desativar o login por senha</li><li>Bloquear o login direto do root</li></ol><h4 id="Editar-o-arquivo-de-configuracao-do-SSH">Editar o arquivo de configuração do SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Encontre e ajuste as configurações a seguir (algumas podem estar comentadas, é só remover o <code>#</code> do início):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Salve e saia (<code>ctrl + o</code>).</p><blockquote><p>No Nano, para salvar é ctrl + o; ele vai pedir o nome do arquivo, é só dar Enter. Para sair, ctrl + x.</p></blockquote><h4 id="Reiniciar-o-servico-SSH">Reiniciar o serviço SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Aviso importante!</strong></p><p><strong>Não feche o terminal atual!</strong> Primeiro, teste em uma nova janela se a nova configuração permite o login normalmente:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Se conseguir logar, aí sim pode fechar a janela antiga. Se não conseguir, você ainda pode corrigir a configuração na janela antiga.</p></blockquote><blockquote><p>Se você comprou um servidor leve, muito provavelmente essa porta não dá pra alterar. Já as instâncias ECS tradicionais permitem a modificação, fica a dica.</p></blockquote><hr><h3 id="3-5-Configurar-o-firewall-UFW">3.5 Configurar o firewall UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>O UFW (Uncomplicated Firewall) é a ferramenta de firewall padrão do Ubuntu: simples de configurar, mas muito poderosa.</p><h4 id="Configuracao-basica">Configuração básica</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Ativar-o-firewall">Ativar o firewall</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Ele vai exibir o aviso:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Digite <code>y</code> para confirmar.</p><h4 id="Verificar-o-status">Verificar o status</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 foi um erro de digitação meu, é só seguir conforme a sua própria situação real.</p></blockquote><p>A saída será algo como:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Guia-rapido-de-comandos">Guia rápido de comandos</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Ativando-a-aceleracao-BBR">3.6 Ativando a aceleração BBR</h3><p>O BBR (Bottleneck Bandwidth and Round-trip propagation time) é um algoritmo de controle de congestionamento TCP desenvolvido pelo Google, que pode melhorar significativamente o desempenho da rede.</p><h4 id="Ativacao-com-um-clique">Ativação com um clique</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Verificando-se-esta-ativado">Verificando se está ativado</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>A saída deve ser:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>A saída será algo como:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>O efeito do BBR</strong></p><p>Ao ativar o BBR, especialmente em ambientes com rede instável ou alta latência, você vai notar claramente:</p><ul><li>Downloads mais rápidos</li><li>Operações via SSH mais fluidas</li><li>Carregamento mais rápido das páginas</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Configurando-o-fail2ban-para-evitar-forca-bruta">3.7 Configurando o fail2ban para evitar força bruta</h3><p>O fail2ban monitora os logs e, ao detectar IPs com várias tentativas de login falhadas, os bane automaticamente.</p><h4 id="Configuracao-basica-2">Configuração básica</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Encontre a seção <code>[sshd]</code> e garanta as seguintes configurações:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Iniciando-o-servico">Iniciando o serviço</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Verificando-o-status">Verificando o status</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>A saída será algo como:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Comandos-mais-usados">Comandos mais usados</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Opcional-Gerenciar-varios-servidores-com-SSH-Config">3.8 [Opcional] Gerenciar vários servidores com SSH Config</h3><p>Se você tem vários servidores, digitar <code>ssh -p 22000 user@ip</code> toda hora é chato. Dá pra simplificar isso usando o SSH Config.</p><h4 id="Arquivo-de-configuracao">Arquivo de configuração</h4><p>No <strong>seu computador local</strong>, edite o <code>~/.ssh/config</code>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Adicione a configuração:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Como-usar">Como usar</h4><p>Agora você pode conectar direto usando um alias:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Fim do problema de ficar decorando IP, porta e usuário!</p><hr><h3 id="3-9-Opcional-Permitir-acesso-apenas-do-Cloudflare">3.9 [Opcional] Permitir acesso apenas do Cloudflare</h3><p>Se o seu site está totalmente atrás do Cloudflare, você pode configurar o firewall para permitir apenas os IPs do Cloudflare nas portas 80/443, dando um up na segurança.</p><blockquote><p>⚠️ Atenção: essa configuração exige que o seu domínio já esteja usando o CDN do Cloudflare.</p></blockquote><h4 id="Script-de-configuracao-automatica">Script de configuração automática</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>O que esse script vai fazer:</p><ol><li>Pegar as faixas de IP mais recentes direto do site oficial da Cloudflare</li><li>Adicionar regras no UFW para permitir o acesso às portas 80/443 apenas para esses IPs</li><li>Recarregar o UFW</li></ol><h4 id="Configurar-atualizacao-automatica">Configurar atualização automática</h4><p>As faixas de IP da Cloudflare podem mudar, então vamos configurar uma atualização automática semanal:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Configurar-o-fuso-horario">3.10 Configurar o fuso horário</h3><p>O fuso horário padrão pode ser UTC. Mude para o seu fuso local para facilitar a leitura dos logs:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Opcional-Configurar-atualizacoes-de-seguranca-automaticas">3.11 [Opcional] Configurar atualizações de segurança automáticas</h3><p>Deixe o sistema instalar os patches de segurança sozinho e não precise mais fazer isso na mão toda hora:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Escolha “Yes” para ativar as atualizações automáticas.</p><blockquote><p>💡 Esse recurso instala automaticamente as <strong>atualizações de segurança</strong>, mas não faz upgrade para uma nova versão principal, então é bem tranquilo de usar.</p></blockquote><hr><h2 id="4-Resumo">4. Resumo</h2><h3 id="Checklist-de-inicializacao">Checklist de inicialização</h3><p>Depois de terminar essas configurações, passe por este checklist para conferir tudo:</p><table><thead><tr><th>Item de verificação</th><th>Comando</th><th>Resultado esperado</th></tr></thead><tbody><tr><td>Sistema atualizado</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Nenhum pacote para atualizar</td></tr><tr><td>Usuário comum pode usar sudo</td><td><code>sudo whoami</code></td><td>Saída <code>root</code></td></tr><tr><td>Login por chave funcionando</td><td><code>ssh yourname@ip -p port</code></td><td>Login sem necessidade de senha</td></tr><tr><td>Login por senha desativado</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>Porta SSH alterada</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>A porta que você definiu</td></tr><tr><td>Firewall ativado</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR ativado</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban em execução</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Fuso horário definido</td><td><code>timedatectl</code></td><td>Asia/Shanghai ou seu fuso horário</td></tr><tr><td>Config SSH local</td><td><code>cat ~/.ssh/config</code></td><td>Apelido do servidor configurado</td></tr></tbody></table><h3 id="Localizacao-dos-arquivos-principais">Localização dos arquivos principais</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Melhores-praticas-de-seguranca">Melhores práticas de segurança</h3><ol><li><strong>Mantenha o sistema atualizado regularmente</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Verifique os logs de login periodicamente</strong>: <code>lastb</code> (logins falhos), <code>last</code> (logins bem-sucedidos)</li><li><strong>Fique de olho nos bloqueios do fail2ban</strong></li><li><strong>Faça backup dos arquivos de configuração importantes antes de modificar</strong></li></ol><hr><h2 id="5-Registro-de-problemas">5. Registro de problemas</h2><h3 id="Q1-Login-por-chave-falhou-ainda-pede-a-senha">Q1: Login por chave falhou, ainda pede a senha?</h3><p><strong>Possíveis causas:</strong></p><ol><li><p><strong>Problema de permissão</strong> (mais comum)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Chave pública não foi copiada direito</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Interferência do SELinux</strong> (sistemas CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Nao-consegue-mais-conectar-depois-de-mudar-a-porta">Q2: Não consegue mais conectar depois de mudar a porta?</h3><p><strong>Passos para investigar:</strong></p><ol><li><p>Confirme que a nova porta está liberada no firewall:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Confirme que a configuração do SSH está correta:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Confirme que o serviço do SSH está rodando:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Se não conectar de jeito nenhum, use o VNC/console do seu provedor para entrar e arrumar.</p></li></ol><h3 id="Q2-5-Mudou-a-porta-mas-simplesmente-nao-funcionou-Servidores-leves-na-nuvem">Q2.5: Mudou a porta mas simplesmente não funcionou? (Servidores leves na nuvem)</h3><p><strong>Sintoma</strong>: Você alterou o <code>/etc/ssh/sshd_config</code>, reiniciou o serviço, mas a porta 22 continua ativa e a nova porta não funcionou.</p><p><strong>Como diagnosticar</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Se a saída for algo como:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Significa que a porta 22 está sendo monitorada pelo <code>init</code> (PID 1), e não pelo processo do <code>sshd</code>.</p><p><strong>Motivo</strong>: em alguns provedores de nuvem, o SSH das instâncias do tipo “servidor de aplicação leve” ou “instância de contêiner” é gerenciado por um <strong>proxy na camada da plataforma</strong>, então a configuração do sshd dentro do seu servidor simplesmente não entra em vigor.</p><p><strong>Solução</strong>:</p><table><thead><tr><th>Tipo de instância</th><th>Como mudar a porta do SSH</th></tr></thead><tbody><tr><td>ECS tradicional</td><td>Editar o sshd_config ✅</td></tr><tr><td>Servidor leve</td><td>Pode ser preciso mudar no painel da nuvem, ou talvez nem seja suportado</td></tr><tr><td>Instância de contêiner</td><td>Em geral, não dá para mudar</td></tr></tbody></table><p>Se a sua instância não deixa mudar a porta, <strong>as outras medidas de segurança pesam ainda mais</strong>:</p><ul><li>✅ Criar um usuário comum + desativar o login como root</li><li>✅ Login por chave SSH + desativar login por senha</li><li>✅ fail2ban para barrar tentativas de força bruta</li></ul><p>Caprichando nessas medidas, sua segurança continua bem alta.</p><h3 id="Q3-o-fail2ban-me-bloqueou">Q3: o fail2ban me bloqueou?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-depois-de-ativar-o-UFW-o-site-parou-de-abrir">Q4: depois de ativar o UFW, o site parou de abrir?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-ao-rodar-um-comando-aparece-que-o-sudo-nao-foi-encontrado">Q5: ao rodar um comando, aparece que o sudo não foi encontrado?</h3><p>Na instalação minimalista do Debian pode não ter sudo; instale usando o root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Script-de-inicializacao-com-um-clique-use-quando-ja-estiver-craque">6. Script de inicialização com um clique (use quando já estiver craque)</h2><p>Se você já dominou os passos acima, pode usar este script para inicializar rapidinho.</p><blockquote><p>⚠️ <strong>Atenção</strong>: Antes de rodar o script, certifique-se de que você já tem sua chave pública SSH pronta.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Depois-de-tudo-isso-o-quanto-a-sua-seguranca-melhorou">7. Depois de tudo isso, o quanto a sua segurança melhorou?</h2><table><thead><tr><th>Passo</th><th>O que foi feito</th><th>Por que é importante</th></tr></thead><tbody><tr><td>Atualizar o sistema</td><td>Instalar os patches mais recentes</td><td>Corrigir vulnerabilidades conhecidas</td></tr><tr><td>Criar um novo usuário</td><td>Não usar mais o root diretamente</td><td>Reduzir o risco de erros de operação</td></tr><tr><td>Chave SSH</td><td>Usar chave no lugar de senha</td><td>Impossível de quebrar com força bruta</td></tr><tr><td>Trocar a porta</td><td>Fugir da padrão 22</td><td>Reduzir a chance de ser encontrado em scans</td></tr><tr><td>Desativar senha</td><td>Permitir login só por chave</td><td>Acabar de vez com ataques de senha</td></tr><tr><td>Desativar root</td><td>Root não pode logar diretamente</td><td>Aumentar a dificuldade para atacar</td></tr><tr><td>Firewall UFW</td><td>Abrir só as portas necessárias</td><td>Reduzir a superfície de ataque</td></tr><tr><td>Aceleração BBR</td><td>Otimizar a performance da rede</td><td>Melhorar a velocidade de acesso</td></tr><tr><td>fail2ban</td><td>Banir IPs maliciosos automaticamente</td><td>Evitar ataques contínuos</td></tr></tbody></table><p>Depois de tudo isso, a segurança do seu servidor já supera a de <strong>90%</strong> dos VPS por aí.</p><hr><h2 id="O-que-vem-no-proximo-post">O que vem no próximo post</h2><p>No próximo artigo a gente vai falar sobre o <strong>guia rápido de configuração de login por chave SSH</strong>, com mais detalhes sobre:</p><ul><li>Como gerar chaves em diferentes sistemas</li><li>Gerenciamento de múltiplas chaves</li><li>Configuração do SSH Agent</li><li>Ajustes nos clientes SSH mais comuns</li></ul><hr><p><em>Última atualização deste artigo: janeiro de 2026</em></p><p><em>Série Caixa de Ferramentas do Desenvolvedor Independente — segue aí pra não perder nada!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/pt/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/pt/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Aprenda a proteger seu novo VPS em apenas 1 hora: configure SSH com chave, altere a porta padrão, crie um usuário comum, ative o firewall, fail2ban e BBR para aceleração.</summary>
    <title>Primeira hora com seu VPS: guia completo de bare metal a seguro e pronto pra usar (deixando seu OpenClaw mais seguro)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Набор инструментов инди-разработчика" scheme="https://blog.ittinker.com/categories/%D0%9D%D0%B0%D0%B1%D0%BE%D1%80-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2-%D0%B8%D0%BD%D0%B4%D0%B8-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="Удалённый SSH" scheme="https://blog.ittinker.com/tags/%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B9-SSH/"/>
    <category term="Безопасность сервера" scheme="https://blog.ittinker.com/tags/%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0/"/>
    <category term="Инди-разработка" scheme="https://blog.ittinker.com/tags/%D0%98%D0%BD%D0%B4%D0%B8-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0/"/>
    <content>
      <![CDATA[<blockquote><p>Только что купленный VPS — это как незапертая дверь, в которую стучат скрипт-кiddie со всего мира. Эта статья поможет тебе навесить надежный замок. Чтобы твой openclaw не бегал куда не надо и не шалил.</p></blockquote><h2 id="0-Вступление">0. Вступление</h2><p>Купил VPS, радостно получил IP-адрес и root-пароль, а что дальше?</p><p>Многие поступают так: сразу начинают ставить софт и деплоить проекты.</p><p><strong>Это опасная привычка.</strong></p><p>У твоего VPS есть публичный IP-адрес, а значит, любой человек в мире может попытаться к нему подключиться. И при стандартных настройках:</p><ul><li>открыт порт <strong>22</strong></li><li>имя пользователя — всем известное <strong>root</strong></li><li>и тебя защищает только один-единственный пароль</li></ul><p>Ежедневно бесчисленное множество автоматических ботов сканирует диапазоны IP-адресов и пытается брутфорсить их по словарям популярных паролей. Твой сервер начинает подвергаться атакам с той самой секунды, как появляется в сети.</p><p>Поэтому <strong>первое, что нужно сделать после покупки VPS, — не устанавливать софт, а провести базовую настройку безопасности</strong>.</p><hr><h2 id="1-Цель">1. Цель</h2><p>Цель этой статьи:</p><ul><li>✅ Настраиваем <strong>безопасный удалённый доступ</strong>: вход по SSH-ключу + нестандартный порт</li><li>✅ Создаём <strong>обычного пользователя</strong>: избегаем работы напрямую от root</li><li>✅ Настраиваем <strong>файрвол</strong>: открываем только нужные порты</li><li>✅ Включаем <strong>ускорение сети</strong>: BBR — и сеть летает</li><li>✅ Защищаемся от <strong>брутфорса</strong>: fail2ban сам банит вредительские IP</li></ul><p>Как проделаете всё это, у вашего VPS появится прочная база, и можно со спокойной душой разворачивать любые сервисы.</p><hr><h2 id="2-План-и-размышления">2. План и размышления</h2><h3 id="Зачем-вообще-всё-это-настраивать">Зачем вообще всё это настраивать?</h3><p>Только что купленный VPS — это как квартира от застройщика без отделки:</p><table><thead><tr><th>По умолчанию</th><th>Риск</th><th>Наше решение</th></tr></thead><tbody><tr><td>Вход под root</td><td>Слишком широкие права, высокий риск случайных поломок</td><td>Создаем обычного юзера + sudo</td></tr><tr><td>Вход по паролю</td><td>Могут сбрутфорсить</td><td>Вход по SSH-ключу</td></tr><tr><td>Стандартный порт 22</td><td>Первая цель для сканеров</td><td>Меняем на нестандартный порт</td></tr><tr><td>Файрвол выключен</td><td>Все порты торчат наружу</td><td>UFW: открываем только нужное</td></tr><tr><td>Родная сеть</td><td>Высокий loss, большие задержки</td><td>Алгоритм BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Общий-план">Общий план</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Действуем строго по этому порядку, и на каждом шаге я буду объяснять, зачем мы вообще так делаем.</p><h2 id="3-Пошаговая-настройка">3. Пошаговая настройка</h2><h3 id="3-1-Первый-вход-и-обновление-системы">3.1 Первый вход и обновление системы</h3><h4 id="Узнаем-IP-сервера">Узнаем IP сервера</h4><p>После покупки VPS провайдер выдаст тебе:</p><ul><li><strong>IP-адрес</strong>: например, <code>192.168.1.100</code></li><li><strong>Порт</strong>: как правило, <code>22</code> (некоторые хостинги меняют его на другой)</li><li><strong>Имя пользователя</strong>: обычно <code>root</code></li><li><strong>Пароль</strong>: сгенерированная случайная строка символов</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Подключение-по-SSH">Подключение по SSH</h4><p><strong>Пользователи Mac / Linux</strong>: откройте терминал и просто введите:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Пользователи Windows</strong>:</p><ul><li>В Windows 10/11 уже встроен OpenSSH, так что эту же команду можно выполнить прямо в PowerShell или CMD</li><li>Либо используйте инструменты вроде <a href="https://termius.com/">Termius</a> или <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>При первом подключении появится запрос на подтверждение отпечатка ключа:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>По сути система спрашивает: «Я эту машину не знаю, ты точно хочешь подключиться?»</p><p>Введите <code>yes</code> и нажмите Enter. Затем введите пароль (<strong>обратите внимание: при вводе символы не отображаются — это штатная фича безопасности</strong>) и снова жмите Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Если видите примерно такое сообщение, значит, вы успешно залогинились:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Зачем вообще проверять отпечаток?</strong></p><p>Это защита от атаки «человек посередине» (MITM). При первом подключении мы сохраняем отпечаток сервера. Если при следующем входе он вдруг изменился — это звоночек, что кто-то может притворяться вашим сервером.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Знакомимся-с-вашим-сервером">Знакомимся с вашим сервером</h4><p>Залогинились? Отлично, теперь давай осмотримся — посмотрим, что это вообще за машина:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Запомни эти данные, они очень пригодятся, если потом придётся что-то дебажить.</p><h4 id="Обновление-системы">Обновление системы</h4><p>Осмотр закончили, теперь к главному делу — обновляем систему. Образ на свежем сервере может быть несколько месяцев назад, а за это время уже могли выйти новые патчи безопасности:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Что значат эти параметры:</strong></p><ul><li><code>apt update</code>: обновляет индекс пакетов</li><li><code>apt full-upgrade</code>: обновляет вообще всё ПО, включая ядро</li><li><code>-y</code>: соглашается на всё автоматически, чтобы не вбивать yes вручную</li><li><code>apt autoremove</code>: сносит зависимости, которые больше не нужны</li><li><code>apt autoclean</code>: чистит кэш скачанных установщиков</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Этот шаг может занять пару минут — зависит от объёма обновлений. Если по ходу дела улица попросит подтверждения, просто соглашайся.</p></blockquote><h4 id="Проверяем-нужен-ли-ребут">Проверяем, нужен ли ребут</h4><p>После обновления ядра обычно требуется перезагрузка, чтобы изменения вступили в силу:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Если намекают, что пора перезагружаться:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>После ребута нужно будет заново подключиться по SSH.</p><h4 id="Установка-базовых-утилит">Установка базовых утилит</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Зачем вообще нужны эти инструменты:</strong></p><table><thead><tr><th>Инструмент</th><th>Назначение</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Позволяет обычным юзерам запускать команды от рута</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Скачивание файлов</td><td></td></tr><tr><td><code>git</code></td><td>Контроль версий</td><td></td></tr><tr><td><code>vim</code></td><td>Текстовый редактор</td><td></td></tr><tr><td><code>htop</code></td><td>Более удобный монитор процессов</td><td></td></tr><tr><td><code>tree</code></td><td>Дерево директорий</td><td></td></tr><tr><td><code>net-tools</code></td><td>Сетевые утилиты (ifconfig, netstat и т.д.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Простой и понятный фаервол</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Защита от брутфорса</td><td></td></tr><tr><td><code>neofetch</code></td><td>Красиво выводит инфу о системе</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Создаем-пользователя-без-прав-root">3.2 Создаем пользователя без прав root</h3><h4 id="Почему-не-стоит-работать-под-root">Почему не стоит работать под root?</h4><p>У root прав слишком много — один неловкий <code>rm -rf /</code>, и всего коту под хвост. Для рутины лучше использовать обычного пользователя, а права администратора подключать через <code>sudo</code> только когда они реально нужны.</p><blockquote><p>Лобстер (openclaw) — же настоящий монстр, как можно дать ему права root?</p></blockquote><h4 id="Создаем-пользователя">Создаем пользователя</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Система попросит задать пароль и заполнить еще пару полей:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Даем-права-sudo">Даем права sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Проверяем, всё ли сработало:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Если в выводе есть <code>root</code>, значит sudo настроен успешно.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Маленький лайфхак</strong></p><p>Введите <code>exit</code>, чтобы вернуться под root. Дальше мы продолжим настройку под root, а когда закончим — переключимся обратно на обычного пользователя.</p></blockquote><hr><h3 id="3-3-Настраиваем-вход-по-SSH-ключу">3.3 Настраиваем вход по SSH-ключу</h3><h4 id="Ключи-против-паролей">Ключи против паролей</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Вход по ключу куда безопаснее паролей:</p><ul><li>Пароль можно сбрутфорсить, ключ — практически нереально</li><li>Не нужно каждый раз вводить пароль — сплошное удобство</li><li>Даже если пароль сольет в сеть, без приватного ключа на сервер все равно не зайти</li></ul><h4 id="Шаг-1-Генерируем-пару-ключей-локально">Шаг 1: Генерируем пару ключей локально</h4><p>Запускаем на <strong>своём компе</strong> (не на сервере!):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Скрипт спросит:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Просто жмём Enter, чтобы оставить путь по умолчанию. В примере выше я указал <code>./ittinker</code> — это значит, что ключ сохранится в текущей папке под именем ittinker.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Тут можно задать пароль для ключа (дополнительная защита), а можно просто нажать Enter и оставить пустым.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Когда всё сгенерируется, в папке <code>~/.ssh/</code> появятся два файла (ниже указаны стандартные имена, если вы всё жали Enter):</p><ul><li><code>id_ed25519</code>: <strong>приватный ключ</strong>, ни в коем случае не светите его нигде!</li><li><code>id_ed25519.pub</code>: <strong>публичный ключ</strong>, его нужно закинуть на сервер</li></ul><blockquote><p>💡 <strong>ed25519 против RSA</strong></p><p><code>ed25519</code> — это рекомендуемый алгоритм на сегодня: он надёжнее классического RSA, а ключи получаются короче. Если ваша система совсем древняя и его не поддерживает, используйте <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Забавная деталь: ключ ed25519 получается довольно компактным, а вот файлы RSA здоровенные. Я сам узнал у ИИ — размер тут ни при чём, всё зависит от алгоритма.</p></blockquote><h4 id="Шаг-2-Загружаем-публичный-ключ-на-сервер">Шаг 2: Загружаем публичный ключ на сервер</h4><p><strong>Способ А: через ssh-copy-id (рекомендую)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Вводите пароль, и публичный ключ сам скопируется на сервер.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Способ Б: копируем вручную</strong></p><p>Если <code>ssh-copy-id</code> не сработал, можно всё сделать руками:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Скопируй вывод (это длинная строка, которая начинается с <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Права доступа — это важно!</strong></p><p>SSH строго следит за правами на файлы:</p><ul><li>каталог <code>.ssh</code>: 700 (доступ только у самого пользователя)</li><li>файл <code>authorized_keys</code>: 600 (чтение и запись только у самого пользователя)</li></ul><p>Если права неправильные, SSH просто откажется пускать тебя по ключу.</p></blockquote><h4 id="Шаг-3-Проверяем-вход-по-ключу">Шаг 3: Проверяем вход по ключу</h4><p><strong>Открой новое окно терминала</strong> (старое не закрывай — если накосячишь с настройками, будет шанс всё исправить) и проверь вход по ключу:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Если пускает без пароля — значит, ключ настроен правильно! 🎉</p><p>(Если ты задал passphrase для приватного ключа, попросит ввести пароль от самого ключа — это нормально)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Тут мы добавили параметр -i, потому что наш ключ лежит не по стандартному пути, а в текущей папке. Если не указать его явно, система будет искать ключ по умолчанию.</p></blockquote><hr><h3 id="3-4-Усиляем-безопасность-SSH">3.4 Усиляем безопасность SSH</h3><p>Вход по ключу уже работает, давай теперь закрепим результат и настроим SSH посерьёзнее:</p><ol><li>Меняем порт по умолчанию (чтобы не ловить сканеры)</li><li>Отключаем вход по паролю</li><li>Запрещаем прямой вход для root</li></ol><h4 id="Редактируем-конфиг-SSH">Редактируем конфиг SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Находим и меняем следующие настройки (некоторые могут быть закомментированы — просто убери <code>#</code> в начале строки):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Сохраняемся и выходим (<code>ctrl + o</code>).</p><blockquote><p>В Nano сохранение — это ctrl + o. Он спросит имя файла, просто жми Enter. А для выхода жми ctrl + x.</p></blockquote><h4 id="Перезапускаем-службу-SSH">Перезапускаем службу SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Важный момент!</strong></p><p><strong>Не закрывай текущий терминал!</strong> Сначала открой новое окно и проверь, нормально ли логинится с новыми настройками:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Если пустило — старое окно можно закрывать. Если зайти не вышло, всегда можно вернуться в старое окно и поправить конфиг.</p></blockquote><blockquote><p>Если ты взял легковесный сервер, скорее всего, этот порт там изменить не выйдет. А вот на классических ECS это можно сделать, так что имей в виду.</p></blockquote><hr><h3 id="3-5-Настройка-файрвола-UFW">3.5 Настройка файрвола UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) — это стандартный файрвол в Ubuntu. Настраивать его просто, а работает он на ура.</p><h4 id="Базовая-настройка">Базовая настройка</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Включаем-файрвол">Включаем файрвол</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Выскочит предупреждение:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Вводи <code>y</code> для подтверждения.</p><h4 id="Проверяем-статус">Проверяем статус</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 — это я накосячил, просто ставьте под себя, и всё получится</p></blockquote><p>Вывод будет примерно таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Шпаргалка-по-частым-командам">Шпаргалка по частым командам</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Включаем-ускорение-BBR">3.6 Включаем ускорение BBR</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) — это алгоритм контроля перегрузки TCP от Google, который ощутимо прокачивает сетевую производительность.</p><h4 id="Включаем-в-одно-действие">Включаем в одно действие</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Проверяем-что-всё-завелось">Проверяем, что всё завелось</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Вывод должен быть таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Вывод будет примерно таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Что даёт BBR</strong></p><p>После включения BBR, особенно при нестабильной сети или высоком пинге, вы прямо на себе почувствуете:</p><ul><li>Скорость загрузки выше</li><li>SSH-сессия работает плавнее</li><li>Страницы открываются быстрее</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Настраиваем-fail2ban-для-защиты-от-брутфорса">3.7 Настраиваем fail2ban для защиты от брутфорса</h3><p>fail2ban мониторит логи и автоматически банит IP, с которых сыпятся неудачные попытки входа.</p><h4 id="Базовая-настройка-2">Базовая настройка</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Находим секцию <code>[sshd]</code> и проверяем, чтобы там было следующее:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Запуск-службы">Запуск службы</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Проверка-статуса">Проверка статуса</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Вывод будет примерно таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Часто-используемые-команды">Часто используемые команды</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Опционально-Управление-несколькими-серверами-через-SSH-Config">3.8 [Опционально] Управление несколькими серверами через SSH Config</h3><p>Если у вас несколько серверов, каждый раз вводить <code>ssh -p 22000 user@ip</code> — та еще морока. Используйте SSH Config, чтобы всё упростить.</p><h4 id="Файл-конфигурации">Файл конфигурации</h4><p>Отредактируйте <code>~/.ssh/config</code> на <strong>вашем локальном компьютере</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Добавьте конфигурацию:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Как-использовать">Как использовать</h4><p>Теперь можно подключаться напрямую через алиас:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Больше не нужно держать в голове IP-адреса, порты и имена пользователей!</p><hr><h3 id="3-9-Опционально-Доступ-только-для-Cloudflare">3.9 [Опционально] Доступ только для Cloudflare</h3><p>Если ваш сайт полностью находится за Cloudflare, можно разрешить доступ к портам 80/443 только для IP-адресов Cloudflare — так вы добавите сайту безопасности.</p><blockquote><p>⚠️ Внимание: для этой настройки ваш домен уже должен быть подключен к Cloudflare CDN.</p></blockquote><h4 id="Скрипт-автоматической-настройки">Скрипт автоматической настройки</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Этот скрипт сделает следующее:</p><ol><li>Берём свежие диапазоны IP прямо от Cloudflare</li><li>Добавляем правила в UFW, чтобы пускать на 80/443 только эти IP</li><li>Перезагружаем UFW</li></ol><h4 id="Настраиваем-автообновление-по-расписанию">Настраиваем автообновление по расписанию</h4><p>Диапазоны IP у Cloudflare могут меняться, поэтому настроим еженедельное обновление автоматически:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Настройка-часового-пояса">3.10 Настройка часового пояса</h3><p>По умолчанию там обычно UTC — поменяем на свой, чтобы логи было удобнее читать:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Опционально-Автоматические-обновления-безопасности">3.11 [Опционально] Автоматические обновления безопасности</h3><p>Пусть система сама ставит патчи безопасности, чтобы не делать всё руками каждый раз:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Выбираем «Yes», чтобы включить автообновление.</p><blockquote><p>💡 Эта штука ставит только <strong>обновления безопасности</strong> и не апгрейдит систему до новых мажорных версий, так что всё довольно безопасно.</p></blockquote><hr><h2 id="4-Подводим-итоги">4. Подводим итоги</h2><h3 id="Чеклист-после-инициализации">Чеклист после инициализации</h3><p>Когда всё настроите, прогонитесь по этому чеклисту:</p><table><thead><tr><th>Что проверяем</th><th>Команда</th><th>Ожидаемый результат</th></tr></thead><tbody><tr><td>Система обновлена</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Нет пакетов для обновления</td></tr><tr><td>Обычный пользователь может sudo</td><td><code>sudo whoami</code></td><td>Вывод <code>root</code></td></tr><tr><td>Вход по ключу работает</td><td><code>ssh yourname@ip -p port</code></td><td>Вход без пароля</td></tr><tr><td>Вход по паролю отключён</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH-порт изменён</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Ваш заданный порт</td></tr><tr><td>Файрвол включён</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR включён</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban работает</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Часовой пояс настроен</td><td><code>timedatectl</code></td><td>Asia/Shanghai или ваш часовой пояс</td></tr><tr><td>Локальный SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>Алиас сервера настроен</td></tr></tbody></table><h3 id="Расположение-ключевых-файлов">Расположение ключевых файлов</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Лучшие-практики-безопасности">Лучшие практики безопасности</h3><ol><li><strong>Регулярно обновляйте систему</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Регулярно проверяйте логи входа</strong>: <code>lastb</code> (неудачные входы), <code>last</code> (успешные входы)</li><li><strong>Следите за банами в fail2ban</strong></li><li><strong>Делайте бэкап перед изменением важных конфигов</strong></li></ol><hr><h2 id="5-Журнал-проблем">5. Журнал проблем</h2><h3 id="Q1-Вход-по-ключу-не-работает-всё-равно-просит-пароль">Q1: Вход по ключу не работает, всё равно просит пароль?</h3><p><strong>Возможные причины:</strong></p><ol><li><p><strong>Проблема с правами доступа</strong> (самая частая)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Публичный ключ скопирован некорректно</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Вмешательство SELinux</strong> (в системах CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-После-смены-порта-не-можете-подключиться">Q2: После смены порта не можете подключиться?</h3><p><strong>Шаги для траблшутинга:</strong></p><ol><li><p>Убедитесь, что новый порт открыт в файрволе:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Проверьте, что конфиг SSH настроен верно:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Убедитесь, что служба SSH запущена:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Если подключиться вообще не выходит, зайдите через VNC/консоль провайдера и всё почините.</p></li></ol><h3 id="Q2-5-Смена-порта-вообще-не-сработала-Для-легких-облачных-серверов">Q2.5: Смена порта вообще не сработала? (Для легких облачных серверов)</h3><p><strong>Симптом</strong>: изменили <code>/etc/ssh/sshd_config</code>, перезапустили службу, а 22-й порт всё ещё слушается, а новый не заработал.</p><p><strong>Как диагностировать</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Если вывод выглядит примерно так:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>значит, 22-й порт слушает <code>init</code> (PID 1), а не процесс <code>sshd</code>.</p><p><strong>Причина</strong>: У некоторых облачных провайдеров SSH для «облегчённых серверов приложений» или «контейнерных инстансов» проксируется на <strong>уровне платформы</strong>, поэтому настройки sshd внутри самого сервера не работают.</p><p><strong>Решение</strong>:</p><table><thead><tr><th>Тип инстанса</th><th>Как изменить SSH-порт</th></tr></thead><tbody><tr><td>Классический ECS</td><td>Редактируем sshd_config ✅</td></tr><tr><td>Облегчённый сервер</td><td>Возможно, придётся менять в панели управления облаком, либо вообще не поддерживается</td></tr><tr><td>Контейнерный инстанс</td><td>Обычно изменение не поддерживается</td></tr></tbody></table><p>Если ваш инстанс не поддерживает смену порта, <strong>остальные меры безопасности выходят на первый план</strong>:</p><ul><li>✅ Создаём обычного пользователя + отключаем вход для root</li><li>✅ Вход по SSH-ключу + отключаем вход по паролю</li><li>✅ fail2ban для защиты от брутфорса</li></ul><p>Если всё это настроить как надо, безопасность всё равно будет на высоте.</p><h3 id="Q3-fail2ban-забанил-меня-самого">Q3: fail2ban забанил меня самого?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-После-включения-UFW-сайт-перестал-открываться">Q4: После включения UFW сайт перестал открываться?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-При-запуске-команд-пишет-что-sudo-не-найден">Q5: При запуске команд пишет, что sudo не найден?</h3><p>В минимальной установке Debian sudo может отсутствовать. Установите его из-под root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Скрипт-одной-командой-для-тех-кто-уже-во-всём-разобрался">6. Скрипт одной командой (для тех, кто уже во всём разобрался)</h2><p>Если вы уже освоились с шагами выше, можете использовать этот скрипт для быстрой инициализации.</p><blockquote><p>⚠️ <strong>Важно</strong>: перед тем как запускать скрипт, убедись, что у тебя уже наготове SSH-ключ (публичный).</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Насколько-реально-выросла-безопасность-после-всех-этих-шагов">7. Насколько реально выросла безопасность после всех этих шагов?</h2><table><thead><tr><th>Шаг</th><th>Что сделали</th><th>Почему это важно</th></tr></thead><tbody><tr><td>Обновление системы</td><td>Поставили последние патчи</td><td>Закрываем известные уязвимости</td></tr><tr><td>Создание нового юзера</td><td>Перестали сидеть под root</td><td>Снижаем риск случайных поломок</td></tr><tr><td>SSH-ключи</td><td>Заменили пароль на ключи</td><td>Взлом перебором больше не прокатит</td></tr><tr><td>Смена порта</td><td>Ушли со стандартного 22-го</td><td>Меньше шансов нарваться на сканеры</td></tr><tr><td>Отключение пароля</td><td>Оставили вход только по ключу</td><td>Полностью отсекаем атаки на пароли</td></tr><tr><td>Отключение root</td><td>root больше не может логиниться напрямую</td><td>Злоумышленникам сложнее пробиться</td></tr><tr><td>UFW (фаервол)</td><td>Открыли только нужные порты</td><td>Срезаем поверхность атаки до минимума</td></tr><tr><td>Ускорение BBR</td><td>Оптимизировали сеть</td><td>Сайт грузится быстрее</td></tr><tr><td>fail2ban</td><td>Автоматически баним плохие IP</td><td>Отбиваем постоянные атаки</td></tr></tbody></table><p>После всего этого твой сервер по безопасности уже обгоняет <strong>90%</strong> обычных VPS.</p><hr><h2 id="Что-будет-в-следующей-статье">Что будет в следующей статье</h2><p>В следующей части разберём <strong>шпаргалку по настройке входа по SSH-ключам</strong> и пройдёмся подробнее по таким темам:</p><ul><li>Как генерировать ключи на разных ОС</li><li>Управление несколькими ключами</li><li>Настройка SSH Agent</li><li>Базовые настройки популярных SSH-клиентов</li></ul><hr><p><em>Статья последний раз обновлена: январь 2026 г.</em></p><p><em>Серия «Инструменты независимого разработчика» — подписывайся!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/ru/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/ru/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Новый VPS - это как незапертая дверь, которую могут открыть любые скрипты. Первое, что нужно сделать после покупки VPS, - это безопасная инициализация: SSH-ключи для входа, нестандартные порты, обычные пользователи, брандмауэр, fail2ban и ускорение BBR. В этой статье мы покажем, как за первый час сделать надежный фундамент.</summary>
    <title>Первый час с VPS: полное руководство по настройке от голого сервера до безопасного и готового к работе (сделай свой OpenClaw безопаснее)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Indie-utvecklarens verktygslåda" scheme="https://blog.ittinker.com/categories/Indie-utvecklarens-verktygslada/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="Indie dev" scheme="https://blog.ittinker.com/tags/Indie-dev/"/>
    <category term="Fjärr-SSH" scheme="https://blog.ittinker.com/tags/Fjarr-SSH/"/>
    <category term="Serversäkerhet" scheme="https://blog.ittinker.com/tags/Serversakerhet/"/>
    <content>
      <![CDATA[<blockquote><p>Din nyinköpta VPS är som en olåst dörr – script kiddies över hela världen står och bultar på. Den här guiden visar hur du låser dörren ordentligt, så att din openclaw inte rymmer och ställer till med skit.</p></blockquote><h2 id="0-Innan-vi-satter-igang">0. Innan vi sätter igång</h2><p>Du har precis skaffat en VPS, känner dig peppad och har fått din IP och ditt root-lösenord. Vad gör du sen?</p><p>Många hoppar direkt in och börjar installera mjukvara och rulla ut sina projekt.</p><p><strong>Det är en farlig vana.</strong></p><p>Din VPS har en publik IP, vilket betyder att vem som helst i hela världen kan försöka koppla upp sig mot den. Och med standardinställningarna ser det ut så här:</p><ul><li>Porten är öppen för alla: <strong>22</strong></li><li>Användarnamnet är det välkända <strong>root</strong></li><li>Det enda som står mellan dig och kaos är ett enda lösenord</li></ul><p>Varje dag skannar otaliga automatiserade skript IP-intervall och försöker brutea sig in med vanliga lösenord. Din server är under attack från sekunden den går live.</p><p>Så, <strong>allra första grejen du ska göra när du fått tag på din VPS är inte att installera mjukvara – det är att säkra upp den.</strong></p><hr><h2 id="1-Malet-med-den-har-guiden">1. Målet med den här guiden</h2><p>Målet med den här artikeln är:</p><ul><li>✅ Skapa <strong>säker fjärråtkomst</strong>: SSH-nyckelinloggning + icke-standardport</li><li>✅ Skapa en <strong>vanlig användare</strong>: undvik att köra direkt som root</li><li>✅ Sätt upp en <strong>brandvägg</strong>: öppna bara de portar du faktiskt behöver</li><li>✅ Slå på <strong>nätverksoptimering</strong>: BBR får nätverket att flyga</li><li>✅ Stoppa <strong>brute force-attacker</strong>: fail2ban bannar automatiskt elaka IP:n</li></ul><p>När du är klar med det här har din VPS en gedigen grund, och du kan lugnt börja rulla ut tjänster i den.</p><hr><h2 id="2-Planering-och-funderingar">2. Planering och funderingar</h2><h3 id="Varfor-gora-alla-dessa-installningar">Varför göra alla dessa inställningar?</h3><p>En nyinköpt VPS är som en ny lägenhet rakt från byggentreprenören:</p><table><thead><tr><th>Standardläge</th><th>Risk</th><th>Vår lösning</th></tr></thead><tbody><tr><td>Inloggning som root</td><td>För hög behörighet, stor risk vid misstag</td><td>Skapa vanlig användare + sudo</td></tr><tr><td>Lösenordsinloggning</td><td>Kan knäckas med brute force</td><td>SSH-nyckel-inloggning</td></tr><tr><td>Standardport 22</td><td>Uppsöks aktivt av skanners</td><td>Byt till icke-standardport</td></tr><tr><td>Brandvägg avstängd</td><td>Alla portar exponeras utåt</td><td>UFW släpper endast igenom nödvändiga portar</td></tr><tr><td>Ursprungligt nätverk</td><td>Hög paketförlust, hög latens</td><td>BBR-kongestionskontroll</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Overgripande-flode">Övergripande flöde</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Vi följer den här ordningen, och jag kommer att förklara varför vi gör varje steg.</p><h2 id="3-Steg-for-steg">3. Steg för steg</h2><h3 id="3-1-Forsta-inloggning-och-systemuppdatering">3.1 Första inloggning och systemuppdatering</h3><h4 id="Hamta-serverns-IP">Hämta serverns IP</h4><p>När du har köpt din VPS kommer leverantören att ge dig:</p><ul><li><strong>IP-adress</strong>: till exempel <code>192.168.1.100</code></li><li><strong>Port</strong>: vanligtvis <code>22</code> (vissa leverantörer byter till en annan port)</li><li><strong>Användarnamn</strong>: oftast <code>root</code></li><li><strong>Lösenord</strong>: en slumpmässigt genererad teckensträng</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Anslut-via-SSH">Anslut via SSH</h4><p><strong>Mac / Linux-användare</strong>: öppna terminalen och kör direkt:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows-användare</strong>:</p><ul><li>Windows 10/11 har OpenSSH inbyggt, så du kan köra kommandot ovan direkt i PowerShell eller CMD</li><li>Annars kan du använda verktyg som <a href="https://termius.com/">Termius</a> eller <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>Första gången du ansluter får du en fråga om att bekräfta fingeravtrycket:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Den frågar i princip: “Jag känner inte igen den här maskinen, är du säker på att du vill ansluta?”</p><p>Skriv <code>yes</code> och tryck på Enter. Skriv sedan in lösenordet (<strong>obs: inga tecken syns när du skriver, det är en vanlig säkerhetsfunktion</strong>), och tryck på Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Ser du något i den här stilen betyder det att du är inloggad:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Varför ska du dubbelkolla fingeravtrycket?</strong></p><p>Det är för att skydda dig mot “man-in-the-middle-attacker”. Genom att spara serverns fingeravtryck första gången du ansluter kan du känna igen om någon försöker imitera din server senare – om fingeravtrycket plötsligt ändras vet du att något är lurt.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Lar-kanna-din-server">Lär känna din server</h4><p>När du har loggat in är det läge att kolla läget och se vad din maskin faktiskt har under huven:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Spara den här informationen någonstans, du kommer behöva den när du ska felsöka senare.</p><h4 id="Uppdatera-systemet">Uppdatera systemet</h4><p>När du kollat av servern är det dags för det första riktiga ärendet: att uppdatera systemet. Systemavbilden på en ny server kan vara flera månader gammal, och det kan ha släppts en hel del säkerhetsuppdateringar under tiden:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Så här funkar flaggorna:</strong></p><ul><li><code>apt update</code>: uppdaterar paketindexet</li><li><code>apt full-upgrade</code>: uppgraderar alla paket, inklusive kärnan</li><li><code>-y</code>: svarar automatiskt ja på allt, så du slipper knappa in “yes”</li><li><code>apt autoremove</code>: städar bort beroenden som inte längre behövs</li><li><code>apt autoclean</code>: rensar cachen med nedladdade installationspaket</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Det här steget kan ta några minuter beroende på hur mycket som ska uppdateras. Ibland poppar det upp en fråga under tiden – bara följ instruktionerna på skärmen så går det bra.</p></blockquote><h4 id="Kolla-om-du-behover-starta-om">Kolla om du behöver starta om</h4><p>Efter en kärnuppdatering brukar du behöva starta om servern för att den ska träda i kraft:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Om den säger att en omstart krävs:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Efter omstarten får du SSH:a in igen.</p><h4 id="Installera-standardverktyg">Installera standardverktyg</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Vad är de här verktygen till för?</strong></p><table><thead><tr><th>Verktyg</th><th>Användning</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Låter vanliga användare köra admin-kommandon</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Ladda ner filer</td><td></td></tr><tr><td><code>git</code></td><td>Versionshantering</td><td></td></tr><tr><td><code>vim</code></td><td>Textredigerare</td><td></td></tr><tr><td><code>htop</code></td><td>Snyggare processövervakning</td><td></td></tr><tr><td><code>tree</code></td><td>Visar katalogstruktur som ett träd</td><td></td></tr><tr><td><code>net-tools</code></td><td>Nätverksverktyg (ifconfig, netstat m.m.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Enkel och smidig brandvägg</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Skydd mot brute force-attacker</td><td></td></tr><tr><td><code>neofetch</code></td><td>Snygg visning av systeminfo</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Skapa-en-icke-root-anvandare">3.2 Skapa en icke-root-användare</h3><h4 id="Varfor-inte-kora-direkt-som-root">Varför inte köra direkt som root?</h4><p>root-användaren har alldeles för mycket makt. Ett litet misstag med <code>rm -rf /</code> och allt är borta. För vardagliga sysslor bör du använda en vanlig användare och bara ta till administratörsrättigheter via <code>sudo</code> när det verkligen behövs.</p><blockquote><p>En龙虾 (openclaw) är ju ett riktigt monster – du vågar väl inte ge den root-access?</p></blockquote><h4 id="Skapa-anvandaren">Skapa användaren</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Systemet ber dig ställa in ett lösenord och lite annan info:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Ge-sudo-rattigheter">Ge sudo-rättigheter</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Dubbelkolla att det funkar:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Om utskriften blir <code>root</code> har sudo konfigurerats korrekt.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Smartis</strong></p><p>Skriv <code>exit</code> för att byta tillbaka till root-användaren. I nästa steg fortsätter vi att ställa in allt som root, och byter till den vanliga användaren när konfigurationen är klar.</p></blockquote><hr><h3 id="3-3-Stall-in-inloggning-med-SSH-nyckel">3.3 Ställ in inloggning med SSH-nyckel</h3><h4 id="Nyckelautentisering-vs-losenordsautentisering">Nyckelautentisering vs. lösenordsautentisering</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Att logga in med nycklar är mycket säkrare än med lösenord:</p><ul><li>Lösenord kan brute-forceas, nycklar är i princip omöjliga att knäcka</li><li>Slipper knappa in lösenordet varje gång – mycket smidigare</li><li>Även om lösenordet läcker kommer ingen in utan din privata nyckel</li></ul><h4 id="Steg-1-Generera-nyckelparet-lokalt">Steg 1: Generera nyckelparet lokalt</h4><p>Kör detta på <strong>din egen dator</strong> (inte på servern):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Du får den här uppmaningen:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Tryck bara Enter för att använda standardsökvägen. Här använder vi ./ittinker , vilket betyder att filen sparas i den aktuella mappen med namnet ittinker</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Du kan lösenordsskydda nyckeln (ett extra lager säkerhet), eller trycka Enter direkt för att hoppa över det.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>När nyckeln är genererad hittar du två filer i mappen <code>~/.ssh/</code> (nedan är standardfilnamnen, så här blir det om du tryckte Enter tidigare):</p><ul><li><code>id_ed25519</code>: <strong>privat nyckel</strong>, absolut inte får läcka ut!</li><li><code>id_ed25519.pub</code>: <strong>publik nyckel</strong>, ska laddas upp till servern</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> är den algoritm som rekommenderas idag, den är säkrare och har kortare nycklar än traditionell RSA. Om ditt system är för gammalt och inte stöder den kan du använda <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>En liten detalj: nycklarna som ed25519 genererar är ganska små, medan RSA-filerna är stora. Jag frågade AI och fick veta att storleken inte spelar någon roll, det beror bara på algoritmen.</p></blockquote><h4 id="Steg-tva-Ladda-upp-den-publika-nyckeln-till-servern">Steg två: Ladda upp den publika nyckeln till servern</h4><p><strong>Metod A: Använd ssh-copy-id (rekommenderas)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>När du har skrivit in lösenordet kopieras den publika nyckeln automatiskt till servern.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Metod B: Kopiera manuellt</strong></p><p>Om <code>ssh-copy-id</code> inte fungerar kan du göra det manuellt:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Kopiera det som skrivs ut (en lång textsträng som börjar med <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Rättigheter är superviktigt!</strong></p><p>SSH är väldigt petigt med filrättigheter:</p><ul><li><code>.ssh</code> katalog: 700 (bara din egen användare har tillgång)</li><li><code>authorized_keys</code> fil: 600 (bara din egen användare kan läsa och skriva)</li></ul><p>Är rättigheterna fel kommer SSH att vägra använda nyckeln vid inloggning.</p></blockquote><h4 id="Steg-3-Testa-nyckelinloggning">Steg 3: Testa nyckelinloggning</h4><p><strong>Öppna ett nytt terminalfönster</strong> (låt det ursprungliga vara öppet ifall du råkar ställa in fel så du kan åtgärda det), och testa att logga in med nyckel:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Om du kan logga in utan att behöva skriva in lösenord så är nyckeln korrekt konfigurerad! 🎉</p><p>(Om du har satt ett passphrase för din privata nyckel kommer du att bli ombedd att skriva in det, det är helt normalt)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Här la vi till en -i-parameter, för vi har inte den här nyckeln i standardsökvägen, utan i den aktuella sökvägen. Om vi inte anger det kommer systemet att använda standardnyckeln.</p></blockquote><hr><h3 id="3-4-Sakra-upp-SSH">3.4 Säkra upp SSH</h3><p>Nu när nyckelinloggning fungerar är det dags att härda SSH:</p><ol><li>Ändra standardporten (slipper portscanners)</li><li>Stäng av lösenordsinloggning</li><li>Förbjuda root från att logga in direkt</li></ol><h4 id="Redigera-SSH-konfigurationsfilen">Redigera SSH-konfigurationsfilen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Leta upp och ändra följande inställningar (vissa kan vara utkommenterade, ta bort <code>#</code> i början):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Spara och avsluta (<code>ctrl + o</code>).</p><blockquote><p>I Nano sparar du med ctrl + o. Den frågar efter filnamnet, tryck bara på Enter. För att avsluta trycker du ctrl + x.</p></blockquote><h4 id="Starta-om-SSH-tjansten">Starta om SSH-tjänsten</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Viktig påminnelse!</strong></p><p><strong>Stäng inte det aktuella terminalfönstret!</strong> Testa först i ett nytt fönster att den nya konfigurationen fungerar och att du kan logga in:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Om det funkar kan du stänga det gamla fönstret. Om du inte kommer in kan du fortfarande fixa konfigurationen i det gamla fönstret.</p></blockquote><blockquote><p>Om du har köpt en lättviktsserver är chansen stor att du inte kan ändra den här porten, men en traditionell ECS går bra att ändra. Tänk på det.</p></blockquote><hr><h3 id="3-5-Konfigurera-UFW-brandvaggen">3.5 Konfigurera UFW-brandväggen</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) är Ubuntus standardbrandvägg. Den är enkel att ställa in men ändå riktigt kraftfull.</p><h4 id="Grundlaggande-konfiguration">Grundläggande konfiguration</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Aktivera-brandvaggen">Aktivera brandväggen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Du får en fråga som ser ut så här:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Skriv <code>y</code> för att bekräfta.</p><h4 id="Kontrollera-statusen">Kontrollera statusen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 var bara en slarv från min sida, ni kör bara med de värden som passar er egen situation</p></blockquote><p>Utskriften ser ut ungefär så här:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Snabbreferens-for-vanliga-kommandon">Snabbreferens för vanliga kommandon</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Sla-pa-BBR-acceleration">3.6 Slå på BBR-acceleration</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) är en TCP-styralgoritm utvecklad av Google som kan ge nätverksprestandan ett rejält lyft.</p><h4 id="Sla-pa-med-ett-klick">Slå på med ett klick</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Kontrollera-att-det-ar-aktiverat">Kontrollera att det är aktiverat</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Utskriften bör vara:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Utskriften ser ut ungefär så här:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Effekten av BBR</strong></p><p>När du har slagit på BBR, särskilt i miljöer med instabilt nätverk eller hög fördröjning, kommer du garanterat att märka:</p><ul><li>Snabbare nedladdningshastigheter</li><li>Mer responsiva SSH-sessioner</li><li>Snabbare webbsideladdningar</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Konfigurera-fail2ban-for-att-skydda-mot-brute-force-attacker">3.7 Konfigurera fail2ban för att skydda mot brute force-attacker</h3><p>fail2ban håller koll på loggarna och bannlyser automatiskt IP-adresser som misslyckas med att logga in för många gånger.</p><h4 id="Grundlaggande-konfiguration-2">Grundläggande konfiguration</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Leta upp avsnittet <code>[sshd]</code> och se till att följande inställningar är på plats:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Starta-tjansten">Starta tjänsten</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Kolla-statusen">Kolla statusen</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Utskriften ser ut ungefär så här:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Vanliga-kommandon">Vanliga kommandon</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Valfritt-Hantera-flera-servrar-med-SSH-Config">3.8 [Valfritt] Hantera flera servrar med SSH Config</h3><p>Om du har flera servrar är det ganska tråkigt att skriva in <code>ssh -p 22000 user@ip</code> varje gång. Du kan förenkla det rejält med hjälp av SSH Config.</p><h4 id="Konfigurationsfil">Konfigurationsfil</h4><p>Redigera <code>~/.ssh/config</code> på <strong>din lokala dator</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Lägg till konfigurationen:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Sa-anvander-du-det">Så använder du det</h4><p>Nu kan du koppla upp dig direkt med ett alias:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Slipper du att memorera IP, port och användarnamn!</p><hr><h3 id="3-9-Valfritt-Tillat-endast-Cloudflare">3.9 [Valfritt] Tillåt endast Cloudflare</h3><p>Om din sajt ligger helt och hållet bakom Cloudflare kan du ställa in så att port 80/443 enbart tillåter Cloudflares IP-adresser – det ger dig ett extra lager av säkerhet.</p><blockquote><p>⚠️ OBS: För att den här konfigurationen ska funka måste din domän redan vara kopplad till Cloudflare CDN.</p></blockquote><h4 id="Automatiskt-konfigurationsskript">Automatiskt konfigurationsskript</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Det här skriptet kommer att:</p><ol><li>Hämta de senaste IP-undersnäten direkt från Cloudflare</li><li>Lägg till UFW-regler så att bara dessa IP-adresser når port 80/443</li><li>Ladda om UFW</li></ol><h4 id="Satt-upp-schemalagd-uppdatering">Sätt upp schemalagd uppdatering</h4><p>Cloudflares IP-undersnät kan ändras med tiden, så vi ställer in en automatisk uppdatering varje vecka:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Stall-in-tidszon">3.10 Ställ in tidszon</h3><p>Standardtidszonen är antagligen UTC. Byt till din egen tidszon så är det mycket lättare att läsa loggarna:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Valfritt-Konfigurera-automatiska-sakerhetsuppdateringar">3.11 [Valfritt] Konfigurera automatiska säkerhetsuppdateringar</h3><p>Låt systemet sköta installationen av säkerhetspatchar automatiskt, så slipper du göra allt manuellt varje gång:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Välj “Yes” för att aktivera automatiska uppdateringar.</p><blockquote><p>💡 Den här funktionen installerar <strong>säkerhetsuppdateringar</strong> automatiskt, men uppgraderar inte till en ny stor version, så det är ganska säkert.</p></blockquote><hr><h2 id="4-Sammanfattning">4. Sammanfattning</h2><h3 id="Checklista-for-initieringen">Checklista för initieringen</h3><p>När du har ställt in allt ovan, kör igenom den här checklistan för att dubbelkolla:</p><table><thead><tr><th>Kontrollpunkt</th><th>Kommando</th><th>Förväntat resultat</th></tr></thead><tbody><tr><td>Systemet är uppdaterat</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Inga paket att uppgradera</td></tr><tr><td>Vanlig användare kan sudo</td><td><code>sudo whoami</code></td><td>Skriver ut <code>root</code></td></tr><tr><td>Nyckel-inloggning funkar</td><td><code>ssh yourname@ip -p port</code></td><td>Logga in utan lösenord</td></tr><tr><td>Lösenordsinloggning är avstängd</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH-porten är ändrad</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Porten du valde</td></tr><tr><td>Brandväggen är aktiverad</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR är påslaget</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban körs</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Tidszon är inställd</td><td><code>timedatectl</code></td><td>Asia/Shanghai eller din egen tidszon</td></tr><tr><td>Lokal SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>Serveralias är konfigurerat</td></tr></tbody></table><h3 id="Viktiga-filplatsningar">Viktiga filplatsningar</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Sakerhetsbest-practices">Säkerhetsbest practices</h3><ol><li><strong>Uppdatera systemet regelbundet</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Kolla inloggningsloggar regelbundet</strong>: <code>lastb</code> (misslyckade inloggningar), <code>last</code> (lyckade inloggningar)</li><li><strong>Håll koll på fail2ban-bannlysningar</strong></li><li><strong>Backa viktiga config-filer innan du ändrar dem</strong></li></ol><hr><h2 id="5-Felsokningsloggar">5. Felsökningsloggar</h2><h3 id="Q1-Nyckel-inloggningen-misslyckas-du-maste-anda-knappa-in-losenordet">Q1: Nyckel-inloggningen misslyckas, du måste ändå knappa in lösenordet?</h3><p><strong>Möjliga orsaker:</strong></p><ol><li><p><strong>Rättighetsproblem</strong> (vanligast)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Den offentliga nyckeln kopierades fel</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux strular</strong> (på CentOS/RHEL-system)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Kan-du-inte-ansluta-efter-att-ha-bytt-port">Q2: Kan du inte ansluta efter att ha bytt port?</h3><p><strong>Felsökningssteg:</strong></p><ol><li><p>Dubbekolla att den nya porten är öppen i brandväggen:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Bekräfta att SSH-konfigurationen stämmer:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Kontrollera att SSH-tjänsten körs:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Om du inte kommer in alls, logga in via din leverantörs VNC/konsol och laga det där.</p></li></ol><h3 id="Q2-5-Portandringen-ger-overhuvudtaget-ingen-effekt-Molnleverantorers-latta-servrar">Q2.5: Portändringen ger överhuvudtaget ingen effekt? (Molnleverantörers lätta servrar)</h3><p><strong>Symptom</strong>: Du ändrade <code>/etc/ssh/sshd_config</code>, men efter att ha startat om tjänsten lyssnar den fortfarande på port 22 och den nya porten fungerar inte.</p><p><strong>Diagnosmetod</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Om utdatan ser ut ungefär så här:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Betyder det att port 27 lyssnas på av <code>init</code> (PID 1) och inte av <code>sshd</code>-processen.</p><p><strong>Varför</strong>: Vissa molnleverantörers “lightweight application servers” eller “container instances” har sin SSH proxad på <strong>plattformsnivå</strong>, så din sshd-konfiguration inuti servern fungerar inte.</p><p><strong>Lösning</strong>:</p><table><thead><tr><th>Instanstyp</th><th>Hur du ändrar SSH-porten</th></tr></thead><tbody><tr><td>Traditionell ECS</td><td>Ändra i sshd_config ✅</td></tr><tr><td>Lightweight-server</td><td>Måste kanske ändras i molnets kontrollpanel, eller stöds inte alls</td></tr><tr><td>Container-instans</td><td>Stöds oftast inte att ändras</td></tr></tbody></table><p>Om din instans inte stöder att byta port är <strong>andra säkerhetsåtgärder ännu viktigare</strong>:</p><ul><li>✅ Skapa en vanlig användare + inaktivera root-inloggning</li><li>✅ SSH-nyckelinloggning + inaktivera lösenordsinloggning</li><li>✅ fail2ban mot brute force-attacker</li></ul><p>Om du får dessa på plats är säkerheten fortfarande hög.</p><h3 id="Q3-fail2ban-har-bannlyst-mig-sjalv">Q3: fail2ban har bannlyst mig själv?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Kan-inte-na-webbplatsen-efter-att-UFW-aktiverats">Q4: Kan inte nå webbplatsen efter att UFW aktiverats?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-Kommandot-sager-att-sudo-inte-hittas">Q5: Kommandot säger att sudo inte hittas?</h3><p>Debian minimal-installation kanske inte har sudo, installera med root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-One-click-initieringsskript-att-anvanda-nar-du-kanner-dig-bekvam">6. One-click initieringsskript (att använda när du känner dig bekväm)</h2><p>När du är bekant med stegen ovan kan du använda det här skriptet för att snabbt initiera.</p><blockquote><p>⚠️ <strong>OBS</strong>: Innan du kör skriptet, se till att du redan har din SSH-publiknyckel redo.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Hur-mycket-sakrare-har-din-server-blivit-egentligen">7. Hur mycket säkrare har din server blivit egentligen?</h2><table><thead><tr><th>Steg</th><th>Vad du gjorde</th><th>Varför det är viktigt</th></tr></thead><tbody><tr><td>Uppdatera systemet</td><td>Installerade de senaste patcharna</td><td>Lagar kända sårbarheter</td></tr><tr><td>Skapa ny användare</td><td>Slutar använda root direkt</td><td>Minskar risken för misstag</td></tr><tr><td>SSH-nycklar</td><td>Bytte till nycklar istället för lösenord</td><td>Går inte att brute-forcea</td></tr><tr><td>Ändra port</td><td>Undviker standardport 22</td><td>Minskar chansen att bli skannad</td></tr><tr><td>Inaktivera lösenord</td><td>Tillåter bara inloggning med nyckel</td><td>Eliminerar lösenordsattacker helt</td></tr><tr><td>Inaktivera root</td><td>Root kan inte logga in direkt</td><td>Ökar svårigheten för angripare</td></tr><tr><td>UFW-brandvägg</td><td>Öppnar bara nödvändiga portar</td><td>Minskar angreppsytan</td></tr><tr><td>BBR-acceleration</td><td>Optimerar nätverksprestanda</td><td>Snabbar upp åtkomsten</td></tr><tr><td>fail2ban</td><td>Bannar automatiskt elaka IP-adresser</td><td>Förhindrer ihärdiga attacker</td></tr></tbody></table><p>När du har kört igenom allt detta har din server redan passerat <strong>90%</strong> av alla VPS:ar när det gäller säkerhet.</p><hr><h2 id="Smygtitt-pa-nasta-del">Smygtitt på nästa del</h2><p>I nästa avsnitt kör vi en <strong>snabbreferens för konfiguration av SSH-nyckel-inloggning</strong>, där vi dyker djupare in i:</p><ul><li>Hur du genererar nycklar på olika operativsystem</li><li>Hantering av flera nycklar</li><li>Konfiguration av SSH Agent</li><li>Inställningar för vanliga SSH-klienter</li></ul><hr><p><em>Senast uppdaterad: januari 2026</em></p><p><em>Serie om verktygslådan för solo-utvecklare, följ gärna med!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/sv/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/sv/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Säkra din nya VPS på 1 timme: SSH-nyckelloggning, icke-standardport, vanlig användare, brandvägg, fail2ban och BBR- acceleration. Följ den här guiden för att stärka din server.</summary>
    <title>Första timmen med din nya VPS: komplett guide från bar burk till säker och användbar (gör din OpenClaw säkrare)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="กล่องเครื่องมือสำหรับ Indie Dev" scheme="https://blog.ittinker.com/categories/%E0%B8%81%E0%B8%A5%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%84%E0%B8%A3%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A-Indie-Dev/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="独立开发" scheme="https://blog.ittinker.com/tags/%E7%8B%AC%E7%AB%8B%E5%BC%80%E5%8F%91/"/>
    <category term="RemoteSSH" scheme="https://blog.ittinker.com/tags/RemoteSSH/"/>
    <category term="ความปลอดภัยเซิร์ฟเวอร์" scheme="https://blog.ittinker.com/tags/%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%9B%E0%B8%A5%E0%B8%AD%E0%B8%94%E0%B8%A0%E0%B8%B1%E0%B8%A2%E0%B9%80%E0%B8%8B%E0%B8%B4%E0%B8%A3%E0%B9%8C%E0%B8%9F%E0%B9%80%E0%B8%A7%E0%B8%AD%E0%B8%A3%E0%B9%8C/"/>
    <content>
      <![CDATA[<blockquote><p>VPS เครื่องใหม่ที่เพิ่งซื้อมาก็เหมือนประตูบ้านที่ยังไม่ได้ล็อก มีสคริปต์คิดดีจากทั่วโลกคอยมาเคาะอยู่ตลอดเวลา บทความนี้จะพาคุณมาล็อกประตูให้แน่นหนา เผื่อกันลูกเล่นตัวป่วน (openclaw) ของคุณไม่ให้วิ่งแจ๋นไปไกล</p></blockquote><h2 id="0、มาวางม้ากันก่อน">0、มาวางม้ากันก่อน</h2><p>เพิ่งซื้อ VPS มาใหม่ ตื่นเต้นจัด คว้า IP กับพาสเวิร์ด root มาได้แล้ว แล้วจะทำยังไงต่อ?</p><p>คนส่วนใหญ่มักจะรีบลงมือติดตั้งซอฟต์แวร์และเดployโปรเจกต์กันเลย</p><p><strong>นี่คือนิสัยที่อันตรายชะมัด</strong></p><p>VPS ของคุณมี Public IP อยู่ นั่นหมายความว่าใครก็ตามในโลกนี้สามารถลองเชื่อมต่อเข้ามาได้ และในค่าเริ่มต้นนั้น:</p><ul><li>พอร์ตเปิดเผยเป็น <strong>22</strong></li><li>ยูสเซอร์เนมที่คนรู้จักกันดีคือ <strong>root</strong></li><li>เหลือแค่พาสเวิร์ดตัวเดียวที่คอยปกป้องคุณอยู่</li></ul><p>ทุกวันมีสคริปต์อัตโนมัติมากมายคอยสแกนช่วง IP เพื่อลองดรายบังคับพาสเวิร์ดที่คนใช้กันบ่อยๆ ตั้งแต่เซิร์ฟเวอร์ของคุณออนไลน์เป็นต้นมา มันก็ถูกโจมตีอยู่แล้ว</p><p>ดังนั้น <strong>สิ่งแรกที่ต้องทำหลังจากได้ VPS มา ไม่ใช่ลงซอฟต์แวร์นะ แต่คือตั้งค่าความปลอดภัยเบื้องต้นให้เรียบร้อยก่อนเลย</strong></p><hr><h2 id="1、เป้าหมายที่เราจะทำ">1、เป้าหมายที่เราจะทำ</h2><p>เป้าหมายของบทความนี้คือ:</p><ul><li>✅ ตั้งค่า <strong>การเข้าถึงระยะไกลอย่างปลอดภัย</strong>: ล็อกอินด้วย SSH Key + เปลี่ยนจากพอร์ตเริ่มต้น</li><li>✅ สร้าง <strong>ผู้ใช้ทั่วไป</strong>: เลิกใช้ root โดยตรงกันเถอะ</li><li>✅ ตั้งค่า <strong>ไฟร์วอลล์</strong>: เปิดเฉพาะพอร์ตที่จำเป็นจริงๆ</li><li>✅ เปิดใช้งาน <strong>ตัวเร่งเครือข่าย</strong>: BBR ช่วยให้เน็ตพุ่งสุดป้าย</li><li>✅ ป้องกัน <strong>การถอนรหัสผ่านแบบเดรัจฉีน</strong>: fail2ban แบน IP ตัวการให้เองอัตโนมัติ</li></ul><p>ทำครบทุกข้อแล้ว ตอนนี้ VPS ของคุณจะมีพื้นฐานที่แน่นอน พร้อมที่จะลงมือเดploy บริการต่างๆ ได้อย่างสบายใจแล้วล่ะ</p><hr><h2 id="2-วางแผนและทำความเข้าใจ">2. วางแผนและทำความเข้าใจ</h2><h3 id="ทำไมต้องมาตั้งค่าพวกนี้กันนะ">ทำไมต้องมาตั้งค่าพวกนี้กันนะ?</h3><p>VPS ที่เพิ่งซื้อมาใหม่ก็เหมือนบ้านที่เพิ่งสร้างเสร็จยังไม่ได้ตกแต่งเลยนั่นแหละ:</p><table><thead><tr><th>สถานะเริ่มต้น</th><th>ความเสี่ยง</th><th>ทางออกของเรา</th></tr></thead><tbody><tr><td>ล็อกอินด้วย root ตรงๆ</td><td>สิทธิ์สูงเกินไป พลาดทีเดียวพังใหญ่</td><td>สร้าง user ปกติ + sudo</td></tr><tr><td>ล็อกอินด้วยรหัสผ่าน</td><td>โดน brute force แตกได้</td><td>ล็อกอินด้วย SSH Key</td></tr><tr><td>พอร์ต 22 ค่าเริ่มต้น</td><td>โดนสแกนเน้นๆ</td><td>เปลี่ยนเป็นพอร์ตที่ไม่มาตรฐาน</td></tr><tr><td>ปิดไฟร์วอลล์</td><td>เปิดพอร์ตหมดทุกอย่าง</td><td>UFW เปิดเฉพาะพอร์ตที่จำเป็น</td></tr><tr><td>เน็ตเวิร์กเดิมๆ</td><td>丢包สูง ดีเลย์มาก</td><td>อัลกอริทึมควบคุม BBR</td></tr></tbody></table><h3 id="ขั้นตอนโดยรวม">ขั้นตอนโดยรวม</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>เราจะทำตามลำดับนี้เลยนะ แล้วก็จะอธิบายให้ฟังทุกขั้นตอนว่าทำไมถึงทำแบบนี้</p><h2 id="3-ขั้นตอนการจัดการ">3. ขั้นตอนการจัดการ</h2><h3 id="3-1-ล็อกอินครั้งแรกและอัปเดตระบบ">3.1 ล็อกอินครั้งแรกและอัปเดตระบบ</h3><h4 id="ดึง-IP-ของเซิร์ฟเวอร์">ดึง IP ของเซิร์ฟเวอร์</h4><p>หลังจากซื้อ VPS แล้ว ผู้ให้บริการจะส่งอะไรมาให้บ้าง:</p><ul><li><strong>IP Address</strong>: เช่น <code>192.168.1.100</code></li><li><strong>Port</strong>: ปกติจะเป็น <code>22</code> (บางผู้ให้บริการอาจเปลี่ยนเป็นพอร์ตอื่น)</li><li><strong>Username</strong>: ปกติจะเป็น <code>root</code></li><li><strong>Password</strong>: สตริงตัวอักษรที่สุ่มสร้างขึ้นมา</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="การเชื่อมต่อ-SSH">การเชื่อมต่อ SSH</h4><p><strong>สำหรับสาวก Mac / Linux</strong>: เปิด Terminal แล้วพิมพ์คำสั่งนี้ลงไปได้เลย:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>สำหรับสาวก Windows</strong>:</p><ul><li>Windows 10/11 มี OpenSSH มาให้ในตัว สามารถใช้คำสั่งด้านบนใน PowerShell หรือ CMD ได้เลย</li><li>หรือจะใช้โปรแกรมอย่าง <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> ก็ได้เช่นกัน</li></ul><p>ตอนเชื่อมต่อครั้งแรก จะมีข้อความให้ยืนยัน Fingerprint แบบนี้:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>นี่คือระบบกำลังถามเราอยู่ว่า: “ตู้นี้ของใหม่ ไม่คุ้นเคยนะ แน่ใจนะว่าจะเชื่อมต่อ?”</p><p>พิมพ์ <code>yes</code> แล้วกด Enter จากนั้นก็ใส่ Password (ข้อควรระวัง: ตอนพิมพ์จะไม่มีตัวอักษรขึ้นมาโชว์ให้เห็นเลย นี่คือฟีเจอร์ความปลอดภัยปกติ) แล้วกด Enter ไป</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>ถ้าเจอข้อความประมาณนี้ แปลว่าล็อกอินสำเร็จแล้ว:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>ทำไมต้องเช็ค Fingerprint?</strong></p><p>เพื่อป้องกัน “Man-in-the-Middle Attack” นะฮะ การจดจำ fingerprint ตั้งแต่ครั้งแรกที่เชื่อมต่อ แล้วคราวหน้าถ้ามันเปลี่ยนไป แสดงว่าอาจมีคนแอบปลอมตัวเป็นเซิร์ฟเวอร์ของเราก็ได้</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="มาทำความรู้จักกับเซิร์ฟเวอร์ของคุณกันก่อน">มาทำความรู้จักกับเซิร์ฟเวอร์ของคุณกันก่อน</h4><p>หลังจากล็อกอินเข้าไปแล้ว มาดูสภาพรวมๆ ของเครื่องนี้กันก่อนเลย:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>จำข้อมูลพวกนี้เอาไว้นะ เดี๋ยวตอนเช็คปัญหาทีหลังจะได้มีใช้</p><h4 id="อัปเดตระบบ">อัปเดตระบบ</h4><p>พอรู้ข้อมูลเซิร์ฟเวอร์ครบแล้ว ภารกิจแรกที่ต้องทำเลยคืออัปเดตระบบ ไอ้เดิมอิมเมจของเซิร์ฟเวอร์ใหม่อาจจะเป็นเวอร์ชั่นของเมื่อไม่กี่เดือนที่แล้ว ซึ่งช่วงนั้นอาจจะมีแพตช์ความปลอดภัยใหม่ๆ ออกมาแล้วก็ได้:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>อธิบายพารามิเตอร์:</strong></p><ul><li><code>apt update</code>: อัปเดต index ของแพ็กเกจ</li><li><code>apt full-upgrade</code>: อัปเกรดซอฟต์แวร์ทุกตัว รวมไปถึงเคอร์เนลด้วย</li><li><code>-y</code>: ยืนยันอัตโนมัติ ไม่ต้องมานั่งพิมพ์ yes เอง</li><li><code>apt autoremove</code>: ลบ dependency ที่ไม่ต้องใช้แล้วทิ้ง</li><li><code>apt autoclean</code>: ล้างแคชของแพ็กเกจที่ดาวน์โหลดมา</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ ขั้นตอนนี้อาจจะใช้เวลาสักไม่กี่นาที ขึ้นอยู่กับว่ามีอัปเดตเยอะแค่ไหน ถ้าระหว่างทางมันถามให้ยืนยันบ้าง ก็กดไปตามลอจิกของมันได้เลยครับ</p></blockquote><h4 id="เช็คดูว่าต้องรีบูตไหม">เช็คดูว่าต้องรีบูตไหม</h4><p>หลังอัปเดตเคอร์เนล ปกติแล้วมักจะต้องรีบูตถึงจะมีผล:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>ถ้าขึ้นมาบอกว่าต้องรีบูต:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>หลังรีบูตเสร็จก็ต้องเข้ามาเชื่อมต่อ SSH ใหม่อีกรอบนะ</p><h4 id="ติดตั้งเครื่องมือที่ใช้บ่อยๆ">ติดตั้งเครื่องมือที่ใช้บ่อยๆ</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>เครื่องมือพวกนี้เอาไว้ทำอะไร:</strong></p><table><thead><tr><th>เครื่องมือ</th><th>ไว้ทำอะไร</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>ให้ยูสเซอร์ทั่วไปรันคำสั่งแอดมินได้</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>โหลดไฟล์</td><td></td></tr><tr><td><code>git</code></td><td>คุมเวอร์ชัน</td><td></td></tr><tr><td><code>vim</code></td><td>เอดิเตอร์แต่งข้อความ</td><td></td></tr><tr><td><code>htop</code></td><td>โมนิเตอร์โปรเซสที่หน้าตาดีกว่า</td><td></td></tr><tr><td><code>tree</code></td><td>โชว์โครงสร้างโฟลเดอร์แบบต้นไม้</td><td></td></tr><tr><td><code>net-tools</code></td><td>เครื่องมือเน็ตเวิร์ก (ifconfig, netstat ฯลฯ)</td><td></td></tr><tr><td><code>ufw</code></td><td>ไฟร์วอลล์ใช้ง่ายๆ</td><td></td></tr><tr><td><code>fail2ban</code></td><td>กัน Brute-force</td><td></td></tr><tr><td><code>neofetch</code></td><td>โชว์ข้อมูลระบบสวยๆ</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><hr><h3 id="3-2-สร้าง-User-ที่ไม่ใช่-root">3.2 สร้าง User ที่ไม่ใช่ root</h3><h4 id="ทำไมไม่ใช้-root-ไปเลย">ทำไมไม่ใช้ root ไปเลย?</h4><p>สิทธิ์ของ root มันสูงเกินไป พลาดนิดเดียว <code>rm -rf /</code> ก็อาจหายหมดทั้งเครื่องเลย ปกติเราควรใช้งานผ่าน user ทั่วไป แล้วค่อยเรียกใช้สิทธิ์แอดมินผ่าน <code>sudo</code> เมื่อไหร่ที่ต้องการจริงๆ</p><blockquote><p>ลอบสเตอร์ (openclaw) มันคือมอนสเตอร์นะ จะกล้าไปยกสิทธิ์ root ให้มันใช้ได้ยังไงกัน?</p></blockquote><h4 id="สร้าง-User-ใหม่">สร้าง User ใหม่</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>ระบบจะให้เราตั้งรหัสผ่านและกรอกข้อมูลนิดหน่อย:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="ตั้งสิทธิ์-sudo">ตั้งสิทธิ์ sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>ลองเช็คดูหน่อย:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>ถ้าขึ้นผลลัพธ์ว่า <code>root</code> แปลว่าตั้งค่า sudo สำเร็จแล้ว<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>ทริคเล็กๆ</strong></p><p>พิมพ์ <code>exit</code> เพื่อสลับกลับไปใช้งาน root ขั้นตอนต่อจากนี้เราจะใช้ root ตั้งค่าต่อไปก่อน พอเสร็จแล้วค่อยสลับกลับไปใช้ user ทั่วไปนะ</p></blockquote><hr><h3 id="3-3-ตั้งค่าล็อกอินด้วย-SSH-Key">3.3 ตั้งค่าล็อกอินด้วย SSH Key</h3><h4 id="ยืนยันตัวตนด้วย-Key-vs-ใช้รหัสผ่าน">ยืนยันตัวตนด้วย Key vs. ใช้รหัสผ่าน</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>การใช้ Key ปลอดภัยกว่าใช้รหัสผ่านเยอะเลย:</p><ul><li>รหัสผ่านโดน Brute force ได้ แต่ Key แทบจะเป็นไปไม่ได้เลย</li><li>สะดวกกว่า ไม่ต้องคอยพิมพ์รหัสผ่านทุกครั้ง</li><li>แม้รหัสผ่านจะรั่ว ถ้าไม่มี Private key ก็เข้ามาไม่ได้อยู่ดี</li></ul><h4 id="ขั้นตอนที่-1-สร้าง-Key-pair-ที่เครื่องตัวเอง">ขั้นตอนที่ 1: สร้าง Key pair ที่เครื่องตัวเอง</h4><p>รันบน <strong>เครื่องของคุณเอง</strong> (ไม่ใช่เซิร์ฟเวอร์) นะ:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>ระบบจะขึ้นข้อความถามแบบนี้:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>กด Enter ผ่านไปเลยเพื่อใช้พาธเริ่มต้นเลยก็ได้ ในที่นี้เราใช้ ./ittinker หมายความว่าเซฟไว้ในโฟลเดอร์ปัจจุบัน ชื่อไฟล์ ittinker</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>จะให้ตั้งพาสเวิร์ดป้องกันคีย์ (เพิ่มชั้นความปลอดภัย) หรือจะกด Enter ผ่านเพื่อเว้นว่างไว้เลยก็ได้</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>พอสร้างเสร็จ คุณจะเห็นไฟล์อยู่ในโฟลเดอร์ <code>~/.ssh/</code> 2 ไฟล์ (ด้านล่างคือชื่อไฟล์เริ่มต้นนะ ถ้ากด Enter ผ่านไปก็จะได้แบบนี้):</p><ul><li><code>id_ed25519</code>: <strong>Private Key</strong> ห้ามปล่อยให้รั่วไหลเด็ดขาด!</li><li><code>id_ed25519.pub</code>: <strong>Public Key</strong> เอาไว้สำหรับอัปโหลดขึ้นเซิร์ฟเวอร์</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> คืออัลกอริทึมที่แนะนำในตอนนี้ ปลอดภัยกว่าและคีย์สั้นกว่า RSA แบบดั้งเดิม ถ้าระบบของคุณเก่าเกินไปและไม่รองรับ ก็ใช้ <code>ssh-keygen -t rsa -b 4096</code> แทนได้</p></blockquote><blockquote><p>เกร็ดเล็กๆ น้อยๆ นะ คีย์ที่สร้างจาก ed25519 จะมีขนาดเล็กกว่าคีย์จาก rsa ที่ไฟล์ใหญ่กว่าเยอะมาก ลองไปถาม AI ดูถึงรู้ว่าขนาดไม่ได้มีผลอะไรหรอก มันขึ้นอยู่กับอัลกอริทึมต่างหาก</p></blockquote><h4 id="ขั้นตอนที่สอง-อัปโหลด-Public-Key-ขึ้นเซิร์ฟเวอร์">ขั้นตอนที่สอง: อัปโหลด Public Key ขึ้นเซิร์ฟเวอร์</h4><p><strong>วิธี A: ใช้ ssh-copy-id (แนะนำ)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>ใส่พาสเวิร์ดเสร็จ Public Key ก็จะถูกคัดลอกขึ้นเซิร์ฟเวอร์ให้อัตโนมัติเลย</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>วิธี B: คัดลอกเองแบบแมนนวล</strong></p><p>ถ้า <code>ssh-copy-id</code> ใช้ไม่ได้ ก็ทำแบบแมนนวลได้เลย:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>ก๊อปปี้ข้อความที่ได้ (มันจะเป็นข้อความยาวๆ ที่ขึ้นต้นด้วย <code>ssh-ed25519</code>)</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>เรื่อง Permission สำคัญมาก!</strong></p><p>SSH จะเข้มงวดเรื่องสิทธิ์การเข้าถึงไฟล์อยู่แล้ว:</p><ul><li>โฟลเดอร์ <code>.ssh</code>: 700 (ให้เข้าถึงได้แค่ยูสเซอร์ตัวเอง)</li><li>ไฟล์ <code>authorized_keys</code>: 600 (ให้แค่ยูสเซอร์ตัวเองอ่านและเขียนได้)</li></ul><p>ถ้าตั้งสิทธิ์ผิด SSH จะไม่ยอมให้ล็อกอินด้วย Key แน่นอน</p></blockquote><h4 id="ขั้นตอนที่-3-ทดสอบการล็อกอินด้วย-Key">ขั้นตอนที่ 3: ทดสอบการล็อกอินด้วย Key</h4><p><strong>เปิดหน้าต่าง Terminal ใหม่ขึ้นมา</strong> (อย่าพึ่งปิดหน้าต่างเดิมนะ เผื่อไปตั้งค่าพลา้ยยังได้กู้คืน) แล้วลองทดสอบล็อกอินด้วย Key ดู:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>ถ้าเข้าได้โดยไม่ต้องกรอกพาสเวิร์ด แปลว่าตั้งค่า Key สำเร็จแล้วจ้า! 🎉</p><p>(ถ้าตอนสร้าง Private key คุณตั้ง passphrase ไว้ มันจะขึ้นให้กรอกพาสเวิร์ดของ Private key นะ อันนี้ปกติแล้ว)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>ตรงนี้เราเพิ่มพารามิเตอร์ -i เข้าไป เพราะ Key อันนี้เราไม่ได้เก็บไว้ที่ Path เริ่มต้น แต่เก็บไว้ที่ Path ปัจจุบันแทน ถ้าไม่ระบุให้ชัดเจน ระบบจะไปเรียกใช้ Key ใน Path เริ่มต้นให้เอง</p></blockquote><hr><h3 id="3-4-ปรับแต่งความปลอดภัยให้-SSH">3.4 ปรับแต่งความปลอดภัยให้ SSH</h3><p>ตอนนี้ล็อกอินด้วย Key ใช้ได้แล้ว เรามาล็อคความปลอดภัยของ SSH ให้แน่นหนาขึ้นกันเถอะ:</p><ol><li>เปลี่ยน Port เริ่มต้น (เพื่อกันโดนสแกน)</li><li>ปิดการล็อกอินด้วยพาสเวิร์ด</li><li>ห้าม root ล็อกอินตรงๆ</li></ol><h4 id="แก้ไขไฟล์-Config-ของ-SSH">แก้ไขไฟล์ Config ของ SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>หาและแก้ไขค่า config ต่อไปนี้ (บางตัวอาจจะถูก comment ไว้ ให้ลบเครื่องหมาย <code>#</code> ด้านหน้าออกก่อนนะ):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>กดบันทึกแล้วออกจากโปรแกรม (<code>ctrl + o</code>)</p><blockquote><p>สำหรับ Nano วิธีบันทึกคือกด ctrl + o แล้วมันจากถามชื่อไฟล์ กด Enter ผ่านได้เลย ส่วนวิธีออกคือกด ctrl + x</p></blockquote><h4 id="รีสตาร์ท-Service-ของ-SSH">รีสตาร์ท Service ของ SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>ข้อควรระวัง!</strong></p><p><strong>อย่าพึ่งปิดหน้าต่าง Terminal อันปัจจุบันเด็ดขาด!</strong> ให้เปิดหน้าต่างใหม่ขึ้นมาทดสอบก่อนเลยว่า config ตัวใหม่ล็อกอินเข้าได้ปกติไหม:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>ถ้าเข้าได้สบาย ค่อยไปปิดหน้าต่างเก่าทิ้ง แต่ถ้าเข้าไม่ได้ ก็ยังพอมีโอกาสกลับไปแก้ config ในหน้าต่างเก่าได้อยู่</p></blockquote><blockquote><p>ถ้าคุณซื้อเป็นเซิร์ฟเวอร์ประเภท Lightweight ส่วนใหญ่พอร์ตนี้จะเปลี่ยนไม่ได้นะ แต่ถ้าเป็น ECS แบบดั้งเดิมจะเปลี่ยนได้ ระวังเรื่องนี้หน่อย</p></blockquote><hr><h3 id="3-5-ตั้งค่า-UFW-Firewall">3.5 ตั้งค่า UFW Firewall</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) คือเครื่องมือ Firewall มาตรฐานของ Ubuntu ตั้งค่าง่ายแต่พลังเยอะเลย</p><h4 id="การตั้งค่าเบื้องต้น">การตั้งค่าเบื้องต้น</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="เปิดใช้งาน-Firewall">เปิดใช้งาน Firewall</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>ระบบจะขึ้นข้อความเตือนมา:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>พิมพ์ <code>y</code> เพื่อยืนยัน</p><h4 id="เช็คสถานะ">เช็คสถานะ</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 คือผมพิมพ์ผิดเองครับ ทุกคนใส่ตามเลขพอร์ตจริงของตัวเองได้เลยนะ</p></blockquote><p>ผลลัพธ์จะออกมาประมาณนี้:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="คำสั่งที่ใช้บ่อยๆ-สำหรับเรียกดู">คำสั่งที่ใช้บ่อยๆ สำหรับเรียกดู</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-เปิดใช้งาน-BBR-เร่งความเร็วเน็ต">3.6 เปิดใช้งาน BBR เร่งความเร็วเน็ต</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) คืออัลกอริทึมควบคุมคอนเจสชัน TCP ที่ Google เป็นคนพัฒนาขึ้นมา ช่วยเพิ่มประสิทธิภาพเครือข่ายได้แบบชัดเจนเลยครับ</p><h4 id="เปิดใช้งานแบบคลิกเดียว">เปิดใช้งานแบบคลิกเดียว</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="ตรวจสอบว่าเปิดสำเร็จหรือยัง">ตรวจสอบว่าเปิดสำเร็จหรือยัง</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>ผลลัพธ์ที่ได้ควรจะเป็นแบบนี้:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>ผลลัพธ์จะออกมาประมาณนี้:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>ผลลัพธ์จากการเปิด BBR</strong></p><p>หลังจากเปิด BBR แล้ว โดยเฉพาะในสภาพแวดล้อมที่เน็ตไม่ค่อยเสถียรหรือมี latency สูง คุณจะรู้สึกได้ทันทีเลยว่า:</p><ul><li>ความเร็วในการดาวน์โหลดเร็วขึ้น</li><li>พิมพ์คำสั่งผ่าน SSH ลื่นไหลขึ้น</li><li>โหลดหน้าเว็บเร็วกว่าเดิม</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-ตั้งค่า-fail2ban-ป้องกันการถูก-Brute-Force">3.7 ตั้งค่า fail2ban ป้องกันการถูก Brute Force</h3><p>fail2ban จะคอยเฝ้าสอดส่อง log ให้เองครับ แล้วก็จะแบน IP ที่ล็อกอินผิดพลาดหลายครั้งโดยอัตโนมัติทันที</p><h4 id="การตั้งค่าเบื้องต้น-2">การตั้งค่าเบื้องต้น</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>หาส่วนของ <code>[sshd]</code> แล้วตรวจสอบให้แน่ใจว่ามีการตั้งค่าดังนี้นะครับ:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="สตาร์ทเซอร์วิส">สตาร์ทเซอร์วิส</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="เช็คสถานะ-2">เช็คสถานะ</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Output จะประมาณนี้:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="คำสั่งที่ใช้บ่อย">คำสั่งที่ใช้บ่อย</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-ไม่บังคับ-จัดการเซิร์ฟเวอร์หลายตัวด้วย-SSH-Config">3.8 [ไม่บังคับ] จัดการเซิร์ฟเวอร์หลายตัวด้วย SSH Config</h3><p>ถ้าคุณมีเซิร์ฟเวอร์หลายตัว การพิมพ์ <code>ssh -p 22000 user@ip</code> ทุกครั้งก็วุ่นวายอยู่พอสมควร ลองใช้ SSH Config มาช่วยให้ชีวิตง่ายขึ้นกันเถอะ</p><h4 id="ไฟล์-Config">ไฟล์ Config</h4><p>เปิดแก้ไข <code>~/.ssh/config</code> ใน <strong>เครื่องคอมของคุณเอง</strong> นะ:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>แล้วเพิ่ม Config ลงไป:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="วิธีใช้งาน">วิธีใช้งาน</h4><p>ตอนนี้เรียกใช้ผ่าน Alias ตรงๆ ได้เลย:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>ไม่ต้องมานั่งจำ IP, Port หรือ Username ให้ปวดหัวแล้ว!</p><hr><h3 id="3-9-ไม่บังคับ-อนุญาตเฉพาะ-Cloudflare-เท่านั้น">3.9 [ไม่บังคับ] อนุญาตเฉพาะ Cloudflare เท่านั้น</h3><p>ถ้าเว็บไซต์ของคุณอยู่หลัง Cloudflare แทบจะทั้งหมด ก็เซ็ตให้เข้าได้แค่ IP ของ Cloudflare ผ่าน Port 80/443 อย่างเดียวเพื่อเพิ่มความปลอดภัยได้เลย</p><blockquote><p>⚠️ ระวัง: การตั้งค่านี้ต้องใช้โดเมนของคุณเชื่อมต่อกับ Cloudflare CDN ไว้แล้วนะ</p></blockquote><h4 id="สคริปต์ตั้งค่าอัตโนมัติ">สคริปต์ตั้งค่าอัตโนมัติ</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>สคริปต์นี้จะ:</p><ol><li>ไปดึง IP range ล่าสุดจากเว็บทางการของ Cloudflare</li><li>เพิ่มกฎ UFW ให้ยอมรับเฉพาะ IP พวกนี้เข้าพอร์ต 80/443 เท่านั้น</li><li>Reload UFW ซักรอบ</li></ol><h4 id="ตั้งเวลอัปเดตอัตโนมัติ">ตั้งเวลอัปเดตอัตโนมัติ</h4><p>IP range ของ Cloudflare อาจจะมีการเปลี่ยนแปลง เรามาตั้งให้มันอัปเดตอัตโนมัติทุกสัปดาห์กัน:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-ตั้งค่า-Timezone">3.10 ตั้งค่า Timezone</h3><p>ค่าเริ่มต้นอาจจะเป็น UTC อยู่ เปลี่ยนเป็น Timezone ของที่คุณอยู่จะได้อ่าน Log ง่ายขึ้น:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-ไม่บังคับ-ตั้งค่าอัปเดตความปลอดภัยอัตโนมัติ">3.11 [ไม่บังคับ] ตั้งค่าอัปเดตความปลอดภัยอัตโนมัติ</h3><p>ปล่อยให้ระบบลง Security Patch เองอัตโนมัติเลย จะได้ไม่ต้องมานั่งทำเองทุกครั้ง:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>เลือก “Yes” เพื่อเปิดใช้งานการอัปเดตอัตโนมัติ</p><blockquote><p>💡 ฟีเจอร์นี้จะลง <strong>อัปเดตด้านความปลอดภัย</strong> ให้อัตโนมัติ โดยจะไม่อัปเกรดข้ามไปเวอร์ชันหลัก (Major Version) ใหม่ ๆ ให้เลย ก็ถือว่าปลอดภัยอยู่</p></blockquote><hr><h2 id="4-สรุป">4. สรุป</h2><h3 id="Checklist-สำหรับการเตรียมระบบ">Checklist สำหรับการเตรียมระบบ</h3><p>หลังจากตั้งค่าทั้งหมดด้านบนเสร็จแล้ว ลองเอา Checklist นี้ไปเช็คทบทวนซักรอบ:</p><table><thead><tr><th>รายการตรวจสอบ</th><th>คำสั่ง</th><th>ผลลัพธ์ที่คาดหวัง</th></tr></thead><tbody><tr><td>ระบบอัปเดตแล้ว</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>ไม่มีแพ็กเกจให้อัปเกรด</td></tr><tr><td>ผู้ใช้ทั่วไปใช้ sudo ได้</td><td><code>sudo whoami</code></td><td>แสดงผลลัพธ์ <code>root</code></td></tr><tr><td>ล็อกอินด้วย Key ปกติ</td><td><code>ssh yourname@ip -p port</code></td><td>ล็อกอินเข้าได้โดยไม่ต้องใส่รหัสผ่าน</td></tr><tr><td>ปิดการล็อกอินด้วยรหัสผ่านแล้ว</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>เปลี่ยนพอร์ต SSH แล้ว</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>พอร์ตที่คุณตั้งไว้</td></tr><tr><td>เปิดใช้งาน Firewall แล้ว</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>เปิดใช้งาน BBR แล้ว</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban กำลังทำงาน</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>ตั้งค่า Timezone แล้ว</td><td><code>timedatectl</code></td><td>Asia/Shanghai หรือเขตเวลาของคุณ</td></tr><tr><td>SSH Config ในเครื่อง</td><td><code>cat ~/.ssh/config</code></td><td>ตั้งค่าชื่อย่อเซิร์ฟเวอร์ไว้แล้ว</td></tr></tbody></table><h3 id="ตำแหน่งไฟล์สำคัญ">ตำแหน่งไฟล์สำคัญ</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="แนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุด">แนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุด</h3><ol><li><strong>อัปเดตระบบเป็นประจำ</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>เช็ค Log การล็อกอินเป็นระยะ</strong>: <code>lastb</code> (ล็อกอินล้มเหลว), <code>last</code> (ล็อกอินสำเร็จ)</li><li><strong>ติดตามสถานะการแบนของ fail2ban อยู่เสมอ</strong></li><li><strong>แบ็กอัปไฟล์ Config สำคัญก่อนแก้ไขเสมอ</strong></li></ol><hr><h2 id="5-บันทึกปัญหาผิดปกติ">5. บันทึกปัญหาผิดปกติ</h2><h3 id="Q1-ล็อกอินด้วย-Key-ไม่ผ่าน-ยังต้องใส่รหัสผ่านอยู่">Q1: ล็อกอินด้วย Key ไม่ผ่าน ยังต้องใส่รหัสผ่านอยู่?</h3><p><strong>สาเหตุที่เป็นไปได้:</strong></p><ol><li><p><strong>ปัญหาสิทธิ์ (Permission)</strong> (เจอบ่อยสุด)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>คัดลอก Public Key มาไม่ครบหรือผิด</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux มากวน</strong> (ระบบ CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-เปลี่ยน-Port-แล้วเข้าไม่ได้">Q2: เปลี่ยน Port แล้วเข้าไม่ได้?</h3><p><strong>วิธีเช็ค:</strong></p><ol><li><p>ดูให้แน่ใจว่าเปิด Port ใหม่ใน Firewall แล้ว:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>เช็คดูว่าตั้งค่า SSH ถูกต้อง:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>ยืนยันว่า Service ของ SSH รันอยู่:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>ถ้าเข้าไม่ได้เลยสักทาง ให้ใช้ VNC/Console ของผู้ให้บริการเข้าไปแก้ไข</p></li></ol><h3 id="Q2-5-เปลี่ยน-Port-แล้วไม่มีผลเลย-กรณี-Lightweight-Server-ของผู้ให้บริการ-Cloud">Q2.5: เปลี่ยน Port แล้วไม่มีผลเลย? (กรณี Lightweight Server ของผู้ให้บริการ Cloud)</h3><p><strong>อาการ</strong>: แก้ <code>/etc/ssh/sshd_config</code> แล้ว พอ Restart Service ทีไร Port 22 ก็ยังครองอยู่ ส่วน Port ใหม่ไม่ยอมทำงาน</p><p><strong>วิธีวินิจฉัย</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>ถ้า Output ออกมาประมาณนี้:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>แปลว่า Port 22 นั้นถูก <code>init</code> (PID 1) เป็นฝ่ายดักรออยู่ ไม่ใช่ Process ของ <code>sshd</code> นะเว้ย</p><p><strong>เหตุผล</strong>: SSH ของบางค่ายที่เป็นแบบ “Light Application Server” หรือ “Container Instance” จะถูกจัดการผ่าน <strong>พร็อกซีระดับแพลตฟอร์ม</strong> ดังนั้นการแก้ไขค่า sshd ข้างในเซิร์ฟเวอร์ของคุณเองจึงไม่มีผล</p><p><strong>วิธีแก้ไข</strong>:</p><table><thead><tr><th>ประเภทอินสแตนซ์</th><th>วิธีแก้ไขพอร์ต SSH</th></tr></thead><tbody><tr><td>ECS แบบดั้งเดิม</td><td>แก้ไข sshd_config ✅</td></tr><tr><td>เซิร์ฟเวอร์เบาๆ</td><td>อาจต้องไปแก้ที่แผงควบคุมของค่ายคลาวด์ หรือไม่รองรับการแก้ไขเลย</td></tr><tr><td>Container Instance</td><td>ส่วนใหญ่จะไม่รองรับการแก้ไข</td></tr></tbody></table><p>ถ้าอินสแตนซ์ของคุณไม่รองรับการเปลี่ยนพอร์ต <strong>มาตรการรักษาความปลอดภัยอย่างอื่นยิ่งสำคัญกว่า</strong>:</p><ul><li>✅ สร้างผู้ใช้ทั่วไป + ปิดการล็อกอินด้วย root</li><li>✅ ล็อกอินด้วย SSH Key + ปิดการล็อกอินด้วยรหัสผ่าน</li><li>✅ ใช้ fail2ban ป้องกันการถูก Brute Force</li></ul><p>ถ้าทำข้อเหล่านี้ครบและเหมาะสม ความปลอดภัยก็ยังถือว่าอยู่ในระดับสูงอยู่ดี</p><h3 id="Q3-โดน-fail2ban-แบนตัวเอง">Q3: โดน fail2ban แบนตัวเอง?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-เปิด-UFW-แล้วเข้าเว็บไม่ได้">Q4: เปิด UFW แล้วเข้าเว็บไม่ได้?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-พิมพ์คำสั่งแล้วขึ้นว่าไม่พบ-sudo">Q5: พิมพ์คำสั่งแล้วขึ้นว่าไม่พบ sudo?</h3><p>บางที Debian แบบ Minimal Install อาจจะไม่มี sudo มาให้ ให้ใช้ root ในการติดตั้ง:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-สคริปต์ตั้งค่าเริ่มต้นแบบคลิกเดียว-ใช้เมื่อคุ้นเคยแล้ว">6. สคริปต์ตั้งค่าเริ่มต้นแบบคลิกเดียว (ใช้เมื่อคุ้นเคยแล้ว)</h2><p>ถ้าคุณเก่งและคุ้นเคยกับขั้นตอนข้างต้นแล้ว ก็สามารถใช้สคริปต์นี้เพื่อตั้งค่าเริ่มต้นแบบรวดเร็วได้เลย</p><blockquote><p>⚠️ <strong>สำคัญ</strong>: ก่อนจะรันสคริปต์ อย่าลืมเช็คให้แน่ใจว่าเตรียม SSH Public Key ของคุณเรียบร้อยแล้วนะ</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-ทำไปถึงนี้-ความปลอดภัยดีขึ้นขนาดไหน">7. ทำไปถึงนี้ ความปลอดภัยดีขึ้นขนาดไหน?</h2><table><thead><tr><th>ขั้นตอน</th><th>ทำอะไรไปบ้าง</th><th>ทำไมถึงสำคัญ</th></tr></thead><tbody><tr><td>อัปเดตระบบ</td><td>ลงแพตช์ล่าสุด</td><td>แก้บั๊กที่รู้ว่ามีช่องโหว่</td></tr><tr><td>สร้างยูสเซอร์ใหม่</td><td>เลิกใช้ root ตรงๆ</td><td>ลดความเสี่ยงพิมพ์ผิดทำเรื่องเลวร้าย</td></tr><tr><td>SSH Key</td><td>ใช้คีย์แทนรหัสผ่าน</td><td>กันพวกเดาพาสเวิร์ดได้เลย</td></tr><tr><td>เปลี่ยนพอร์ต</td><td>หนีจากพอร์ต 22 ที่เป็นค่าเริ่มต้น</td><td>ลดโอกาสโดนสแกนเจอ</td></tr><tr><td>ปิดรหัสผ่าน</td><td>อนุญาตให้ล็อกอินด้วยคีย์เท่านั้น</td><td>ตัดปัญหาโดนแฮ็กผ่านพาสเวิร์ดไปเลย</td></tr><tr><td>ปิด root</td><td>ห้ามล็อกอินด้วย root ตรงๆ</td><td>ทำให้คนร้ายบุกยากขึ้น</td></tr><tr><td>UFW Firewall</td><td>เปิดเฉพาะพอร์ตที่จำเป็น</td><td>ลดพื้นที่ให้คนมาโจมตี</td></tr><tr><td>เปิด BBR</td><td>ปรับแต่งเครือข่ายให้ลื่นขึ้น</td><td>เพิ่มความเร็วในการเข้าถึง</td></tr><tr><td>fail2ban</td><td>แบน IP ตัวการอัตโนมัติ</td><td>กันพวกมาก่อกวน่นต่อเนื่อง</td></tr></tbody></table><p>ทำครบทุกข้อ ความปลอดภัยเซิร์ฟเวอร์ของคุณจะแซง <strong>90%</strong> ของ VPS ทั่วไปไปแล้ว</p><hr><h2 id="ตอนต่อไปเราจะมาคุยกันเรื่อง">ตอนต่อไปเราจะมาคุยกันเรื่อง</h2><p>ตอนต่อไปจะพาไปดู <strong>สรุปการตั้งค่าล็อกอินด้วย SSH Key แบบเร็วๆ</strong> โดยจะเจาะลึกให้ละเอียดขึ้นในเรื่อง:</p><ul><li>วิธีสร้างคีย์บนระบบปฏิบัติการต่างๆ</li><li>จัดการคีย์หลายๆ อัน</li><li>ตั้งค่า SSH Agent</li><li>ตั้งค่า SSH Client ยอดฮิตต่างๆ</li></ul><hr><p><em>อัปเดตล่าสุด: มกราคม 2026</em></p><p><em>ซีรีส์กล่องเครื่องมือสำหรับ Indie Dev ฝ่าฟีเจอร์เดี่ยว กดติดตามกันไว้เลย!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/th/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/th/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>เริ่มต้นใช้ VPS ใหม่เหมือนเปิดประตูไม่ได้ล็อคทุกคนในโลกสามารถเข้ามาได้ เมื่อได้รับ VPS สิ่งแรกที่ต้องทำไม่ใช่การติดตั้งซอฟต์แวร์ แต่เป็นการรักษาความปลอดภัย: SSH login ด้วยคีย์ พอร์ตที่ไม่ใช่ค่าเริ่มต้น ผู้ใช้ปกติ ไฟร์วอลล์ fail2ban BBR acceleration นำคุณใช้เวลาหนึ่งชั่วโมงแรกในการสร้างรากฐานที่แข็งแกร่ง</summary>
    <title>ชั่วโมงแรกหลังได้ VPS มา: คู่มือเซ็ตอัพเริ่มต้นจากเครื่องเปล่าจนปลอดภัยและใช้งานได้จริง (ทำให้ OpenClaw ของคุวปลอดภัยขึ้น)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Bağımsız Geliştirici Araç Kutusu" scheme="https://blog.ittinker.com/categories/Bagimsiz-Gelistirici-Arac-Kutusu/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="UzakSSH" scheme="https://blog.ittinker.com/tags/UzakSSH/"/>
    <category term="Sunucu güvenliği" scheme="https://blog.ittinker.com/tags/Sunucu-guvenligi/"/>
    <category term="Bağımsız geliştirme" scheme="https://blog.ittinker.com/tags/Bagimsiz-gelistirme/"/>
    <content>
      <![CDATA[<blockquote><p>Yeni aldığın VPS, kilitlenmemiş bir kapı gibi; dünyadaki tüm script kiddie’ler kapını çalıyor. Bu yazıda o kapıyı nasıl sağlamca kilitleyeceğimizi konuşacağız. Böylece senin &quot;openclaw&quot;ın (yani senin projen) çöp olup dağılmasının önüne geçeceğiz.</p></blockquote><h2 id="0-Baslamadan-Once">0. Başlamadan Önce</h2><p>Yeni bir VPS aldın, heyecanla IP ve root şifreni kuşandın, peki sonra?</p><p>Çok kişinin yaptığı şey şu: dalıp direkt yazılım kurmaya, projeyi deploy etmeye başlamak.</p><p><strong>Bu tehlikeli bir alışkanlıktır.</strong></p><p>VPS’inin genel bir IP’si var, bu da dünyadaki herkesin ona bağlanmayı deneyebileceği anlamına gelir. Üstelik varsayılan ayarlarda:</p><ul><li>Port herkese açık <strong>22</strong></li><li>Kullanıcı adı herkesin bildiği <strong>root</strong></li><li>Geriye seni koruyan tek şey bir şifre kalıyor</li></ul><p>Her gün sayısız otomatik script IP bloklarını tarıyor ve yaygın şifrelerle kaba kuvvet (brute-force) saldırıları deniyor. Sunucun yayına girdiği ilk andan itibaren zaten saldırı altında demektir.</p><p>O yüzden, <strong>VPS’i aldıktan sonra yapman gereken ilk iş yazılım kurmak değil, güvenlik ayarlarını yapmak</strong>tır.</p><hr><h2 id="1-Hedefimiz">1. Hedefimiz</h2><p>Bu yazının amacı şu:</p><ul><li>✅ <strong>Güvenli uzaktan erişimi</strong> kur: SSH anahtarı ile giriş + varsayılan port dışı bir port kullan</li><li>✅ <strong>Standart bir kullanıcı</strong> oluştur: root olarak direkt kullanmaktan kaçın</li><li>✅ <strong>Güvenlik duvarını</strong> ayarla: Sadece gerekli portları aç</li><li>✅ <strong>Ağ hızlandırmasını</strong> aktifleştir: BBR ile ağ bağlantını turbo moda geçir</li><li>✅ <strong>Brute-force saldırılarına</strong> karşı önlem al: fail2ban ile kötü niyetli IP’leri otomatik banla</li></ul><p>Bunları hallettikten sonra VPS’in sağlam bir temele kavuşur; artık gönül rahatlığıyla istediğin servisi deploy edebilirsin.</p><hr><h2 id="2-Planlama-ve-Dusunme">2. Planlama ve Düşünme</h2><h3 id="Neden-bu-ayarlari-yapiyoruz">Neden bu ayarları yapıyoruz?</h3><p>Yeni aldığın bir VPS, tıpkı anahtar teslimi verilen sıfır bir daire gibidir:</p><table><thead><tr><th>Varsayılan Durum</th><th>Risk</th><th>Çözümümüz</th></tr></thead><tbody><tr><td>root ile doğrudan giriş</td><td>Yetki çok geniş, kazara zarar verir</td><td>Normal kullanıcı + sudo</td></tr><tr><td>Şifreyle giriş</td><td>Brute-force saldırısına açık</td><td>SSH anahtarıyla giriş</td></tr><tr><td>Varsayılan 22 portu</td><td>Tarayıcıların gözdesi</td><td>Standart dışı porta geç</td></tr><tr><td>Güvenlik duvarı kapalı</td><td>Tüm portlar dışa açık</td><td>UFW ile sadece gerekli portlar</td></tr><tr><td>Doğal ağ</td><td>Yüksek paket kaybı, gecikme</td><td>BBR sıkışma kontrolü</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Genel-Akis">Genel Akış</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Şu sırayla ilerleyeceğiz, her adımda neden böyle yaptığımızı da açıklayacağım.</p><h2 id="3、Islem-Adimlari">3、İşlem Adımları</h2><h3 id="3-1-Ilk-Giris-ve-Sistem-Guncelleme">3.1 İlk Giriş ve Sistem Güncelleme</h3><h4 id="Sunucu-IP’sini-Alma">Sunucu IP’sini Alma</h4><p>VPS satın aldıktan sonra, sağlayıcı sana şunları verecek:</p><ul><li><strong>IP adresi</strong>: Örneğin <code>192.168.1.100</code></li><li><strong>Port</strong>: Genellikle <code>22</code> (bazı sağlayıcılar farklı bir port kullanabilir)</li><li><strong>Kullanıcı adı</strong>: Genellikle <code>root</code></li><li><strong>Şifre</strong>: Rastgele oluşturulmuş bir karakter dizisi</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="SSH-ile-Baglanma">SSH ile Bağlanma</h4><p><strong>Mac / Linux kullanıcıları</strong>: Terminali açın ve şunu girin:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Windows kullanıcıları</strong>:</p><ul><li>Windows 10/11’de OpenSSH yerleşik olarak gelir, PowerShell veya CMD’de yukarıdaki komutu doğrudan kullanabilirsiniz</li><li>Ya da <a href="https://termius.com/">Termius</a>, <a href="https://mobaxterm.mobatek.net/">MobaXterm</a> gibi araçları kullanabilirsiniz</li></ul><p>İlk bağlantıda parmak izi onay istemi göreceksiniz:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Bu size şunu soruyor: “Bu makineyi tanımıyorum, bağlanmak istediğinizden emin misiniz?”</p><p><code>yes</code> yazıp Enter’a basın. Ardından şifrenizi girin (<strong>dikkat: yazarken hiçbir karakter görünmez, bu normal bir güvenlik tasarımıdır</strong>) ve Enter’a basın.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Şuna benzer bir istem görürseniz giriş başarılı demektir:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Parmak izini neden doğrulamalıyız?</strong></p><p>Bunun sebebi “ortadaki adam saldırılarını” (man-in-the-middle) önlemek. İlk bağlantıda sunucunun parmak izini kaydedersin; sonraki bağlantılarda bu parmak izi değişmişse, bil ki birisi sunucunu taklit etmeye çalışıyor olabilir.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Sunucunla-Tanis">Sunucunla Tanış</h4><p>Giriş yaptıktan sonra, bu makinenin temel durumuna bir göz atalım:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Bu bilgileri aklında tut, ileride bir sorun çözerken mutlaka lazım olacak.</p><h4 id="Sistem-Guncelleme">Sistem Güncelleme</h4><p>Sunucu bilgilerini öğrendikten sonra, yapacağımız ilk ciddi iş sistemi güncellemek. Yeni sunucuların sistem imajı birkaç ay öncesine ait olabilir ve bu süre zarfında yeni güvenlik yamaları yayınlanmış olabilir:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Parametrelerin anlamı:</strong></p><ul><li><code>apt update</code>: Paket indeksini günceller</li><li><code>apt full-upgrade</code>: Çekirdek (kernel) dahil tüm yazılımları yükseltir</li><li><code>-y</code>: Otomatik onaylar, elle “yes” yazmana gerek kalmaz</li><li><code>apt autoremove</code>: Artık ihtiyaç duyulmayan bağımlılıkları siler</li><li><code>apt autoclean</code>: İndirilen kurulum paketlerinin önbelleğini temizler</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Bu adım güncelleme miktarına bağlı olarak birkaç dakika sürebilir. Arada bir onay istediğinde, ekranda ne diyorsa genelde o yönde ilerlemek yeterli.</p></blockquote><blockquote><p>⏱️ Bu adım, güncelleme miktarına bağlı olarak birkaç dakika sürebilir. Arada bazen onay isteyebilir, ekranın söylediği gibi ilerlesen yeterli.</p></blockquote><h4 id="Yeniden-Baslatma-Gerekiyor-mu-Kontrol-Et">Yeniden Başlatma Gerekiyor mu Kontrol Et</h4><p>Çekirdek (kernel) güncellemesinden sonra genellikle etkili olması için yeniden başlatma gerekir:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Eğer yeniden başlatma gerektiğine dair bir uyarı çıkarsa:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Yeniden başlatma işleminden sonra tekrar SSH ile bağlanman gerekecek.</p><h4 id="Sik-Kullanilan-Araclari-Kur">Sık Kullanılan Araçları Kur</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Bu araçlar ne işe yarar:</strong></p><table><thead><tr><th>Araç</th><th>Kullanım amacı</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Normal kullanıcıların yönetici komutlarını çalıştırmasını sağlar</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Dosya indirme</td><td></td></tr><tr><td><code>git</code></td><td>Sürüm kontrolü</td><td></td></tr><tr><td><code>vim</code></td><td>Metin editörü</td><td></td></tr><tr><td><code>htop</code></td><td>Daha şık bir süreç monitörü</td><td></td></tr><tr><td><code>tree</code></td><td>Dizin yapısını ağaç şeklinde gösterir</td><td></td></tr><tr><td><code>net-tools</code></td><td>Ağ araçları (ifconfig, netstat vb.)</td><td></td></tr><tr><td><code>ufw</code></td><td>Basit ve kullanışlı bir güvenlik duvarı</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Kaba kuvvet saldırılarına karşı koruma</td><td></td></tr><tr><td><code>neofetch</code></td><td>Sistem bilgilerini şık bir şekilde gösterir</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-root-olmayan-kullanici-olusturma">3.2 root olmayan kullanıcı oluşturma</h3><h4 id="Neden-dogrudan-root-kullanmiyoruz">Neden doğrudan root kullanmıyoruz?</h4><p>root kullanıcısının yetkileri çok geniştir, bir anlık dalgınlıkla <code>rm -rf /</code> her şeyi çöpe gidebilir. Günlük işlerde normal bir kullanıcıyı kullanmalısın, yönetici yetkisi gerektiğinde ise <code>sudo</code> komutuna başvurursun.</p><blockquote><p>openclaw denen bir canavar, ona root yetkilerini vermeye nasıl cüret edebiliriz ki?</p></blockquote><h4 id="Kullanici-olusturma">Kullanıcı oluşturma</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Sistem sana şifre belirlemeni ve birkaç bilgi girmeni isteyecek:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="sudo-yetkisi-verme">sudo yetkisi verme</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Hemen doğrulayalım:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Çıktıda <code>root</code> görüyorsan, sudo ayarları başarıyla tamamlanmış demektir.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Küçük bir ipucu</strong></p><p><code>exit</code> yazarak tekrar root kullanıcısına dönebilirsin. Bundan sonraki adımlarda ayarları root olarak yapmaya devam edeceğiz, kurulum bitince tekrar normal kullanıcımıza geçeceğiz.</p></blockquote><hr><h3 id="3-3-SSH-anahtari-ile-giris-yapma-ayarlari">3.3 SSH anahtarı ile giriş yapma ayarları</h3><h4 id="Anahtar-dogrulama-mi-sifre-dogrulama-mi">Anahtar doğrulama mı, şifre doğrulama mı?</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Anahtar doğrulama, şifreye kıyasla çok daha güvenlidir:</p><ul><li>Şifreler brute-force saldırılarıyla kırılabilir, ama anahtarları kırmak neredeyse imkansızdır.</li><li>Her seferinde şifre yazma derdinden kurtulur, işini çok kolaylaştırır.</li><li>Şifren sızsa bile, özel anahtar (private key) olmadan sisteme girişin imkansızdır.</li></ul><h4 id="Adim-1-Yerel-makinede-anahtar-ciftini-olustur">Adım 1: Yerel makinede anahtar çiftini oluştur</h4><p><strong>Kendi bilgisayarında</strong> (sunucuda değil) şu komutu çalıştır:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Şöyle bir çıktı göreceksin:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Varsayılan yolu kullanmak için direkt Enter’a bas. Biz burada ./ittinker kullandık, yani dosyanın mevcut dizine ittinker adıyla kaydedilmesini istedik.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Anahtarına bir parola belirleyebilirsin (bu ekstra bir güvenlik katmanı olur), ya da boş bırakmak için direkt Enter’a basabilirsin.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>İşlem bittikten sonra <code>~/.ssh/</code> dizininde iki dosya göreceksin (bunlar varsayılan dosya adlarıdır, az önce direkt Enter’a basarsan böyle olur):</p><ul><li><code>id_ed25519</code>: <strong>Özel anahtar (private key)</strong>, asla sızdırmamalısın!</li><li><code>id_ed25519.pub</code>: <strong>Açık anahtar (public key)</strong>, bunu sunucuya yüklemen gerekiyor</li></ul><blockquote><p>💡 <strong>ed25519 mu, RSA mı?</strong></p><p><code>ed25519</code> günümüzde önerilen algoritmadır; eski usul RSA’dan daha güvenlidir ve anahtar boyutu daha kısadır. Sistemin çok eskiyse ve desteklemiyorsa <code>ssh-keygen -t rsa -b 4096</code> kullanabilirsin.</p></blockquote><blockquote><p>Küçük bir detay: ed25519 ile üretilen anahtar dosyaları oldukça küçük olurken, RSA’nın dosyaları çok büyüyor. Yapay zekaya sorduğumda öğrendim: dosya boyutunun bir önemi yok, önemli olan kullanılan algoritma.</p></blockquote><h4 id="Ikinci-adim-Acik-anahtari-sunucuya-yukle">İkinci adım: Açık anahtarı sunucuya yükle</h4><p><strong>Yöntem A: ssh-copy-id kullan (önerilen)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Sunucu parolanı girdikten sonra, açık anahtarın otomatik olarak sunucuya kopyalanır.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Yöntem B: Elle kopyala</strong></p><p>Eğer <code>ssh-copy-id</code> çalışmazsa, elle de yapabilirsin:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Çıktıyı kopyala (<code>ssh-ed25519</code> ile başlayan o uzun metni).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>İzinler çok önemli!</strong></p><p>SSH dosya izinleri konusunda oldukça katıdır:</p><ul><li><code>.ssh</code> dizini: 700 (sadece kullanıcının kendisi erişebilir)</li><li><code>authorized_keys</code> dosyası: 600 (sadece kullanıcının kendisi okuyup yazabilir)</li></ul><p>İzinleri yanlış ayarlarsan SSH, anahtarla girişi reddeder.</p></blockquote><h4 id="Ucuncu-adim-Anahtarla-girisi-test-et">Üçüncü adım: Anahtarla girişi test et</h4><p><strong>Yeni bir terminal penceresi aç</strong> (orijinal pencereyi kapatma, bir şeyleri yanlış yaparsan geri dönmen için can simididir) ve anahtarla girişi test et:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Şifre girmeden giriş yapabiliyorsan, anahtar kurulumu başarılı demektir! 🎉</p><p>(Eğer özel anahtarın için bir passphrase belirlediysen, senden bu şifreyi istemesi normaldir)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Buraya bir -i parametresi ekledik çünkü bu anahtarı varsayılan yola değil, mevcut dizine koyduk. Belirtmezsek sistem varsayılan anahtarı kullanır.</p></blockquote><hr><h3 id="3-4-SSH-Guvenligini-Saglamlastirma">3.4 SSH Güvenliğini Sağlamlaştırma</h3><p>Anahtarla giriş artık çalıştığına göre, SSH bağlantısını biraz daha sağlamlaştıralım:</p><ol><li>Varsayılan portu değiştir (tarayıcılardan kaçınmak için)</li><li>Şifreyle girişi devre dışı bırak</li><li>root kullanıcısının doğrudan giriş yapmasını engelle</li></ol><h4 id="SSH-yapilandirma-dosyasini-duzenle">SSH yapılandırma dosyasını düzenle</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Aşağıdaki ayarları bul ve düzenle (bazıları yorum satırı olarak işaretlenmiş olabilir, başlarındaki <code>#</code> işaretini kaldır):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Kaydet ve çık (<code>ctrl + o</code>).</p><blockquote><p>Nano’da kaydetmek için ctrl + o tuşlarına bas, sana dosya adını soracak, direkt Enter’a basıp geç, çıkmak için ise ctrl + x yapıyorsun.</p></blockquote><h4 id="SSH-servisini-yeniden-baslat">SSH servisini yeniden başlat</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Önemli Uyarı!</strong></p><p><strong>Mevcut terminali kapatma!</strong> Önce yeni bir pencerede açıp yeni ayarlarla sorunsuz giriş yapabildiğini test et:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Giriş yapabiliyorsan eski pencereyi kapatabilirsin. Giriş yapamıyorsan, eski pencerede ayarları düzeltme şansın hâlâ var.</p></blockquote><blockquote><p>Eğer hafif sunucu (lightweight) aldıysan, büyük ihtimalle bu portu değiştiremezsin; geleneksel ECS’lerde ise bu değişiklik yapılabilir, buna dikkat et.</p></blockquote><hr><h3 id="3-5-UFW-guvenlik-duvarini-yapilandir">3.5 UFW güvenlik duvarını yapılandır</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall), Ubuntu’nun varsayılan güvenlik duvarı aracıdır; ayarı basittir ama işlevi güçlüdür.</p><h4 id="Temel-yapilandirma">Temel yapılandırma</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Guvenlik-duvarini-etkinlestir">Güvenlik duvarını etkinleştir</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Şu uyarıyı göreceksin:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Onaylamak için <code>y</code> yaz.</p><h4 id="Durumu-kontrol-et">Durumu kontrol et</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 kısmını yanlış yazmışım, siz kendi durumunuza göre ayarlarsınız, takılmayın buna</p></blockquote><p>Çıktı şu şekilde olmalı:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Sik-kullanilan-komutlar-hizli-rehber">Sık kullanılan komutlar hızlı rehber</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-BBR-hizlandirmasini-acma">3.6 BBR hızlandırmasını açma</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time), Google tarafından geliştirilmiş bir TCP tıkanıklık kontrol algoritmasıdır ve ağ performansını ciddi şekilde artırır.</p><h4 id="Tek-tikla-ac">Tek tıkla aç</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Acilip-acilmadigini-dogrulama">Açılıp açılmadığını doğrulama</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Çıktı şu olmalı:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Çıktı şu şekilde:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>BBR’nin etkisi</strong></p><p>BBR’yi açtıktan sonra, özellikle ağın dengesiz olduğu veya gecikmenin yüksek olduğu durumlarda şunu net hissedeceksin:</p><ul><li>İndirme hızı daha hızlı</li><li>SSH işlemleri daha akıcı</li><li>Web sayfaları daha hızlı yüklenir</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-fail2ban-ile-kaba-kuvvet-saldirilarina-karsi-koruma">3.7 fail2ban ile kaba kuvvet saldırılarına karşı koruma</h3><p>fail2ban logları izler ve birden fazla kez giriş yapamayan IP’leri otomatik olarak banlar.</p><h4 id="Temel-yapilandirma-2">Temel yapılandırma</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p><code>[sshd]</code> kısmını bul ve şu ayarlardan emin ol:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Servisleri-baslatma">Servisleri başlatma</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Durumu-kontrol-etme">Durumu kontrol etme</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Çıktı şu şekilde görünür:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Sik-kullanilan-komutlar">Sık kullanılan komutlar</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Istege-bagli-SSH-Config-ile-birden-fazla-sunucu-yonetimi">3.8 [İsteğe bağlı] SSH Config ile birden fazla sunucu yönetimi</h3><p>Eğer birden fazla sunucun varsa, her seferinde <code>ssh -p 22000 user@ip</code> yazmak oldukça yorucu olabilir. SSH Config kullanarak bu süreci basitleştirebilirsin.</p><h4 id="Yapilandirma-dosyasi">Yapılandırma dosyası</h4><p><strong>Kendi bilgisayarında</strong> <code>~/.ssh/config</code> dosyasını düzenle:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Yapılandırmayı ekle:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Kullanimi">Kullanımı</h4><p>Artık doğrudan alias ile bağlanabilirsin:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>IP, port ve kullanıcı adını ezberleme derdi tamamen bitti!</p><hr><h3 id="3-9-Istege-bagli-Sadece-Cloudflare-erisimine-izin-verme">3.9 [İsteğe bağlı] Sadece Cloudflare erişimine izin verme</h3><p>Siten tamamen Cloudflare arkasındaysa, güvenliği artırmak için 80/443 portlarına yalnızca Cloudflare IP’lerinin erişmesine izin verecek şekilde ayarlayabilirsin.</p><blockquote><p>⚠️ Dikkat: Bu yapılandırma için alan adının önceden Cloudflare CDN’e bağlanmış olması gerekir.</p></blockquote><h4 id="Otomatik-yapilandirma-betigi">Otomatik yapılandırma betiği</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Bu betik şu işlemleri yapar:</p><ol><li>Cloudflare’ın resmi sayfasından en güncel IP bloklarını al</li><li>UFW kuralı ekle, 80/443 portlarına yalnızca bu IP’lerden erişime izin ver</li><li>UFW’yi yeniden yükle</li></ol><h4 id="Otomatik-guncellemeyi-zamanla">Otomatik güncellemeyi zamanla</h4><p>Cloudflare’ın IP blokları zamanla değişebilir, bu yüzden haftalık otomatik güncelleme ayarlayalım:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Saat-dilimini-ayarla">3.10 Saat dilimini ayarla</h3><p>Varsayılan saat dilimi muhtemelen UTC’dir; logları daha kolay okuyabilmen için bulunduğun saat dilimine değiştir:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Istege-bagli-Otomatik-guvenlik-guncellemelerini-yapilandir">3.11 [İsteğe bağlı] Otomatik güvenlik güncellemelerini yapılandır</h3><p>Sistemin güvenlik yamalarını otomatik kurmasını sağla, böylece her seferinde elle uğraşmak zorunda kalmazsın:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Otomatik güncellemeleri etkinleştirmek için “Yes” seçeneğini işaretle.</p><blockquote><p>💡 Bu özellik yalnızca <strong>güvenlik güncellemelerini</strong> otomatik kurar; sistemi yeni bir ana sürüme yükseltmez, yani oldukça güvenli bir yöntemdir.</p></blockquote><hr><h2 id="4-Ozet">4. Özet</h2><h3 id="Baslatma-kontrol-listesi">Başlatma kontrol listesi</h3><p>Yukarıdaki yapılandırmaları tamamladıktan sonra, her şeyin yerinde olduğundan emin olmak için şu listeyi bir gözden geçir:</p><table><thead><tr><th>Kontrol Adımı</th><th>Komut</th><th>Beklenen Sonuç</th></tr></thead><tbody><tr><td>Sistem güncel</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Yükseltilecek paket yok</td></tr><tr><td>Sudo yetkisi çalışıyor</td><td><code>sudo whoami</code></td><td><code>root</code> çıktısı</td></tr><tr><td>Anahtar girişi çalışıyor</td><td><code>ssh yourname@ip -p port</code></td><td>Şifresiz giriş</td></tr><tr><td>Şifre girişi devre dışı</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH portu değiştirildi</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Ayarladığın port</td></tr><tr><td>Güvenlik duvarı aktif</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR etkin</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban çalışıyor</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Zaman dilimi ayarlandı</td><td><code>timedatectl</code></td><td>Asia/Shanghai veya senin zaman dilimin</td></tr><tr><td>Yerel SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>Sunucu takma adı yapılandırıldı</td></tr></tbody></table><h3 id="Onemli-Dosya-Konumlari">Önemli Dosya Konumları</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Guvenlik-Icin-En-Iyi-Pratikler">Güvenlik İçin En İyi Pratikler</h3><ol><li><strong>Sistemi düzenli güncelle</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Giriş loglarını düzenli kontrol et</strong>: <code>lastb</code> (başarısız girişler), <code>last</code> (başarılı girişler)</li><li><strong>fail2ban ban durumunu takip et</strong></li><li><strong>Önemli yapılandırma dosyalarını değiştirmeden önce yedek al</strong></li></ol><hr><h2 id="5-Sorun-Giderme">5. Sorun Giderme</h2><h3 id="S1-Anahtar-girisi-basarisiz-hala-sifre-mi-istiyor">S1: Anahtar girişi başarısız, hâlâ şifre mi istiyor?</h3><p><strong>Olası nedenler:</strong></p><ol><li><p><strong>Yetki sorunu</strong> (en yaygını)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Public key doğru kopyalanmamış</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>SELinux müdahalesi</strong> (CentOS/RHEL sistemlerde)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Portu-degistirince-baglanamiyor-musun">Q2: Portu değiştirince bağlanamıyor musun?</h3><p><strong>Çözüm adımları:</strong></p><ol><li><p>Yeni portun güvenlik duvarında (firewall) açıldığından emin ol:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>SSH ayarlarının doğru olduğundan emin ol:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>SSH servisinin çalıştığından emin ol:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Hala bağlanamıyorsan, bulut sağlayıcısının VNC/konsolu üzerinden giriş yapıp düzelt.</p></li></ol><h3 id="Q2-5-Port-degisikligi-hic-mi-ise-yaramadi-Bulut-saglayicilarinin-hafif-sunuculari">Q2.5: Port değişikliği hiç mi işe yaramadı? (Bulut sağlayıcılarının hafif sunucuları)</h3><p><strong>Belirti</strong>: <code>/etc/ssh/sshd_config</code> değiştirdin, servisi yeniden başlattın ama 22 portu hâlâ açık, yeni port devreye girmedi.</p><p><strong>Teşhis yöntemi</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Çıktı şu tarzdaysa:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>22 portunun <code>init</code> (PID 1) tarafından dinlendiğini, yani <code>sshd</code> sürecinin değil, anlamına gelir.</p><p><strong>Nedeni</strong>: Bazı bulut sağlayıcılarının “hafif uygulama sunucuları” veya “konteyner örnekleri” SSH bağlantılarını <strong>platform katmanında proxy</strong> üzerinden yönetir. Yani sunucunun içindeki sshd ayarlarını değiştirmenin hiçbir etkisi olmaz.</p><p><strong>Çözüm</strong>:</p><table><thead><tr><th>Örnek Türü</th><th>SSH Portunu Değiştirme Yöntemi</th></tr></thead><tbody><tr><td>Geleneksel ECS</td><td>sshd_config dosyasını düzenle ✅</td></tr><tr><td>Hafif Sunucu</td><td>Bulut kontrol panelinden değiştirmen gerekebilir ya da hiç desteklenmeyebilir</td></tr><tr><td>Konteyner Örneği</td><td>Genellikle değiştirilemez</td></tr></tbody></table><p>Eğer instance’ında portu değiştiremiyorsan, <strong>diğer güvenlik önlemleri çok daha kritik hale gelir</strong>:</p><ul><li>✅ Standart bir kullanıcı oluştur + root girişini kapat</li><li>✅ SSH anahtarı ile giriş yap + şifreli girişi devre dışı bırak</li><li>✅ Brute-force saldırılarına karşı fail2ban kullan</li></ul><p>Bunları eksiksiz yaparsan, güvenlik seviyen yine de oldukça yüksek olur.</p><h3 id="Q3-fail2ban-beni-kendi-IP’mden-mi-banladi">Q3: fail2ban beni kendi IP’mden mi banladı?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-UFW’yi-actiktan-sonra-siteye-erisemiyor-musun">Q4: UFW’yi açtıktan sonra siteye erişemiyor musun?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-Komut-calistirinca-sudo-bulunamadi-hatasi-mi-aliyorsun">Q5: Komut çalıştırınca sudo bulunamadı hatası mı alıyorsun?</h3><p>Debian minimal kurulumlarda sudo yüklü gelmeyebilir. root olarak giriş yapıp şunu yükleyebilirsin:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Tek-tikla-baslatma-betigi-Alistiktan-sonra-kullan">6. Tek tıkla başlatma betiği (Alıştıktan sonra kullan)</h2><p>Eğer yukarıdaki adımlara artık iyice alıştıysan, bu betiği kullanarak sunucunu hızlıca baştan kurabilirsin.</p><blockquote><p>⚠️ <strong>Dikkat</strong>: Betiği çalıştırmadan önce SSH public key’inin hazır olduğundan emin ol.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Bunlari-yaptiktan-sonra-guvenlik-ne-kadar-artti">7. Bunları yaptıktan sonra güvenlik ne kadar arttı?</h2><table><thead><tr><th>Adım</th><th>Ne yaptık?</th><th>Neden önemli?</th></tr></thead><tbody><tr><td>Sistem güncelleme</td><td>En son yamaları kurduk</td><td>Bilinen açıkları kapattık</td></tr><tr><td>Yeni kullanıcı oluşturma</td><td>Artık root’u doğrudan kullanmıyoruz</td><td>Yanlışlıkla yapılacak işlemlerin riskini azaltır</td></tr><tr><td>SSH anahtarı</td><td>Şifre yerine anahtarla girişe geçtik</td><td>Brute-force ile kırılamaz</td></tr><tr><td>Port değiştirme</td><td>Varsayılan 22 portundan uzaklaştık</td><td>Taranıp bulunma olasılığını düşürür</td></tr><tr><td>Şifre girişini devre dışı bırakma</td><td>Sadece anahtarla girişe izin verdik</td><td>Şifre saldırılarını tamamen ortadan kaldırır</td></tr><tr><td>Root girişini devre dışı bırakma</td><td>root artık doğrudan giriş yapamıyor</td><td>Saldırı zorluğunu artırır</td></tr><tr><td>UFW güvenlik duvarı</td><td>Sadece gerekli portları açtık</td><td>Saldırı yüzeyini daraltır</td></tr><tr><td>BBR hızlandırma</td><td>Ağ performansını optimize ettik</td><td>Erişim hızını artırır</td></tr><tr><td>fail2ban</td><td>Kötü niyetli IP’leri otomatik banladık</td><td>Sürekli saldırıları engeller</td></tr></tbody></table><p>Bunları hallettikten sonra, sunucunun güvenliği VPS’lerin <strong>%90’ını</strong> geride bırakıyor demektir.</p><hr><h2 id="Siradaki-yazidan-haberler">Sıradaki yazıdan haberler</h2><p>Sıradaki yazıda <strong>SSH anahtarı ile giriş yapılandırması hızlı rehberi</strong> konusunu ele alacağız ve şu konuları daha detaylıca inceleyeceğiz:</p><ul><li>Farklı işletim sistemlerinde anahtar oluşturma yöntemleri</li><li>Birden fazla anahtarı yönetme</li><li>SSH Agent yapılandırması</li><li>Yaygın SSH istemcisi ayarları</li></ul><hr><p><em>Yazının son güncellenme tarihi: Ocak 2026</em></p><p><em>Bağımsız geliştirici araç kutusu serisi, takipte kal!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/tr/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/tr/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Yeni alınan VPS, tüm dünyanın &quot;script kiddie&quot;lerinin çaldığı kilitli olmayan bir kapı gibidir. VPS'yi aldığınız ilk şey, yazılım yüklemek değil, güvenlik ayarlamalarıdır: SSH anahtarları ile giriş, varsayılan olmayan portlar, normal kullanıcılar, güvenlik duvarları, fail2ban ve BBR hızlandırma. Bu yazı, ilk saatte temelinizi sağlamlaştırmak için size rehberlik edecek.</summary>
    <title>VPS aldıktan sonraki ilk saat: çıplak sunucudan güvenli ve kullanılabilir hale tam başlangıç rehberi (OpenClaw'ını daha güvenli yap)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Richardson</name>
    </author>
    <category term="Інструменти інді-розробника" scheme="https://blog.ittinker.com/categories/%D0%86%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B8-%D1%96%D0%BD%D0%B4%D1%96-%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BD%D0%B8%D0%BA%D0%B0/"/>
    <category term="linux" scheme="https://blog.ittinker.com/tags/linux/"/>
    <category term="Ubuntu" scheme="https://blog.ittinker.com/tags/Ubuntu/"/>
    <category term="VPS" scheme="https://blog.ittinker.com/tags/VPS/"/>
    <category term="Віддалений SSH" scheme="https://blog.ittinker.com/tags/%D0%92%D1%96%D0%B4%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-SSH/"/>
    <category term="Безпека сервера" scheme="https://blog.ittinker.com/tags/%D0%91%D0%B5%D0%B7%D0%BF%D0%B5%D0%BA%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0/"/>
    <category term="Інді-розробка" scheme="https://blog.ittinker.com/tags/%D0%86%D0%BD%D0%B4%D1%96-%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/"/>
    <content>
      <![CDATA[<blockquote><p>Щойно куплений VPS — це як незачинені двері: скрипт-кіди з усього світу вже стукають у них. Ця стаття покаже, як надійно замкнути ці двері, щоб твій openclaw не розбігався і не накоїв дурниць.</p></blockquote><h2 id="0-Вступне-слово">0. Вступне слово</h2><p>Тільки-но купив VPS, радісно отримав IP-адресу та root-пароль, а далі що?</p><p>Більшість людей робить так: одразу починають ставити софт і розгортати проєкти.</p><p><strong>Це дуже небезпечна звичка.</strong></p><p>Твій VPS має публічну IP-адресу, а отже будь-хто у світі може спробувати до нього підключитися. І за замовчуванням:</p><ul><li>відкритий порт <strong>22</strong></li><li>всім відомий юзернейм <strong>root</strong></li><li>і лише один пароль захищає тебе</li></ul><p>Щодня безліч автоматизованих скриптів сканують діапазони IP, намагаючись збрутити паролі по словниках. Твій сервер атакують ще з тієї самої миті, як він з’явився в мережі.</p><p>Тому <strong>перша справа після купівлі VPS — не ставити софт, а зробити базове налаштування безпеки</strong>.</p><hr><h2 id="1-Яка-наша-мета">1. Яка наша мета</h2><p>Мета цієї статті:</p><ul><li>✅ Налаштуй <strong>безпечний віддалений доступ</strong>: вхід через SSH-ключі + нестандартний порт</li><li>✅ Створи <strong>звичайного користувача</strong>: уникай прямого використання root</li><li>✅ Налаштуй <strong>фаєрвол</strong>: відкривай лише необхідні порти</li><li>✅ Увімкни <strong>прискорення мережі</strong>: BRR змусить мережу летіти</li><li>✅ Захистись від <strong>брутфорсу</strong>: fail2ban автоматично блокуватиме зловмисні IP</li></ul><p>Після цього твій VPS матиме міцний фундамент, і ти зможеш спокійно розгортати будь-які сервіси.</p><hr><h2 id="2-План-та-роздуми">2. План та роздуми</h2><h3 id="Навіщо-все-це-робити">Навіщо все це робити?</h3><p>Щойно куплений VPS — це як квартира в будинку, яку щойно здали в експлуатацію без оздоблення:</p><table><thead><tr><th>Стандартний стан</th><th>Ризик</th><th>Наше рішення</th></tr></thead><tbody><tr><td>Вхід прямо як root</td><td>Забагато прав, ризик фатальної помилки</td><td>Створюємо звичайного юзера + sudo</td></tr><tr><td>Вхід за паролем</td><td>Можна збрутфорсити</td><td>Вхід через SSH-ключ</td></tr><tr><td>Стандартний порт 22</td><td>Сканери лізнуть до нього першими</td><td>Змінюємо на нестандартний порт</td></tr><tr><td>Фаєрвол вимкнено</td><td>Усі порти торчать назовні</td><td>UFW відкриває лише потрібне</td></tr><tr><td>Звичайна мережа</td><td>Високі втрати пакетів, пінги</td><td>Алгоритм контролю BBR</td></tr><tr><td></td><td></td><td></td></tr></tbody></table><h3 id="Загальний-процес">Загальний процес</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/d95352095d40ba820ed93df502ff6451.webp" alt="VPS初始化流程"></p><p>Робитимемо все крок за кроком у такому порядку, і я поясню, чому робимо саме так.</p><h2 id="3-Кроки">3. Кроки</h2><h3 id="3-1-Перший-вхід-і-оновлення-системи">3.1 Перший вхід і оновлення системи</h3><h4 id="Дістаємо-IP-сервера">Дістаємо IP сервера</h4><p>Після покупки VPS провайдер видасть тобі:</p><ul><li><strong>IP-адреса</strong>: наприклад <code>192.168.1.100</code></li><li><strong>Порт</strong>: зазвичай <code>22</code> (деякі провайдери можуть змінювати його на інший)</li><li><strong>Ім’я користувача</strong>: зазвичай <code>root</code></li><li><strong>Пароль</strong>: випадково згенерований набір символів</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/ef646ca2ad692679503babbf817002d1.webp" alt="VPS 服务商后台的登录信息页面"></p><h4 id="Підключення-через-SSH">Підключення через SSH</h4><p><strong>Для користувачів Mac / Linux</strong>: відкрийте термінал і просто введіть:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br><span class="line"><span class="comment"># 例如：ssh root@123.45.67.89</span></span><br></pre></td></tr></table></figure><p><strong>Для користувачів Windows</strong>:</p><ul><li>Windows 10/11 має вбудований OpenSSH, тож ви можете виконати цю саму команду прямо в PowerShell або CMD</li><li>Або скористайтеся інструментами на кшталт <a href="https://termius.com/">Termius</a> або <a href="https://mobaxterm.mobatek.net/">MobaXterm</a></li></ul><p>Під час першого підключення ви побачите запит на підтвердження відбитка ключа:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">The authenticity of host &#x27;192.168.1.100 (192.168.1.100)&#x27; can&#x27;t be established.</span><br><span class="line">ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.</span><br><span class="line">Are you sure you want to continue connecting (yes/no/[fingerprint])?</span><br></pre></td></tr></table></figure><p>Це система питає: «Я не знаю цю машину, ти точно хочеш підключитися?»</p><p>Введіть <code>yes</code> і натисніть Enter. Далі введіть пароль (<strong>зверніть увагу: під час введення символи не відображаються — це стандартна функція безпеки</strong>) і натисніть Enter.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/6514799b9b108c25ef092c2e3c662eed.webp" alt="首次 SSH 连接的完整过程，包含指纹确认"></p><p>Якщо бачите приблизно таке повідомлення, значить, ви успішно увійшли:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64)</span><br><span class="line">...</span><br><span class="line">root@hostname:~#</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Навіщо перевіряти відбиток?</strong></p><p>Це захист від так званих атак «людина посередині» (Man-in-the-Middle). Коли ви підключаєтесь вперше, ви запам’ятовуєте відбиток сервера. Якщо під час наступних підключень він раптом зміниться — це червоний прапорець, хтось міг підмінити ваш сервер.</p></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/08/073314b8d578bcf8312f0521d12fbfb6.webp" alt="登录成功了"></p><h4 id="Знайомство-з-вашим-сервером">Знайомство з вашим сервером</h4><p>Щойно зайшли, давай одразу розвідаемо обстановку і подивимось, що це за машина:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看系统版本</span></span><br><span class="line"><span class="built_in">cat</span> /etc/os-release</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内核版本</span></span><br><span class="line"><span class="built_in">uname</span> -r</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 CPU 核心数和型号</span></span><br><span class="line"><span class="built_in">nproc</span></span><br><span class="line">lscpu | grep <span class="string">&quot;Model name&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看内存</span></span><br><span class="line">free -h</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看磁盘</span></span><br><span class="line"><span class="built_in">df</span> -h</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/51765fcc65f2f1cc6b900772504504ff.webp" alt="服务器基本信息输出"></p><p>Запам’ятай ці дані, вони дуже стануть в пригоді, коли будемо копатися в проблемах пізніше.</p><h4 id="Оновлення-системи">Оновлення системи</h4><p>Розвідку провели, тепер за першу справу беремось за оновлення системи. Образ на новому сервері може бути ще з кількох місяців тому, а за цей час вже могли вийти свіжі патчі безпеки:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 更新软件包列表 + 升级所有软件 + 清理</span></span><br><span class="line">apt update &amp;&amp; apt full-upgrade -y &amp;&amp; apt autoremove -y &amp;&amp; apt autoclean</span><br></pre></td></tr></table></figure><p><strong>Що тут до чого:</strong></p><ul><li><code>apt update</code>: оновлюємо індекс пакетів</li><li><code>apt full-upgrade</code>: апгрейдим усі пакети, включно з ядром</li><li><code>-y</code>: автоматично погоджуємось, щоб не вводити yes вручну</li><li><code>apt autoremove</code>: підмітаємо вже непотрібні залежності</li><li><code>apt autoclean</code>: чистимо кеш завантажених пакетів</li></ul><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e8e20843ed6170b9caa6c8cf682dbb5c.webp" alt="apt update 和 apt upgrade 执行过程"></p><blockquote><p>⏱️ Цей крок може зайняти кілька хвилин, залежить від того, як багато накопилось оновлень. Якщо по ходу справи щось попросить підтвердити — просто йдемо за підказками, там все зрозуміло.</p></blockquote><h4 id="Перевірка-чи-потрібен-перезапуск">Перевірка, чи потрібен перезапуск</h4><p>Після оновлення ядра зазвичай треба перезавантажитись, щоб воно запустилось:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查是否需要重启</span></span><br><span class="line"><span class="built_in">cat</span> /var/run/reboot-required 2&gt;/dev/null &amp;&amp; <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 需要重启&quot;</span> || <span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 无需重启&quot;</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/5ed5dcef2e82ae312cfc655787d310c4.webp" alt="是否需要重启"></p><p>Якщо напише, що перезавантаження необхідне:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reboot</span><br></pre></td></tr></table></figure><p>Після рестарту просто підключаємось по SSH знову.</p><h4 id="Встановлення-базових-утиліт">Встановлення базових утиліт</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br></pre></td></tr></table></figure><p><strong>Навіщо потрібні ці інструменти:</strong></p><table><thead><tr><th>Інструмент</th><th>Призначення</th><th></th></tr></thead><tbody><tr><td><code>sudo</code></td><td>Дозволяє звичайним юзерам виконувати команди від адміна</td><td></td></tr><tr><td><code>curl</code> / <code>wget</code></td><td>Завантаження файлів</td><td></td></tr><tr><td><code>git</code></td><td>Контроль версій</td><td></td></tr><tr><td><code>vim</code></td><td>Текстовий редактор</td><td></td></tr><tr><td><code>htop</code></td><td>Зручніший моніторинг процесів</td><td></td></tr><tr><td><code>tree</code></td><td>Деревоподібний показ структури директорій</td><td></td></tr><tr><td><code>net-tools</code></td><td>Мережеві утиліти (ifconfig, netstat тощо)</td><td></td></tr><tr><td><code>ufw</code></td><td>Простий і зручний фаєрвол</td><td></td></tr><tr><td><code>fail2ban</code></td><td>Захист від брутфорсу</td><td></td></tr><tr><td><code>neofetch</code></td><td>Гарно виводить інформацію про систему</td><td></td></tr><tr><td><img src="https://cdn.iaiuse.com/img/2026/03/08/6540e44d78a266052bceffdd734c94de.webp" alt="neofetch 显示的系统信息"></td><td></td><td></td></tr></tbody></table><h3 id="3-2-Створюємо-звичайного-користувача-не-root">3.2 Створюємо звичайного користувача (не root)</h3><h4 id="Чому-не-варто-сидіти-під-root">Чому не варто сидіти під root?</h4><p>У root прав занадто багато — одна невелика помилка, і <code>rm -rf /</code> — прощавай, усе злетіло. Для щоденних завдань краще використовувати звичайного юзера, а права адміністратора підкидувати через <code>sudo</code>, коли вони реально потрібні.</p><blockquote><p>Лобстер (openclaw) — це ж справжній монстр, хто йому root-права в руки дасть?</p></blockquote><h4 id="Створюємо-користувача">Створюємо користувача</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建用户（把 ittinker 换成你想要的用户名）</span></span><br><span class="line">adduser ittinker</span><br></pre></td></tr></table></figure><p>Система попросить задати пароль та заповнити кілька полів з інформацією:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">New password:              # 输入密码（不会显示）</span><br><span class="line">Retype new password:       # 再输入一次</span><br><span class="line">Full Name []:              # 可以直接回车跳过</span><br><span class="line">Room Number []:            # 回车跳过</span><br><span class="line">Work Phone []:             # 回车跳过</span><br><span class="line">Home Phone []:             # 回车跳过</span><br><span class="line">Other []:                  # 回车跳过</span><br><span class="line">Is the information correct? [Y/n]   # 输入 Y 确认</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/30f5655dcdea9d75b85671dd7d23300f.webp" alt="adduser 创建用户的完整交互过程"></p><h4 id="Даємо-права-sudo">Даємо права sudo</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><p><strong>Перевіряємо, чи все запрацювало:</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到新用户 ittinker 换成你自己上面创建的那个用户</span></span><br><span class="line">su - ittinker</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 sudo 是否生效</span></span><br><span class="line">sudo <span class="built_in">whoami</span></span><br></pre></td></tr></table></figure><p>Якщо у відповідь бачите <code>root</code>, значить, sudo налаштовано успішно.<br><img src="https://cdn.iaiuse.com/img/2026/03/08/8d155b9b27168aae5afcec65fe4cf09a.webp" alt="测试sudo"></p><blockquote><p>💡 <strong>Маленький лайфхак</strong></p><p>Введіть <code>exit</code>, щоб повернутися до root. Далі ми ще трохи повозимося з налаштуваннями під root-ом, а коли закінчимо — просто перемкнемося назад на звичайного користувача.</p></blockquote><hr><h3 id="3-3-Налаштовуємо-вхід-за-SSH-ключем">3.3 Налаштовуємо вхід за SSH-ключем</h3><h4 id="Ключі-замість-паролів">Ключі замість паролів</h4><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f0b3c951e8e63dd4cc5f49d6b9d31d1d.webp" alt="SSH密钥认证原理"></p><p>Авторизація за ключем — це набагато безпечніше за паролі:</p><ul><li>Пароль можна збрутфорсити, а підібрати ключ — практично нереально</li><li>Не треба вводити пароль щоразу, це просто зручніше</li><li>Навіть якщо пароль злили, без приватного ключа ніхто не зможе увійти</li></ul><h4 id="Крок-1-Генеруємо-пару-ключів-локально">Крок 1: Генеруємо пару ключів локально</h4><p>Виконай на <strong>своєму комп’ютері</strong> (не на сервері):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 ED25519 密钥（推荐，更安全更快）</span></span><br><span class="line">ssh-keygen -t ed25519 -C <span class="string">&quot;blog@ittinker.com&quot;</span></span><br></pre></td></tr></table></figure><p>Скрипт запитає:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter file in which to save the key (/Users/你/.ssh/id_ed25519):</span><br></pre></td></tr></table></figure><p>Просто натисни Enter, щоб лишити шлях за замовчуванням. Тут ми використали <code>./ittinker</code> — це означає, що файл збережеться в поточній теці й називатиметься <code>ittinker</code>.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Enter passphrase (empty for no passphrase):</span><br></pre></td></tr></table></figure><p>Можеш задати пароль для ключа (це додатковий шар захисту), або просто натиснути Enter, щоб лишити поле порожнім.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/e3b20f20f5651b992de05976aa86fe7e.webp" alt="本地生成 SSH 密钥的过程"></p><p>Кільки генерація завершиться, у теці <code>~/.ssh/</code> ти побачиш два файли (нижче наведено стандартні назви — так вони виглядатимуть, якщо ти просто натискав Enter):</p><ul><li><code>id_ed25519</code>: <strong>приватний ключ</strong>, нізащо не світити ним!</li><li><code>id_ed25519.pub</code>: <strong>публічний ключ</strong>, його треба завантажити на сервер</li></ul><blockquote><p>💡 <strong>ed25519 vs RSA</strong></p><p><code>ed25519</code> — це рекомендований алгоритм на сьогодні. Він безпечніший за традиційний RSA, а сам ключ коротший. Якщо твоя система застаріла й не підтримує його, бери <code>ssh-keygen -t rsa -b 4096</code>.</p></blockquote><blockquote><p>Один нюанс: ключ ed25519 виходить досить компактним, а от файли RSA дуже здорові. Я спитав у ШІ, і виявилося, що розмір тут не при чому — це просто особливість самого алгоритму.</p></blockquote><h4 id="Крок-2-Завантажуємо-публічний-ключ-на-сервер">Крок 2: Завантажуємо публічний ключ на сервер</h4><p><strong>Спосіб А: Через ssh-copy-id (рекомендовано)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在你的电脑上执行</span></span><br><span class="line">ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Після вводу пароля публічний ключ автоматично скопіюється на сервер.</p><p><img src="https://cdn.iaiuse.com/img/2026/03/08/56bba5c6f556c86124f5206e9135aecc.webp" alt="ssh-copy-id 执行成功"></p><p><strong>Спосіб Б: Копіюємо вручну</strong></p><p>Якщо <code>ssh-copy-id</code> не спрацював, можна зробити все вручну:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 在你的电脑上，查看公钥内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/id_ed25519.pub</span><br></pre></td></tr></table></figure><p>Скопіюйте виведений текст (це довгий рядок, що починається з <code>ssh-ed25519</code>).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 2. 在服务器上，为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/ittinker/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/ittinker/.ssh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建 authorized_keys 文件并粘贴公钥</span></span><br><span class="line">vim /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 按 i 进入编辑模式，粘贴公钥，按 Esc，输入 :wq 保存退出</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 设置正确的权限</span></span><br><span class="line"><span class="built_in">chmod</span> 600 /home/ittinker/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R ittinker:ittinker /home/ittinker/.ssh</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Права доступу — це дуже важливо!</strong></p><p>SSH дуже суворо ставиться до прав доступу на файли:</p><ul><li>Каталог <code>.ssh</code>: 700 (доступ лише у самого користувача)</li><li>Файл <code>authorized_keys</code>: 600 (читання та запис лише у самого користувача)</li></ul><p>Якщо права налаштовані неправильно, SSH просто не дасть увійти за ключем.</p></blockquote><h4 id="Крок-3-Перевіряємо-вхід-за-ключем">Крок 3: Перевіряємо вхід за ключем</h4><p><strong>Відкрийте нове вікно терміналу</strong> (старе не закривайте — якщо щось піде не так, зможете все виправити) і перевірте вхід за ключем:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh ittinker@你的服务器IP</span><br></pre></td></tr></table></figure><p>Якщо зайшло без запиту пароля — вітаю, налаштування ключа пройшло успішно! 🎉</p><p>(Якщо ви задали passphrase для приватного ключа, система попросить його ввести — це абсолютно нормально)<br><img src="https://cdn.iaiuse.com/img/2026/03/08/b5c3d33f90fd1f3e92753b7dd223fe7f.webp" alt="使用密钥成功登录（无需服务器密码）"></p><blockquote><p>Тут ми додали параметр -i, бо цей ключ лежить не за стандартним шляхом, а просто в поточній директорії. Якщо не вказати його явно, система спробує використати ключ за замовчуванням.</p></blockquote><hr><h3 id="3-4-Посилення-безпеки-SSH">3.4 Посилення безпеки SSH</h3><p>Отже, вхід за ключем уже працює. Тепер давайте трохи “захардкодимо” SSH:</p><ol><li>Змінимо стандартний порт (щоб не ловити зайвий шум від сканерів)</li><li>Вимкнемо вхід за паролем</li><li>Заборонимо прямий логін від імені root</li></ol><h4 id="Редагуємо-конфіг-SSH">Редагуємо конфіг SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 备份原配置</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">nano /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/08/f7013abae83f75b7aee300d030f11719.webp" alt="修改前"></p><p>Знайдіть і змініть наступні параметри (деякі з них можуть бути закоментовані — просто приберіть <code>#</code> спереду):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 修改端口（选一个 1024-65535 之间的数字）</span></span><br><span class="line">Port 22000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止 root 登录</span></span><br><span class="line">PermitRootLogin no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许密钥登录</span></span><br><span class="line">PubkeyAuthentication <span class="built_in">yes</span></span><br><span class="line">AuthorizedKeysFile .ssh/authorized_keys</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁止密码登录（确保密钥登录测试成功后再改！）</span></span><br><span class="line">PasswordAuthentication no</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用更安全的 SSH2 协议</span></span><br><span class="line">Protocol 2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最大认证尝试次数</span></span><br><span class="line">MaxAuthTries 3</span><br><span class="line"></span><br><span class="line"><span class="comment"># 客户端超时设置</span></span><br><span class="line">ClientAliveInterval 300</span><br><span class="line">ClientAliveCountMax 2</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/6589aa0b0b374ad183a714e99bb279f0.webp" alt="修改后的 sshd_config 关键配置"></p><p>Зберігайте та виходьте (<code>ctrl + o</code>).</p><blockquote><p>У Nano збереження — це ctrl + o, він запитає ім’я файлу, просто натисніть Enter, а вихід — ctrl + x</p></blockquote><h4 id="Перезапускаємо-службу-SSH">Перезапускаємо службу SSH</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart sshd.service</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>Важливе нагадування!</strong></p><p><strong>Не закривайте поточний термінал!</strong> Спочатку в новому вікні перевірте, чи нормально підключаєтесь із новими налаштуваннями:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -p 22000 yourname@你的服务器IP</span><br></pre></td></tr></table></figure><p>Якщо вдається увійти, тоді закривайте старе вікно. Якщо не пускає — у старому вікні ще можна полагодити конфіг.</p></blockquote><blockquote><p>Якщо ви купили легкий сервер, найімовірніше цей порт змінити не вийде, а от традиційний ECS це дозволяє — майте це на увазі.</p></blockquote><hr><h3 id="3-5-Налаштовуємо-фаєрвол-UFW">3.5 Налаштовуємо фаєрвол UFW</h3><p><img src="https://cdn.iaiuse.com/img/2026/03/08/1a804cd7a3632a79fff76ea2a2c39fef.webp" alt="UFW防火墙规则"></p><p>UFW (Uncomplicated Firewall) — це стандартний інструмент фаєрвола в Ubuntu: налаштовується просто, але функціонал потужний.</p><h4 id="Базове-налаштування">Базове налаштування</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 SSH（使用你设置的端口）</span></span><br><span class="line">ufw allow 22000/tcp comment <span class="string">&#x27;SSH&#x27;</span></span><br><span class="line">ufw allow 22/tcp comment <span class="string">&#x27;SSH&#x27;</span>  <span class="comment"># 如果是轻量服务器，还是开22端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许 HTTP 和 HTTPS</span></span><br><span class="line">ufw allow 80/tcp comment <span class="string">&#x27;HTTP&#x27;</span></span><br><span class="line">ufw allow 443/tcp comment <span class="string">&#x27;HTTPS&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="Увімкнення-фаєрвола">Увімкнення фаєрвола</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw <span class="built_in">enable</span></span><br></pre></td></tr></table></figure><p>Видасть таке повідомлення:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command may disrupt existing ssh connections. Proceed with operation (y|n)?</span><br></pre></td></tr></table></figure><p>Введіть <code>y</code> для підтвердження.</p><h4 id="Перевірка-статусу">Перевірка статусу</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/05235f62966caf482d454835b94b7498.webp" alt="ufw status 的输出结果"></p><blockquote><p>23022 — це я випадково помилився, просто використовуйте свої власні дані</p></blockquote><p>Вивід буде приблизно таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Status: active</span><br><span class="line">Logging: on (low)</span><br><span class="line">Default: deny (incoming), allow (outgoing), disabled (routed)</span><br><span class="line"></span><br><span class="line">To                         Action      From</span><br><span class="line">--                         ------      ----</span><br><span class="line">22000/tcp (SSH)            ALLOW IN    Anywhere</span><br><span class="line">80/tcp (HTTP)              ALLOW IN    Anywhere</span><br><span class="line">443/tcp (HTTPS)            ALLOW IN    Anywhere</span><br><span class="line">22000/tcp (SSH (v6))       ALLOW IN    Anywhere (v6)</span><br><span class="line">80/tcp (HTTP (v6))         ALLOW IN    Anywhere (v6)</span><br><span class="line">443/tcp (HTTPS (v6))       ALLOW IN    Anywhere (v6)</span><br></pre></td></tr></table></figure><h4 id="Швидка-шпаргалка-з-команд">Швидка шпаргалка з команд</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看状态</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加规则</span></span><br><span class="line">ufw allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除规则</span></span><br><span class="line">ufw delete allow 8080/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许特定 IP 访问所有端口</span></span><br><span class="line">ufw allow from 192.168.1.100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 禁用防火墙（不推荐）</span></span><br><span class="line">ufw <span class="built_in">disable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重置所有规则</span></span><br><span class="line">ufw reset</span><br></pre></td></tr></table></figure><hr><h3 id="3-6-Вмикаємо-прискорення-BBR">3.6 Вмикаємо прискорення BBR</h3><p>BBR (Bottleneck Bandwidth and Round-trip propagation time) — це алгоритм контролю перешкод TCP від Google, який може суттєво підвищити продуктивність мережі.</p><h4 id="Вмикаємо-в-один-клік">Вмикаємо в один клік</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 BBR 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><h4 id="Перевіряємо-чи-увімкнулося">Перевіряємо, чи увімкнулося</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前拥塞控制算法</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>Вивід має бути таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net.ipv4.tcp_congestion_control = bbr</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 确认 BBR 模块已加载</span></span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></table></figure><p>Вивід буде приблизно таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp_bbr    20480  3</span><br></pre></td></tr></table></figure><blockquote><p>💡 <strong>Який ефект дає BBR</strong></p><p>Після увімкнення BBR, особливо за нестабільної мережі або високих затримок, ви чітко відчуєте:</p><ul><li>Швидше завантаження файлів</li><li>Плавнішу роботу через SSH</li><li>Швидше завантаження вебсторінок</li></ul></blockquote><p><img src="https://cdn.iaiuse.com/img/2026/03/09/813f9146cf52e28338492dcdb6fd6506.webp" alt="bbr 开启"></p><hr><h3 id="3-7-Налаштовуємо-fail2ban-для-захисту-від-брутфорсу">3.7 Налаштовуємо fail2ban для захисту від брутфорсу</h3><p>fail2ban моніторить логи і автоматично блокує IP-адреси, з яких було багато невдалих спроб входу.</p><h4 id="Базове-налаштування-2">Базове налаштування</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 复制默认配置（不要直接修改 jail.conf）</span></span><br><span class="line"><span class="built_in">cp</span> /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</span><br><span class="line"></span><br><span class="line"><span class="comment"># 编辑配置</span></span><br><span class="line">vim /etc/fail2ban/jail.local</span><br></pre></td></tr></table></figure><p>Знайдіть розділ <code>[sshd]</code> і переконайтеся, що там такі налаштування:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[sshd]</span></span><br><span class="line"><span class="attr">enabled</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">port</span> = <span class="number">22000</span>          <span class="comment"># 改成你的 SSH 端口</span></span><br><span class="line"><span class="attr">filter</span> = sshd</span><br><span class="line"><span class="attr">logpath</span> = /var/log/auth.log</span><br><span class="line"><span class="attr">maxretry</span> = <span class="number">3</span>          <span class="comment"># 最大尝试次数</span></span><br><span class="line"><span class="attr">bantime</span> = <span class="number">3600</span>        <span class="comment"># 封禁时间（秒），这里是 1 小时</span></span><br><span class="line"><span class="attr">findtime</span> = <span class="number">600</span>        <span class="comment"># 在这个时间窗口内</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/96a3a4f721768b55bb56327f32dda69b.webp" alt="fail2ban"></p><h4 id="Запускаємо-сервіс">Запускаємо сервіс</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重启 fail2ban</span></span><br><span class="line">systemctl restart fail2ban</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> fail2ban</span><br></pre></td></tr></table></figure><h4 id="Перевіряємо-статус">Перевіряємо статус</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 fail2ban 状态</span></span><br><span class="line">fail2ban-client status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看 SSH 监控状态</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/37bd282a8b1a37787232f5253f36753a.webp" alt="fail2ban-client status sshd 的输出"></p><p>Вивід буде приблизно таким:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Status for the jail: sshd</span><br><span class="line">|- Filter</span><br><span class="line">|  |- Currently failed: 0</span><br><span class="line">|  |- Total failed:     0</span><br><span class="line">|  `- File list:        /var/log/auth.log</span><br><span class="line">`- Actions</span><br><span class="line">   |- Currently banned: 0</span><br><span class="line">   |- Total banned:     0</span><br><span class="line">   `- Banned IP list:</span><br></pre></td></tr></table></figure><h4 id="Корисні-команди">Корисні команди</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 手动封禁 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd banip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 手动解封 IP</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 1.2.3.4</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看被封禁的 IP</span></span><br><span class="line">fail2ban-client status sshd</span><br></pre></td></tr></table></figure><hr><h3 id="3-8-Опціонально-Керування-кількома-серверами-через-SSH-Config">3.8 [Опціонально] Керування кількома серверами через SSH Config</h3><p>Якщо у вас кілька серверів, щоразу вводити <code>ssh -p 22000 user@ip</code> — це морока. Можна спростити все за допомогою SSH Config.</p><h4 id="Конфігураційний-файл">Конфігураційний файл</h4><p>Відредагуйте файл <code>~/.ssh/config</code> на <strong>вашому локальному комп’ютері</strong>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim ~/.ssh/config</span><br></pre></td></tr></table></figure><p>Додайте налаштування:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># 第一台服务器</span><br><span class="line">Host vps1</span><br><span class="line">    HostName 192.168.1.100</span><br><span class="line">    User yourname</span><br><span class="line">    Port 22000</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 第二台服务器</span><br><span class="line">Host vps2</span><br><span class="line">    HostName 192.168.1.101</span><br><span class="line">    User admin</span><br><span class="line">    Port 22222</span><br><span class="line">    IdentityFile ~/.ssh/id_ed25519</span><br><span class="line"></span><br><span class="line"># 通用设置（应用于所有连接）</span><br><span class="line">Host *</span><br><span class="line">    ServerAliveInterval 60</span><br><span class="line">    ServerAliveCountMax 3</span><br><span class="line">    AddKeysToAgent yes</span><br></pre></td></tr></table></figure><h4 id="Як-користуватися">Як користуватися</h4><p>Тепер можна підключатися напряму за аліасом:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 连接第一台服务器</span></span><br><span class="line">ssh vps1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 连接第二台服务器</span></span><br><span class="line">ssh vps2</span><br></pre></td></tr></table></figure><p>Більше не треба тримати в голові IP, порти та імена користувачів!</p><hr><h3 id="3-9-Опціонально-Дозвіл-доступу-лише-для-Cloudflare">3.9 [Опціонально] Дозвіл доступу лише для Cloudflare</h3><p>Якщо ваш сайт повністю знаходиться за Cloudflare, можна налаштувати доступ до портів 80/443 лише для IP-адрес Cloudflare — це додатково підвищить безпеку.</p><blockquote><p>⚠️ Важливо: цей конфіг вимагає, щоб ваш домен вже був підключений до Cloudflare CDN.</p></blockquote><h4 id="Скрипт-автоматичного-налаштування">Скрипт автоматичного налаштування</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载脚本</span></span><br><span class="line">wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ~/.cloudflare-ufw.sh</span><br><span class="line"></span><br><span class="line"><span class="comment"># 执行脚本</span></span><br><span class="line">~/.cloudflare-ufw.sh</span><br></pre></td></tr></table></figure><p>Цей скрипт:</p><ol><li>Тягнемо актуальні IP-діапазони прямо з офіційних джерел Cloudflare</li><li>Додаємо правила в UFW, щоб пускати на 80/443 лише ці IP</li><li>Перезавантажуємо UFW</li></ol><h4 id="Налаштовуємо-автооновлення">Налаштовуємо автооновлення</h4><p>IP-діапазони Cloudflare можуть змінюватися, тому налаштуємо щотижневе автооновлення:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 cron 任务（每周一凌晨执行）</span></span><br><span class="line">(crontab -l 2&gt;/dev/null; <span class="built_in">echo</span> <span class="string">&quot;0 0 * * 1 /root/.cloudflare-ufw.sh &gt; /dev/null 2&gt;&amp;1&quot;</span>) | crontab -</span><br></pre></td></tr></table></figure><hr><h3 id="3-10-Виставляємо-часовий-пояс">3.10 Виставляємо часовий пояс</h3><p>За замовчуванням там, ймовірно, UTC — змініть на свій пояс, щоб з логами було менше мороки:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前时区</span></span><br><span class="line">timedatectl</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为上海时区（中国用户）</span></span><br><span class="line">sudo timedatectl set-timezone Asia/Shanghai</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证</span></span><br><span class="line"><span class="built_in">date</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.iaiuse.com/img/2026/03/09/b849143ac1549bc9f0ee0efc7037f8d5.webp" alt="设置时区"></p><hr><h3 id="3-11-Опціонально-Налаштовуємо-автоматичні-оновлення-безпеки">3.11 [Опціонально] Налаштовуємо автоматичні оновлення безпеки</h3><p>Дозволяємо системі самій ставити патчі безпеки — не доведеться щоразу робити це вручну:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装自动更新工具</span></span><br><span class="line">sudo apt install -y unattended-upgrades</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置</span></span><br><span class="line">sudo dpkg-reconfigure --priority=low unattended-upgrades</span><br></pre></td></tr></table></figure><p>Вибираємо «Yes», щоб увімкнути автооновлення.</p><blockquote><p>💡 Ця фішка тягає лише <strong>оновлення безпеки</strong> й не стрибне на новий мажорний реліз, тож досить безпечно.</p></blockquote><hr><h2 id="4-Підбиваємо-підсумки">4. Підбиваємо підсумки</h2><h3 id="Чекліст-після-ініціалізації">Чекліст після ініціалізації</h3><p>Коли пройдемося по всьому вище, беремо цей чекліст і перевіряємо:</p><table><thead><tr><th>Перевірка</th><th>Команда</th><th>Очікуваний результат</th></tr></thead><tbody><tr><td>Систему оновлено</td><td><code>apt update &amp;&amp; apt list --upgradable</code></td><td>Немає пакетів для оновлення</td></tr><tr><td>Звичайний юзер має sudo</td><td><code>sudo whoami</code></td><td>Виведе <code>root</code></td></tr><tr><td>Вхід за ключем працює</td><td><code>ssh yourname@ip -p port</code></td><td>Вхід без пароля</td></tr><tr><td>Вхід за паролем вимкнено</td><td><code>grep PasswordAuth /etc/ssh/sshd_config</code></td><td><code>PasswordAuthentication no</code></td></tr><tr><td>SSH-порт змінено</td><td><code>grep Port /etc/ssh/sshd_config</code></td><td>Порт, який ти задав</td></tr><tr><td>Фаєрвол увімкнено</td><td><code>ufw status</code></td><td><code>Status: active</code></td></tr><tr><td>BBR увімкнено</td><td><code>sysctl net.ipv4.tcp_congestion_control</code></td><td><code>= bbr</code></td></tr><tr><td>fail2ban працює</td><td><code>systemctl status fail2ban</code></td><td><code>active (running)</code></td></tr><tr><td>Часовий пояс налаштовано</td><td><code>timedatectl</code></td><td>Asia/Shanghai або твій часовий пояс</td></tr><tr><td>Локальний SSH Config</td><td><code>cat ~/.ssh/config</code></td><td>Аліас сервера налаштовано</td></tr></tbody></table><h3 id="Де-лежать-ключові-файли">Де лежать ключові файли</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/etc/ssh/sshd_config        # SSH 服务端配置</span><br><span class="line">~/.ssh/authorized_keys      # 允许登录的公钥</span><br><span class="line">~/.ssh/config               # 本地 SSH 客户端配置（在你电脑上）</span><br><span class="line">/etc/fail2ban/jail.local    # fail2ban 配置</span><br></pre></td></tr></table></figure><h3 id="Найкращі-практики-безпеки">Найкращі практики безпеки</h3><ol><li><strong>Регулярно оновлюй систему</strong>: <code>apt update &amp;&amp; apt upgrade</code></li><li><strong>Періодично перевіряй логи входу</strong>: <code>lastb</code> (невдалі входи), <code>last</code> (успішні входи)</li><li><strong>Слідкуй за банами у fail2ban</strong></li><li><strong>Роби бекап перед тим, як змінювати важливі конфіги</strong></li></ol><hr><h2 id="5-Лог-помилок-і-нюансів">5. Лог помилок і нюансів</h2><h3 id="Q1-Не-пускає-за-ключем-все-одно-просить-пароль">Q1: Не пускає за ключем, все одно просить пароль?</h3><p><strong>Можливі причини:</strong></p><ol><li><p><strong>Проблема з правами доступу</strong> (найчастіше)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查并修复权限</span></span><br><span class="line"><span class="built_in">chmod</span> 700 ~/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 600 ~/.ssh/authorized_keys</span><br></pre></td></tr></table></figure></li><li><p><strong>Публічний ключ скопійовано неправильно</strong></p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 authorized_keys 内容</span></span><br><span class="line"><span class="built_in">cat</span> ~/.ssh/authorized_keys</span><br><span class="line"><span class="comment"># 应该是一行完整的公钥，以 ssh-ed25519 或 ssh-rsa 开头</span></span><br></pre></td></tr></table></figure></li><li><p><strong>Втручання SELinux</strong> (для систем CentOS/RHEL)</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">restorecon -Rv ~/.ssh</span><br></pre></td></tr></table></figure></li></ol><h3 id="Q2-Після-зміни-порту-не-можете-підключитися">Q2: Після зміни порту не можете підключитися?</h3><p><strong>Кроки для діагностики:</strong></p><ol><li><p>Переконайтеся, що новий порт відкрито у фаєрволі:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ufw status | grep 你的端口</span><br></pre></td></tr></table></figure></li><li><p>Перевірте, чи правильно налаштовано SSH:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep Port /etc/ssh/sshd_config</span><br></pre></td></tr></table></figure></li><li><p>Переконайтеся, що служба SSH працює:</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl status sshd</span><br></pre></td></tr></table></figure></li><li><p>Якщо підключитися взагалі не виходить, увійдіть через VNC/консоль вашого хостинг-провайдера і виправляйте все там.</p></li></ol><h3 id="Q2-5-Зміна-порту-взагалі-не-застосовується-Для-легких-хмарних-серверів">Q2.5: Зміна порту взагалі не застосовується? (Для легких хмарних серверів)</h3><p><strong>Симптом</strong>: ви змінили <code>/etc/ssh/sshd_config</code>, але після перезапуску служби 22-й порт все ще активний, а новий порт не працює.</p><p><strong>Як діагностувати</strong>:</p><p>bash</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看是谁在监听 22 端口</span></span><br><span class="line">netstat -lntp | grep :22</span><br></pre></td></tr></table></figure><p>Якщо вивід виглядає приблизно так:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tcp  0  0.0.0.0:22  0.0.0.0:*  LISTEN  1/init</span><br></pre></td></tr></table></figure><p>Це означає, що 22-й порт прослуховується процесом <code>init</code> (PID 1), а не <code>sshd</code>.</p><p><strong>Причина:</strong> У деяких хмарних провайдерів SSH для «легких серверів додатків» або «контейнерних інстансів» проксіюється на <strong>рівні платформи</strong>, тому конфіг всередині вашого сервера (<code>sshd_config</code>) просто не спрацює.</p><p><strong>Рішення:</strong></p><table><thead><tr><th>Тип інстансу</th><th>Як змінити SSH-порт</th></tr></thead><tbody><tr><td>Класичний VPS/ECS</td><td>Редагуємо <code>sshd_config</code> ✅</td></tr><tr><td>Легкий сервер</td><td>Можливо, треба міняти в панелі хмарного провайдера, або взагалі не підтримується</td></tr><tr><td>Контейнерний інстанс</td><td>Зазвичай зміна порта не підтримується</td></tr></tbody></table><p>Якщо ваш інстанс не дає змінити порт, <strong>інші заходи безпеки стають ще важливішими</strong>:</p><ul><li>✅ Створюємо звичайного користувача + вимикаємо root-логін</li><li>✅ Логін за SSH-ключем + вимикаємо вхід за паролем</li><li>✅ fail2ban для захисту від брутфорсу</li></ul><p>Якщо все це налаштувати, безпека все одно буде на високому рівні.</p><h3 id="Q3-fail2ban-заблокував-мене-самого">Q3: fail2ban заблокував мене самого?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 用 VNC 登录后解封</span></span><br><span class="line">fail2ban-client <span class="built_in">set</span> sshd unbanip 你的IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 把你的 IP 加入白名单，编辑 jail.local</span></span><br><span class="line">ignoreip = 127.0.0.1/8 ::1 你的IP</span><br></pre></td></tr></table></figure><h3 id="Q4-Після-увімкнення-UFW-сайт-перестав-відкриватися">Q4: Після увімкнення UFW сайт перестав відкриватися?</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 检查 80/443 是否开放</span></span><br><span class="line">ufw status</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果没有，添加规则</span></span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br></pre></td></tr></table></figure><h3 id="Q5-При-виконанні-команди-пише-що-sudo-не-знайдено">Q5: При виконанні команди пише, що sudo не знайдено?</h3><p>У мінімалістичній установці Debian sudo може бути відсутнім. Встановіть його з-під root:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install sudo</span><br><span class="line">usermod -aG sudo ittinker</span><br></pre></td></tr></table></figure><hr><h2 id="6-Скрипт-ініціалізації-в-один-клік-для-досвідчених">6. Скрипт ініціалізації в один клік (для досвідчених)</h2><p>Якщо ви вже освоїли всі кроки вище, можете скористатися цим скриптом для швидкої ініціалізації.</p><blockquote><p>⚠️ <strong>Важливо</strong>: перед тим як запускати скрипт, переконайся, що в тебе вже готовий публічний SSH-ключ.</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># VPS 初始化脚本</span></span><br><span class="line"><span class="comment"># 使用方法：以 root 身份运行</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># === 配置区域（根据你的需求修改）===</span></span><br><span class="line">NEW_USER=<span class="string">&quot;ittinker&quot;</span>           <span class="comment"># 新用户名</span></span><br><span class="line">NEW_SSH_PORT=<span class="string">&quot;22000&quot;</span>          <span class="comment"># 新 SSH 端口</span></span><br><span class="line">TIMEZONE=<span class="string">&quot;Asia/Shanghai&quot;</span>      <span class="comment"># 时区</span></span><br><span class="line"><span class="comment"># =====================================</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;=== VPS 初始化脚本 ===&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 1. 更新系统</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[1/8] 更新系统...&quot;</span></span><br><span class="line">apt update &amp;&amp; apt upgrade -y</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 安装基础工具</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[2/8] 安装基础工具...&quot;</span></span><br><span class="line">apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 创建新用户</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[3/8] 创建用户 <span class="variable">$NEW_USER</span>...&quot;</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">id</span> <span class="string">&quot;<span class="variable">$NEW_USER</span>&quot;</span> &amp;&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;用户已存在，跳过创建&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    adduser --gecos <span class="string">&quot;&quot;</span> <span class="variable">$NEW_USER</span></span><br><span class="line">    usermod -aG sudo <span class="variable">$NEW_USER</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 4. 配置 SSH 目录</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[4/8] 配置 SSH 目录...&quot;</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">chmod</span> 700 /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"><span class="built_in">touch</span> /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chmod</span> 600 /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">chown</span> -R <span class="variable">$NEW_USER</span>:<span class="variable">$NEW_USER</span> /home/<span class="variable">$NEW_USER</span>/.ssh</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&gt;&gt;&gt; 请将你的公钥粘贴到下面（粘贴后按 Ctrl+D 结束）：&quot;</span></span><br><span class="line"><span class="built_in">cat</span> &gt;&gt; /home/<span class="variable">$NEW_USER</span>/.ssh/authorized_keys</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 5. 修改 SSH 配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[5/8] 修改 SSH 配置...&quot;</span></span><br><span class="line"><span class="built_in">cp</span> /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</span><br><span class="line">sed -i <span class="string">&quot;s/^#*Port .*/Port <span class="variable">$NEW_SSH_PORT</span>/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitRootLogin .*/PermitRootLogin no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PasswordAuthentication .*/PasswordAuthentication no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line">sed -i <span class="string">&quot;s/^#*PermitEmptyPasswords .*/PermitEmptyPasswords no/&quot;</span> /etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line"><span class="comment"># 6. 配置防火墙</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[6/8] 配置防火墙...&quot;</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line">ufw allow <span class="variable">$NEW_SSH_PORT</span>/tcp</span><br><span class="line">ufw allow 80/tcp</span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;y&quot;</span> | ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 7. 开启 BBR</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[7/8] 开启 BBR...&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 8. 设置时区</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;[8/8] 设置时区...&quot;</span></span><br><span class="line">timedatectl set-timezone <span class="variable">$TIMEZONE</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启 SSH</span></span><br><span class="line">systemctl restart sshd</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ✅ 初始化完成！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;==========================================&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新 SSH 端口: <span class="variable">$NEW_SSH_PORT</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  新用户: <span class="variable">$NEW_USER</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  时区: <span class="variable">$TIMEZONE</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  请使用以下命令登录：&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;    ssh -p <span class="variable">$NEW_SSH_PORT</span> <span class="variable">$NEW_USER</span>@<span class="subst">$(curl -s ifconfig.me 2&gt;/dev/null || echo &#x27;你的IP&#x27;)</span>&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;  ⚠️ 重要：请先测试新配置能否登录，再关闭当前终端！&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="7-Гаразд-наскільки-реально-підвищилась-безпека-після-всього-цього">7. Гаразд, наскільки реально підвищилась безпека після всього цього?</h2><table><thead><tr><th>Крок</th><th>Що робили</th><th>Чому це важливо</th></tr></thead><tbody><tr><td>Оновлення системи</td><td>Встановили свіжі патчі</td><td>Закриває відомі вразливості</td></tr><tr><td>Створення нового юзера</td><td>Відмовились логінитись root-ом напряму</td><td>Зменшує ризик випадкових помилок</td></tr><tr><td>SSH-ключі</td><td>Замінили паролі на ключі</td><td>Неможливо збрутфорсити</td></tr><tr><td>Зміна порту</td><td>Відійшли від дефолтного 22</td><td>Менше шансів, що вас знайдуть сканери</td></tr><tr><td>Вимкнення пароля</td><td>Логін лише за ключами</td><td>Повністю прибирає атаки на паролі</td></tr><tr><td>Вимкнення root</td><td>root не може логінитись напряму</td><td>Ускладнює життя зловмисникам</td></tr><tr><td>Фаєрвол UFW</td><td>Відкрили лише потрібні порти</td><td>Зменшує поверхню атаки</td></tr><tr><td>Прискорення BBR</td><td>Оптимізували мережеву продуктивність</td><td>Робить доступ швидшим</td></tr><tr><td>fail2ban</td><td>Автоматично банить підозрілі IP</td><td>Захищає від постійних атак</td></tr></tbody></table><p>Після всього цього твій сервер уже обганяє за безпекою <strong>90%</strong> VPS.</p><hr><h2 id="Анонс-наступної-статті">Анонс наступної статті</h2><p>У наступній статті ми розберемо <strong>швидку довідку з налаштування входу по SSH-ключах</strong>, і там ми детальніше зупинимось на:</p><ul><li>Як генерувати ключі на різних ОС</li><li>Менеджмент кількох ключів</li><li>Налаштування SSH Agent</li><li>Типові налаштування популярних SSH-клієнтів</li></ul><hr><p><em>Ця стаття востаннє оновлювалась: січень 2026 року</em></p><p><em>Серія «Набір інструментів інді-розробника», стежте за оновленнями!</em></p>]]>
    </content>
    <id>https://blog.ittinker.com/posts/uk/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/</id>
    <link href="https://blog.ittinker.com/posts/uk/20260121-vps-dao-shou-hou-de-di-yi-ge-xiao-shi-cong-luo-ji-dao-an-quan-ke-yong-de-wan-zheng-chu-shi-hua-zhi-nan/"/>
    <published>2026-01-21T11:51:00.000Z</published>
    <summary>Новий VPS - наче відкрита двері для всіх шкідливих скриптів світу. Перш ніж встановлювати софт, зробіть безпеку першочерговою: SSH ключі, нестандартні порти, звичайні користувачі, брандмауер, fail2ban та BBR прискорення. У цій статті ви дізнаєтеся, як за перший годину створити міцний фундамент для свого VPS.</summary>
    <title>Перша година з VPS: повний гайд з налаштування з нуля до безпечної робочої системи (робимо твій OpenClaw безпечнішим)</title>
    <updated>2026-01-21T11:51:00.000Z</updated>
  </entry>
</feed>
