
| パッシブモードの設定 |
本来、FTPサービスは21番のポートをオープンして接続を待っています。そしてクライアントが21番に
接続をすると、次はサーバ側の20番ポートがクライアントに対して、データコネクション確立の要求を
行います。上記の説明で前半部分は、クライアントからコネクション確立を要求していますが、
後半部分はサーバ側からコネクション確立をしていることになります。そしてここがポイントになります。
もしクライアント機がファイアウォール下などにある環境ですと、この後半部分のサーバ側からの
コネクション確立を弾いてしまうんです。そうなるとデータコネクションが確立しませんので、
FTPに接続できないことになってしまいます(厳密には、lsコマンドなどのデータのやり取りが
できないという事)。
このような環境下にあるクライアント機は多く存在すると思います。それでは、この環境下に
あるクライアント機はFTPが使えないのかというと、パッシブモードを使用すれば可能です。
先ほどのコネクションの話を思い出してください。先ずクライアントから21番に対してコネクション
確立要求を出します。その次は、サーバからクライアントとなっていたと思います。
しかし、パッシブモードの場合は、ここでもクライアントからサーバにコネクション確立要求を
出します。どっちもクライアントから要求するということになります。
このようにして確立すると、サーバ側のデータコネクションには20番を使用しません。
毎回違った値になると思います。このようにパッシブモードにすると次に困るのが、
サーバ側です。パッシブモードで接続されると何番でデータコネクションのポートを使うのかが
分からないので、iptables等を使用している場合は、全てのポートにデータが行くように
ポートを開けて待機しておかないといけないことになってしまいます。そうしないとブロックして
しまいます。しかし、全ポートを開けて待機するのはセキュリティが皆無になりますので、
お勧めはできません。じゃあ、どうすればよいでしょう??
これはパッシブモードで接続を試みられた場合に、サーバ側がデータコネクションとして使うポートが
分からないのが原因です。なので、設定によってパッシブモードで接続された時にサーバが
使用するポートの範囲を予め決めておけばいいのです。そうすれば、その分のポートだけを
iptablesでオープンしておけば済みます。それでは、/etc/vsftpd/vsftpd.confに
パッシブモードの為の記述を追加します。
| # vi /etc/vsftpd/vsftpd.conf pasv_enable=YES pasv_min_port=5010 pasv_max_port=5100 |
上記の3行を設定ファイルの一番下にでも追加してください。先ずpasv_enable=YESで、
パッシブモードを有効にしています。次のpasv_min_portとpasv_max_portで指定した範囲の
ポートが、パッシブモードで接続された場合にサーバ側のデータで使うポートになります。
ここでは、5010〜5100を使う設定にしました。このようにすれば、パッシブモードで接続された
場合は、必ずサーバ側のデータコネクションで使うポートはこの5010〜5100の間に収まります。
以上の記述が終わりましたら、vsftpdを再起動します。
| # service vsftpd restart |
ポート開放については、当サイトのファイアウォールスクリプト使用の場合は、そのままでOKです。
スクリプトを使用せず、iptablesのルールをデフォルトのまま使用している場合は、5010〜5100番のポート開放する
設定を行います。以下のようにします。
| # vi /etc/sysconfig/iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5010:5100 -j ACCEPT # service iptables restart |
5010:5100という表記で、5010〜5100を指定したことになります。
以上でファイアーウォール下にあるクライアント機からパッシブモードで接続してみましょう。
FFFTPであれば、「ホストの設定」画面を開き、「拡張タブ」を選んで、PASVモードを使うという
部分にチェックを入れます。ここにチェックを入れて接続するとパッシブモードになります。
そして接続できたら、今度はサーバ側で、netstatコマンドを打って、接続の確認をしてみます。
| # netstat -antu Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.11:5018 192.168.1.12:9885 TIME_WAIT tcp 0 0 192.168.1.11:21 192.168.1.12:9884 ESTABLISHED (ここでは、LAN内から接続の例になります) |
上記のような2行があると思います。もちろん5018の部分は、毎回異なります(異なると言っても、
5010〜5100の間)。パッシブモードで無い場合ならこの5036の部分は、20になっているはずです。
ちなみにこの場合、サーバは192.168.1.11になります。192.168.1.12はクライアント機です。
最終更新 : 05/31/2005