TCPラッパー (/etc/hosts.allow) によるアクセス制限

TCPラッパー(/etc/hosts.allow)は,OpenSSHを含む主要サービスではサポートが削除され機能しない場合が多い.現在ではiptables/nftablesが主流のアクセス制御手法であり,SSHアクセス制限にはsshd_configやUFW/nftablesが推奨される.

TCPラッパーの基本

TCPラッパーによるアクセス制御は,サービス起動時にlibwrapライブラリ(tcpd)を介して行われる場合にのみ有効である.制御ルールは主に/etc/hosts.allowと/etc/hosts.denyファイルに記述する.ルールは/etc/hosts.allowが先に評価され,一致するルールがあればアクセスは許可または拒否される./etc/hosts.allowに一致するルールがない場合,次に/etc/hosts.denyが評価される.どちらにも一致しない場合はアクセスが許可される.

基本的な書式は以下の通りである.
サービスリスト : クライアントリスト [: オプション]
主なキーワードは以下の通りである.

サービスリストには,サービス名(例: sshd, gdm)またはALLを指定する.クライアントリストには,IPアドレス,ホスト名,ネットワークアドレス,またはALLを指定する.TCPラッパーはホスト名やIPアドレスに基づくアクセス制御が可能であるが,ステートフルパケットインスペクションなどの機能を持つファイアウォールに比べて機能が限定される.

/etc/hosts.allowの設定例1(IP アドレス,サービス名によるアクセス制限)

/etc/hosts.allowを書き換える(/etc/hosts.denyは触らない).以下の設定例はTCPラッパーの記述方法を示すものであるが,Ubuntu 24.04 LTS環境において特にsshdなど多くの主要サービスでは機能しない可能性が高いことに留意する必要がある.現代のLinux環境では,SSHアクセス制限にはsshd_configの設定やファイアウォール(UFW/nftables)の使用が推奨される.

ALL : 127.0.0.1 : ALLOW
ALL : 192.168.1.101 192.168.1.102 192.168.1.115 : ALLOW
sshd : 192.168.33.162 : ALLOW
gdm : 192.168.33.162 : ALLOW
ALL : ALL : DENY

/etc/hosts.allowの設定例2(ネットワーク範囲,サービス名によるアクセス制限)

/etc/hosts.allowを書き換える(/etc/hosts.denyは触らない).以下の設定例はネットワーク範囲を指定する方法を,現代で一般的なCIDR表記を用いて示すものである.TCPラッパーが有効な場合であっても,サービスや環境によってはサポートされる形式が異なる場合があることに留意する必要がある.また,これらの設定がUbuntu 24.04 LTS環境においてsshdなど多くの主要サービスで機能しない可能性が高いことは,設定例1と同様である.

ALL : 127.0.0.1 : ALLOW
ALL : 192.168.1.0/24 : ALLOW
sshd : 192.168.33.0/24 : ALLOW
gdm : 192.168.33.0/24 : ALLOW
ALL : ALL : DENY