Q - 無料枠のGCPでGitサーバーを建てたい - NginxでSSHプロキシ編 -

3 min read

こんにちは、無能です。
破の続編です。

このままだとSSHでPushできない

今の構図
クライアント側 - VPS VPN srv + Nginx proxy srv - GCP Gitea
こんな感じでVPSを通過してGCPに向けてSSH通したいんです。

さて、どうしようかなと思っていたのですが解決しました。
過去にNginxでのメールプロキシをしようとしたときに使おうとしたstreamプロキシを思い出しました。
要はHTTP/HTTPSのプロトコル以外もかんたんにプロキシすることが可能です。
なお、この場合はIPとポートとのやりとりであるイメージである為ドメインに対してはプロキシできません。
ということは、ですが一旦構文を見てもらった方が早いです。

stream {
    server {
        listen 2222; 
        proxy_pass 10.1.0.6:2222; 
        proxy_timeout 1m;
        proxy_connect_timeout 1s;
    }
}

このサーバーで2222番でListenし受け付け、10.1.0.6というIPアドレスの2222番ポートへプロキシします。
ドメイン単位でできない理由はこのIssuesの方が詳しいので気になる方は見てください。

そして、例えばですが22番ポートをプロキシしてしまった場合どうなるでしょうか?

stream {
    server {
        listen 22; 
        proxy_pass 10.1.0.6:2222; 
    }
}

そう、このサーバーに22番でSSHをしようとしている場合に全て10.1.0.6:2222へSSHをしにいこうとします。
この稼働しているサーバーを標準の22番ポートを設定してるなら実質SSH接続ができなくなってしまいそうなので、それはアカンです。
なっちゃったらでなったで実際なんか回避策あるのかな?とそんなことはおいておいて・・・。

で、2222番をListenできるようにしないと行けないのでFreeBSDであるこのサーバーはpfで一旦2222番ポートを開放。

pass in on wg0 proto tcp from 10.1.0.6 to any port 2222

これでそもそも10.1.0.6のIPアドレスが攻撃者が見えなければこのルーティングが適応されないので、WireGuard上がハックされるくらいじゃないとこの2222番ポートまで辿り着きません。
設定適応

doas pfctl -nf /etc/pf.conf
doas pfctl -f /etc/pf.conf
doas service nginx restart

そうすればGitea側も

デフォルトでGiteaは標準のSSHポートである22番を使う為このままでは無理です。
なので、設定ファイルであるapp.iniを編集します。

[server]
SSH_DOMAIN = git.mydomain.jp
DOMAIN = git.mydomain.jp
HTTP_PORT = 3000
ROOT_URL = https://git.mydomain.jp/
APP_DATA_PATH = /var/lib/gitea/data
DISABLE_SSH = false
SSH_PORT = 2222

これで2222番を標準で使うようになります。
以下で再起動

sudo service gitea restart
sudo service gitea status

GCP上でのファイアーウォールを極細にする

煩わしいのでほぼ閉じました。
Image

Giteaでgit push出来るかどうかテストする

最初にssh -Tをやっておきます。

$ ssh -T -p 2222 git@git.mydomain.jp
Hi there, haturatu! You've successfully authenticated with the key named x1@artix, but Gitea does not provide shell access.
If this is unexpected, please log in with password and setup Gitea under another user.

いけました。

そしてGitea上でレポジトリ作ってみます。
Image
ほんで、git push

$ git push -u origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 1.30 KiB | 1.30 MiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To ssh://git.mydomain.jp:2222/haturatu/wg-genconf.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

おっしゃー!!!!!!

おわりに

アカウントほしい人いれば連絡してもらえれば作るので連絡ください。
おわり。