Authentication Gateway HOWTO Nathan Zorn zornnh@musc.edu yomoyomo - 日本語訳 ymgrtq@ma.neweb.ne.jp Revision History Revision 0.03 2001-12-06 Revised by: nhz Revision 0.02 2001-09-28 Revised by: KET Revision 0.01 2001-09-06 Revised by: nhz 無線ネットワークや、図書館や寮などの公開アクセスエリアにおけるセキュリ ティには、多くの懸念事項があります。そうした懸念事項は、現行のセキュリ ティ実装では解決できません。その回避策として、認証ゲートウェイを利用す る方法が推奨されてきました。このゲートウェイは、ユーザがネットワークを 利用する際に認証を強制することで、セキュリティに関する懸念事項に取り組 むものです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table of Contents 1. はじめに 1.1. 著作権情報 1.2. 免責 1.3. 最新版 1.4. クレジット 1.5. フィードバック 2. 必要なもの 2.1. Netfilter 2.2. Netfilter ルール用 PAM 2.3. DHCP サーバ 2.4. 認証のメカニズム 2.5. DNS サーバ 3. ゲートウェイサービスの設定 3.1. Netfilter の設定 3.2. PAM iptables モジュール 3.3. DHCP サーバ設定 3.4. 認証手法の設定 3.5. DNS の設定 4. 認証ゲートウェイの利用 5. 終わりに 6. 追加の情報源 7. 質問と答え 8. 日本語訳について 1. はじめに 無線ネットワークや公開アクセスエリアに、許可されてないユーザがアクセス するのはとても簡単です。許可されてないユーザでも、通信を探り、その通信 から接続情報を横取りできます。許可されてないユーザが、マシンを公開ター ミナルにつなぎ、ネットワークにアクセスすることが可能なのです。セキュリ ティが WEP などで整備されてきていますが、こうしたものによるセキュリティ は、AirSnort などのツールによって破られる可能性があります。以上の問題を 解決するアプローチの一つとして、無線のセキュリティ機能に頼らず、代わり に無線ネットワークや公開アクセスエリアの前面に認証ゲートウェイを設置し 、ユーザがネットワークを利用する前に、そのゲートウェイに認証を受けるこ とを強制するというのがあります。この HOWTO は、Linux でこのゲートウェイ を構築する方法を説明するものです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1. 著作権情報 This document is copyrighted (c) 2001 Nathan Zorn. この文書の複製、配布 、修正は、Free Software Foundation により公開されている、 GNU Free Documentation License (以下 GFDL) バージョン 1.1、もしくはそれ以降のバ ージョンの元で許可されます。ただし、この文書には GFDL で規定されている 「変更不可部分」はありませんし、また表紙テキストや裏表紙テキストなども ありません。このライセンスのコピーは、http://www.gnu.org/copyleft/ fdl.html で入手可能です。 何か質問があれば、 に連絡してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2. 免責 この文書の内容に関しては、何の責任も持てません。ご自身の責任の元で、こ の文書のコンセプト、例、そしてその他の内容を利用してください。これは本 文書の新版ですので、誤りや不正確な記述を含んでいるかもしれませんし、そ れらの誤りや不正確な記述によって、あなたのシステムに被害を与える可能性 もまた当然ながらあります。慎重に読み進んでください。実際に何らかの被害 を生ずるといった可能性はほとんど無いはずですが、たとえそうしたことが起 きてしまったとしても、著者(達)は、それについて何の責任も負いません。 特に記述がない限り、著作権はそれぞれの保有者に帰するものとします。また この文書中で使用される用語は、各商標の範囲に抵触しないものとします。 特定の商品名やブランド名を挙げた場合でも、それらを推奨するものではあり ません。 主要なインストールを行う前にご利用のシステムのバックアップを取り、そし てバックアップを定期的に行うことを強くお勧めします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3. 最新版 これは初期公開版です。 この文書の最新版は、 http://www.itlab.musc.edu/ ~nathan/ authentication_gateway/ にあります。関連する HOWTO 文書は、 Linux Documentation Project ホームページで見つけら れます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4. クレジット Jamin W. Collins Kristin E Thomas ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5. フィードバック この文書に関するフィードバックを、もちろん歓迎します。あなたがたの提案 や意見がなければ、この文書は存在しなかったでしょう。追加、批評、そして 批判を以下の電子メールアドレスまでお送りください: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. 必要なもの このセクションでは、認証ゲートウェイに必要なものについて記述します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1. Netfilter 認証ゲートウェイは、ファイヤウォールを管理するのに、Netfilter と iptables を利用します。 Netfi lter HOWTO を参照ください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2. Netfilter ルール用 PAM これは Nathan Zorn によって書かれたプラグ可能認証モジュール(PAM)で、 http://www.itlab.musc.edu/~nathan/pa m_iptables から入手できます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3. DHCP サーバ 認証ゲートウェイは、公開ネットワークに対して、動的ホスト設定プロトコル (DHCP)サーバの役割を果たします。それは公開ネットワークからの DHCP サー ビス要求にのみ応答します。私は ISC DHCP Server を使用しました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4. 認証のメカニズム ゲートウェイは、PAM の認証方法ならどれでも利用できます。サウスカロライ ナ医大が使用している認証機構は LDAP です。 LDAP を認証目的に使用します ので、ゲートウェイ上の PAM モジュールは、LDAP を使用するように設定され ました。もっと多くの情報を、 http://www.padl.com/pam_ldap.html で見つけ ることができます。PAM により、多くの認証手段を利用できるようになります 。他の手法についての情報をもっと知りたい場合は、 PAM モジュールについて の文章 を参照し てください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5. DNS サーバ ゲートウェイは、公開ネットワークに対する DNS サーバの機能も果たします。 私は Bind をインストールし、それを キャッシングネームサーバとして使用しています。キャッシングサーバ構築に は Red Hat に同梱されている caching-namserver という RPM パッケージも利 用可能です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. ゲートウェイサービスの設定 このセクションでは、認証ゲートウェイの各部分の設定方法を説明します。こ こで使用される例は、サブネットが 10.0.1.0 のプライベート公開ネットワー クです。eth0 は内部ネットワークに接続される、ゲートウェイのインタフェー スです。eth1 が公開ネットワークに接続されるインタフェースです。このイン タフェース側の IP アドレスは 10.0.1.1 です。これらの設定は、あなたが利 用しているネットワークに合うように変更可能です。ゲートウェイには Red Hat 7.1 を利用したので、多くの例が Red Hat に限定されます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1. Netfilter の設定 netfilter を設定するためには、netfilter サポートを加えてカーネルを再コ ンパイルしなければなりません。カーネルの設定とコンパイルについてもっと 情報が必要なら、 Kernel-HOWTO を参照してください。 私のカーネル設定は、以下のような感じです。 ┌──────────────────────────────────┐ │ # │ │ # Networking options │ │ # │ │ CONFIG_PACKET=y │ │ # CONFIG_PACKET_MMAP is not set │ │ # CONFIG_NETLINK is not set │ │ CONFIG_NETFILTER=y │ │ CONFIG_NETFILTER_DEBUG=y │ │ CONFIG_FILTER=y │ │ CONFIG_UNIX=y │ │ CONFIG_INET=y │ │ CONFIG_IP_MULTICAST=y │ │ # CONFIG_IP_ADVANCED_ROUTER is not set │ │ # CONFIG_IP_PNP is not set │ │ # CONFIG_NET_IPIP is not set │ │ # CONFIG_NET_IPGRE is not set │ │ # CONFIG_IP_MROUTE is not set │ │ # CONFIG_INET_ECN is not set │ │ # CONFIG_SYN_COOKIES is not set │ │ │ │ │ │ # IP: Netfilter Configuration │ │ # │ │ CONFIG_IP_NF_CONNTRACK=y │ │ CONFIG_IP_NF_FTP=y │ │ CONFIG_IP_NF_IPTABLES=y │ │ CONFIG_IP_NF_MATCH_LIMIT=y │ │ CONFIG_IP_NF_MATCH_MAC=y │ │ CONFIG_IP_NF_MATCH_MARK=y │ │ CONFIG_IP_NF_MATCH_MULTIPORT=y │ │ CONFIG_IP_NF_MATCH_TOS=y │ │ CONFIG_IP_NF_MATCH_TCPMSS=y │ │ CONFIG_IP_NF_MATCH_STATE=y │ │ CONFIG_IP_NF_MATCH_UNCLEAN=y │ │ CONFIG_IP_NF_MATCH_OWNER=y │ │ CONFIG_IP_NF_FILTER=y │ │ CONFIG_IP_NF_TARGET_REJECT=y │ │ CONFIG_IP_NF_TARGET_MIRROR=y │ │ CONFIG_IP_NF_NAT=y │ │ CONFIG_IP_NF_NAT_NEEDED=y │ │ CONFIG_IP_NF_TARGET_MASQUERADE=y │ │ CONFIG_IP_NF_TARGET_REDIRECT=y │ │ CONFIG_IP_NF_NAT_FTP=y │ │ CONFIG_IP_NF_MANGLE=y │ │ CONFIG_IP_NF_TARGET_TOS=y │ │ CONFIG_IP_NF_TARGET_MARK=y │ │ CONFIG_IP_NF_TARGET_LOG=y │ │ CONFIG_IP_NF_TARGET_TCPMSS=y │ │ │ └──────────────────────────────────┘ iptables をインストールする必要があります。iptables をインストールする には、ご利用のディストリビューションに同梱されているパッケージを利用す るか、ソースからインストールしてください。上記のオプションを設定し新し いカーネルを作成して iptables をインストールした後に、私は以下のように デフォルトのファイヤウォールルールを設定しました。 ┌───────────────────────────────────┐ │ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE │ │ iptables -A INPUT -i eth0 -m state --state NEW, INVALID -j DROP │ │ iptables -A FORWARD -i eth0 -m state --state NEW, INVALID -j DROP │ │ iptables -I FORWARD -o eth0 -j DROP │ │ iptables -I FORWARD -s 10.0.1.0/24 -d 10.0.1.1 -j ACCEPT │ │ │ └───────────────────────────────────┘ 上記のコマンドは、サーバが再起動する際に起動するように、initscript の中 に置くこともできます。ルールが追加されたことを確かめるために、以下のコ マンドを実行してください。 ┌──────────────────────────────────┐ │ iptables -v -t nat -L │ │ iptables -v -t filter -L │ │ │ └──────────────────────────────────┘ 以上のルールを保存するため、私は Red Hat の init スクリプトを利用しまし た。 ┌──────────────────────────────────┐ │ /etc/init.d/iptables save │ │ /etc/init.d/iptables restart │ │ │ └──────────────────────────────────┘ ルールが適切に設定されたら、以下のコマンドを実行して、 IP フォワーディ ングを有効にしてください。 ┌──────────────────────────────────┐ │ echo 1 > /proc/sys/net/ipv4/ip_forward │ │ │ └──────────────────────────────────┘ マシンの再起動時に IP フォワーディングが確実に有効になるように、以下の 行を /etc/sysctl.conf に追加してください。 ┌──────────────────────────────────┐ │ net.ipv4.ip_forward = 1 │ │ │ └──────────────────────────────────┘ これでゲートウェイはネットワークアドレス変換(NAT)を行えるようになります が、公開ネットワークの中から送信されたゲートウェイ宛てのパケット以外は 、フォワーディングパケットをすべて破棄します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2. PAM iptables モジュール このモジュールは、認証されたクライアントのフォワーディングを許可するの に必要な、ファイヤウォールルールを挿入する PAM セッションモジュールです 。これを簡単にセットアップするには、単にソース を入手し、以下のコマンドを 作動させて、コンパイルを行ってください。 ┌──────────────────────────────────┐ │ gcc -fPIC -c pam_iptables.c │ │ ld -x --shared -o pam_iptables.so pam_iptables.o │ │ │ └──────────────────────────────────┘ これで pam_iptables.so と pam_iptables.o という名前の二つのバイナリがで きるはずです。pam_iptables.so を /lib/security/pam_iptables.so にコピー してください。 ┌──────────────────────────────────┐ │ cp pam_iptables.so /lib/security/pam_iptables.so │ │ │ └──────────────────────────────────┘ ゲートウェイに選択された認証クライアントは SSH だったので、以下の行を / etc/pam.d/sshd に追加しました。 ┌──────────────────────────────────┐ │ session required /lib/security/pam_iptables.so │ │ │ └──────────────────────────────────┘ これでユーザがSSHでログインすれば、ファイヤウォールルールが追加されるよ うになります。 pam_iptables のデフォルトインタフェースは eth0 です。このデフォルト設定 は、インタフェースパラメータを追加することで変更可能です。 ┌──────────────────────────────────┐ │ session required /lib/security/pam_iptables.so interface=eth1 │ │ │ └──────────────────────────────────┘ この設定は、外部ネットワークに接続するインタフェース名が eth0 でない場 合のみ必要になります。 pam_iptables モジュールが動作しているかテストするには、以下の手順を実行 してください。 1. SSH でゲートウェイにログイン。 2. ルールが追加されているか、iptables -L で確認。 3. ゲートウェイからログアウトして、そのルールが削除されているのを確認 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3. DHCP サーバ設定 私は、以下の dhcpd.conf を用い、 DHCP を導入しました。 ┌────────────────────────────────────┐ │ subnet 10.0.1.0 netmask 255.255.255.0 { │ │ # --- default gateway │ │ option routers 10.0.1.1; │ │ option subnet-mask 255.255.255.0; │ │ option broadcast-address 10.0.1.255; │ │ │ │ option domain-name-servers 10.0.1.1; │ │ range 10.0.1.3 10.0.1.254; │ │ option time-offset -5; # Eastern Standard Time │ │ │ │ default-lease-time 21600; │ │ max-lease-time 43200; │ │ │ │ } │ │ │ └────────────────────────────────────┘ DHCPサーバはこの場合、公開ネットのインタフェースである、eth1 側に対して 作動させました。 ┌──────────────────────────────────┐ │ /usr/sbin/dhcpd eth1 │ │ │ └──────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4. 認証手法の設定 前のセクションで述べたように、私は認証に LDAP を使用するようゲートウェ イの設定を行いました。しかし、あなたがたは PAM が認証を許容するどの方法 でも利用可能です。もっと情報が必要ならば、 Section 2.4 を参照ください。 PAM LDAP で認証を行うために、私は OpenLDAP を インストールし、/etc/ldap.conf に以下の設定を行いました。 ┌──────────────────────────────────┐ │ # Your LDAP server. Must be resolvable without using LDAP. │ │ host itc.musc.edu │ │ │ │ # The distinguished name of the search base. │ │ base dc=musc,dc=edu │ │ ssl no │ │ │ └──────────────────────────────────┘ 以下に挙げるファイルは、LDAP 認証を行うよう PAM を設定するのに使用され ました。これらのファイルは、Red Hat の設定ユーティリティにより生成され ました。 /etc/pam.d/system-auth が作成され、以下のような内容になりました。 ┌───────────────────────────────────────────┐ │ #%PAM-1.0 │ │ # This file is auto-generated. │ │ # User changes will be destroyed the next time authconfig is run. │ │ auth required /lib/security/pam_env.so │ │ auth sufficient /lib/security/pam_unix.so likeauth nullok │ │ auth sufficient /lib/security/pam_ldap.so use_first_pass │ │ auth required /lib/security/pam_deny.so │ │ │ │ account required /lib/security/pam_unix.so │ │ account [default=ok user_unknown=ignore service_err=ignore system_err=ignore] │ │/lib/security/pam_ldap.so │ │ │ │ password required /lib/security/pam_cracklib.so retry=3 │ │ password sufficient /lib/security/pam_unix.so nullok use_authtok │ │ password sufficient /lib/security/pam_ldap.so use_authtok │ │ password required /lib/security/pam_deny.so │ │ │ │ session required /lib/security/pam_limits.so │ │ session required /lib/security/pam_unix.so │ │ session optional /lib/security/pam_ldap.so │ │ │ └───────────────────────────────────────────┘ また、以下の /etc/pam.d/sshd ファイルが作成されました。 ┌─────────────────────────────────────┐ │ #%PAM-1.0 │ │ auth required /lib/security/pam_stack.so service=system-auth │ │ auth required /lib/security/pam_nologin.so │ │ account required /lib/security/pam_stack.so service=system-auth │ │ password required /lib/security/pam_stack.so service=system-auth │ │ session required /lib/security/pam_stack.so service=system-auth │ │ #this line is added for firewall rule insertion upon login │ │ session required /lib/security/pam_iptables.so debug │ │ session optional /lib/security/pam_console.so │ │ │ └─────────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5. DNS の設定 私は、Red Hat 7.1 についてきたデフォルトバージョンの Bind とキャッシン グネームサーバ RPM をインストールしました。DHCP サーバは、公開ネットワ ーク上のマシンがネームサーバとしてゲートウェイを利用するよう設定してい ます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. 認証ゲートウェイの利用 認証ゲートウェイを利用するためには、クライアントに DHCP を使用するよう に設定してください。そのマシンに SSH クライアントをインストールして、ゲ ートウェイに SSH でログインしてください。一旦ログインすれば、内部ネット ワークにアクセスが行えるようになります。以下は、unix ベースのクライアン トにおけるセッション例です。 ┌──────────────────────────────────┐ │ bash>ssh zornnh@10.0.1.1 │ │ zornnh's Password: │ │ │ │ gateway> │ │ │ └──────────────────────────────────┘ ログインした状態である限り、アクセスが可能です。ログアウトしてしまうと 、アクセスできなくなります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5. 終わりに ・ この文書で示されるセキュリティ手法は、無線ネットワークコミュニティ により提供されるセキュリティに依存しません。無線ネットワーク全体が 安全でなくても、またその無線ネットワークがあなたの管理下になくても きちんと機能します。 ・ ゲートウェイは、トラフィックを暗号化しません。その背後にあるネット ワークへのアクセスを許可するだけです。もし暗号化も認証も必要ならば 、VPN を利用すべきです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6. 追加の情報源 ・ NASA における認証ゲートウェイの実装について説明した文書 。 ・ アルバータ大学において認証ゲートウェイを作成した方法を記述した白書 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7. 質問と答え ここは、頂いた質問のうち、多くの人達が同じように疑問を抱くだろうと思わ れるものを集めていく場所です。本当に多くのフィードバックを頂けたなら、 本来の意味のFAQにしていきます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8. 日本語訳について 日本語訳は Linux Japanese FAQ Project が行いました。翻訳に関するご意見 は JF プロジェクト 宛に連絡してください。 0.03j 翻訳: yomoyomo 校正: □ office さん □ 佐野武俊さん □ 高橋全さん □ 早川仁さん