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.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 モジュールが動作しているかテストするには、 以下の手順を実行してください。

  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 サーバは、 公開ネットワーク上のマシンがネームサーバとしてゲートウェイ を利用するよう設定しています。