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
   

ルールが設定されたら、以下のコマンドを実行して、 IP フォワーディングを有効にしてください。

   echo 1 > /proc/sys/net/ipv4/ip_forward
   

マシンの再起動時に IP フォワーディングが確実に有効になるように、 以下の行を /etc/sysctl.conf に追加してください。

   net.ipv4.ip_forward = 1
   

もし NocatAuth を利用しているなら、 NoCatAuth ゲートウェイ設定 セクションまで読み飛ばしてかまいません。

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
   

これでゲートウェイはネットワークアドレス変換(NAT)を行えるように なりますが、公開ネットワークの中から送信されたゲートウェイ宛ての パケット以外は、フォワーディングパケットをすべて破棄します。

3.2. 動的な Netfilter ルール

このセクションでは、ゲートウェイ上で Netfilter ルールを動的に 追加、削除するのに必要なソフトウェアの設定方法を解説します。

3.2.1. 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
     

ここで /usr/local/auth-gw にファイヤウォールのスクリプト を組み込みます。

     mkdir /usr/local/auth-gw
     cp insFwall /usr/local/auth-gw
     

ゲートウェイに選択された認証クライアントは SSH だったので、 以下の行を /etc/pam.d/sshd に追加しました。

     session    required     /lib/security/pam_iptables.so 
     

これでユーザがSSHでログインすれば、ファイヤウォールルールが追加される ようになります。

pam_iptables モジュールが動作しているかテストするには、 以下の手順を実行してください。

  1. SSH でゲートウェイにログイン。

  2. ルールが追加されているか、iptables -L -v で確認。

  3. ゲートウェイからログアウトして、そのルールが削除されているのを確認。

3.2.2. NoCatAuth ゲートウェイ

このセクションでは、NoCatAuth ゲートウェイを構築するプロセス を解説します。NocatAuth ゲートウェイを構築するには、 ソース をダウンロードし、以下の手順でインストールしてください。

gpgv がインストールされているか確かめてください。 gpgv は、PGP 署名証明者です。それは gnupg の一部であり、 http://www.gnupg.org/download.html にあります。

NocatAuth の tar ファイルを展開する。
     tar xvzf NocatAuth-x.xx.tar.gz
     

もし NoCatAuth を /usr/local/nocat ディレクトリに置きたくないなら、 Makefile を編集し、INST_PATH をあなたが NoCatAuth を常駐させたいディレクトリに変更してください。

次にゲートウェイを構築します。
     cd NoCatAuth-x.xx
     make gateway
     

/usr/local/nocat.conf ファイルを編集します。conf ファイルに必要な 設定については、詳しくは INSTALL ドキュメントを参照してください。 例となる conf ファイルは以下のような感じになります。

 
     ###### gateway.conf -- NoCatAuth Gateway Configuration.
     # 
     # Format of this file is: Directive Value, one per 
     # line. Trailing and leading whitespace is ignored. Any 
     # line beginning with a punctuation character is assumed to 
     # be a comment.
     
     Verbosity       10
     #we are behind a NAT so put the gateway in passive mode
     GatewayMode     Passive
     GatewayLog      /usr/local/nocat/nocat.log
     LoginTimeout    300
     
     ######Open Portal settings.
     HomePage        http://www.itlab.musc.edu/
     DocumentRoot    /usr/local/nocat/htdocs
     SplashForm      splash.html
     ###### Active/Passive Portal settings.
     TrustedGroups Any
     AuthServiceAddr egon.itlab.musc.edu
     AuthServiceURL  https://$AuthServiceAddr/cgi-bin/login
     LogoutURL       https://$AuthServiceAddr/forms/logout.html
     ###### Other Common Gateway Options.
     AllowedWebHosts egon.itlab.musc.edu
     ResetCmd        initialize.fw
     PermitCmd       access.fw permit $MAC $IP $Class 
     DenyCmd         access.fw deny $MAC $IP $Class 
     

これでゲートウェイを起動できるようになるはずです。 何か問題が発生したら、展開した NoCatAuth ディレクトリにある INSTALL ドキュメントを確認してください。以下のコマンドにより、 ゲートウェイを起動します。
     /usr/local/nocat/bin/gateway
     

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. 認証手法の設定

PAM による認証と NoCatAuth 認証サービスについて解説を行います。 両方とも例として LDAP を利用します。LDAP 以外の認証手段も利用 可能です。PAM や NoCatAuth のドキュメントを読み、別の認証手段 を利用するための手順を理解してください。

3.4.1. PAM LDAP

前のセクションで述べたように、私は認証に 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.4.2. NoCatAuth サービス

ゲートウェイ以外の別のサーバに、NoCatAuth サービスをインストール することをお勧めします。別のサーバが、僕の例において利用されました。 NoCatAuth サービスを構築するには、以下のソフトウェアが必要になります。

  1. SSL が有効化されたウェブサーバ。SSL 証明書が登録されているのが 望ましい。私は、Apache と mod_ssl の組み合わせを使用しました。

  2. Perl 5 (5.6 かそれ以降が望ましい)

  3. Net::LDAP, Digest::MD5, DBI, そして DBD::MySQL perl モジュール (それらは CPAN から取得してください)。必要なモジュールは、 どんな認証手段を利用するつもりかということで変わってきます。 僕の例では、認証手段として Net::LDAP を利用しました。

  4. Gnu Privacy Guard (gnupg 1.0.6 かそれ以降)。 http://www.gnupg.org/download.html で入手可能。

インストールするために、tar ファイルを展開。
    $ tar zvxf NoCatAuth-x.xx.tar.gz
    

NoCatAuth が常駐するパスを変更したい場合は、Makefile を編集し、 INST_PATH を希望するディレクトリに変更してください。

次に、 make authserv コマンドを実行します。 これで、/usr/local/nocat か、あなたが INST_PATH の値を変更した ところにすべてがインストールされます。

そして make pgpkey を実行します。 初期設定のままで、大抵の用途に使えるはずです。 重要: パスフレーズを入力しないこと! 入力してしまうと、 認証サービスがメッセージを暗号化するために存在しない tty からパスフレーズを読み込もうとして、奇妙なメッセージ を出力してしまいます。

あなたの環境に合うように、/usr/local/nocat/nocat.conf を編集してください。以下に例を示します。
    ###### authserv.conf -- NoCatAuth Authentication Service Configuration.
    #
    # Format of this file is: Directive Value, one per
    #   line. Trailing and leading whitespace is ignored. Any
    #   line beginning with a punctuation character is assumed to
    #   be a comment.

    Verbosity       10
    HomePage        http://www.itlab.musc.edu/
    DocumentRoot    /usr/local/nocat/htdocs
    # LDAP source
    DataSource LDAP
    LDAPHost authldap.musc.edu
    LDAPBase dc=musc,dc=edu

    UserTable       Member
    UserIDField     User
    UserPasswdField Pass
    UserAuthField   Status
    UserStampField  Created

    GroupTable      Network
    GroupIDField    Network
    GroupAdminField Admin
    MinPasswdLength 8
    
    # LocalGateway -- If you run auth service on the same subnet 
    #   (or host) as the gateway you need to specify the hostname 
    #   of the gateway. Otherwise omit it.  (Requires Net::Netmask)
    #
    # LocalGateway    192.168.1.7

    LoginForm       login.html
    LoginOKForm     login_ok.html
    FatalForm       fatal.html
    ExpiredForm     expired.html
    RenewForm       renew.html
    PassiveRenewForm renew_pasv.html
    RegisterForm    register.html
    RegisterOKForm  register_ok.html
    RegisterFields  Name URL Description

    UpdateForm      update.html
    UpdateFields    URL Description

    ###### Auth service user messages. Should be self-explanatory.
    #
    LoginGreeting   Greetings! Welcome to the Medical University of SC's Network.
    LoginMissing    Please fill in all fields!
    LoginBadUser    That e-mail address is unknown. Please try again.
    LoginBadPass    That e-mail and password do not match. Please try again.
    LoginBadStatus  Sorry, you are not a registered co-op member.

    RegisterGreeting    Welcome! Please enter the following information to register.RegisterMissing     Name, E-mail, and password fields must be filled in.
    RegisterUserExists  Sorry, that e-mail address is already taken. Are you already registered?
    RegisterBadUser     The e-mail address provided appears to be invalid. Did you spell it correctly?
    RegisterInvalidPass All passwords must be at least six characters long.
    RegisterPassNoMatch The passwords you provided do not match. Please try again.
    RegisterSuccess     Congratulations, you have successfully registered.

    UpdateGreeting      Enter your E-mail and password to update your info.
    UpdateBadUser       That e-mail address is unknown. Please try again.
    UpdateBadPass       That e-mail and password do not match. Please try again.
    UpdateInvalidPass   New passwords must be at least eight characters long.
    UpdatePassNoMatch   The new passwords you provided do not match. Please try again.
    UpdateSuccess       Congratulations, you have successfully updated your account.
    
    

/usr/local/nocat/pgp がウェブサーバのユーザに所有されているか 確かめてください(つまり、nobody か www-data になっているかどうか)。

Apache の httpd.conf ファイルに etc/authserv.conf を追加してください。
 Include /usr/local/nocat/etc/authserv.conf 

/usr/local/nocat/trustedkeys.pgp をゲートウェイにコピーしてください。 Apache を再起動し、試してみてください。もっと多くの情報が必要な場合は、 NoCatAuth のドキュメントを参照ください。ドキュメントは、NoCatAuth を展開したディレクトリの docs/ 配下にあります。

3.5. DNS の設定

私は、Red Hat 7.1 についてきたデフォルトバージョンの Bind とキャッシングネームサーバ RPM をインストールしました。DHCP サーバは、 公開ネットワーク上のマシンがネームサーバとしてゲートウェイ を利用するよう設定しています。