アクティブモードの記事一覧

iptablesでFTP(アクティブモード)を許可する

CentOSは、iptables(ファイアウォール)の設定が自動的に有効になっており、初期設定では外部からFTPでの接続ができません。

そのため、アクティブモードのFTPアクセスできるようにするには以下のいずれからの方法をとらなくてはなりません。

  • iptablesを無効にする。
  • iptablesにFTP(20、21番ポート)でのアクセスを許可する設定を追加する。

「iptablesを無効にする」方法は前回の記事で行いましたが、サーバーを運用していく上でファイアウォールの機能を無効にするということはセキュリティ対策がまったくできていないということと同意のため、当然ですが、実運用ではやってはいけない行為です。

ですので今回は「iptablesにFTP(20、21番ポート)でのアクセスを許可する設定を追加する」方法について見ていきます。

アクティブモードで使用するポート

iptablesの設定を行う前にアクティブモードでFTPアクセスする際に使用するポート番号について確認しましょう。
FTPアクティブモード使用ポート
上図のようにアクティブモードの場合、FTPサーバー側で使用するポートは20番(送信元ポート)、21番(宛先ポート)で固定となります。

iptablesにFTPアクセス許可設定を追加

まずは現状のファイアウォール(iptables)設定を確認します。

# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

アクティブモードの場合、FTPサーバーで待ち受けるポートは21番になりますので21番ポートの入力(受信)パケットを許可する必要があります。21番ポートを開けるには以下コマンドを実行します。

# iptables -I INPUT 4 -p tcp --dport 21 -j ACCEPT

 ※ルールを挿入する場所は適宜変更してください。上記例では4番目に挿入しています。

データコネクションで20番ポートを使用しますが、その際使用するのはFTPサーバーから見た場合、送信元ポートに当たるため、出力(送信)パケットかつ送信元ポート20番のパケットを許可する必要があります。ただし、今回の例では出力(送信)パケットの制御は何も行っておらず、全て許可する設定となっているため、設定不要です。

続いて、設定を保存します。

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

最後にiptablesを再起動させて設定は反映させます。

# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

以上でアクティブモードにおけるiptablesの設定は完了です。

FTPクライアントからのファイル送信

では早速、FTPサーバーに対してファイルを送信してみましょう。今回もWindows標準のFTP機能を使用して、ファイル送信の確認をします。

Windows標準のFTP機能はコマンドプロンプトから使用します。
(コマンドプロンプトの起動は画面左下のWindowsマークをクリックし「プログラムとファイル検索」欄に「cmd」と入力し、Enterキーを押下します。)

まずは送信するテスト用ファイルを作成します。

> type nul > testfile02

続けて、作成したテスト用ファイルをFTPサーバーに送信します。

C:\Users\user> ftp 172.16.0.10
172.16.0.10 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (172.16.0.10:(none)): anonymous
331 Please specify the password.
パスワード:
230 Login successful.
ftp> cd /pub/upload
250 Directory successfully changed.
ftp>
ftp> put "C:\Users\user\testfile02" ./testfile02
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.

putコマンドでファイル送信を試みましたが、失敗してしまいました。エラーメッセージからデータコネクションの確立に失敗しているようです。FTPサーバー側のファイアウォールの設定はしたはずですが、なぜでしょう。

それは、FTPクライアント側の設定に問題があります。アクティブモードの場合、ファイル転送用に使用するデータコネクションはFTPサーバーからFTPクライアントに対して接続することを思い出してください。

今回のケースでは、FTPクライアントとなるローカルホストのファイアウォールで、その接続要求がブロックされてしまっていました。

この問題を回避するには、Windowsファイアウォールの設定を変更する必要があります。

Windows7を例にすると、画面左下のWindowsマークをクリックし「コントロールパネル」→「Windows ファイアウォール」→「Windows ファイアウォールを介したプログラムまたは機能を許可する」をクリックします。

Windowsファイアウォール設定

「許可されたプログラムおよび機能」で「ファイル転送プログラム」にチェックが入っていることを確認し、入っていなければチェックを入れます。

これで、データコネクションも確立できるようになったはずです。

ではもう一度、ファイル送信してみます。

ftp> put "C:\Users\user\testfile02" ./testfile02
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.

今度はうまくいきました。

アクティブモードの問題

実際にアクティブモードでFTP送信を行ってみましたが、その過程でアクティブモードの問題が垣間見えたのではないでしょうか。

その問題とは、アクティブモードの場合、FTPクライアント側のファイアウォール設定を変更しないといけないということです。

FTPでファイルの送受信するのはパソコンに詳しい人だけではありませんのでファイアウォールの設定を変更させるということは簡単なようで敷居は高いです。例えば、以下のような構成となっているケースを考えてみます。

ネットワーク構成例

今回の例ではWindowsファイアウォールだけの設定変更で済みましたが、上図構成の場合はルータの設定も変更してやらなくてはいけません。例えば会社のネットワーク機器の設定を一般社員が変更することは社内の管理体制上の理由でできないのが普通です。仮に設定変更できたとしてもセキュリティを緩めてしまうことになります。

そもそも、FTPサーバーからFTPクライアントへの接続要求が必要なのが問題なのです。FTPサーバーからの逆接続をやめて、接続要求はあくまでFTPクライアントからとすることが理想です。

そこで登場するのがパッシブモードです。
パッシブモードでは接続要求を出すのはFTPクライアントからのみとなり、上記の問題を解決します。最近では、セキュリティを考慮してパッシブモードが使われることが多いです。

次回は、iptablesでパッシブモードでのFTPを許可する方法について見ていきます。

2016年01月30日(土)|vsftpd FTPサーバー構築

FTPにおけるアクティブモードとパッシブモードの違い

FTPを理解していく上で欠かせないのが転送モードの概念です。

FTPには「アクティブモード」と「パッシブモード」のふたつの転送モードがあります。そのうちのどちらを使用するかによって、ファイアウォールの設定などFTPサーバー以外の要素にも影響がでます。

FTPにおけるコネクションの種類

アクティブモードとパッシブモードの違いを理解するためには、まず、FTPにおけるコネクションの種類について知っておく必要があります。

FTPは「コントロールコネクション」と「データコネクション」のふたつのコネクションを組み合わせて使用します。

種類 用途
コントロールコネクション FTPサーバーにログインする際の利用者認証、ならびにFTPコマンドを送信し、その応答を受信する。また、データコネクションを確立するためのネゴシエーションに使用。
データコネクション 実際のデータを転送するために使用。

データコネクションは実際のデータ転送に使用するコネクションです。コントロールコネクション上で送られたコマンドごとにデータコネクションを作り、その上でデータを送受信します。

そのデータコネクションを確立するための手段として、アクティブモードとパッシブモードの2種類があります。両者の違いで最も重要なのは以下です。

種類 特徴
アクティブモード FTPサーバー側からFTPクライアントに接続する。
パッシブモード FTPクライアントからFTPサーバー側に接続する。

アクティブモードとパッシブモードのどちらを使用するかはFTPクライアントで設定します。上記の特徴を踏まえ、それぞれの転送モードの方式について見ていきましょう。

アクティブモード

FTPのアクティブモードはコントロールコネクションにTCP/21番ポートを使用し、データコネクションにTCP/20番ポートを使用します。FTP送信におけるシーケンスを図にすると以下のようになります。(下図ではコントロールコネクションを青矢印、データコネクションを赤矢印で表しています。)
FTPアクティブモード

通常、一般的なクライアント・サーバー(クラサバ)構成の場合、クライアントからサーバーに接続要求するものですが、FTPのデータコネクションをアクティブモードで確立しようとした場合、上図にあるように、接続要求がサーバー側からクライアントに出されることが特徴です。

多くのFTPクライアントソフトウェアはアクティブモードをデフォルト設定としています。また、Windows標準のFTPクライアント機能に至ってはアクティブモードしかサポートしていません。

パッシブモード

FTPのパッシブモードはコントロールコネクションにTCP/21番ポートを使用し、データコネクションには毎回ランダムで決まるポート番号を使用します。
FTPパッシブモード

パッシブモードを使用する場合、クライアントからコントロールコネクションを介してPASVコマンドによりパッシブモードを使用することを要求します。サーバーはその要求を許可する場合、「Entering Passive mode」を返します。同時に、データコネクションで使用するポート番号を返します。

パッシブモードの必要性

FTPはファイル転送に特化したプロトコルです。2つのコネクションを使用するのも、その方がファイル転送を行う上で効率が良いからに他なりません。
1つのコネクションでデータもコマンドも送ろうとすると、コマンドがデータに紛れてしまうなどして色々不都合が起こります。その点、2つのコネクションを使い分けることで、効率的なファイル転送が行えるようになります。

例えば、ファイルを送信している最中でも、コネクションを分けていれば、送信キャンセルや一時中断など細かく制御することが可能となります。

ただし、コネクションを2つ確立することはセキュリティの面で不都合が生じます。

特にアクティブモードは都合が悪いです。それは、FTPサーバーがFTPクライアントに対して接続要求するという点です。
例えば会社のネットワークでは、社内から社外への接続は緩やかに許可することが多いですが、社外から社内への接続は非常に厳しくなります。そのような構成下においてアクティブモードはとても扱いずらいです。なぜなら、FTPサーバー(社外)からFTPクライアント(社内)への接続要求は途中のファイアウォールでブロックされてしまうからです。

その問題を解決するのがパッシブモードです。
FTPサーバーからの逆接続をやめて、接続要求はあくまでFTPクライアントからとすることで、社内から社外への接続のみとなるわけです。

最近では、上記のようにセキュリティを考慮してパッシブモードが使われることが多いです。

2016年01月14日(木)|vsftpd FTPサーバー構築

サイト内検索

カテゴリー

  • Apache2.2構築
  • BIND DNSサーバー構築
  • Linux基礎知識
  • NTPサーバー構築
  • vsftpd FTPサーバー構築

サイト情報

  • 当サイトについて
  • 免責
  • お問い合わせフォーム
  1. CentOSサーバー構築入門
  2. アクティブモードの記事一覧

CentOSサーバー構築入門

CentOSによるサーバー構築方法をわかりやすく解説しています。
  • 特定商取引法に基づく表示
  • 運営者情報
  • お問い合わせ
  • サイトマップ
  • twitter
  • facebook
  • Google +1
  • RSS
Copyright ©2025 CentOSサーバー構築入門 All Rights Reserved.

[↑]このページの先頭へ