このセクションでは、認証ゲートウェイの各部分の設定方法を説明します。 ここで使用される例は、サブネットが 10.0.1.0 のプライベート 公開ネットワークです。eth0 は内部ネットワークに接続される、 ゲートウェイのインタフェースです。eth1 が公開ネットワークに接続 されるインタフェースです。このインタフェース側の IP アドレスは 10.0.1.1 です。これらの設定は、あなたが利用しているネットワーク に合うように変更可能です。ゲートウェイには Red Hat 7.1 を利用したので、多くの例が Red Hat に限定されます。
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 セッション モジュールです。これを簡単にセットアップするには、単に ソース を入手し、以下のコマンドを作動させて、コンパイルを行ってください。
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 モジュールが動作しているかテストするには、 以下の手順を実行してください。
SSH でゲートウェイにログイン。
ルールが追加されているか、iptables -L で確認。
ゲートウェイからログアウトして、そのルールが削除されているのを確認。
私は、以下の 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 |
前のセクションで述べたように、私は認証に 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 の設定ユーティリティにより 生成されました。
#%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 |
#%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 |
私は、Red Hat 7.1 についてきたデフォルトバージョンの Bind とキャッシングネームサーバ RPM をインストールしました。DHCP サーバは、 公開ネットワーク上のマシンがネームサーバとしてゲートウェイ を利用するよう設定しています。