Authentication Gateway HOWTO Nathan Zorn
zornnh@musc.edu
yomoyomo 日本語訳
ymgrtq@ma.neweb.ne.jp
0.03 2001-12-06 nhz 0.02 2001-09-28 KET 0.01 2001-09-06 nhz 無線ネットワークや、図書館や寮などの公開アクセスエリアにおける セキュリティには、多くの懸念事項があります。そうした懸念事項は、 現行のセキュリティ実装では解決できません。その回避策として、 認証ゲートウェイを利用する方法が推奨されてきました。このゲートウェイは、 ユーザがネットワークを利用する際に認証を強制することで、 セキュリティに関する懸念事項に取り組むものです。
<!--Introduction-->はじめに security!introduction 無線ネットワークや公開アクセスエリアに、許可されてないユーザがアクセス するのはとても簡単です。許可されてないユーザでも、通信を探り、 その通信から接続情報を横取りできます。許可されてないユーザが、 マシンを公開ターミナルにつなぎ、ネットワークにアクセスすることが 可能なのです。セキュリティが WEP などで整備されてきていますが、 こうしたものによるセキュリティは、AirSnort などのツールによって 破られる可能性があります。以上の問題を解決するアプローチの一つとして、 無線のセキュリティ機能に頼らず、代わりに無線ネットワークや公開 アクセスエリアの前面に認証ゲートウェイを設置し、ユーザがネットワーク を利用する前に、そのゲートウェイに認証を受けることを強制するというのが あります。この HOWTO は、Linux でこのゲートウェイを構築する方法を説明 するものです。 <!-- Copyright Information -->著作権情報 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 で入手可能です。 何か質問があれば、zornnh@musc.edu に連絡してください。 <!-- Disclaimer -->免責 この文書の内容に関しては、何の責任も持てません。ご自身の責任の元で、 この文書のコンセプト、例、そしてその他の内容を利用してください。 これは本文書の新版ですので、誤りや不正確な記述を含んでいる かもしれませんし、それらの誤りや不正確な記述によって、 あなたのシステムに被害を与える可能性もまた当然ながらあります。 慎重に読み進んでください。実際に何らかの被害を生ずるといった 可能性はほとんど無いはずですが、たとえそうしたことが起きて しまったとしても、著者(達)は、それについて何の責任も負いません。 特に記述がない限り、著作権はそれぞれの保有者に帰するものとします。 またこの文書中で使用される用語は、各商標の範囲に抵触しないものとします。 特定の商品名やブランド名を挙げた場合でも、 それらを推奨するものではありません。 主要なインストールを行う前にご利用のシステムのバックアップを取り、 そしてバックアップを定期的に行うことを強くお勧めします。 <!-- New Versions-->最新版 (your index root)!news on これは初期公開版です。 この文書の最新版は、 http://www.itlab.musc.edu/ ~nathan/authentication_gateway/ にあります。関連する HOWTO 文書は、 Linux Documentation Project ホームページで見つけられます。 <!-- Credits -->クレジット Jamin W. Collins Kristin E Thomas <!-- Feedback -->フィードバック この文書に関するフィードバックを、もちろん歓迎します。 あなたがたの提案や意見がなければ、この文書は存在しなかったでしょう。 追加、批評、そして批判を以下の電子メールアドレスまでお送りください: zornnh@musc.edu <!-- What is needed -->必要なもの このセクションでは、認証ゲートウェイに必要なものについて記述します。 Netfilter 認証ゲートウェイは、ファイヤウォールを管理するのに、Netfilter と iptables を利用します。 Netfi lter HOWTO を参照ください。 <!-- PAM for Netfilter rules. -->Netfilter ルール用 PAM これは Nathan Zorn によって書かれたプラグ可能認証モジュール(PAM)で、 http://www.itlab.musc.edu/~nathan/pa m_iptables から入手できます。 <!-- DHCP Server -->DHCP サーバ 認証ゲートウェイは、公開ネットワークに対して、動的ホスト設定プロトコル (DHCP)サーバの役割を果たします。それは公開ネットワークからの DHCP サービス要求にのみ応答します。私は ISC DHCP Server を使用しました。 <!-- Authentication mechanism -->認証のメカニズム ゲートウェイは、PAM の認証方法ならどれでも利用できます。 サウスカロライナ医大が使用している認証機構は LDAP です。 LDAP を認証目的に使用しますので、ゲートウェイ上の PAM モジュールは、LDAP を使用するように設定されました。 もっと多くの情報を、 http://www.padl.com/pam_ldap.html で見つけることができます。PAM により、多くの認証手段を利用 できるようになります。他の手法についての情報をもっと知りたい場合は、 PAM モジュールにつ いての文章 を参照してください。 <!-- DNS Server -->DNS サーバ ゲートウェイは、公開ネットワークに対する DNS サーバの機能も果たします。 私は Bind をインストールし、それをキャッシングネームサーバとして使用しています。 キャッシングサーバ構築には Red Hat に同梱されている caching-namserver という RPM パッケージも利用可能です。 <!-- Setting up the Gateway Services -->ゲートウェイサービスの設定 このセクションでは、認証ゲートウェイの各部分の設定方法を説明します。 ここで使用される例は、サブネットが 10.0.1.0 のプライベート 公開ネットワークです。eth0 は内部ネットワークに接続される、 ゲートウェイのインタフェースです。eth1 が公開ネットワークに接続 されるインタフェースです。このインタフェース側の IP アドレスは 10.0.1.1 です。これらの設定は、あなたが利用しているネットワーク に合うように変更可能です。ゲートウェイには Red Hat 7.1 を利用したので、多くの例が Red Hat に限定されます。 <!-- Netfilter Setup -->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)を行えるように なりますが、公開ネットワークの中から送信されたゲートウェイ宛ての パケット以外は、フォワーディングパケットをすべて破棄します。 <!-- PAM iptables Module -->PAM iptables モジュール このモジュールは、認証されたクライアントのフォワーディングを許可 するのに必要な、ファイヤウォールルールを挿入する PAM セッション モジュールです。これを簡単にセットアップするには、単に ソース を入手し、以下のコマンドを作動させて、コンパイルを行ってください。 gcc -fPIC -c pam_iptables.c ld -x --shared -o pam_iptables.so pam_iptables.o これで pam_iptables.sopam_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 モジュールが動作しているかテストするには、 以下の手順を実行してください。 SSH でゲートウェイにログイン。 ルールが追加されているか、iptables -L で確認。 ゲートウェイからログアウトして、そのルールが削除されているのを確認。 <!-- DHCP Server Setup -->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 <!-- Authentication Method Setup -->認証手法の設定 前のセクションで述べたように、私は認証に LDAP を使用するよう ゲートウェイの設定を行いました。しかし、あなたがたは PAM が認証を許容するどの方法でも利用可能です。もっと情報が必要ならば、 を参照ください。 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 <!-- DNS Setup -->DNS の設定 私は、Red Hat 7.1 についてきたデフォルトバージョンの Bind とキャッシングネームサーバ RPM をインストールしました。DHCP サーバは、 公開ネットワーク上のマシンがネームサーバとしてゲートウェイ を利用するよう設定しています。 <!-- Using the authentication gateway -->認証ゲートウェイの利用 認証ゲートウェイを利用するためには、クライアントに DHCP を使用するように設定してください。そのマシンに SSH クライアントをインストールして、ゲートウェイに SSH でログインしてください。一旦ログインすれば、 内部ネットワークにアクセスが行えるようになります。以下は、unix ベースのクライアントにおけるセッション例です。 bash>ssh zornnh@10.0.1.1 zornnh's Password: gateway> ログインした状態である限り、アクセスが可能です。ログアウトしてしまうと、 アクセスできなくなります。 <!-- Concluding Remarks-->終わりに (your index root)!conclusion この文書で示されるセキュリティ手法は、無線ネットワークコミュニティ により提供されるセキュリティに依存しません。無線ネットワーク全体 が安全でなくても、またその無線ネットワークがあなたの管理下 になくてもきちんと機能します。 ゲートウェイは、トラフィックを暗号化しません。その背後にある ネットワークへのアクセスを許可するだけです。 もし暗号化も認証も必要ならば、VPN を利用すべきです。 <!-- Additional Resources -->追加の情報源 NASA における認証ゲートウェイの実装について説明した 文書 アルバータ大学において認証ゲートウェイを作成した方法を記述した 白書 <!-- Questions and Answers -->質問と答え (your index root)!FAQ (your index root)!frequently asked questions ここは、頂いた質問のうち、多くの人達が同じように疑問を抱くだろう と思われるものを集めていく場所です。本当に多くのフィードバック を頂けたなら、本来の意味のFAQにしていきます。 日本語訳について disk!japanese 日本語訳は Linux Japanese FAQ Project が行いました。 翻訳に関するご意見は JF プロジェクト <JF@linux.or.jp> 宛に連絡 してください。 0.03j 翻訳: yomoyomo ymgrtq@ma.neweb.ne.jp 校正: office さん office@ukky.net 佐野 武俊さん kgh12351@nifty.ne.jp 高橋 全さん arms405@jade.dti.ne.jp 早川 仁さん cz@hykw.tv