FreeS/WAN によるVPN Masquerade の実験
第4回 IPSec のネットワーク的特徴とファイアウォールのポリシー

Linux-eden >> 第4回 IPSec のネットワーク的特徴とファイアウォールのポリシー

 

  • IPSec のおおまかな通信手順と構造

     おおまかに、IPSec は、「IKE によるSAの確立」と「SAをもとにしたIPSec による通信」の2のステップで動作します。

     SAとは、IPSec において、どのようなセキュリティメソッドをどのようなパラメータで運用するのか、を定めた合意で、これに基づいて両者がIPSecで通信を行います。

     一般的に、IKEにはRSAなどの公開鍵暗号方式を使用し、IPSec では、ESP+共有鍵暗号方式を使用するケースが多いようです。
     IPSec の仕様では、DES 暗号方式以外はすべてオプション扱いになっており、どんな暗号方式を使うのかについては、柔軟に変更できるようになっています。

     IKE と IPSec とで異なる暗号方式が使える点と、さらにその暗号方式が変更できる仕様になっているおかげで、そのアドバンテージは、暗号強度とコストが比例傾向にある限り失われないでしょう。

     つまり、この仕様設計を生かすのであれば、IKEで使用する暗号強度は、IPSec用のそれよりもかなり強力なものを使用しなければなりません。

     また、この仕様は、各暗号アルゴリズム毎の、鍵管理の利便性・鍵の強度・パフォーマンスなどの特徴を組み合わせて使用できる柔軟性をも提供しています。

     このほか、IPSec では、暗号化を使わない、AH(Authentication Header)を使うこともできます。
     これは、SAが確立した相手との通信において、データの整合性を保証するものです。 

     こういった柔軟性の高さは、異なるベンダー間の相互接続性を高くし、主にルーター間VPNとして利用される理由となっています。

  • IPSec で実際に使われるプロトコルやポート

     下図(図1)は、IPSec の動作をプロトコルの視点から見た大まかな図です。

     つまり、IPSec で通信する2台の間では、

      ・UDP/IP : 500番ポート
      ・ESP/IP (プロトコル番号 50番)
      ・AH/IP (プロトコル番号 51番)

     がフィルタリングされていてはなりません。
     ただ、セキュリティポリシーとして AH を許可しないのであれば、AH については通さない事はありうるかもしれません。

図1


  • Linux における IPSec 用ネットワークインターフェース

     前回のインストール後、既にあなたのLinuxマシンには、ipsec0 という、新しいネットワークインターフェースが出来ているはずです。

    # ifconfig|less

     で確認してみてください。
     
     この ipsecN インターフェースが IPSec の出入り口となります。
     iptables でフィルタリングをする場合も、ネットワークインターフェース名として、この名前を使用します。

     また、複数の IPSec 用ネットワークインターフェースがある場合、iptables では、そのすべてにマッチするワードとして、「ipsec+」が使用できます。

     つまり、既にルーターとして使っている、NIC 2枚挿しのLinux マシンにFreeS/WANをインストールした場合は、NIC 3枚挿しの状態になっているものと考えてください。
     もちろん、マジメに運用するのであれば、セキュリティポリシーも、NIC が3枚あるマシンとして策定しないといけません。

  • iptables による IPSec パケットの許可

     、INPUT チェインとFORWARD チェインの基本ポリシーだけが DROP の場合、iptables により、IPSec パケットを許可するには、以下のようなシェルスクリプトを実行すればOKです。

     ここでは、IPSec で入ってきたパケットを、すべて許可して、IP転送もする設定にしていますが、本番では、必要に応じてフィルタリングしたほうがいいでしょう。

     さらに次の項では、これと、NAT を組み合わせたコンフィグレーションも紹介します。

    #!/bin/sh
    ### Enables IP forwarding
    echo 1 > /proc/sys/net/ipv4/ip_forward

    ### Disables rp_filter(for IPSEC)
    echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

    ### Allows IKE
    iptables -t filter -A INPUT -p udp --dport 500 -j ACCEPT
    iptables -t filter -A INPUT -p udp --sport 500 -j ACCEPT

    ### Allows ESP
    iptables -t filter -A INPUT -p 50 -j ACCEPT

    ### Allows AH
    iptables -t filter -A INPUT -p 51 -j ACCEPT

    ### All packets and interfaces come with IPSec are completely accepted.
    iptables -t filter -A FORWARD -i ipsec+ -j ACCEPT
    iptables -t filter -A FORWARD -o ipsec+ -j ACCEPT

    iptables -t filter -A INPUT -i ipsec+ -j ACCEPT

     

  • Linux を VPN ルーターにするための iptables 設定

     ここでは、LinuxマシンをVPNルーターとして使うために必要な iptables の設定について記します。

     まず、前提として、以下のようなネットワーク構成であるものとします。

                                             >ipsec0> -----(VPN)---------- Roadwarrior
 LocalNet ==================== <eth1< NAT&SG >eth0> ---------------------- Internet
192.168.0.0/24 192.168.0.254/24 DHCP IP

「NAT&SG(SecurityGateway)」が、FreeS/ WANのインストールされたマシンです。
ここに、以下のようなネットワークポリシーを適用するものとします。

eth1 && ipsec0 -> eth0 方向
NATを適用
IP_FORWARDする
すべてのパケットを許可

eth1 && ipsec0 <- eth0 方向
IP_FORWARDする
以下のパケット以外はすべて拒否
IPSECに必要なプロトコル・通信ポートなど(UDP 500番ポート、AH、ESP)
SYNフラグの立っていないTCPパケット

eth1 <-> ipsec0 方向
IP_FORWARDする
すべてのパケットを許可

この場合、以下のようなシェルスクリプトにより、iptables の設定が可能です。

#!/bin/sh
### Intranet = eth1 Internet = eth0
###
### Accepts
### eth1 <- eth0 Ping,DNS
### eth1 <-> eth0 All established connections.
### eth1 -> eth0 All patckets.
###
### Declines
### All others except ACCEPTED.

### Load Module
echo " IP-masq Starting....."
/sbin/modprobe iptable_nat

### Enables IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

### Disables rp_filter(for IPSEC)
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

### Flush ###
iptables -t filter -F FORWARD
iptables -t filter -F INPUT
iptables -t nat -F POSTROUTING

### Masquerade ###
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


####### Forward-----------------------

### Basically, All packets are dropped.
iptables -t filter -P FORWARD DROP

###Accept all trafic from intranet to the internet.
iptables -t filter -A FORWARD -i eth1 -j ACCEPT

### Established connections and Related packets are accepted.
# For exsample, This will allow DNS queries from local network.
# but not allows incoming DNS queries.
# And related FTP Data Port and ICMP error are also accepted.
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

### ping( ICMP ) is accepted.
iptables -A FORWARD -i eth0 -p icmp -j ACCEPT


####### Input--------------------------

### Basically, All incoming packets are dropped.
iptables -t filter -P INPUT DROP

### All packets from eth1 are accepted.
iptables -t filter -A INPUT -i eth1 -j ACCEPT

### All packets from local loopback are accepted.
iptables -t filter -A INPUT -i lo -j ACCEPT

### Established connections and Related packets are accepted.
# For exsample, This will allow DNS queries from this server.
# but not allows incoming DNS queries.
# And related FTP Data Port and ICMP error are also accepted.
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

### Allows DNS query
iptables -t filter -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT


####### IPSEC--------------------------

### Allow IKE
iptables -t filter -A INPUT -p udp --dport 500 -j ACCEPT
iptables -t filter -A INPUT -p udp --sport 500 -j ACCEPT

### Allows ESP
iptables -t filter -A INPUT -p 50 -j ACCEPT

### Allows AH
iptables -t filter -A INPUT -p 51 -j ACCEPT

### IPSEC packets come from all interfaces are completely accepted.
iptables -t filter -A FORWARD -i ipsec+ -j ACCEPT
iptables -t filter -A FORWARD -o ipsec+ -j ACCEPT

iptables -t filter -A INPUT -i ipsec+ -j ACCEPT


これで、ネットワークの環境が整いました。
次のページからはいよいよFreeS/WANの設定を行いましょう。


4/11


 

Linux-eden へ
戻る


ひろもの国へ戻る

このページは、現状ありのままの状態で提供させていただいております。本ページの情報はあくまでも自己責任の元にご利用ください。
お問い合わせなどは、meiweng2@yahoo.co.jpまでお願いいたします。