IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第40回 「iptablesとFTP」の困った関係 (中井悦司) 2014年3月

はじめに

 先週は、Linux女子部の主催による「firewalld&Linuxセキュリティ勉強会」が開催されました。GMOインターネットグループの会場をお借りして、100名以上の方に参加いただきました。筆者からは、iptablesの復習とRHEL7の新機能「firewalld」の解説を行いましたが、iptablesを解説する中で印象に残ったのが、FTP接続用のフィルタリング設定に対する会場からの反応でした。
 ご存知のように、FTPはネットワーク経由でサーバにファイルを送受信するプロトコルです。いまではあまり使われなくなりましたが、かつては、ファイアウォールとの「相性の悪さ」で有名でした。それゆえに、FTP用のフィルタリング設定を通して、ファイアウォールを学んだ方も多いのかも知れません。
 今回は、古くて新しい話「FTPとファイアウォールの関係」について解説したいと思います。

FTPとファイアウォールの相性問題

 FTPとファイアウォールの相性に関する問題は、FTPがコントロールセッションとデータセッションの2種類の通信を行う部分にあります(図1)。

fig01

図1 FTPのコントロールセッションとデータセッション

 コントロールセッションは、クライアントからサーバに接続して、ユーザ認証を行った後、「cd」「ls」などのコマンドを送信する通信です。そして、実際にデータを送受信する際は、あらたにデータセッションを確立して、そちらを通じてデータのやりとりを行います。FTPが提案された当初は、(当時としては)大容量のファイルを効率的に送受信するために、データセッションを分離して、OSの種類によってデータ転送の方式を個別に実装できるようにする意図があったようです。
 FTPが登場した当初は、図1(上)のアクティブモードが利用されていました。これは、コントロールセッションはクライアントからサーバに接続するのに対して、データセッションは、逆にサーバからクライアントに対して接続を行うという方式です。企業内のネットワークからインターネット上のサーバにFTP接続する場合などは、企業ネットワークのファイアウォールが外部からの接続を拒否するので、FTPが使えなくなります。
 そして、この問題を解決するために提案されたのが、図1(下)のパッシブモードです。この場合、データセッションもクライアントからサーバに対して接続を行うので、先の問題がなくなります。ところが、パッシブモードの場合は、サーバ側のファイアウォールの設定が難しくなります。コントロールセッションの宛先は、TCP21番ポートと決まっているので、ファイアウォールでは、TCP21番ポートへの接続を許可します。一方、データセッションは、宛先ポート番号がランダムに決まるため、ポート番号を明示した接続の許可ができません。
 iptablesでは、この問題に対応するために「コネクショントラッキング」の機能を使用します。詳細については、先の勉強会の発表資料に譲りますが(*1)、ヘルパーモジュール(カーネルモジュール)「nf_conntrack_ftp」をロードしておくと、データセッションを開始するパケットを受信した際に、既存のFTP通信のコントロールセッションに伴うものかを自動判別した上で受信を許可します。この場合、通常のiptablesの設定とは別に、ヘルパーモジュールの設定が追加で必要になります。

firewalldで設定する場合

 それでは、firewalldの環境で、FTP接続を許可するにはどのように設定するのでしょうか? 状況に応じた細かなオプションの指定はありますが、基本的には、次のようにサービス名「ftp」を指定するだけです。

# firewall-cmd --add-service=ftp

 簡単すぎてだまされた気分になるかも知れませんが、実際には、これとは別に、サービス「ftp」の設定ファイル「/usr/lib/firewalld/services/ftp.xml」が用意されています。この中でコントロールセッションのポート番号やデータセッションを識別するヘルパーモジュールが指定されているので、サービス名「ftp」を指定するだけで、あとはfirewalldが「よろしくやってくれる」という寸法です。
 当然ながら、事前に設定ファイルが用意されていないサービスに対応する場合やデフォルトとは異なるポート番号を使用する場合は、管理者自身が設定ファイルを用意する必要があります。個々のサービスに対する設定内容が個別の設定ファイルに「モジュール化」されているのが、firewalldの特徴の1つと言えるでしょう。あくまで標準的な使い方をする上では、細かな設定ファイルを編集する必要はありません。前述の「firewall-cmd」コマンドで通信を許可するサービス名を指定するだけです。

次回予告

 冒頭の勉強会でのTweetのまとめを見ると、初心者から上級者まで、幅広い方に興味を持って聞いていただけたことが伺えます。RHEL7の新機能を学ぶことは、Linuxの機能を基礎から見直すよい機会にもなる事が分かりました。
 次回もまた、意外とよく理解されていないLinuxの基本機能について、何か解説を行いたいと思います。

参考資料

*1)「Linux女子部 iptables復習編

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート