2013年12月25日水曜日

Supervisorを試してみた

スズキです。

Supervisorを使うと、適当なスクリプトをデーモン化(?)することが可能です。
具体的には指定したスクリプトが終了したら、すぐにまた立ち上直してくれたり
してくれます。(その他もいろいろと機能があります)

Supervisor: A Process Control System


ということで、試してみました。(利用したAMIは下記です)
SUZ-LAB謹製 CentOS AMI (6.5.1 ap-northeast-1)

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

中身は、こんな感じです。
# rpm -ql supervisor
/etc/logrotate.d/supervisor
/etc/rc.d/init.d/supervisord
/etc/supervisord.conf
/usr/bin/supervisorctl
/usr/bin/supervisord
/usr/lib/python2.6/site-packages/supervisor
...

そして適当なスクリプトを作ります。
# cat /root/test.sh
#!/bin/sh
sleep 1
date

それを設定ファイルに記載します。
# cat /etc/supervisord.conf
...
[program:test]
command=/root/test.sh
logfile=/root/test.log

準備ができたらサービスを起動します。
# service supervisord start
...

最後にログを確認すると、上述の挙動を確認することができます。
# cat /root/test.log
...
2013年 12月 25日 水曜日 14:48:36 JST
2013年 12月 25日 水曜日 14:48:38 JST
2013年 12月 25日 水曜日 14:48:39 JST
...

まだ、リハビリ中...
--------
http://blog.suz-lab.com

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

スズキです。

下記の通りアップデートしました。
AMI Name: suz-lab_centos-core-6.5.1
AMI ID: ami-99107d98

各種パッケージ(カーネルも含む)も次の通りアップデートしています。
# uname -a
Linux ip-10-134-162-207 2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/redhat-release
CentOS release 6.5 (Final)

# aws --version
aws-cli/1.2.9 Python/2.6.6 Linux/2.6.32-431.1.2.0.1.el6.x86_64

# /usr/lib64/fluent/ruby/bin/fluentd --version
fluentd 0.10.41

また「logrotateってなんじゃ?(pigzで高速ローテート)」の成果も取り込んで、
ログのローテーションまわりも改善させています。("logrotate"の設定は下記の通りです)
# cat /etc/logrotate.conf
daily
create
dateext
compress
delaycompress
missingok
rotate        30
compresscmd   /usr/bin/pigz
compressext   .gz
uncompresscmd /usr/bin/unpigz

include /etc/logrotate.d

/var/log/wtmp {
    create 0664 root utmp
}

/var/log/btmp {
    create 0600 root utmp
}

ブログ、リハビリ中...
--------
http://blog.suz-lab.com

2013年12月5日木曜日

「ITアーキテクトカンファレンス2013」で話してきました

スズキです。

下記のイベントで話してきました。


話した内容は、「実践!AWSクラウドデザインパターン」で、まさにCDPネタです。
ということで、「CDP Advent Calendar 2013」の12/04分にしました。

発表資料は下記の通りです。


今回は前半に「クラウドアーキテクティング原則」を持ってきました。

これは、クラウド(AWS)を利用する上での心構え的なもので、
たまに、読み返しては自分はまだまだ「クラウド脳」じゃないなー、
と反省したりもしています。

クラウド(AWS)でシステムの作り方、運用の仕方は必然的に
変わってきていると思いますが、もしかしたら、開発プロセスやテストの仕方、
人的リソースのアサイン方法や営業手法なども、変わっていく、というか、
変えていかなければならないんだろーなー
と危機感を感じでいる、今日この頃です。

--------
http://blog.suz-lab.com

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

2013年8月23日金曜日

EC2に関わるデータ転送料金(IN/OUT)を図にしてみた

スズキです。

下記のように図にしてみました。


情報元は下記の"EC2"のデータ転送量の価格と、


"Direct Connect"のデータ転送量の価格となります。


実は、リージョン間のデータ転送料金はインターネットのものと同じだと思ってました...
そして、EIPへのデータ転送料金もインターネットのものと同じだと思ってました...

でも、ちょっと自信も無いので間違ってたら、ご指摘お願いします。
--------
http://www.suz-lab.com

2013年8月15日木曜日

CentOS(6.4)でSecureCloud(3.5)を使ってみる(冗長構成編)

スズキです。

下記でSecureCloud(3.5)を試したのですが、アップデートされたことにより、
エージェントがディスクのマウントまでせずに、デバイスの作成までになっていることが
わかりました。
そして実は一番試したかったことなのですが、このことを利用して下記のように、
DRBDと組み合わして冗長化された暗号化ディスクを実現してみようとおもいます。


DRBDに関しては以前、下記の記事を書いており、ほぼ、そのままの手順でりようできます。
VPC上のEC2(CentOS 6.0)でDRBD(8.3)
ただし、設定ファイルは下記のようにしています。
# cat /etc/drbd.d/securecloud.res
resource securecloud {
    on drbd-1 {
        device /dev/drbd0;
        disk /dev/ed0;
        address xxx.xxx.xxx.xxx:7789;
        meta-disk internal;
    }
    on drbd-2 {
        device /dev/drbd0;
        disk /dev/ed0;
        address yyy.yyy.yyy.yyy:7789;
        meta-disk internal;
    }
}
※"disk"が暗号化ディスクのデバイス(/dev/ed0)になっています。

それでは動作確認です。

まずは一号機(drbd-1)の状況確認です。
# service drbd status
drbd driver loaded OK; device status:
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by phil@Build64R6, 2012-12-20 20:09:51
m:res          cs         ro                 ds                 p  mounted     fstype
0:securecloud  Connected  Primary/Secondary  UpToDate/UpToDate  C  /mnt/ebs/0  ext4
# ll /mnt/ebs/0/
合計 20
drwx------ 2 root root 16384  8月 15 19:16 2013 lost+found
-rw-r--r-- 1 root root     5  8月 15 19:34 2013 test.txt
プライマリでマウントされファイルも確認できています。

次に二号機(drbd-2)の状況確認です。
# service drbd status
drbd driver loaded OK; device status:
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by phil@Build64R6, 2012-12-20 20:09:51
m:res          cs         ro                 ds                 p  mounted  fstype
0:securecloud  Connected  Secondary/Primary  UpToDate/UpToDate  C
# ll /mnt/ebs/0/
合計 0
セカンダリでマウントされておらず当然ファイルも確認できません。

それでは1号機(drbd-1)のDRBDを停止します。
# service drbd stop
Stopping all DRBD resources:
.
# ll /mnt/ebs/0/
合計 0
今まで確認できていたファイルも確認できなくなりました。

この状態で2号機(drbd-2)を確認します。
# service drbd status
drbd driver loaded OK; device status:
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by phil@Build64R6, 2012-12-20 20:09:51
m:res          cs            ro                 ds                 p  mounted  fstype
0:securecloud  WFConnection  Secondary/Unknown  UpToDate/DUnknown  C
対向の一号機(drbd-1)がUnknownになっていることがわかります。

対向の一号機(drbd-1)がプライマリで無い場合は、このセカンダリがプライマリに
昇格できるので昇格します。
# drbdadm primary securecloud
# service drbd status
drbd driver loaded OK; device status:
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by phil@Build64R6, 2012-12-20 20:09:51
m:res          cs            ro               ds                 p  mounted  fstype
0:securecloud  WFConnection  Primary/Unknown  UpToDate/DUnknown  C
プライマリになったことが確認できます。

プライマリなのでマウントもできます。
# mount /dev/drbd0 /mnt/ebs/0
# ll /mnt/ebs/0/
合計 20
drwx------ 2 root root 16384  8月 15 19:16 2013 lost+found
-rw-r--r-- 1 root root     5  8月 15 19:34 2013 test.txt
マウントすると二号機(drbd-2)でも一号機(drbd-1)のときと同じファイルを
確認することができます。

というのを昔、"cryptsetup & DRBD"でもやってました...

懐かしい...
--------
http://www.suz-lab.com

Python版AWSコマンドラインインターフェースをプロキシー経由で利用する

スズキです。

結論から言いますと、環境変数(HTTP_PROXY)を設定することで簡単にできました。

まずはテスト用のプロキシーサーバ(squid)をインストール&起動します。
# yum -y install squid
...
# service squid start
...

プロキシーが正常に利用できることを確認します。
# curl --proxy localhost:3128 http://www.suz-lab.com
...

環境変数(HTTP_PROXY)を設定してコマンドラインインターフェースを実行します。
# export HTTP_PROXY=http://localhost:3129
# aws ec2 describe-instances
...
今までどおりの結果が出力されたらOKです。

"Fluentd → S3"のプロキシー経由のところも調査しないと...
--------
http://www.suz-lab.com

CentOS(6.4)でSecureCloud(3.5)を使ってみる(EBS暗号化編)

スズキです。

下記のようにインストールまでは試していたのですが、先にWindowsの方を試してしまい...
ようやく、本命のCentOS6でのEBSの暗号化です。

対象のEC2には暗号化したいEBSをアタッチしておきます。


アタッチしたEBSがSecureCloudのコンソールでも確認できます。


暗号化します。(完了までに少し時間がかかります)


"/dev/ed0"のデバイスで利用できることが確認できます。


ということで、"/dev/ed0"に対して"ext4"のファイルシステムを作成してマウントします。
# mkfs.ext4 /dev/ed0
...
# mount /dev/ed0 /mnt/ebs/0
...
# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/xvde1            6.0G  3.5G  2.2G  62% /
none                  3.4G     0  3.4G   0% /dev/shm
/dev/ed0             1008M   34M  924M   4% /mnt/ebs/0
昔はAgentがマウントまでしていましたが、アップデートされてデバイス作成までに
なったようです。

ということはDRBDと連動できそうなので、次は冗長化に挑戦してみます!
--------
http://www.suz-lab.com

2013年8月9日金曜日

CentOS6(EC2)にServerProtectをインストール

スズキです。

下記のWIndowsに続いて、今度はLinuxです。
Windows(EC2)にServerProtectをインストール
AMIは次のものを利用しました。


事前に下記をインストールしておく必要があります。
# yum -y install \
glibc.i686 \
zlib.i686 \
compat-libstdc++-296.i686 \
libuuid.i686 \
nss-softokn-freebl.i686 \
libgcc.i686
...

ServerProtectはこちらからダウンロードできます。


ダウンロードしたら下記のようにインストールします。
(Activationコード(SP-XXXXX...)も予め取得しておきます)
# curl -OL http://files.trendmicro.com/products/splx/SPLX30_CentOS6.tgz
...
# tar xvzf SPLX30_CentOS6.tgz
SProtectLinux-3.0.bin
# ./SProtectLinux-3.0.bin -f RedHat x86_64 -n -s -S SP-XXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX -w no
Installing ServerProtect for Linux:
Unpacking...
Installing rpm file...
準備中...                ########################################### [100%]
   1:SProtectLinux          ########################################### [100%]
Activation successful.

Warning!!!
ServerProtect services will not be added into system initial services!
Please use "/sbin/chkconfig --level 345 splx on" to add splx into system initial services.
Instead of commands, you can execute "/opt/TrendMicro/SProtectLinux/SPLX.util/add_splx_service".

ServerProtect for Linux installation completed.

リアルタイムスキャンができるようにカーネルフックモジュール(KHM)も導入します。

カーネルのバージョンが必要なので確認しておきます。
# uname -a
Linux ip-10-120-24-215 2.6.32-358.11.1.el6.x86_64 #1 SMP Wed Jun 12 03:34:52 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

カーネルフックモジュール(KHM)はこちらからダウンロードできます。

導入は下記の通りです。


導入は下記の通りです。
# cd /opt/TrendMicro/SProtectLinux/SPLX.module/
# curl -OL http://files.trendmicro.com/products/kernel/splx_kernel_module-3.0.1.0010.CentOS6_2.6.32-358.11.1.el6.x86_64.x86_64.tar.gz
...
# tar xvzf splx_kernel_module-3.0.1.0010.CentOS6_2.6.32-358.11.1.el6.x86_64.x86_64.tar.gz
splxmod-2.6.32-358.11.1.el6.x86_64.x86_64.o
splxmod-2.6.32-358.11.1.el6.x86_64.x86_64.o.md5

すべてが準備出来たら、実際にServerProtectを(自動)起動します。
# chkconfig splx on
# /etc/init.d/splx start
Starting ServerProtect for Linux:
Checking configuration file:                               [  OK  ]
Starting splxcore:
Starting Entity:                                           [  OK  ]
Loading splx kernel module:                                [  OK  ]
Starting vsapiapp:                                         [  OK  ]
ServerProtect for Linux core started.
                                                           [  OK  ]
Starting splxhttpd:
Starting splxhttpd:                                        [  OK  ]
ServerProtect for Linux httpd started.
                                                           [  OK  ]
ServerProtect for Linux started.
※カーネルフックモジュール(KHM)も有効なことが確認できます。

すると下記よりServerProtectの管理画面にアクセスできます。
(デフォルトはパスワード無しで"Log On"できます)
http://xxx.xxx.xxx.xxx:14942/

ログインすると下記のように概要を確認することができます。
(リアルタイムスキャンが有効になっていることも確認できます)


最後に下記で紹介した方法でテストしてみます。
EICARテストファイルでServerProtectのリアルタイムスキャンをテスト
実際には下記のようにダウンロードしてもファイルが配置されません。
# ls
SPLX30_CentOS6.tgz  SProtectLinux-3.0.bin
# curl -OL http://www.eicar.org/download/eicar.com.txt
...
# ls
SPLX30_CentOS6.tgz  SProtectLinux-3.0.bin
そしてコンソールのログには次のように記録されています。


これで、いろいろと楽になるはず。。。
--------
http://www.suz-lab.com

2013年8月7日水曜日

Vyatta(Core 6.6 R1)のクラスタリング機能の調査

スズキです。

下記資料の3章(Clustering)、P.174を参考に試してみました。
"Vyatta System High Availability REFERENCE GUIDE"
その前に、クラスタリングするVyattaでホスト名が重複しないように、
変更しておきます。("set system host-name ..."です)
vyatta@vyatta# set system host-name vyatta-1
[edit]
vyatta@vyatta# commit
[ system host-name vyatta-1 ]
Stopping enhanced syslogd: rsyslogd.
Starting enhanced syslogd: rsyslogd.

[edit]
vyatta@vyatta# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyatta@vyatta# run reboot
Proceed with reboot? (Yes/No) [No] Yes

Broadcast message from root@vyatta-1 (pts/0) (Tue Aug  6 03:18:21 2013):

The system is going down for reboot NOW!
[edit]
再度ログインしてプロンプトを確認すると、ホスト名が変更されていることがわかります。
$ ssh -i suz-lab_ap-northeast-1.pem -l vyatta xxx.xxx.xxx.xxx
Linux vyatta-1 3.3.8-1-amd64-vyatta #1 SMP Wed Mar 13 10:35:28 PDT 2013 x86_64
Welcome to Vyatta.
This system is open-source software. The exact distribution terms for
each module comprising the full system are described in the individual
files in /usr/share/doc/*/copyright.
Last login: Tue Aug  6 03:08:22 2013 from xxx.xxx.xxx.xxx
vyatta@vyatta-1:~$

次にファイルオーバー時に実行するテストスクリプトを用意しておきます。
$ sudo su -
# cd /etc/init.d/
# ls -l failover
-rwxr-xr-x 1 root root 32 Aug  7 03:57 failover
# cat failover
#!/bin/sh
date >> /tmp/test.txt
# ./failover
# cat /tmp/test.txt
Wed Aug  7 04:00:03 GMT 2013

そしてクラスタリングの設定です。
$ configure
[edit]
# set cluster interface eth0
[edit]
# set cluster pre-shared-secret secret
[edit]
# set cluster group aws
[edit]
# set cluster group aws primary   vyatta-1
[edit]
# set cluster group aws secondary vyatta-2
[edit]
# set cluster group aws service failover
[edit]
# commit
[ cluster ]
Stopping clustering... Done
Starting clustering... Done
[edit]
# save
Saving configuration to '/config/config.boot'...
Done
[edit]

するとHeartbeatが起動することが確認できます。
つまりVyattaのクラスタリング機能の実体はHeartbeatということになります。
$ ps ax | grep heartbeat
 3102 ?        SLs    0:00 heartbeat: master control process
 3115 ?        SL     0:00 heartbeat: FIFO reader
 3116 ?        SL     0:00 heartbeat: write: mcast eth0
 3117 ?        SL     0:00 heartbeat: read: mcast eth0
 3321 pts/2    S+     0:00 grep heartbeat

上記のテストスクリプトも適当に起動されてました。
$ cat /tmp/test.txt
Wed Aug  7 04:00:03 GMT 2013
Wed Aug  7 04:22:58 GMT 2013
Wed Aug  7 04:22:58 GMT 2013
Wed Aug  7 04:23:29 GMT 2013
Wed Aug  7 04:23:29 GMT 2013
Wed Aug  7 04:23:29 GMT 2013

実体であるHeartbeatの設定ファイルは次の通りです。
$ cat /etc/ha.d/ha.cf
keepalive 5000ms
deadtime 20
warntime 10000ms
initdead 30000ms
deadping 20000ms
logfacility daemon
mcast eth0 239.251.252.253 694 1 0
auto_failback off
node vyatta-1 vyatta-2
$ cat /etc/ha.d/haresources
vyatta-1  failover

ということで、下記でインストールしたAWSのCLIを利用して、EIPの付けかえと、
ルーティングテーブルを変更するフェイルオーバースクリプトを用意して、
VyattaにPython版AWSコマンドラインインターフェース(CLI)をインストールしてみた
次のMLを参考に相互監視をユニキャストでできれば、
Re: [Vyatta-users] Cluster heartbeat / change to ucast?
下記のようにVPC上のVyatta(on EC2)の冗長化も実現できるかもしれません。
"High Availability NAT"の作成(CentOS6)

次は、実際に実験してみます。。。
--------
http://www.suz-lab.com

VyattaにPython版AWSコマンドラインインターフェース(CLI)をインストールしてみた

スズキです。

下記のVyatta("@j3tm0t0"さん作)に

次の"Python版AWSコマンドラインインターフェース(CLI)"をインストールしてみました。


ただしVyatta内から".egg / .zip / .tar.gz"のファイルがダウンロードできなかったので、
適当なマシンで下記のよううにダウンロードして、Vyattaにアップロードする形で、
インストールしました。
# curl -OL https://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
# curl -OL https://pypi.python.org/packages/source/a/awscli/awscli-0.13.2.tar.gz
# curl -OL https://pypi.python.org/packages/source/d/docutils/docutils-0.11.tar.gz
# curl -OL https://pypi.python.org/packages/source/a/argparse/argparse-1.1.zip
# curl -OL https://pypi.python.org/packages/source/c/colorama/colorama-0.2.5.tar.gz
# curl -OL https://pypi.python.org/packages/source/s/six/six-1.3.0.tar.gz
# curl -OL https://pypi.python.org/packages/source/b/bcdoc/bcdoc-0.5.0.tar.gz
# curl -OL https://pypi.python.org/packages/source/b/botocore/botocore-0.13.1.tar.gz
# curl -OL https://pypi.python.org/packages/source/s/simplejson/simplejson-3.3.0.tar.gz
# curl -OL https://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz
# curl -OL https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.1.tar.gz
# curl -OL https://pypi.python.org/packages/source/j/jmespath/jmespath-0.0.2.tar.gz
# curl -OL https://pypi.python.org/packages/source/p/ply/ply-3.4.tar.gz
# curl -OL https://pypi.python.org/packages/source/r/requests/requests-1.2.0.tar.gz
Vyattaへのアップロードは下記のようになっています。
$ sudo su -
# cd /home/vyatta/
# ls -1
argparse-1.1.zip
awscli-0.13.2.tar.gz
bcdoc-0.5.0.tar.gz
botocore-0.13.1.tar.gz
colorama-0.2.5.tar.gz
docutils-0.11.tar.gz
jmespath-0.0.2.tar.gz
ordereddict-1.1.tar.gz
ply-3.4.tar.gz
python-dateutil-2.1.tar.gz
requests-1.2.0.tar.gz
setuptools-0.6c11-py2.6.egg
simplejson-3.3.0.tar.gz
six-1.3.0.tar.gz
まずは"easy_install"を利用できるようにします。
# sh.distrib setuptools-0.6c11-py2.6.egg
...
そして、必要なパッケージを含め"awscli"までインストールします。
# easy_install docutils-0.11.tar.gz
...
# easy_install argparse-1.1.zip
...
# easy_install colorama-0.2.5.tar.gz
...
# easy_install six-1.3.0.tar.gz
...
# easy_install bcdoc-0.5.0.tar.gz
...
# easy_install simplejson-3.3.0.tar.gz
...
# easy_install ordereddict-1.1.tar.gz
...
# easy_install python-dateutil-2.1.tar.gz
...
# easy_install ply-3.4.tar.gz
...
# easy_install jmespath-0.0.2.tar.gz
...
# easy_install requests-1.2.0.tar.gz
...
# easy_install botocore-0.13.1.tar.gz
...
# easy_install awscli-0.13.2.tar.gz
...
シェル上で補完ができるように下記も設定しておきます。(下記参照)
CentOS6でのPython版AWSコマンドラインツールの環境設定
(/etc/profile.d/awscli.sh)
# cat /etc/profile.d/awscli.sh
if [ -x /usr/local/bin/aws ]; then
    AZ=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
    export AWS_DEFAULT_REGION=`echo $AZ | cut -c 1-$((${#AZ} - 1))`
    complete -C aws_completer aws
fi
最後にVyattaにログインしなおすと下記のようにタブで補完しながらAWS(CLI)の
コマンドが実行できます。("IAM Role"使ってます)
$ aws ec2 describe-instances
...

次はVyattaのHeartbeat(cluster)の調査です。
--------
http://www.suz-lab.com

2013年8月5日月曜日

"Vyatta on EC2"でCloudHubパターン(CDP)

スズキです。

下記のようにVyattaでVPC間VPNまで成功したので、
今度はCDPCloudHubパターンを試してみました。


図でかくと、こんな感じでしょうか?


VPCをもう一つVyattaを利用してVPN接続するわけですが、CloudHubを行うには、
BGPのAS番号が重複しないようにする必要があります。


あとは、下記と同じ方法で"VPN Connection"をもう一つ有効にします。
"Vyatta on EC2"でVPC間VPN

HubとなるVPCの"Route Propagation"が設定されている"Route Table"を確認すると、
VPN接続した二つのVPCの経路情報が反映していることがわかります。


ちなみにHubにつなぐVPCのVyattaが所属するサブネットの"Route Table"は次の通りです。


疎通させる両端のEC2インスタンス(10.1.1.5と10.2.1.5)に付与している
セキュリティグループは下記のようにしています。
("10.X.0.0/16"のVPCがCloudHubにVPN接続することを想定しています)


この状態で接続確認(10.2.1.5 → 10.1.1.5)してみると、無事、疎通することができました。
[root@ip-10-2-1-5 ~]# ping 10.1.1.5
PING 10.1.1.5 (10.1.1.5) 56(84) bytes of data.
64 bytes from 10.1.1.5: icmp_seq=1 ttl=61 time=7.14 ms
64 bytes from 10.1.1.5: icmp_seq=2 ttl=61 time=6.39 ms
64 bytes from 10.1.1.5: icmp_seq=3 ttl=61 time=6.36 ms
64 bytes from 10.1.1.5: icmp_seq=4 ttl=61 time=6.41 ms
64 bytes from 10.1.1.5: icmp_seq=5 ttl=61 time=6.38 ms

次は冗長構成。(中身はHeartbeatっぽいけど...)
--------
http://www.suz-lab.com

2013年8月2日金曜日

グローバルサインの証明書でCloudFrontの独自SSL証明書を利用してみた

スズキです。

ちょっと時間が空きましたが、下記のようにCloudFrontの独自SSL証明書を利用する
準備ができたので、今回は、ようやくSSL証明書のインストールです。
時間が空いてしまった理由は、こちらから独自SSL証明書の申請を行い、
許可を待っていたからです。


許可メールが届いたら、証明書のアップロードです。
今回はグローバルサインの証明書(クイック認証SSL)を使いました。

ちなみに、グローバルサインの証明書は同一コモンネームであれば、
1ライセンスの購入でOKなので、CloudFrontの独自SSL証明書の機能に利用する場合も
1ライセンスの購入でOKとなります。


証明書のアップロードはPython版AWSコマンドラインツールを利用しました。
# aws iam upload-server-certificate \
> --server-certificate-name ssl.suz-lab.com \
> --path /cloudfront/ \
> --private-key       "`cat ssl.suz-lab.com.key`" \
> --certificate-body  "`cat ssl.suz-lab.com.crt`" \
> --certificate-chain "`cat ca.crt`"
{
    "ServerCertificateMetadata": {
        "Path": "/cloudfront/",
        "ServerCertificateName": "ssl.suz-lab.com",
        "ServerCertificateId": "XXXXXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::000000000000:server-certificate/cloudfront/ssl.suz-lab.com",
        "UploadDate": "2013-08-02T12:53:09.538Z"
    },
    "ResponseMetadata": {
        "RequestId": "00000000-0000-0000-0000-000000000000"
    }
}
※CloudFrontで利用するbには"--path /cloudfront/"が必要です。

そして、実際にAWSコンソールでCloudFrontにアップロードした証明書を適用します。



※"SSL Certificate"にアップロードした"ssl.suz-lab.com"が選択できるようになっています。

最後に再度ブラウザで確認すると、今回は証明書が有効になり、問題なくページが
閲覧できることが確認できます。


次は、さらにマルチオリジン...
--------
http://www.suz-lab.com

ServerProtect(Windows)からウィルス検知などをメール通知

スズキです。

下記のようにServerProtectの導入をしてきましたが、


最後はウィルスを検知したときのメール通知です。

といっても下記のようにコンソールから設定するだけです。
("Mail Server"はSMTPサーバ機能が有効な前提で"localhost"です)


この状態で再度、EICARテストファイルをダウンロードしてメールが通知されたら
OKです。

同じことをCentOSでもやっておこう。。。
--------
http://www.suz-lab.com

"Windows 2008 R2 SP1"(EC2)でSMTPサーバを立ち上げる

スズキです。

下記のようにWindowsのウィルス対策とリアルタイムスキャンのテストまでできたので、
今度はウイルスの検知の通知をメールで行えるようにしてみるのですが、
その前にSMTPサーバの構築です。。。

SMTPサーバはサーバマネージャーから機能を追加することで利用可能です。
(テスト用のTelnetクライアントも有効にしています)



この状態でSMTPの確認してみます。
C:\Users\Administrator>telnet localhost 25
220 WIN-XXXXXXXXXXX Microsoft ESMTP MAIL Service, Version: 7.5.7601.17514 ready
at  Wed, 31 Jul 2013 13:14:39 +0000
HELO localhost
250 WIN-XXXXXXXXXXX Hello [127.0.0.1]
MAIL FROM: suzuki@suz-lab.com
250 2.1.0 suzuki@suz-lab.com....Sender OK
RCPT TO: suzuki@suz-lab.com
550 5.7.1 Unable to relay for suzuki@suz-lab.com
リレーができずに送信できませんでした。

ということでリレーの設定です。






この状態で再度SMTPのテストを行ってみます。
C:\Users\Administrator>telnet localhost 25
220 WIN-XXXXXXXXXXX Microsoft ESMTP MAIL Service, Version: 7.5.7601.17514 ready
at  Wed, 31 Jul 2013 13:33:55 +0000
HELO localhost
250 WIN-XXXXXXXXXXX Hello [127.0.0.1]
MAIL FROM: suzuki@suz-lab.com
250 2.1.0 suzuki@suz-lab.com....Sender OK
RCPT TO: suzuki@suz-lab.com
250 2.1.5 suzuki@suz-lab.com
DATA
354 Start mail input; end with .
SUBJECT: TEST

TEST
.
250 2.6.0  Queued mail for delivery
今度は無事に送信できました。

ということで、ようやくServerProtectのウイルスの検知のメール通知設定です。
--------
http://www.suz-lab.com