IPsecでNASへのバックアップ通信を暗号化する(NAS側)

2012/08/27

FreeBSD IPsec ipv6 セキュリティ ネットワーク

t f B! P L
Hiroaki's blog: IPsecでNASへのバックアップ通信を暗号化するの続き。AFP(Netatalk)の動いている、バックアップデータを受け取るサーバ側の設定。FreeBSD 7.3 + IPsec Toolsで。

kernelの再構築や、IPsec Toolsのインストールは略。
まずは/usr/local/etc/racoon/racoon.conf の内容。
# $Id: racoon.conf,v 1.3 2012/08/25 04:47:32 root Exp root $
#
# $KAME: racoon.conf.in,v 1.18 2001/08/16 06:33:40 itojun Exp $

# "path" must be placed before it should be used.
# You can overwrite which you defined, but it should not use due to confusing.
path include "/usr/local/etc/racoon" ;
#include "remote.conf" ;

# search this file for pre_shared_key with various ID key.
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;

# racoon will look for certificate file in the directory,
# if the certificate/certificate request payload is received.
path certificate "/usr/local/etc/cert" ;

# "log" specifies logging level.  It is followed by either "notify", "debug"
# or "debug2".
log info;

# "padding" defines some parameter of padding.  You should not touch these.
padding
{
        maximum_length 20;      # maximum padding length.
        randomize off;          # enable randomize length.
        strict_check off;       # enable strict check.
        exclusive_tail off;     # extract last one octet.
}

# if no listen directive is specified, racoon will listen to all
# available interface addresses.
listen
{
        #isakmp ::1 [7000];
        #isakmp 202.249.11.124 [500];
        #admin [7002];          # administrative's port by kmpstat.
        #strict_address;        # required all addresses must be bound.
#       isakmp IPv4アドレス [500];
        isakmp IPv6アドレス [500];
}

# Specification of default various timer.
timer
{
        # These value can be changed per remote node.
        counter 10;             # maximum trying count to send.
        interval 3 sec; # maximum interval to resend.
        persend 1;              # the number of packets per a send.

        # timer for waiting to complete each phase.
        phase1 30 sec;
        phase2 30 sec;
}

remote anonymous
{
        exchange_mode aggressive, main;
        doi             ipsec_doi;
        situation       identity_only;
        generate_policy on;
        proposal_check  obey;
        dpd_delay       20;
        passive         on;
        support_proxy   on;
        ike_frag        on;
        verify_identifier off;
    proposal {
            authentication_method rsasig;
            encryption_algorithm 3des;
            hash_algorithm sha1;
            dh_group 2;
    }
    proposal {
        encryption_algorithm    aes;
        hash_algorithm          sha256;
        authentication_method   pre_shared_key;
        dh_group                modp1024;
    }
    proposal {
        encryption_algorithm    3des;
        hash_algorithm          sha256;
        authentication_method   pre_shared_key;
        dh_group                modp1024;
    }
   proposal {
      authentication_method pre_shared_key;
      hash_algorithm sha1;
      encryption_algorithm aes 256;
      lifetime time 3600 sec;
      dh_group 2;
   }
   proposal {
      authentication_method pre_shared_key;
      hash_algorithm sha1;
      encryption_algorithm aes;
      lifetime time 3600 sec;
      dh_group 2;
   }
   

   proposal_check strict;
}

# Phase 2 proposal (for IPsec SA)
sainfo anonymous
{
        pfs_group 2;
        lifetime time 10 minutes;
        encryption_algorithm aes, rijndael, 3des;
        authentication_algorithm hmac_sha1;
        compression_algorithm deflate;
}
client側のIPアドレスは固定ではないため、anonymousで定義する必要がある。remote {} も sainfo{} も、client側とパラメータをそろえること。proposalは一致するものがあればよい。

次。共有キー。psk.txtは
メールアドレス 共有キー

とする。メールアドレスは、client側のconfファイルのremote{}で指定したメールアドレスとする。aggressive modeで接続してくるため、IDとしてIPアドレス以外のものも使用できるのだ。クライアント側でmy_identifier  user_fqdnとしているので、同じメールアドレスを使う。

最後に、どの通信を暗号化対象にするかを /usr/local/etc/racoon/setkey.conf に指定する。
# $Id: setkey.conf,v 1.2 2012/08/25 11:53:25 root Exp $
flush;
spdflush;
spdadd ::1 ::1 any -P in none;
spdadd ::1 ::1 any -P out none;
spdadd NASのあるネットワーク/マスク[0] NASのアドレス/0[548] any -P in none;
spdadd NASのアドレス/0[548] NASのあるネットワーク/マスク/マスク[0] any -P out none;
spdadd ::/0[0] NASのアドレス/0[548] any -P in ipsec esp/transport//require;
spdadd NASのアドレス/0[548] ::/0[0] any -P out ipsec esp/transport//require;
noneで終わっている行は、暗号化を行わない指定。自分自身と通信する場合、自分と同じネットワーク内と通信する場合は、暗号化を行わないようにする。
暗号化を行う条件は、ちょうどクライアント側とin/outを逆にした関係になる。

これでOK。動作確認。Wiresharkなどでパケットをキャプチャしながら、クライアント側で
telnet NASのアドレス 548
とする。IKASMPのパケットの後ESPのパケットになり、かつ、telnetが接続できていればOK。

racoon.conf でlogをdebugにすると、内容が膨大で接続の確認には向かない。tcpdumpやwiresharkでパケットをキャプチャして、どこまで進んでいるかを確認しながら設定を見直すのが現実的。
Phase1が確立していなければ、remote {} の部分とpsk.txtを確認。Phase2であればsainfo。また、暗号化されずにtcp/548に接続しに行っているようであれば、setkeyに喰わせるファイルを確認。firewallでrejectされていることもあるので、設定を見直すことも必要。UDP 500/4500とプロトコル番号50/51。
ログやtcpdumpの出力は意外と見かけないのが、また切り分けを難しくしていると思う。
が参考になる。
また、他に参考にしたページがいくつか。


楽天で探す
楽天市場
にほんブログ村 IT技術ブログへ

人気の投稿

ブログ アーカイブ

自己紹介

開発からSREにクラスチェンジしました。

アフィリエイト

  • 当ブログ「Hiroaki's blog」は、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。
  • 当ブログでは、第三者配信による広告サービスを利用しています。このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 (氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、ここをクリックしてください。
  • アクセストレードアフィリエイトプログラムに参加しています。
  • A8.netアフィリエイトプログラムに参加しています。
  • バリューコマースアフィリエイトプログラムに参加しています。
  • もしもアフィリエイトプログラムに参加しています。

プライバシーポリシー

当サイトにアクセスされる場合、IPアドレスなどの情報または閲覧状況に関するデータが機械的に生成され、場合によっては個人情報と関連付けられる可能性があります。プライバシー保護に関する適用法に準じて、これらの通信および閲覧に関するデータを収集、処理、および利用することがあります。
当サイトにアクセスされる場合、非個人情報(ブラウザの種類、OSの種類、ドメイン名、訪問数、平均滞在時間、ページ・ビューなど個人を特定できない情報)が自動収集される場合があります。当サイトのパフォーマンスやコンテンツを改善する目的で、これらの情報を利用する場合があります。
アフィリエイトでは成果を把握するためにcookie等を利用しています。それ以外の目的で使用されることはありません。詳しくは各社のページにて確認してください。
本サイトに掲載する情報に関しては、正しいものを提供することを務めていますが、掲載内容から、いかなる損失や損害などの被害が発生しても、当ブログでは責任を追いかねます。

QooQ