フィルタリングに必要な情報を把握する
ファイアウォールを設定するには、フィルタリングテーブルを定義してゆく必要があります。この時、アプリケーションがどのように通信を行うのか、通信の手順の流れや、特徴を把握しておかなければ、フィルタリングの条件を定義することができません。
つまり、ファイアウォールのフィルタリングを定義するには、アプリケーション固有の通信を理解しておく必要があるのです。
TCP・UDPのポート番号を把握する
多くのアプリケーションでは、通信にトランスポート層のプロトコルとして、TCPもしくは、UDPを用いています。
まず、使用するアプリケーションがTCPを使った通信を行うのか、UDPを使った通信を行うのか、また、どのポート番号を使用するのかを知っておく必要もあります。
主な、TCP・UDPのポート番号は、下の表の通りです。
●TCPのウェルノウンポート
ポート番号 | サービス名 | 説明 |
20 | ftp-data | File Transfer [Default Data] |
21 | ftp | File Transfer [Default Data] |
22 | ssh | SSH Remote Login Protocol |
23 | telnet | Telnet |
25 | smtp | Simple Mail Transfer |
53 | domain | Domain Name Server |
67 | bootps | Bootstrap Protocol Server |
68 | bootpc | Bootstrap Protocol Client |
70 | gopher | Gopher |
79 | finger | Finger |
80 | www-http | World Wide Web HTTP |
88 | kerberos | Kerberos |
110 | pop3 | Post Office Protocol - Version 3 |
119 | nntp | Network News Transfer Protocol |
123 | ntp | Network Time Protocol |
137 | netbios-ns | NETBIOS Name Service |
138 | netbios-dgm | NETBIOS Datagram Service |
139 | netbios-ssn | NETBIOS Session Service |
161 | snmp | SNMP |
162 | snmptrap | SNMPTRAP |
179 | bgp | Border Gateway Protocol |
443 | https | http protocol over TLS/SSL |
445 | microsoft-ds | Microsoft-DS |
636 | ldaps | ldap protocol over TLS/SSL |
●UDPのウェルノウンポート
ポート番号 | サービス名 | 説明 |
53 | domain | Domain Name Server |
67 | bootps | Bootstrap Protocol Server |
68 | bootpc | Bootstrap Protocol Client |
69 | tftp | Trivial File Transfer |
88 | kerberos | Kerberos |
123 | ntp | Network Time Protocol |
137 | netbios-ns | NETBIOS Name Service |
138 | netbios-dgm | NETBIOS Datagram Service |
139 | netbios-ssn | NETBIOS Session Service |
161 | snmp | SNMP |
162 | snmptrap | SNMPTRAP |
213 | ipx | IPX |
445 | microsoft-ds | Microsoft-DS |
520 | router | RIP |
546 | dhcpv6-client | DHCPv6 Client |
547 | dhcpv6-server | DHCPv6 Server |
TCPのスリーウェイハンドシェイクの仕組みを把握する
TCPでは、スリーウェイハンドシェイクという仕組みで、同期をとることで通信を行っています。具体的には、下記の手順でSYN(同期制御ビット)と初期シーケンス番号で構成されるパケットを交換することで行われます。
手順 | 内容 |
手順1 | 送信元が相手に対して、「SYNパケット」を送信する。 |
手順2 | SYN パケットを受け取った相手は、送信元に接続を許可する「SYN,ACKパケット」を送信する。 |
手順3 | SYN ACK パケットを受けとった送信元は、接続開始をあらわす ACK パケットを送信し、受信側との通信を開始する。 |
フィルタリングの条件を指定する際に、「ACK」や「SYN」を確認するかどうかを指定することができます。
アプリケーション固有の通信を理解する
一般的なフィルタリングの条件の指定には、送信元と宛先のIPアドレスやポート番号を指定してフィルタリングの条件を指定したり、TCPのスリーウェイハンドシェイクのステータスをチェックするように条件を作成します。
しかし、アプリケーションの中には、複雑な通信を行うプロトコルも存在します。
たとえば、FTPです。
FTPの通信は、次のような特徴を持っています。
- 制御用とデータ転送用の2つのTCPコネクションを使用する。
- サーバ側では、制御用にTCPのポート番号21が、データ転送用にTCPの20が使用される。
- 最初にクライアント側から制御用コネクションを張る。
- サーバ側がデータ転送用コネクションのコネクションを張る。
このようにFTPでは、複雑な通信を行っています。
詳細は、「FTP通信の仕組み(アクティブモード・パッシブモード)」を参照して下さい。
ファイアウォールの設定では、この複雑なコネクションを遮断しないように通過させる条件を設定していくこととなります。
フィルタリングにおける留意点
ファイアウォールのフィルタリングの条件を指定するには、アプリケーション固有の通信を理解したうえで定義していくことが重要となります。コネクションを張るために必要なパケットを遮断したのでは、アプリケーションの通信が成立しなくなってしまうからです。