sftpをプロキシ(squid)または踏み台(ポートフォワーディング)経由で使用できるようにする
はじめに
やりたかったことはタイトル通りなのですが。
登場人物は以下
・作業用PC
・中継サーバー(踏み台 or プロキシ)
・開発サーバー
今回は中継サーバーと開発サーバーはcentos6.5で、作業PCはMacで確認。
アクセス制限は以下
・開発サーバーへのSSHでのアクセスは中継サーバーからしか接続できない。
・中継サーバーへは作業PCから接続できる。
作業するのがプログラマ以外なのでFTPクライアントソフトとかで接続できるようにしたい。というのがやりたかったことです。
調べてみて簡単に実装できそうな方法が2つ。
・SSHポートフォワーディングを使う
・中継サーバーをプロキシサーバーにする
※squidをいれてプロキシサーバーとする。作業者は中継サーバをプロキシに設定する形
これから先、サーバー名は以下とする
中継サーバー = relay
開発サーバー = dev
SSHポートフォワーディングを使う方法
ポートフォワーディング
$ ssh -N -L 2022:devのIP:devのポート relayのユーザ名@relayのIP # Ctrl + cで終了 # 2022は適当なポート番号(作業用PCで空いてる番号)
SFTPで接続
$ sftp -oPort=2022 devのユーザ名@localhost
SFTP接続はターミナルから接続する例なのでコマンドだが、FileZilla等のFTPソフトを使ってる場合も上記の情報を設定すれば接続できる。
中継サーバーをプロキシサーバーにする
こっちの方がsquidを入れる必要があるので少し手間。
あと、SSHポートをプロキシとして解放するのでIP制限等をしない場合は、SSHのポート番号を変更した方がよさそう。今回は60022とかで話を進める。開発サーバー(接続先)のsshd_configでsshのポート番号を変更できるのでこちらは設定済であるとします。
squidのセットアップ
squidのインストール
$ yum install -y squid
以下の項目をコメントアウト #http_access deny all
http://qiita.com/pcnikki/items/404329f9ad9cb6e235d4
ここら辺とか参考にして最低限の設定はしておいた方がよさそう。
今回はsquidの公開ポートはデフォルトの3128で。
Basic認証設定
# 以下を追加 auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd acl password proxy_auth REQUIRED http_access allow password
Basic認証用のユーザーを追加(更新、削除)
$ htpasswd -c /etc/squid/passwd user # 作成 $ htpasswd -b /etc/squid/passwd user pass # 追加 $ htpasswd -D /etc/squid/passwd user # 削除
SSHのポート番号をsquidで使えるようにする
・・・ acl SSL_ports port 443 acl SSH_ports port 60022 # ★ココを追加 acl Safe_ports port 60022 # ★ココを追加 ・・・ # ★ ココを書き換えてSSHもConnectメソッドを使えるように # http_access deny CONNECT !SSL_ports http_access deny CONNECT !SSL_ports !SSH_ports ・・・
squid起動
$ service squid start
SFTPでつなぐ
$ sftp -o "ProxyCommand connect -H basic認証のユーザ名@relayのIP:3128 %h %p" devのユーザー名@devのIP
とりあえず動いた。以上です