使えるVPN-中継サーバ設定
2025/11/09
さくらVPS (AlmaLinux 9) WireGuard VPN構築 サーバー編
目的
512MBメモリのさくらインターネットVPS(AlmaLinux9)に、以下の構成で安全なVPN中継サーバを構築する。WireGuard (VPN)
firewalld (nftables backend)
fail2ban (SSH保護)
swapfile (2GB)
構成概要
| 項目 | 設定値 | 備考 |
|---|---|---|
| VPSグローバルIP | 160.xxx.xxx.185 | |
| 外向きNIC | ens3 | さくらVPS以外の方はここは要確認 |
| SSHポート | 5xxx2/tcp | 50000台の任意なポートを設定 |
| WireGuardポート | 5xxx0/udp | 50000台の任意なポートを設定 |
| VPNネットワーク | 10.200.0.0/24 | 255台分 |
| VPSのVPN内IP | 10.200.0.1/24 | 中継サーバのVPN上のIPアドレス |
| スワップ領域 | 2GB (/swapfile) |
STEP 0 さくらインターネットVPSクリーンインストール
さくらインターネットVPSをご参照ください。STEP 1 基本設定
SWAP設定
最初に設定しないとメモリ不足でインストールできない場合があります。swapfile (512MB RAM対策)
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile swapon --show free -h echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab echo 'vm.swappiness = 10' | sudo tee /etc/sysctl.d/99-swap-tune.conf echo 'vm.vfs_cache_pressure = 100' | sudo tee -a /etc/sysctl.d/99-swap-tune.conf sudo sysctl -p /etc/sysctl.d/99-swap-tune.conf
システムを最新に保つ
sudo dnf update -yリポジトリのメタデータを更新(キャッシュをリフレッシュ)。
インストール済みパッケージのアップデート可能なものをリストアップ。
アップデートをダウンロード・インストール(カーネルやセキュリティパッチを含む)。
-yオプションにより、ユーザーの確認なしで進む。
ロケール設定(ja_JP.UTF-8)タイムゾーンと時刻同期設定
sudo dnf install -y glibc-langpack-ja sudo localectl set-locale LANG=ja_JP.UTF-8 sudo timedatectl set-timezone Asia/Tokyo sudo systemctl enable --now chronyd
SELinux 状態確認と無効化(構築が完了したら有効化しましょう)
さくらインターネットVPSのalmalinuxでは、SElinuxは当初からdisableのようであるが、念の為。getenforce sudo cp -a /etc/selinux/config /etc/selinux/config.bak-$(date +%Y%m%d) sudo setenforce 0 || true sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config getenforce grep '^SELINUX=' /etc/selinux/config想定結果:
`Disabled`
この項目の詳しい解説はこちら。
基本パッケージ導入
sudo dnf install -y epel-release sudo dnf install -y bash-completion curl wget git tar zip unzip bind-utils net-tools firewalld fail2ban glibc-langpack-ja telnet nc rsync screen htop tree jqこの項目の詳しい解説はこちら。
エディタ導入
自分の好みのエディタをいれて構いませんが、ここでは vim-enhanced 、nano、microの3つを入れておきます。両方とも定評のあるエディタです。nanoはシンプルで使いやすいですが、ショートカットキーがunixライクなので、windows環境に慣れている方はmicroのほうがいいかもしれません(好みです)。
vimは、プロには好まれますが、初学者には習熟するまで時間がかかるかも知れません。
エディタは複数インストールしておいて使いやすいのを使えばよいと思います。
nanoの導入
sudo dnf install -y nano vim-enhancedmicro エディタは、EPELには含まれていないので、スクリプトから導入(直接バイナリ導入)する必要があります。
microの導入
cd ~
curl https://getmic.ro | bash
sudo mv ~/micro /usr/local/bin/micro
#microはそのままではパスが通らないので、通しておく。
#`sudo micro` 実行時に「command not found」になる問題の対策。
#sudo secure_path に /usr/local/bin を追加(恒久対策)
grep -Rq "/usr/local/bin" /etc/sudoers /etc/sudoers.d 2>/dev/null || {
echo 'Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin' | sudo tee /etc/sudoers.d/10-secure-path >/dev/null
sudo chmod 440 /etc/sudoers.d/10-secure-path
sudo visudo -cf /etc/sudoers.d/10-secure-path
}
#デフォルトエディタにmicoroを指定(デフォルトをnanoにしたい場合は下記のmicroをnanoに変更) 環境変数設定(冪等): grep -q "EDITOR=micro" ~/.bashrc || echo 'export EDITOR=micro' >> ~/.bashrc grep -q "VISUAL=micro" ~/.bashrc || echo 'export VISUAL=micro' >> ~/.bashrcリポジトリにあるソフト(vim,nano)は、/usr/bin/ にインストールされますが、ここはOSやディストリビューションが管理するディレクトリなので、ディストリに含まれないmicroは/usr/local/binにインストールしています。今後、リポジトリにmicroが含まれるようになれば、nanoと一緒のディレクトリにインストールすることになるでしょう。
確認:
sudo -V | sed -n 's/^Secure Path: //p'
出力例:
`/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin`
この項目の詳しい解説はこちら。
STEP 2: WireGuard インストール
sudo dnf install -y epel-release sudo dnf install -y wireguard-tools
STEP 3: WireGuardサーバ設定
鍵生成と設定作成
鍵ペアは必ず、WireGuard(=wg)で作成します。※ポート番号置き換え
sudo mkdir -p /etc/wireguard && sudo chmod 700 /etc/wireguard
sudo wg genkey | sudo tee /etc/wireguard/server_private.key >/dev/null
sudo chmod 600 /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key >/dev/null
srv_priv=$(sudo cat /etc/wireguard/server_private.key)
sudo tee /etc/wireguard/wg0.conf >/dev/null <<EOF
[Interface]
Address = 10.200.0.1/24
ListenPort = 5xxx0
PrivateKey = ${srv_priv}
EOF
sudo chmod 600 /etc/wireguard/wg0.conf
起動
sudo systemctl enable wg-quick@wg0 sudo systemctl start wg-quick@wg0 sudo systemctl status wg-quick@wg0 --no-pager sudo wg show
STEP 4: IPフォワーディング有効化
カーネルパラメータレベルの設定(根本-これがないとfiwewalldの設定が機能しない)echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-wireguard.conf echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-wireguard.conf sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
STEP 5: firewalld恒久設定
ファイヤーウォール設定についてはいろいろご意見あるかも知れません。ゾーン設定し、vpsデフォルトのens3 と,wireguardで作成されるwg0をpublicゾーンに設定します。
そのうえで、masqueradeも設定しておきます。 forwardはデフォルトでyesになっているはずです。
※ポート番号置き換え
sudo systemctl enable --now firewalld sudo firewall-cmd --set-default-zone=public # firewall ゾーン設定 sudo firewall-cmd --permanent --zone=public --add-interface=wg0 sudo firewall-cmd --permanent --zone=public --add-masquerade # RDPの穴開け ポート番号はご自分が設定しようとするものに変更してください sudo firewall-cmd --permanent --add-port=5xxx0/udp sudo firewall-cmd --reload※--add-masqueradeとすることで、forward もyes となります。
# 確認 sudo firewall-cmd --get-active-zones sudo firewall-cmd --zone=public --list-all結果
public interfaces: wg0 ens3 public (active) target: default icmp-block-inversion: no interfaces: ens3 wg0 sources: services: cockpit dhcpv6-client ssh ports: 5xxx0/udp protocols: forward: yes masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules:
STEP 6: fail2ban firewalld連携設定
※ポート番号置き換えあとで変更するSSHのポート番号に置き換え。SSHポート番号を置き換えない場合は、22,としておく。
sudo tee /etc/fail2ban/jail.local >/dev/null <<'EOF' [DEFAULT] bantime = 3600 findtime = 600 maxretry = 5 backend = systemd banaction = firewallcmd-ipset [sshd] enabled = true port = 5xxx2 logpath = /var/log/secure maxretry = 3 bantime = 7200 EOF sudo systemctl enable --now fail2ban sudo fail2ban-client status sshd
STEP 7: SSH接続ポートの変更(セキュリティ強化)
SSH強化 (22→5xxx2/tcp) SSHログインポート番号変更(5xxx2はご自身の環境に置き換え)
# SSHの別穴開け※ポート番号置き換え
sudo firewall-cmd --permanent --add-port=5xxx2/tcp sudo firewall-cmd --reload
# sshdの設定を変更
※ポート番号置き換え
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo sed -i -e 's/^#*\s*Port .*/Port 5xxx2/' /etc/ssh/sshd_config sudo sshd -t && sudo systemctl restart sshdこの設定のあとに今のセッションは切らずに、別windowで、ポート5xxx2番で繋がるかどうかテスト。
テスト完了後22番ポートを閉める。
sudo firewall-cmd --permanent --zone=public --remove-service=ssh sudo firewall-cmd --reload念の為、別windowで、ポート5xxx2番で繋がるかどうかテスト。22番で繋がらないことの確認。
最後に再起動
sudo reboot
まとめ
512MBメモリでも安定稼働するVPN中継サーバ構成。swapfileでOOM対策
firewalldにNAT・フォワード・ポートを恒久登録
fail2banでSSHを防御
再起動後の自動起動確認:
sudo systemctl list-unit-files | egrep 'firewalld|wg-quick@wg0|fail2ban|vpn-firewalld'次は、クライアントの設定です。