netstat コマンドや inetd などで参照される、サービス名とポート目番号、プロトコルの対応関係を記述したデータベースファイルです。
ポート番号は、IANA (Internet Assigned Numbers Authority) によって割り当てられています。現在はポート番号を割り当てる際に TCP と UDP の両方のプロトコルを割り当てることになっています。そのため、ほとんどのサービスに対して、たとえ TCP だけのサービスの場合でも対応する項目が2つあることになります。
ポートのマッピングは大まかに以下のようになっています。
- 0番~1023番
- Well Known Ports と呼ばれ、 Unixでは root権限以外ではプロセスをこのポートに割り当てる事は 出来ません。
- 1024番
- Reserve(これは恐らく1024が境界 で Well Known Ports と混乱する可能性を考慮したものだと思われ ます。)
- 1025番~49151番
- Registered Ports (既登録ポート)と呼ばれ、 様々なサービスが登録されています。
- 49152番~65535番
- プライベートなサービスや動的な通信ポートに利用されます。
/etc/services に書かれたサービス名は /etc/inetd.conf(inetdの場合)等の設定ファイルで使用されます。この意味では、設定ファイルで参照したいポート名だけが /etc/services に書かれていれば充分です。/etc/services はポート番号とポート名の変換表を提供するだけで、inetd サーバの提供サービスを設定するのは /etc/inted.conf の役割です。サービスを止める場合には /etc/services ではなくて /etc/inet.conf の該当する項目を削除します。つまり、/etc/services に項目があるだけでは当然サーバは動きません。
/etc/services は netstat、tcpdump、iptraf などの表示で、ポート番号をポート名に変換する場合にも使われています。 /etc/services に項目が無い場合、ポート番号で表示されることになります。tcpdump、iptrefなどでネットワークの状況を調査する場合、出来るだ多くのポート名が /etc/services に書かれている方が便利といえます。
servicesファイルの格納場所
services ファイルの場所は、 /usr/include/netdb.h 中の _PATH_SERVICES によって定義されています。 この値は通常 /etc/services に設定されています。
servicesファイルの書式
services ファイルは一行につき1サービスが記述されています。形式は以下の通りです。
サービス名 ポート番号/プロトコル名 [エイリアス...]
- サービス名
- サービスを表すわかりやすい名前です。検索の際にも使用されます。大文字と小文字は区別されます。クライアントプログラムはサービス名にちなんで名付けられることが多くあります。
- ポート番号
- サービスに対して使用されるポート番号です。10進数で指定します。
- プロトコル名
- 使用されるプロトコルの種類。この欄は protocols ファイルの中の項目と一致している必要があります。通常使用される値は、tcpとudpです。
- エイリアス
- サービスに対する別名のリスト(区切りはスペースまたはタブ)です。この欄は必要なら書くことができます。大文字と小文字は区別されます。
それぞれの欄の区切りにはスペースかタブが使用されます。
コメントはシャープ(#)で始まり、改行までがコメントと見なされます。空行は飛ばされます。
行はじめのスペースは無視されません。サービス名は行頭から書かなければなりません。サービス名はスペースとタブ以外の印字可能な文字ならなんでも大丈夫ですが、互換性の問題を少なくするような文字を選択するのが賢明でしょう。a-z、0-9、ハイフン(-)を推奨します。
指定された形式に合わない行は避けるべきです。利用するプログラムはそのような行を無視するように作られてはいますが、挙動は保証されません。
後方互換維持のため、ポート番号とプロトコル名の間のスラッシュ(/)は、カンマ(,)も利用できますが推奨しません。
/etc/services の内容一部抜粋
% cat /etc/services
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
#
# The latest IANA port assignments can be gotten from
#
# http://www.iana.org/assignments/port-numbers
#
# The Well Known Ports are those from 0 through 1023.
# The Registered Ports are those from 1024 through 49151
# The Dynamic and/or Private Ports are those from 49152 through 65535
#
# Kerberos services are for Kerberos v4, and are unofficial. Sites running
# v5 should uncomment v5 entries and comment v4 entries.
#
# $FreeBSD: src/etc/services,v 1.102 2004/08/16 11:52:22 cperciva Exp $
# From: @(#)services 5.8 (Berkeley) 5/9/91
#
# WELL KNOWN PORT NUMBERS
#
rtmp 1/ddp #Routing Table Maintenance Protocol
tcpmux 1/tcp #TCP Port Service Multiplexer
tcpmux 1/udp #TCP Port Service Multiplexer
nbp 2/ddp #Name Binding Protocol
compressnet 2/tcp #Management Utility
compressnet 2/udp #Management Utility
compressnet 3/tcp #Compression Process
compressnet 3/udp #Compression Process
echo 4/ddp #AppleTalk Echo Protocol
rje 5/tcp #Remote Job Entry
rje 5/udp #Remote Job Entry
zip 6/ddp #Zone Information Protocol
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users #Active Users
systat 11/udp users #Active Users
daytime 13/tcp
daytime 13/udp
qotd 17/tcp quote #Quote of the Day
qotd 17/udp quote #Quote of the Day
msp 18/tcp #Message Send Protocol
msp 18/udp #Message Send Protocol
chargen 19/tcp ttytst source #Character Generator
chargen 19/udp ttytst source #Character Generator
ftp-data 20/tcp #File Transfer [Default Data]
ftp-data 20/udp #File Transfer [Default Data]
ftp 21/tcp #File Transfer [Control]
ftp 21/udp #File Transfer [Control]
ssh 22/tcp #Secure Shell Login
ssh 22/udp #Secure Shell Login
telnet 23/tcp
telnet 23/udp
# 24/tcp any private mail system
# 24/udp any private mail system
smtp 25/tcp mail #Simple Mail Transfer
smtp 25/udp mail #Simple Mail Transfer………