- PR -

FTPサーバーに安全に接続するためには?

1
投稿者投稿内容
joe
会議室デビュー日: 2002/09/17
投稿数: 6
投稿日時: 2002-09-25 19:22
Webを僕なりに検索してみたのですが、うまく情報を見つけだせませんでしたので、
こちらで質問をさせてください。お世話になります。

要するにpop before smtpのように、なんらかのタイミングで接続可能な相手側IP
アドレスを記録しておき、そのアドレスからのみ一定時間接続を認めるというような
事をやりたいのですが、どこから手をつけてよいか分かりません。

状況をお話するのに長文になりますが、ご了承ください。
環境としてはRedhatLinux7.2でxinetd-2.3.3-1経由でproftpd1.2.6を稼動させて
います。サーバ側の接続環境は非固定IPで独自ドメインをDynamicDNSを利用して
います。
利用形態としてはWebページデータのアップロードや職場と家庭間のファイル移動
に使っておりますので、そう頻繁には利用しておりません。

/etc/xinet.d/proftpdファイルにて
only_from = 192.168.0.0/16 127.0.0.1 xxx.xxx.xxx.xxx
という形で接続元IP制限をかけています。

以前はproftpd.conf側でも
#<Limit LOGIN>
#Order Allow,Deny
#Allow from 127.0.0.1,192.168.1.,xxx.xxx.xxx.xxx
#Deny from all
#</Limit>
というふうに2重に制限をかけていたのですが、現在の職場が非固定IP
となってから、利用する前にsshでログインして、制限IPを変更して
xinetdの再起動を行うという形での利用です。

ここで、ふとIPによる制限ならばpop before smtpと同様に制限IPを動的に変えられな
いものか?と考えました。もちろんメールの場合と違い、認証をどのタイミングで掛ける
のか?とかあるでしょうが、、、
極端に言うとpop認証が通ったIPはOKでも良いのです。ただ制限したいのはftp接続認証
時だけで、ファイル転送については時間制限対象外としたいです。

他の手段(winscp)なども考えてますが、速度的にftp接続の方が早くて使い勝手
が良いもので、できればftpでの実装方法などご教授頂きたいと思います。

毎日知らないIPからftpへの接続を試す痕跡がログに記録されており、IPによる制限は
欠かせない状況です。

もちろん、使う前にsshでログインしてftpデーモンを起動して、使い終わったらプロセス
終了しておくという方法もアリなのでしょうが、何か良いアイデアがあれば教えて下さい。
Nishizaka
ベテラン
会議室デビュー日: 2001/10/12
投稿数: 83
お住まい・勤務地: 長崎県
投稿日時: 2002-09-25 20:52
こんにちは。

職場のIPをDynamicDNS(dyndns.org 等)に登録して、その登録名を only_from に
追加しておくってのは駄目ですか?

秋山
常連さん
会議室デビュー日: 2002/09/25
投稿数: 23
投稿日時: 2002-09-25 20:54
 Linuxを使わなくなってから久しいので細かいことはわかりませんが、ワンタイムパスワードを使うとか、sshのポートフォワードを使うとかではダメなのでしょうか。

 あとは職場でお使いのISPが割り振られているIPアドレスを全部カバーするようにアクセス制限を書き換えるとか。こちらはセキュリティが甘くなってしまいますが。
Nishizaka
ベテラン
会議室デビュー日: 2001/10/12
投稿数: 83
お住まい・勤務地: 長崎県
投稿日時: 2002-09-25 21:08
ファイルをサーバーに置きたいだけの目的ならば scp コマンドを使うというのも
一つの手ですね。(私は FTP は使わないで、scp でのファイル転送を多用してます)

コマンドの使い方は

# scp ソースパス hoge@hoge.co.jp:/home/hoge/

joe
会議室デビュー日: 2002/09/17
投稿数: 6
投稿日時: 2002-09-25 22:56
皆様、ご回答ありがとうございます。質問者のJoeです。

Nishizaka様の
>職場のIPをDynamicDNS(dyndns.org 等)に登録して、その登録名を only_from に
>追加しておくってのは駄目ですか?
についてですが、この場合、結局逆引きしてISPのホスト名とかが引かれてしまうのではない
か?と思います。(試してないのですが、結局接続要求してきたホストのIPからドメイン名
を検索してそれを元に許可、拒否を判断するのではないかと思ってます。自分でもこの辺り
は定かでないのでもう少し調べてみますが)

次に、秋山様のISPが付与するであろうIP範囲を全て接続可能とする事はあまりにも広範囲す
ぎてセキュリティー的に心配が大きすぎ、リスキーすぎる気がします。

また、Nishizaka様のscpについては検討したのですが、
・転送速度がFTPに比べ遅い(実測した訳ではなく体感速度ですが)
・操作性が今ひとつ(適当なwin用クライアントが少ない。winscpは使ってます)
・sshのセキュリティーを確保したい。
 実は、この3つめが肝なのですが、私のサーバではsshでログイン可能なユーザーを
 私一人(ひとつ)のアカウントのみ許可制限しております。
 Apacheのバーチャルホストを使っており、複数のユーザーアカウントでFTP接続により
 webページデータの転送をしたいと考えてます。
 つまり、バーチャルホスト用のデータ転送についてはscp(sshの接続を要する)を使いたく
 ありません。
 実際、少々の設定ファイルなどの小さなファイルであればwinscpを用いてデータ転送
 しており、非常に便利かつセキュアだと思ってますが、サイズが大きなファイルとなると
 FTPクライアントに比べ、動作が遅く、進行状況がわかりにくい事もあり、「応答なし」
 状態になる場面が多くありました。
  #この辺りは私の辛抱強さ(弱さ?)が要因なのでしょうが・・・^^;
 できればFTPを使う方向で考えたいと思います。

随分とわがままで、勝手な意見なのですが、引き続きご意見を伺わせてください。
よろしくお願い申し上げます。
hawkmoon
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 80
投稿日時: 2002-09-26 02:26
山本です。

どっちかというとこういう実装は、ネットワーク層的な問題なような気がしますね。
Dynamic Firewallみたいなツールがあればできそうな気もするんですが・・・。


                                         以上
けいた1967
会議室デビュー日: 2002/08/21
投稿数: 9
投稿日時: 2002-09-26 10:02
http://www.linux.or.jp/JF/JFdocs/Authentication-Gateway-HOWTO/index.html
に認証ゲートウェイについてかかれていますが、これを使えば、sshでログインしたあと、そのIPだけにftpを許可する動的ルールを追加できるような気がします。

試したわけではないのでわかりませんが、変更していなければ、popもpamで認証しているのでpopで認証後、ルールを動的に追加できるのではないでしょうか?
ただし、popの場合メールを読み終わるとログアウトされてしまう気がするので、すぐにルールが削除されてしまうので、メールを取り込み終わったらルールがなくなってしまうかもしれません。

joe
会議室デビュー日: 2002/09/17
投稿数: 6
投稿日時: 2002-09-26 10:39
けいた1967様、貴重な情報ありがとうございました。
早速斜め読みしてみたのですが、どうやら認証ゲートウェイの説明自体はsshでの
ログオン後、他のサービスに対して動的ルールを設定できるという事のようですね。

後半部分のpopでのpam認証をうまく利用して、、、という部分についてですが、
こちらの方は具体的にどこから手をつけるべきか悩んでしまいます。

私の環境はqmail+apop(checkpw)でpop before smtpという環境です。
apop自体はユーザーディレクトリにパスワードファイルを置いてという運用なので
pamを使っている様子は無いのですが・・・(この辺りもまだ勉強中ですので自信無い)


実は、この他にも固定IP環境からのメンテをしている時には設定していたものが
あります。
webalizerやwebminなどもIPアドレス制限をかけていました。
現在は全てローカルネットワークからのみ許可という形にしております。

例えば極端な話、DynamicDNSクライアントのように、リモート側の自IPをなんらかの
方法でサーバーに通知し、あとはサーバ側でIP変更通知を受け取ったタイミング
(これは短い間隔でのcronでチェック可能だと思います)で次のようなスクリプトを
実行するという方法も考えてみたのですが、常識的に無駄、ばからしいのでしょうか?

<IP変更時に実行したいスクリプト>
・リモート側IPに変更があった場合、各種設定ファイル
    xinet.d/proftp(ftp),httpd.conf(apache), miniserv.conf(webmin)
 を変更する。
・それぞれのサービスを再起動する xinetd,httpd,webmin

と、ここまで書いてて思ったのですが、これってsshで(私のアカウントで)ログオン
してこういうスクリプトを実行すれば良いだけですよね。

うーん、美しくないですが、直接的でこれぐらいしか思いつきません。

とりあえず、この方向でがんばって見ようと思います。
他に、何かもっと分かりやすくて簡単な、或いは美しい方法をご存知であればご教授
賜りますようお願い申し上げます。

最後に、こんなに沢山の皆さんからの暖かいご協力を得られたことを感謝します。
私も一日も早く皆さんのように、こちら側から情報を提供できるようになりたいと
思います。
以上
1

スキルアップ/キャリアアップ(JOB@IT)