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

/etc/squid/squid.confの編集

以下の項目をコメントアウト
#http_access deny all

http://qiita.com/pcnikki/items/404329f9ad9cb6e235d4
ここら辺とか参考にして最低限の設定はしておいた方がよさそう。
今回はsquidの公開ポートはデフォルトの3128で。

Basic認証設定

/etc/squid/squid.confの編集

# 以下を追加
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で使えるようにする

/etc/squid/squid.confの編集

・・・
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

とりあえず動いた。以上です

参考url
SquidでSSHをプロキシする設定。 - それマグで!
5分で作るPROXYサーバー - Qiita