2013年9月19日木曜日

WebDAVの認証をLDAPにしてグループ毎にアクセス制限する

スズキです。

LDAPの登録データは次の構成を前提にしています。(下記のような"phpLDAPadmin"を利用)
"phpLDAPadmin"でユーザーを作ったユーザーでCentOSにログイン

WebDAVの認証で上記を利用するのですが、"admin"ディレクトリには
"admin"グループに属するユーザーのみ利用でき、"dev"ディレクトリには
"dev"グループに属するユーザーのみが利用できるようにしてみます。

ちなみに、"hsuzuki(Hiroyasu Suzuki)"は"admin/dev"の両グループに所属し、
"tsuzuki(Takamichi Suzuki)"は"dev"のグループのみに所属しています。

WebDAV(Apache)の設定は下記の通りです。
# cat /etc/httpd/conf/httpd.conf
...
<Location /admin>
    DAV                        On
    AuthType                   Basic
    AuthName                   "WebDAV Server"
    AuthBasicProvider          ldap
    AuthLDAPGroupAttributeIsDN off
    AuthLDAPGroupAttribute     memberUid
    AuthLDAPURL                ldap://localhost/ou=user,dc=suz-lab,dc=com?uid
    AuthzLDAPAuthoritative     on
    require ldap-group         cn=admin,ou=group,dc=suz-lab,dc=com
</Location>

<Location /dev>
    DAV                        On
    AuthType                   Basic
    AuthName                   "WebDAV Server"
    AuthBasicProvider          ldap
    AuthLDAPGroupAttributeIsDN off
    AuthLDAPGroupAttribute     memberUid
    AuthLDAPURL                ldap://localhost/ou=user,dc=suz-lab,dc=com?uid
    AuthzLDAPAuthoritative     on
    require ldap-group         cn=dev,ou=group,dc=suz-lab,dc=com
</Location>

MacのFinderからアクセスしてみます。



"hsuzuki"は"admin"グループに所属しているので、無事アクセスできます。
当然、同様に"/dev/"にもアクセスできます。
反対に"tsuzuki"は"/dev/"にはアクセスできますが、"/admin/"にはアクセスできません。

ちなみにWebDAVでアップロードしたファイルのオーナーは、
どのユーザーでも"apache"になります。
# ll */*
-rw-r--r-- 1 apache apache   32  9月  9 21:57 2013 admin/error.html
-rw-r--r-- 1 apache apache 2673  9月  9 21:51 2013 admin/memo1.txt
-rw-r--r-- 1 apache apache 4038  9月  9 21:53 2013 admin/memo2.txt

もう少し"phpLDAPadmin"がんばらないと...
--------
http://www.suz-lab.com

2013年9月18日水曜日

OpenVPNにユーザー/パスワードでログイン(LDAP認証)

スズキです。

下記のようにOpenVPNサーバの準備が行われていることが前提です。
VPC上にOpenVPN(CentOS6)をインストール
LDAP認証を行うためには、下記のパッケージをインストールします。
# yum -y install openvpn-auth-ldap
...
今回のOpenVPNの設定ファイルは次の通りです。
# cat /etc/openvpn/server.conf
local     10.0.0.4
port      1194
proto     tcp
dev       tun
dh        dh1024.pem
ca        ca.crt
cert      server.crt
key       server.key
keepalive 10 120
server    192.168.0.0 255.255.255.0
plugin    /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
push      "route 10.0.0.0 255.255.0.0"
verb      3
client-cert-not-required
username-as-common-name
  • "plugin"で"openvpn-auth-ldap"のプラグインを指定しています。
  • "client-cert-not-required"でクライアント証明書無しにユーザー/パスワードの認証のみで接続できるようにしています。
  • "username-as-common-name"は認証時のユーザー名を証明書のコモンネームにする設定です。(あまりよくわかってない...)

LDAP(OpenLDAP)は下記のようにユーザーデータが登録されていることを前提とします。
"phpLDAPadmin"でユーザーを作ったユーザーでCentOSにログイン
"openvpn-auth-ldap"の設定ファイルは下記のようにしています。
# cat /etc/openvpn/auth/ldap.conf
<LDAP>
    URL             ldap://10.0.0.5
    BindDN          cn=Manager,dc=suz-lab,dc=com
    Password        secret
    Timeout         15
    TLSEnable       no
    FollowReferrals yes
</LDAP>

<Authorization>
    BaseDN          "ou=user,dc=suz-lab,dc=com"
    SearchFilter    "(&(uid=%u))"
    RequireGroup    false
</Authorization>
この状態でOpenVPNサーバを起動しておきます。

ここまで準備ができたら下記のようにMacから接続してみます。
Mac(10.8)からCentOS(6.3)にOpenVPNでVPN接続
必要なファイルは下記となります。
$ ls -1
ca.crt
config.ovpn
設定ファイルは下記の通りです。
$ cat config.ovpn
client
auth-user-pass
dev    tun
proto  tcp
ca     ca.crt
remote xxx.xxx.xxx.xxx 1194
※"auth-user-pass"でユーザー/パスワードの認証するようになります。

実際にTunnelblickで接続しようとすると、下記のようにユーザー/パスワードの入力が
求められます。


OpenLDAPに登録されているデータを入力することで無事、接続することが確認できる
はずです。

OpenLDAP、OpenVPN、phpLDAPadmin、PAM、...どっかで全部つなげてみるか...
--------
http://www.suz-lab.com

2013年9月17日火曜日

CentOS6で複数のOpenVPN(プロセス/ポート)を起動する

スズキです。

下記のように設定ファイル(server-11940.conf/server-11941.conf)を複数作成すると、
# ls -1 /etc/openvpn/
auth
ca.crt
dh1024.pem
server-11940.conf
server-11941.conf
server.crt
server.key
"/etc/init.d/openvpn"実行時に、設定ファイルの数だけ繰り返し起動されます。
(設定ファイルの数だけ起動スクリプトをコピーしようと思ってたのですが助かりました)

設定ファイルの差分は下記のように
# diff server-11940.conf server-11941.conf
2c2
< port      11940
---
> port      11941
10c10
< server    192.168.0.0 255.255.255.0
---
> server    192.168.1.0 255.255.255.0
起動するポートとクライアントに割り当てるネットワークアドレスを変更しています。

ちなみに今回の設定ファイル全体は下記のようにしています。
# cat server-11940.conf
local     10.0.0.4
port      11940
proto     tcp
dev       tun
dh        dh1024.pem
ca        ca.crt
cert      server.crt
key       server.key
keepalive 10 120
server    192.168.0.0 255.255.255.0
plugin    /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
push      "route 10.0.0.0 255.255.0.0"
verb      3
client-cert-not-required
username-as-common-name
※OpenLDAPで認証(ユーザー/パスワード)するようにしています。

ネットワークインターフェースを確認すると、下記のように二つの"tun"が確認できます。
# ifconfig -a
...

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.0.1  P-t-P:192.168.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.1.1  P-t-P:192.168.1.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

リッスンしているポートを確認すると、こちらも設定ファイルで定義した二つのポートを
確認することができます。
# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address State  PID/Program name
...
tcp        0      0 10.0.4.73:11940 0.0.0.0:*       LISTEN 30697/openvpn
tcp        0      0 10.0.4.73:11941 0.0.0.0:*       LISTEN 30708/openvpn

"tun0"と"tun1"はデフォルトで行き来できてしまうのか?(要検証...)
--------
http://www.suz-lab.com

2013年9月15日日曜日

SUZ-LAB謹製 CentOS AMI (6.4.4 ap-northeast-1)

スズキです。

半分、業務連絡です。。。


アップデート内容は下記となります。

(1)パッケージ(yum)を最新に
# yum -y update
...

(2)"kernel-devel"を追加
# yum -y kernel-devel
...
※下記などのカーネル依存のソフトウェア利用する場合に必要になるので...
CentOS(6.4)でSecureCloud(3.5)を使ってみる(インストール編)

(3)カーネルを最新に
# uname -a
Linux ip-10-120-49-162 2.6.32-358.18.1.el6.x86_64 #1 SMP Wed Aug 28 17:19:38 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

(4)AWSコマンドラインインターフェース(Python版)を最新に
# aws --version
aws-cli/1.0.0 Python/2.6.6 Linux/2.6.32-358.18.1.el6.x86_64

(5)Fluentdを最新に
# /usr/lib64/fluent/ruby/bin/fluentd --version
fluentd 0.10.38

(6)"cp/mv/rm"のバックアップ(下記参照)
CentOS6で"cp/mv"の上書きはバックアップを作成し"rm"はゴミ箱に移動してゴミ箱の中身は"tmpwatch"で定期的に削除する

(7)Postfixの設定をもう少しセキュアに(下記参照)
Postfixの簡単なセキュリティに関する設定を確認してみた

(8)"(r)syslog"の全出力(FluentdでのS3転送用です)を"/var/log/all.log"に

もう少し仕込みたいもがあったけど、時間切れ。。。
--------
http://www.suz-lab.com

CentOS6で"cp/mv"の上書きはバックアップを作成し"rm"はゴミ箱に移動してゴミ箱の中身は"tmpwatch"で定期的に削除する

スズキです。

よくある話ですが。。。

まず、".bashrc"をきれいにしておきます。("-i"の"alias"とか削除します)
# cat /root/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
 . /etc/bashrc
fi

次に、全ユーザー共通になるように下記のように設定します。
# cat /etc/profile.d/suz-lab.sh
# suz-lab initialization script (sh)

export VERSION_CONTROL=numbered

alias rm='mv -b -t /var/tmp/trash'
alias cp='cp -b'
alias mv='mv -b'
  • "VERSION_CONTROL=numbered"は重複バックアップに番号を付けます。
  • "-b"はバックアップを作成するオプションです。
  • 削除時のゴミ箱は"/var/tmp/trash"です。("-t"で指定)

そして、確認の準備です。
# touch test
# mkdir tmp
# ls
test  tmp

"cp"で上書きするとバックアップが作成されることがわかります。
# cp test tmp/
# cp test tmp/
# ls tmp/
test  test.~1~

"mv"で上書きしてもバックアップが作成され重複すると連番が付くこともわかります。
# mv test tmp/
# ls tmp/
test  test.~1~  test.~2~

"rm"で削除するとゴミ箱(/var/tmp/trash/)に移動します。
# rm tmp/
# ls /var/tmp/trash/
tmp
# mkdir tmp
# rm tmp/
# ls /var/tmp/trash/
tmp  tmp.~1~

さらに"tmpwatch"でゴミ箱(/var/tmp/trash/)の中身を定期的に削除します。

インストールは"yum"で簡単にできます。
# yum -y install tmpwatch
...

インストール時に"/etc/cron.daily/tmpwatch"が作成されますが、
下記のように調整しました。(最後に"/var/tmp/trash/"の中身の削除の設定をしています)
# cat /etc/cron.daily/tmpwatch
#! /bin/sh

# default
/usr/sbin/tmpwatch -v -m -x /tmp/.ICE-unix 7d /tmp 2>&1 | logger -i -t tmpwatch
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
 /usr/sbin/tmpwatch -v -m -f 7d "$d" 2>&1 | logger -i -t tmpwatch
    fi
done

# add by suz-lab
/usr/sbin/tmpwatch -v -m 7d /var/tmp/trash 2>&1 | logger -i -t tmpwatch
とりあえず、更新日付が7日前より古いものを削除するようにしています。

ゴミ箱(/var/tmp/trash)内のファイル/ディレクトリの日付をものにして、
上記のスクリプトを実行してみます。
# touch -d "2003/1/1 00:00:00" /var/tmp/trash/*
# touch -d "2003/1/1 00:00:00" /var/tmp/trash/*/*
# /etc/cron.daily/tmpwatch
# ls /var/tmp/trash/
#cat /var/log/messages
...
Sep 15 19:17:16 ip-10-128-12-176 tmpwatch[1720]: removing file /var/tmp/trash/tmp.~1~/test.~2~
Sep 15 19:17:16 ip-10-128-12-176 tmpwatch[1720]: removing file /var/tmp/trash/tmp.~1~/test
Sep 15 19:17:16 ip-10-128-12-176 tmpwatch[1720]: removing file /var/tmp/trash/tmp.~1~/test.~1~
Sep 15 19:17:16 ip-10-128-12-176 tmpwatch[1720]: removing directory /var/tmp/trash/tmp.~1~ if empty
Sep 15 19:17:16 ip-10-128-12-176 tmpwatch[1720]: removing directory /var/tmp/trash/tmp if empty
...
すると、ファイルとディレクトリが削除されていることがわかります。

ということで、AMIにも組み込みます。
--------
http://www.suz-lab.com

2013年9月14日土曜日

"xinetd"の"redirect"を利用してVPC内のRDS(Oracle)にインターネットから接続

スズキです。

これには、いろいろなやり方が存在し、クラスメソッドさんのブログでも下記のように
具体的に紹介されていますが、
今回は"xinetd"の"redirect"を利用して実現してみました。

具体的には下記のように、"xinetd"を利用して1521ポートをリッスンし、1521ポートへの
通信をRDS(Oracle)にリダイレクトする中継サーバ(EC2)を用意します。


xinetdのインストールは、いつもの"yum"で...
# yum -y install xinetd
...

該当する"xinetd"の設定は下記の通りです。
# cat /etc/xinetd.d/oracle
service oracle
{
    disable     = no
    type        = UNLISTED
    socket_type = stream
    wait        = no
    user        = nobody
    protocol    = tcp
    port        = 1521
    redirect    = xxx.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com 1521
}

この状態でxinetdを起動して、インターネットから中継サーバの1521ポートに
アクセスすると、RDSにリダイレクトされて透過的に利用できます。

これが一番、扱い易いかも...
--------
http://www.suz-lab.com

"check_http"(Nagios)で証明書の有効期限チェック

スズキです。

下記の記事を書いたのですが、うれしいことに"check_http"の"-C"(--certificate=60)で
チェックできることを、何人かの方からフィードバックいただきました。
SSL証明書(HTTPS)の有効性をチェックをするNagiosプラグイン
確かに下記のようにチェックできます。

証明書の期限が指定した日数より後の場合
# ./check_http -C 40 -H ssl.suz-lab.com; echo $?
OK - Certificate 'ssl.suz-lab.com' will expire on 01/19/2014 07:16.
0
証明書の期限が指定した日数より前の場合
# ./check_http -C 400 -H ssl.suz-lab.com; echo $?
WARNING - Certificate 'ssl.suz-lab.com' expires in 127 day(s) (01/19/2014 07:16).
1

ただ、上記の記事は有効期限だけじゃなく、コモンネームが違うなど、それ以外の
エラーもチェックしたいということで書いたものでした...
("cloudpack"で必要性があったのです...)

"check_http -C"だと下記のように正常になってしまうので、仕方なく、
cURLを使ったプラグインを作ってみました。
# ./check_http -C 40 -H d3hhpvahx0p2rw.cloudfront.net; echo $?
OK - Certificate 'ssl.suz-lab.com' will expire on 01/19/2014 07:16.
0

ブログ記事へのフィードバックは間違いが修正できたり、注意点が再認識できたり、
よりよい方法に気づくことができたりで、大変ありがたいと思っています。
可能な限りフィードバックに対するフォーローも行い、自分の知識も深めていければと
改めて思いました。(しきれてないのもありますが...)
--------
http://www.suz-lab.com

2013年9月13日金曜日

SSL証明書(HTTPS)の有効性をチェックをするNagiosプラグイン

スズキです。

実体はcURLです。

cURLは問題ない証明書だと下記のように正常に実行できますが、
# curl -s https://ssl.suz-lab.com; echo $?
<html><body>INDEX</body></html>
0
問題がある証明書だと下記のように終了コードが0以外でとなります。
# curl -s https://d3hhpvahx0p2rw.cloudfront.net; echo $?
51

ということで、Nagiosのプラグインは下記のように作ってみました。
#!/bin/sh

. `dirname $0`/utils.sh

WARN=0
CRIT=0

while getopts c:w:h: OPTNAME; do
    case $OPTNAME in
    w)
        WARN=$OPTARG
        ;;
    c)
        CRIT=$OPTARG
        ;;
    h)
        HOST=$OPTARG
        ;;
    *)
        echo "UNKNOWN: Usage"
        exit $STATE_UNKNOWN
        ;;
    esac
done

curl -s https://$HOST
CODE=$?

if   [ $CODE -gt $CRIT ]; then
    echo "CRITICAL CODE $CODE"
    exit $STATE_CRITICAL
elif [ $CODE -gt $WARN ]; then
    echo "WARNING CODE $CODE"
    exit $STATE_WARNING
else
    echo "OK CODE $CODE"
    exit $STATE_OK
fi

echo "UNKNOWN: End"; exit $STATE_UNKNOWN

実行すると問題無い証明書の場合はかきのようになり、
# ./check_ssl -h ssl.suz-lab.com; echo $?
<html><body>INDEX</body></html>
OK CODE 0
0
問題ある証明書の場合は下記のようになります。
# ./check_ssl -h d3hhpvahx0p2rw.cloudfront.net; echo $?
CRITICAL CODE 51
2

証明書の有効期限もチェックできたらいいかも...
--------
http://www.suz-lab.com

2013年9月12日木曜日

APC(PHP)のメモリ使用率をチェックするNagiosプラグイン

スズキです。

"apc_sma_info"関数の出力を、そのままJSON形式で表示するPHPファイルを用意します。
# cat apc_sma_info.php
<?php print(json_encode(apc_sma_info())); ?>

Webサーバ経由でアクセスすると下記のように出力されます。
# curl -s http://localhost/apc_sma_info.php
{
    "num_seg":1,
    "seg_size":67108728,
    "avail_mem":58670064,
    "block_lists":[
        [
            {"size":58670024,"offset":8438760}
        ]
    ]
}

使用率は下記のように計算できます。
# curl -s http://localhost/apc_sma_info.php \
| jq '100 - .avail_mem / .num_seg / .seg_size * 100' \
| cut -d. -f1
12

上記を使ってNagiosプラグインを作ってみます。
# cd /usr/lib64/nagios/plugins
# cat check_apc_sma
#!/bin/sh

. `dirname $0`/utils.sh

set -e
trap 'echo "UNKNOWN: $?"; exit $STATE_UNKNOWN' ERR

WARN=0
CRIT=0

while getopts c:w:u: OPTNAME; do
    case $OPTNAME in
    w)
        WARN=$OPTARG
        ;;
    c)
        CRIT=$OPTARG
        ;;
    u)
        URL=$OPTARG
        ;;
    *)
        echo "UNKNOWN: Usage"
        exit $STATE_UNKNOWN
        ;;
    esac
done

USAGE=`curl -s $URL | jq '100 - .avail_mem / .num_seg / .seg_size * 100' | cut -d. -f1`

if   [ $USAGE -gt $CRIT ]; then
    echo "CRITICAL USAGE $USAGE%|usage=$USAGE%;$WARN;$CRIT;0;100"
    exit $STATE_CRITICAL
elif [ $USAGE -gt $WARN ]; then
    echo "WARNING USAGE $USAGE%|usage=$USAGE%;$WARN;$CRIT;0;100"
    exit $STATE_WARNING
else
    echo "OK USAGE $USAGE%|usage=$USAGE%;$WARN;$CRIT;0;100"
    exit $STATE_OK
fi

echo "UNKNOWN: End"; exit $STATE_UNKNOWN

実行すると下記のようになります。
# ./check_apc_sma -c 20 -w 10 -u http://localhost/apc_sma_info.php ; echo $?
WARNING USAGE 12%|usage=12%;10;20;0;100
1

あとはNagiosに組み込むだけです。(ここは未検証...)

近頃、JSONが出てきたら、すぐに"jq"です...
--------
http://www.suz-lab.com

2013年9月3日火曜日

Postfixの簡単なセキュリティに関する設定を確認してみた

スズキです。

「Postfix セキュリティ 設定」などで検索して、よく出てくるものを確認してみました。

Postfix接続時に表示される文字列で、Postfixだとわからないようにする。

smtpd_banner = $myhostname ESMTP
▼設定前
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP Postfix
▼設定後
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP

Postfixにコマンドを送信する前に、HELO/EHLOコマンドを必ず要求する。

smtpd_helo_required = yes
▼設定前
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP
MAIL FROM:suzuki@suz-lab.com
250 2.1.0 Ok
▼設定前
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP
MAIL FROM:suzuki@suz-lab.com
503 5.5.1 Error: send HELO/EHLO first

VRFYコマンド(ユーザーの存在確認)を無効にする。

disable_vrfy_command = yes
▼設定前
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP
VRFY root
252 2.0.0 root
▼設定前
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP
VRFY root
502 5.5.1 VRFY command is disabled

"MAIL FROM"でRFC821に違反するメールアドレスを設定できないようにする。

strict_rfc821_envelopes = yes
▼設定前
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP
HELO localhost
250 ip-10-0-0-5.localdomain
MAIL FROM:@suz-lab.com
250 2.1.0 Ok
▼設定前
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ip-10-0-0-5.localdomain ESMTP
HELO localhost
250 ip-10-0-0-5.localdomain
MAIL FROM:@suz-lab.com
501 5.1.7 Bad sender address syntax

この手のものは少しずつ増やしていこう。。。
--------
http://www.suz-lab.com

2013年9月2日月曜日

VGW(Virtual Private Gateway)に"ike-scan"してみた

スズキです。

"ike-scan"自体は、下記の記事が参考になります。
IPsec VPN Penetration Testing with BackTrack Tools
ポイントは下記の"ike-scan"の実行結果の部分でしょうか?
  • 0 returned handshake; 0 returned notify

    • This means the target is not an IPsec gateway.

  • 1 returned handshake; 0 returned notify

    • This means the target is configured for IPsec and is willing to perform IKE negotiation, and either one or more of the transforms you proposed are acceptable.

  • 0 returned handshake; 1 returned notify

    • VPN gateways respond with a notify message when none of the transforms are acceptable (though some gateways do not, in which case further analysis and a revised proposal should be tried).

まずはツールのインストールです。
# yum -y install ike-scan
...

そして前準備として、"ike-scan"を実行するサーバの"Global IP"を
"Customer Gateway"して登録して"VPN Connection"まで作成しておきます。

とりあえず、VGW(27.0.1.16)に対して実行してみます。
# ike-scan 27.0.1.16
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
27.0.1.16 Notify message 14 (NO-PROPOSAL-CHOSEN) HDR=(CKY-R=9dbe3c06f9b221ca, msgid=92fac26c)

Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.52 hosts/sec).  0 returned handshake; 1 returned notify
"notify"が返ってきました。

次に、"transform"("認証アルゴリズム"や"暗号化アルゴリズム"などの組み合わせ)を
合わせて(指定して)実行してみます。
# ike-scan 27.0.1.16 --trans="(1=7,14=128,2=2,3=1,4=2)"Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
27.0.1.16 Main Mode Handshake returned HDR=(CKY-R=d9f3373e7c0b6971) SA=(Enc=AES KeyLength=128 Hash=SHA1 Auth=PSK Group=2:modp1024) VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0)

Ending ike-scan 1.9: 1 hosts scanned in 0.012 seconds (82.88 hosts/sec).  1 returned handshake; 0 returned notify
今度は"handshake"が返ってきました。
※ "--trans="(1=7,14=128,2=2,3=1,4=2)"は下記のように対応しています。

1=7Enc=AES
14=128KeyLength=128
2=2Hash=SHA1
3=1Auth=PSK
4=2Group=2:modp1024

ということで、VPCとVPN接続できない場合は"ike-scan"で確認する方法はアリかも...
--------
http://www.suz-lab.com

2013年9月1日日曜日

"Amazon Linux"で起動時に任意の任意のEIPを関連付ける

スズキです。

下記に引き続き、"cloud-init(runcmd)"で実現してみました。
"Amazon Linux"で起動時に任意のユーザーを作って任意の公開鍵(SSH)を登録する
※変数の受け渡し方がよくわからず、一時ファイルに書き出してしまいました...

#cloud-config
runcmd:
 - [sh, -c, 'curl -s http://169.254.169.254/latest/meta-data/instance-id > /tmp/tmp_instance_id.txt']
 - [sh, -c, 'curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed s/.$// > /tmp/tmp_region.txt']
 - [sh, -c, 'aws ec2 associate-address --public-ip xxx.xxx.xxx.xxx --region `cat /tmp/tmp_region.txt` --instance-id `cat /tmp/tmp_instance_id.txt`']
 - [sh, -c, 'rm -f /tmp/tmp_instance_id.txt']
 - [sh, -c, 'rm -f /tmp/tmp_region.txt']

とりあえず"cloud-init"の"runcmd"は、よくわかった...
--------
http://www.suz-lab.com

"Amazon Linux"で起動時に任意のユーザーを作って任意の公開鍵(SSH)を登録する

スズキです。

"cloud-init"使って"User Data"を下記のようにして実現してみました。

#cloud-config
runcmd:
 - [adduser, suzuki]
 - [mkdir, /home/suzuki/.ssh]
 - [sh, -c, 'echo "ssh-rsa XXXXXXXX xxxxxxxx" > /home/suzuki/.ssh/authorized_keys']
 - [chown, -R, suzuki.suzuki, /home/suzuki/.ssh]
 - [chmod, 600, /home/suzuki/.ssh/authorized_keys]

"authorized_keys"に公開鍵を書き込む部分に苦戦しましたが、
下記の記事が非情に参考になりました。
cloud-initで設定ファイルをつくる

結局、"runcmd"使ってしまいましたが...
--------
http://www.suz-lab.com