Proftpd 

FTPというのは、FileTrancefer Protocol の略語です。

その名のごとく、ファイルを転送する方法ってことです。

FTP・・・。

どっかで聞いたことがあるような、無いような・・・って感じだと思いますが、みなさんが入っているプロバイダーにはほぼホームページ容量とかいって無料でページを作れるスペースがあると思います。

作った事がないと、なんのこっちゃかわからないと思いますが、そのスペースにファイルを転送するときに使われているものも、実はFTPサーバーなんです。

FTPは比較的簡単に構築することができるため、稼働し始めたらあまりの便利さに、仕事の大事な契約書や金額の入ったファイルを「ちょっとなら良いだろう」と使ってしまう人がいます。

しかしこれは論外で、FTPはあくまでファイルをただ置くだけなので、パスワードも内容もすべてプレーンなまま送信されてしまい悪意のある第3者が盗みとったら解析できてしまいます。

no encrypt
(暗号化されていない、ということはこういうことです。思いっきりパスワードの文字が流れてしまいます。)

盗まれたくない(盗まれても解析できないようにしたい)場合はSFTP(SSHをFTP的に使う)やFTPS(FTPES・FTPS)などのSSLの暗号化技術をレイアーしたFTP通信にする必要があります。

そんな感じです。

 

Proftpdのインストール

# aptitude install proftpd

インストールの途中に、standaloneかinetd経由か?サーバー名は何か?など聞かれますが、とりあえず適当に答えておいてください。

インストールが完了すると、/etc/proftpd 下に proftpd.conf という設定ファイルを含めたディレクトリが構築されるはずです。

基本的な設定はこの.conf ファイルに記述を行ないます。

では、何がインストールされたか確認してみましょう。

# ls /etc/proftpd 
ldap.conf modules.conf proftpd.conf sql.conf tls.conf

proftpd.conf は見つかりましたですか?

ldap や sql などは、あまり気にしないでください。

個人サーバーではあまり関係ない、難しい内容です。

 

configファイルの編集

ではまず、自宅サーバーのレベルでも必ずやっておくべき設定を行います。
編集する前のファイルはコピーなどをとっておくと良いかも知れません。
たとえば…

# cp /etc/proftpd/proftpd.conf proftpd.conf.default

などとしておけば良いでしょう。

意味は『proftpd.conf というファイルを、proftpd.conf.default という名前のファイルとしてコピーをする。』という意味です。

しかし筆者はO型なので、コメントアウト派です。

たとえば内容を編集するときに、

#UseIPv6 on
UseIPv6 off

この様に、UseIPv6をoffにしたい場合、デフォルトの設定をコメントアウト#して、その1行下に本来の自分の行いたい設定を行うようにしています。

後でデフォルトの設定を確認するときに楽だからです。

ぶっちゃけ、それ以外の理由はありません。

では話を戻して、以下の項目を設定し、なければ追加してください。

# vi /etc/proftpd/proftpd.conf

 

Proftpdの必須設定

IdentLookups off

 

ServerType standalone

standalone か inetd です。

inetdで使用する場合は、/etc/inetd.conf のFTPに該当する行の#OFF#を削除し、inetdを再起動して下さい。

再起動は、
# /etc/init.d/openbsd-inetd restart
して下さい。

 

ShowSymlinks off

 

UseReverseDNS off

 

TimesGMT off
SetEnv TZ JST-9

この2行の設定を行わないと、FFFTPなどでアクセスした際に、時間が正しく表示されません。

密かに重要な項目です。

 

RootLogin off

※デフォルトではonなので注意。

この設定は最重要項目です。

先にも述べたように、root のパスワードであっても平文で流れてしまうため、普段から root でログインすることをしてはなりません。

これはFTPのみならず、他にも同じことがいえますが、もしも root のパスワードを打つようなことがある場合、その時点で、いま打っているパスワードはどのような形で流れるのか?と一呼吸置き、自分に問いかけてから入力してください。

もしも、パケット解析されていた場合、rootだろうがなんだろうがパスワードは丸見えです(笑)

 

DefaultRoot /自分で/作った/FTPの/スペース (/mnt/ftp など)

この設定も最重要項目です。

基本的にはこの以下の様なカタチになると思います。

DefaultRoot ~

このチルダ~は何かといいますと、各ユーザーのホームディレクトリを表しています。

例えば、各ホームディレクトリに「ftp」というフォルダを作成して運用する場合は、「ftp」をmkdirしたあとに

DefaultRoot ~/ftp

というような形になります。

 

通常はこれで構いません。

しかしこの状態では、このサーバーの管理者はわざわざそのユーザーになってアクセスするしか無くなりますので、とても面倒です。

この場合はftp専用の管理者ユーザーを作り(adduser)、以下の様なDefaltRootにすれば良いです。

DefaultRoot ~/ftp !ftpmaster

「!」は~以外という意味です。これで管理をするときはユーザーftpmasterとなっていれば、誰の領域でも管理できます。

 

標準ではサーバー内のすべてのファイルが丸見えなので非常に危険です。

間違ってもDefaultRoot設定を行う前にポートを開放しないように気を付けてください。

また、この設定を利用して、特定のグループに対して上位のディレクトリに移動できないように設定できます。(要はchroot)

(例)
DefaultRoot /mnt/ftp/topsecret project1

以上でproject1のグループに属するユーザーはtopsecretというディレクトリにアクセスできるようになります。

もちろんこれを実現させるためには、project1というグループを作る必要があり、アクセスさせたいユーザーをproject1に所属させる必要があります。

また、topsecretフォルダにも、適切なパーミッションの設定が必要です。

 

Proftpdの任意設定

以下、やる気次第な設定です。

 

UseIPv6 off

IPv6は使いませんのでoff。

 

ServerName "つけたい名前"

これはもしかしたら必須設定に入るかも知れません。

設定しないとエラーが起こったような気がしないでもなくもない。

 

DeferWelcome off

 

MultilineRFC2228 off

 

AllowOverwrite on

既に置いてあるファイルの上書きを許可するか否かの設定です。まあ、通常はonにするでしょうな。

もしもoffにした場合は同じファイル名は置くことが出来なくなります。

バックアップの意味合いや何が更新されたかを把握する上では良いのかも知れませんが、要らぬ設定といえるでしょう。

 

AllowForeignAddress off

普通、proftpd は自身のアドレス(ftp コントロールの接続のソースアドレス)とは違うアドレスから ftp PORT コマンドを使うクライアントを拒否します。
同じように、低い番号のポート(< 1024)を指定した場合にも退けます。
どちらの場合にも、クライアントは "Invalid port" エラーを送信され、メッセージは "address mismatch" か "bounce attack" が syslog に出ます。
この directive を可能にすることにより、proftpd はクライアントのアドレスと一致しない、関係のないアドレスとの接続をクライアントに許可します。
これは、実際の接続に自分自身を含まない二つの FTP サーバ間で、ファイルを転送するクライアントを許可します。
一般には、この種のことを許可するセキュリティ方法は賢くありません。
AllowForeignAddress は、アドレスの接続だけに作用します; tcp ポートではなく。PORT コマンドには低い番号のポートを使うクライアントを許可する方法がありません。

なのだそうなので…。

海外の説明の日本語訳ってなんか上から目線だよね。

 

AllowRetrieveRestart on

いわゆる、ダウンロード時のリジュームを許可するかしないかの設定です。

ギガバイト単位のファイルを転送していた場合、何らかの理由で回線がとぎれた場合、また1から転送をしなければなりません。

結果、非難囂々でしたので、とりあえずonにしておいても、良いのではないかと思います。

TCPコネクションなので、正常なパケット転送が保証されていますので、まずファイルが壊れる的なことはないはずです。

無いと祈っています。

 

AllowStoreRestart on

いわゆる、アップロード時のリジュームを許可するかしないかの設定です。ギガバイト単位のファイルを転送していた場合、何らかの理由で回線がとぎれた場合、また1から転送をしなければなりません。

結果、非難囂々(笑)でしたので、とりあえずonにしておいても、良いのではないかと思います。

TCPコネクションなので、正常なパケット転送が保証されていますので、まずファイルが壊れる的なことはないはずです。

無いと祈っています。

 

ServerIdent on " - Welcome !! - "

挨拶文です。

FTPはルールが完成しているプロトコルなので、やれることが決まっています。

その分設定項目も少なくて済みますので、一番簡単に運用できるサーバーの一つです。

その他の項目はここを参照してください。

 

一通り設定を終えたら、viなら [Esc]:wq[Enter] で保存されます。

emacsなら、Ctrl+ x s で保存され、Ctrl+ x c でemacsを抜けます。

 

Proftpdの再起動

# /etc/init.d/proftpd restart

特にエラーなど表示されなければOKです。

inetd経由で起動する場合は、このコマンドは全く意味がありません。

元々非常にセキュアなソフトらしいので、これ以上もこれ以下もありません。

後は専用のFTPソフトやブラウザなどで、ftp://192.168.100.1/ など打ち込みアクセスしてみてください。

 

転送中に切断されてしまう?!?!

転送が切断されてしまう場合があります。

しかし、ローカルでは大容量のファイルを転送しても、特に問題ありません。

こういった症状の方は、プロバイダの制限を考えた方がよいと思います。

筆者も初めのうちは、色々試行錯誤し、タイムアウトがどうの帯域がこうの頑張り、挙げ句の果てにProftpdがクソなんだと八つ当たりしていました。

しかし、条件によってはやっぱり切断されます。その条件も不確定で様々な状況で切断されます。

こればかりはどうしようもないので、おとなしくリジュームを可能にして、再度アップロードしてもらうしかありません。

 

不正なアクセスを遮断

おそらく、FTPサーバーを開設し始めると3日もしないうちに中国や中国や中国から大量の不正ログインを試みるログが残ると思います。

FTPの場合はそのほとんどが猿のようにパスワードを総当たりしてログインしようとします。

何も対処しないでおくと、”Administrator”や”ftp”などのそもそも存在もしない的外れのログインIDで2万行くらいのログイン失敗の履歴が残ります。

初めの内は楽しいですが、すぐにウザさに変わります。

これでは、お手・オカワリの出来ない犬に無限に極上サーロインを与えているのと同じです。(←まったく例えになってない)

だものですから、それらを極力回避する方法をいくつか記します。

■ 設定ファイル(proftpd.conf)にて接続数の制限を設ける

■ inetd経由の場合はTcpWrapparでの制限

■ jailで制限

jailというのは、unix界では非常に有名なソフト(考え方)だそうで、意味は『監獄』です。

これは比較的新しいセキュリティの考え方で、これから注目されるであろう制限方法です。

いままでは如何に侵入を防ぐか、ファイルの改変を防ぐか、害のあるファイルを探せるか、という予防策が多く、被害に遭ってしまえばそれで終わりでしたが、jailに関しては予防ではなく、不正なユーザーを一つの枠組みに閉じこめるという、少し攻撃的な考え方です。

なので、一度不正検知されたユーザーやクライアントを「閉じこめて」しまうので、後は何をされても勝手にやってて状態にできます。

細かい説明は実サイトの解説を読んだ方が良いので、インストールだけ。

# aptitude install fail2ban

Debian界ではこの fail2ban というパッケージ名で制限を設けることが出来ます。

設定ファイルを覗くと標準ではSSHのみが有効(true)になっているのですが、proftpdは無効(false)になっているので、有効(true)にしてください。

再起動は

# /etc/init.d/fail2ban restart

です。

意外と奥も深く面白いソフトですので、記事も書いてみたいです。

言うの忘れてましたが、SSHも総当たり攻撃の温床です。

なので公開している場合は絶対に制限を設けるべきです。

こんな感じでしょうか・・・

コメントを追加(どなたでも投稿できます)
  • コメントはありません