<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Buran Hosting Notes]]></title><description><![CDATA[Buran Hosting Notes]]></description><link>https://buran-host.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 01 Nov 2026 09:12:39 GMT</lastBuildDate><atom:link href="https://buran-host.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to Secure SSH on a Fresh VPS in 10 Minutes (Keys, Firewall, Fail2ban)]]></title><description><![CDATA[Disclosure: I run Buran.host, a VPS hosting service. The steps below work on any Debian or Ubuntu server, no matter where it is hosted. A new VPS is…]]></description><link>https://buran-host.hashnode.dev/how-to-secure-ssh-on-a-fresh-vps-in-10-minutes-keys-firewall-fail2ban</link><guid isPermaLink="true">https://buran-host.hashnode.dev/how-to-secure-ssh-on-a-fresh-vps-in-10-minutes-keys-firewall-fail2ban</guid><category><![CDATA[ssh]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Buran Host]]></dc:creator><pubDate>Thu, 29 Oct 2026 18:20:48 GMT</pubDate><content:encoded><![CDATA[<p><em>Disclosure: I run Buran.host, a VPS hosting service. The steps below work on any Debian or Ubuntu server, no matter where it is hosted.</em></p>
<p>A new VPS is scanned by bots within minutes of getting a public IP address. Open the log of a fresh server and you will already see hundreds of failed root logins. None of this is dangerous if you spend ten minutes on setup first. Here is the short checklist I use on every new server.</p>
<h2>1. Create a normal user</h2>
<p>Do not work as root. Create a user and give it sudo rights:</p>
<pre><code>adduser deploy
usermod -aG sudo deploy
</code></pre>
<h2>2. Log in with a key, not a password</h2>
<p>On your own computer, create a key (skip this if you already have one):</p>
<pre><code>ssh-keygen -t ed25519 -C "my-laptop"
ssh-copy-id deploy@YOUR_SERVER_IP
</code></pre>
<p>Open a second terminal and check that <code>ssh deploy@YOUR_SERVER_IP</code> logs you in without asking for the account password. Keep the first session open until this works. It is your safety net.</p>
<h2>3. Turn off root and password logins</h2>
<p>Create the file <code>/etc/ssh/sshd_config.d/hardening.conf</code> with these lines:</p>
<pre><code>PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
MaxAuthTries 3
</code></pre>
<p>Check the config and reload:</p>
<pre><code>sudo sshd -t &amp;&amp; sudo systemctl reload ssh
</code></pre>
<p>If <code>sshd -t</code> prints nothing, the syntax is fine. Test a new login from a second terminal before closing the first one.</p>
<h2>4. Enable a firewall</h2>
<p>With UFW you allow only what you really need (open 80 and 443 only if you run a website):</p>
<pre><code>sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
</code></pre>
<h2>5. Add Fail2ban</h2>
<p>Fail2ban bans IP addresses that keep failing to log in:</p>
<pre><code>sudo apt install fail2ban
sudo systemctl enable --now fail2ban
</code></pre>
<p>The defaults already protect SSH. Check it with <code>sudo fail2ban-client status sshd</code>.</p>
<h2>6. Keep the system updated</h2>
<pre><code>sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
</code></pre>
<p>Security patches then install by themselves.</p>
<h2>Should you change the SSH port?</h2>
<p>Moving SSH from 22 to another port reduces log noise, but it is not real security. Keys and a firewall do the real work. If you change the port, open the new port in the firewall before you reload SSH, otherwise you lock yourself out.</p>
<h2>What if you lock yourself out?</h2>
<p>It happens to everyone once. Most providers give you a web console or a rescue mode that does not depend on SSH. Before you start, find where that is in your control panel, so you know it exists.</p>
<h2>Summary</h2>
<p>A normal user, key-only login, no root over SSH, a firewall and Fail2ban stop almost all automated attacks. It takes ten minutes, and you only do it once per server.</p>
<p>A longer version with explanations is in our guide: <a href="https://buran.host/guides/ssh-hardening">https://buran.host/guides/ssh-hardening</a></p>
<p>If you are looking for a server to practice on, our plans start here: <a href="https://buran.host/vps">https://buran.host/vps</a></p>
]]></content:encoded></item><item><title><![CDATA[Self-Host Your Password Manager on a VPS: Vaultwarden + Caddy in 15 Minutes]]></title><description><![CDATA[Disclosure: I run Buran.host, a small VPS reseller, so I show everything on my own server. The steps work on any Ubuntu 22.04/24.04 VPS with Docker…]]></description><link>https://buran-host.hashnode.dev/self-host-your-password-manager-on-a-vps-vaultwarden-caddy-in-15-minutes</link><guid isPermaLink="true">https://buran-host.hashnode.dev/self-host-your-password-manager-on-a-vps-vaultwarden-caddy-in-15-minutes</guid><category><![CDATA[#selfhosted]]></category><dc:creator><![CDATA[Buran Host]]></dc:creator><pubDate>Wed, 28 Oct 2026 10:03:41 GMT</pubDate><content:encoded><![CDATA[<p><em>Disclosure: I run Buran.host, a small VPS reseller, so I show everything on my own server. The steps work on any Ubuntu 22.04/24.04 VPS with Docker.</em></p>
<p>Vaultwarden is a lightweight Rust implementation of the Bitwarden server. It works with all the official clients (browser extensions, iOS/Android and desktop apps), and the vault is a single directory with SQLite on your own server. It uses roughly 100–200 MB of RAM, so even the smallest plan is enough.</p>
<h2>1. Firewall and directory</h2>
<pre><code class="language-bash">apt update &amp;&amp; apt install -y ufw
ufw allow OpenSSH &amp;&amp; ufw allow 80/tcp &amp;&amp; ufw allow 443/tcp &amp;&amp; ufw --force enable
mkdir -p /opt/vaultwarden/data &amp;&amp; cd /opt/vaultwarden
echo "ADMIN_TOKEN=$(openssl rand -base64 48)" &gt; .env   # save this token
</code></pre>
<p>Docker must be installed (on Ubuntu: <code>curl -fsSL https://get.docker.com | sh</code>).</p>
<h2>2. docker-compose.yml</h2>
<pre><code class="language-yaml">services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    env_file: .env
    environment:
      - DOMAIN=https://vault.example.com
      - SIGNUPS_ALLOWED=true
      - WEB_VAULT_ENABLED=true
    ports:
      - "127.0.0.1:8085:80"
    volumes:
      - ./data:/data
</code></pre>
<p>The port is bound to 127.0.0.1 only: the service reaches the internet through Caddy. Start it with <code>docker compose up -d</code>.</p>
<h2>3. HTTPS with Caddy</h2>
<p>Point an A record for vault.example.com at your server's IP first. Then:</p>
<pre><code class="language-bash">apt install -y caddy
cat &gt; /etc/caddy/Caddyfile &lt;&lt;'EOF'
vault.example.com {
    reverse_proxy 127.0.0.1:8085
}
EOF
systemctl reload caddy
</code></pre>
<p>Caddy obtains and renews the Let's Encrypt certificate by itself.</p>
<h2>4. Close registration</h2>
<p>Open <a href="https://vault.example.com">https://vault.example.com</a>, create your account and immediately change <code>SIGNUPS_ALLOWED=true</code> to <code>false</code> in docker-compose.yml, then run <code>docker compose up -d</code> again. Otherwise anyone who finds the address can create an account on your server.</p>
<p>The admin panel lives at <code>/admin</code>. Here the token is stored in plain form: that is acceptable for a personal server, but the project recommends storing an Argon2 hash in <code>ADMIN_TOKEN</code> (generated with the <code>vaultwarden hash</code> command) if you keep the admin panel enabled.</p>
<h2>5. Connect your clients</h2>
<p>In any Bitwarden client, choose Self-hosted on the login screen and enter <a href="https://vault.example.com">https://vault.example.com</a>. After that, sign in as usual.</p>
<h2>6. Backups — do not skip this</h2>
<p>The whole vault is the <code>./data</code> directory. Keep a copy outside this server: for example an encrypted restic repository on a nightly systemd timer. A copy on the same disk will not save you if the server itself is lost. Test the restore: a backup you have never restored is a hope, not a backup.</p>
<h2>What you get</h2>
<p>Your own password server: your domain, your disk, updates in your hands. The one honest downside: administration is now your job — image updates, backups, monitoring.</p>
<p>A longer version with FAQ: <a href="https://buran.host/guides/vaultwarden-vps">https://buran.host/guides/vaultwarden-vps</a></p>
]]></content:encoded></item><item><title><![CDATA[How to Pay for a VPS with USDT, BTC or TON — No Card, No KYC]]></title><description><![CDATA[Disclosure: I run Buran.host, a small VPS reseller. The steps below are the same for most crypto-friendly hosts, but I use our own checkout as the example.]]></description><link>https://buran-host.hashnode.dev/how-to-pay-for-a-vps-with-usdt-btc-or-ton-no-card-no-kyc</link><guid isPermaLink="true">https://buran-host.hashnode.dev/how-to-pay-for-a-vps-with-usdt-btc-or-ton-no-card-no-kyc</guid><category><![CDATA[vps]]></category><dc:creator><![CDATA[Buran Host]]></dc:creator><pubDate>Wed, 28 Oct 2026 10:02:07 GMT</pubDate><content:encoded><![CDATA[<p><em>Disclosure: I run Buran.host, a small VPS reseller. The steps below are the same for most crypto-friendly hosts, but I use our own checkout as the example.</em></p>
<p>If you've ever had a card declined by a hosting provider — or simply don't want to hand over a passport to rent a Linux box — paying in crypto is a practical alternative. Here is how it works end to end, and the mistakes that actually cost people money.</p>
<h2>1. Pick a plan and open an invoice</h2>
<p>Choose a server, click "Order" and register with an email address you really read: the invoice, the login details and all renewal reminders go there. The invoice shows an exact amount and a payment address.</p>
<h2>2. Pick the coin — and the right network</h2>
<p>Send <strong>the same asset on the same network</strong> that the invoice names. USDT in particular exists on several networks (TRC-20, ERC-20, TON and others), and they are not interchangeable. USDT sent on the wrong network usually can't be recovered, because the receiving address doesn't control that chain.</p>
<h2>3. Send the exact amount</h2>
<p>Copy the address from the invoice, never retype it, and compare the first and last characters after pasting. If you send too little, the invoice stays open; if you send too much, the difference is normally credited to your account balance.</p>
<h2>4. Wait for confirmations</h2>
<p>TRC-20 and TON usually confirm in under a minute; BTC takes about ten minutes per confirmation. Once the network confirms, the invoice is marked paid and the server is provisioned automatically — typically a few minutes later you receive the IP address, root credentials and a link to the control panel.</p>
<h2>Mistakes that cost real money</h2>
<ul>
<li><strong>Wrong network.</strong> The classic one. Check twice.</li>
<li><strong>Sending from an exchange and expecting instant arrival.</strong> Exchanges batch withdrawals; allow extra time.</li>
<li><strong>Posting screenshots that show your address and balance.</strong> Not dangerous, but pointless.</li>
</ul>
<h2>What a legitimate provider never asks for</h2>
<p>A seed phrase, a private key, or remote access to your computer. Payment goes to the address on your invoice — nowhere else. If someone claiming to be "support" asks you to send crypto to a different address, it is not the provider.</p>
<h2>Do I need ID?</h2>
<p>For crypto invoices at our checkout, no documents are required. Card payments go through a payment processor, which may run its own standard checks.</p>
<h2>Want the full walkthrough?</h2>
<p>A longer step-by-step version, with a short FAQ: <a href="https://buran.host/guides/pay-with-crypto">https://buran.host/guides/pay-with-crypto</a></p>
<p>Plans start at €12/month for 4 vCPU, 8 GB RAM and 100 GB SSD with a dedicated IPv4 address: <a href="https://buran.host/vps">https://buran.host/vps</a></p>
]]></content:encoded></item></channel></rss>