フィルタリングに必要な情報を把握する

 ファイアウォールを設定するには、フィルタリングテーブルを定義してゆく必要があります。この時、アプリケーションがどのように通信を行うのか、通信の手順の流れや、特徴を把握しておかなければ、フィルタリングの条件を定義することができません。

 つまり、ファイアウォールのフィルタリングを定義するには、アプリケーション固有の通信を理解しておく必要があるのです。

TCP・UDPのポート番号を把握する

 多くのアプリケーションでは、通信にトランスポート層のプロトコルとして、TCPもしくは、UDPを用いています。

 まず、使用するアプリケーションがTCPを使った通信を行うのか、UDPを使った通信を行うのか、また、どのポート番号を使用するのかを知っておく必要もあります。

主な、TCP・UDPのポート番号は、下の表の通りです。

●TCPのウェルノウンポート

ポート番号サービス名説明
20ftp-dataFile Transfer [Default Data]
21ftpFile Transfer [Default Data]
22sshSSH Remote Login Protocol
23telnetTelnet
25smtpSimple Mail Transfer
53domainDomain Name Server
67bootpsBootstrap Protocol Server
68bootpcBootstrap Protocol Client
70gopherGopher
79fingerFinger
80www-httpWorld Wide Web HTTP
88kerberosKerberos
110pop3Post Office Protocol - Version 3
119nntpNetwork News Transfer Protocol
123ntpNetwork Time Protocol
137netbios-nsNETBIOS Name Service
138netbios-dgmNETBIOS Datagram Service
139netbios-ssnNETBIOS Session Service
161snmpSNMP
162snmptrapSNMPTRAP
179bgpBorder Gateway Protocol
443httpshttp protocol over TLS/SSL
445microsoft-dsMicrosoft-DS
636ldapsldap protocol over TLS/SSL

●UDPのウェルノウンポート

ポート番号サービス名説明
53domainDomain Name Server
67bootpsBootstrap Protocol Server
68bootpcBootstrap Protocol Client
69tftpTrivial File Transfer
88kerberosKerberos
123ntpNetwork Time Protocol
137netbios-nsNETBIOS Name Service
138netbios-dgmNETBIOS Datagram Service
139netbios-ssnNETBIOS Session Service
161snmpSNMP
162snmptrapSNMPTRAP
213ipxIPX
445microsoft-dsMicrosoft-DS
520routerRIP
546dhcpv6-clientDHCPv6 Client
547dhcpv6-serverDHCPv6 Server

TCPのスリーウェイハンドシェイクの仕組みを把握する

 TCPでは、スリーウェイハンドシェイクという仕組みで、同期をとることで通信を行っています。具体的には、下記の手順でSYN(同期制御ビット)と初期シーケンス番号で構成されるパケットを交換することで行われます。

手順内容
手順1送信元が相手に対して、「SYNパケット」を送信する。
手順2SYN パケットを受け取った相手は、送信元に接続を許可する「SYN,ACKパケット」を送信する。
手順3SYN ACK パケットを受けとった送信元は、接続開始をあらわす ACK パケットを送信し、受信側との通信を開始する。

 フィルタリングの条件を指定する際に、「ACK」や「SYN」を確認するかどうかを指定することができます。

アプリケーション固有の通信を理解する

 一般的なフィルタリングの条件の指定には、送信元と宛先のIPアドレスやポート番号を指定してフィルタリングの条件を指定したり、TCPのスリーウェイハンドシェイクのステータスをチェックするように条件を作成します。

しかし、アプリケーションの中には、複雑な通信を行うプロトコルも存在します。

たとえば、FTPです。

FTPの通信は、次のような特徴を持っています。

  • 制御用とデータ転送用の2つのTCPコネクションを使用する。
  • サーバ側では、制御用にTCPのポート番号21が、データ転送用にTCPの20が使用される。
  • 最初にクライアント側から制御用コネクションを張る。
  • サーバ側がデータ転送用コネクションのコネクションを張る。

このようにFTPでは、複雑な通信を行っています。

詳細は、「FTP通信の仕組み(アクティブモード・パッシブモード)」を参照して下さい。

 ファイアウォールの設定では、この複雑なコネクションを遮断しないように通過させる条件を設定していくこととなります。

フィルタリングにおける留意点

 ファイアウォールのフィルタリングの条件を指定するには、アプリケーション固有の通信を理解したうえで定義していくことが重要となります。コネクションを張るために必要なパケットを遮断したのでは、アプリケーションの通信が成立しなくなってしまうからです。