ブログ?

もうだめぽ

Vyatta,NetScreenでの拠点間VPN設定(前編)

Vyatta 6.3とJuniper NetScreen 5GTを用いて拠点間VPN設定をしてみます。

Vyatta VYATTA CORE 6.3 - VC6.3-2011.07.21
Juniper NetScreen 5GT ScreenOS 5.4.0r5.0

NetScreenの機種、バージョンが古いですが現行バージョンでも基本的には同じ設定でいけるはずです。
ネットワーク構成は下記の通りとしました。

f:id:unyu1979:20120125180313j:plain

初期設定

まず、コンソール経由でVyattaへアクセスし、IPアドレス、ルーティング設定とSSHの有効化をします。

vyatta@vyatta:~$ configure  
[edit]
vyatta@vyatta# set interfaces ethernet eth0 address 10.0.0.254/24
vyatta@vyatta# set interfaces ethernet eth1 address 10.0.100.1/24
vyatta@vyatta# set protocols static route 0.0.0.0/0 next-hop 10.0.0.1
vyatta@vyatta# set service ssh
vyatta@vyatta# top
vyatta@vyatta# commit

以降はSSH経由で設定します。

VPN設定

まず外部向けのインタフェースでVPNを有効にします。

vyatta@vyatta# set vpn ipsec ipsec-interfaces interface eth0

PHASE 1設定。

vyatta@vyatta# edit vpn ipsec ike-group ns-ike proposal 1 
vyatta@vyatta# set lifetime 28800
vyatta@vyatta# set proposal 1 dh-group 2
vyatta@vyatta# set proposal 1 encryption aes128
vyatta@vyatta# set proposal 1 hash sha1
vyatta@vyatta# top

PHASE 2設定

vyatta@vyatta# edit vpn ipsec esp-group ns-esp 
vyatta@vyatta# set lifetime 3600 
vyatta@vyatta# set pfs enable 
vyatta@vyatta# set proposal 1 encryption aes128 
vyatta@vyatta# set proposal 1 hash sha1 
vyatta@vyatta# top

最後にpreshared keyなどを設定して終わり。

vyatta@vyatta# edit vpn ipsec site-to-site peer 192.168.0.254
vyatta@vyatta# set authentication mode pre-shared-secret 
vyatta@vyatta# set authentication pre-shared-secret 'presharedkey'
vyatta@vyatta# set ike-group ns-ike 
vyatta@vyatta# set local-ip 10.0.0.254
vyatta@vyatta# set tunnel 1 esp-group ns-esp 
vyatta@vyatta# set tunnel 1 local subnet 10.0.100.0/24
vyatta@vyatta# set tunnel 1 remote subnet 192.168.1.0/24
vyatta@vyatta# commit
vyatta@vyatta# save

VPN部分のコンフィグはこんな感じになります。

vyatta@vyatta# show vpn ipsec 
 esp-group ns-esp {
     lifetime 3600
     pfs enable
     proposal 1 {
         encryption aes128
         hash sha1
     }
 }
 ike-group ns-ike {
     lifetime 28800
     proposal 1 {
         dh-group 2
         encryption aes128
         hash sha1
     }
 }
 ipsec-interfaces {
     interface eth0
 }
 site-to-site {
     peer 192.168.0.254 {
         authentication {
             mode pre-shared-secret
             pre-shared-secret presharedkey
         }
         ike-group ns-ike
         local-ip 10.0.0.254
         tunnel 1 {
             esp-group ns-esp
             local {
                 subnet 10.0.100.0/24
             }
             remote {
                 subnet 192.168.1.0/24
             }
         }
     }
 }

APIで遊んでみる

さくらのクラウドのAPIが公開されているので遊んでみる。
サンプルのコードはPerlだけど、勉強のためRubyに。

アクセストークンなどはコントロールパネルの「設定」=>「APIキー管理」で取得したものを使う。

#!/usr/bin/env ruby

require 'net/https'
require 'uri'
require 'json'

access_token = "XXXXXXXXXX"
access_token_secret = "XXXXXXXXXXXXXXXXXXXXX"
uri = URI.parse("https://secure.sakura.ad.jp/cloud/api/cloud/0.2/server/")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

body = http.start { |http|
  req = Net::HTTP::Get.new(uri.path)
  req.basic_auth(access_token, access_token_secret)
  http.request(req).body
}

puts JSON.pretty_generate(JSON.parse(body))

実行するとこんなかんじ。

{
  "From": 0,
  "Count": 2,
  "Total": 2,
  "Servers": [
    {
      "Index": 0,
      "ID": "XXXXXXXX",
      "Name": "Fedora",
      "HostName": "localhost",
      "Description": "Fedora15",
      "CreatedAt": "2011-11-25T10:28:31+09:00",
      "Icon": {
        "ID": "XXXXXXXXXXX",
        "URL": "https://secure.sakura.ad.jp/cloud/api/cloud/0.2/icon/112300511983.png",
        "Name": "Fedora",
        "Scope": "shared"
      },
      "ServerPlan": {
        "ID": 1,
        "Name": "プラン1",
        "CPU": 1,
        "MemoryMB": 2048,
        "ServiceClass": "cloud/plan/1"
      },......

あとでちゃんとしたものを作っておこう。

NDOUtilsのインストール

NDOUtilsではNagiosのデータをデータベースに格納して管理することができます。
詳細は公式サイトを参照してください。
http://exchange.nagios.org/directory/Addons/Database-Backends/NDOUtils/details
下記はサイトからの引用です。

NDOUtils allows you to export current and historical data from one or more Nagios instances to a MySQL database. Several community addons use this as one of their data sources. NDOUtils consists of a standalone daemon, a Nagios event broker, and several helper utilities.

コンパイル、インストール

$ curl http://jaist.dl.sourceforge.net/project/nagios/ndoutils-1.x/ndoutils-1.4b9/ndoutils-1.4b9.tar.gz | tar zxv
$ cd ndoutils-1.4b9
$ ./configure

*** Configuration summary for ndoutils 1.4b9 10-27-2009 ***:

 General Options:
 -------------------------
 NDO2DB user:    nagios
 NDO2DB group:   nagios


Review the options above for accuracy.  If they look okay,
type 'make' to compile the NDO utilities.

$ make
$ sudo make install

  Hint: NDOUtils Installation against Nagios v3.x
  completed.

  If you want to install NDOUtils for Nagios v2.x
  please type  'make install-2x


  Next step should be the database initialization/upgrade
  cd into the db/ directory and either:
     ./installdb  (for a new installation) or:
     ./upgradedb  (for an existing one)

make[1]: ディレクトリ `/usr/local/src/ndoutils-1.4b9/src' から出ます

Main NDOUtils components installed

データベース作成

次にNDOUtilsで利用するデータベース、ユーザ、パスワードを設定します。(いずれもndoutilsとしました)
READMEには下記の記述があるため権限は制限しました。

2. Create a username/password that has at least the following privileges for the database:

SELECT, INSERT, UPDATE, DELETE

mysql> CREATE DATABASE ndoutils;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT SELECT,INSERT,UPDATE,DELETE
    -> ON ndoutils.*
    -> TO ndoutils@localhost
    -> IDENTIFIED BY 'ndoutils';
Query OK, 0 rows affected (0.01 sec)

次にテーブルを作成します。
failedと出ていますが気にしないでおきます :-)

$ cd db
$ ./installdb -u root -p "" -h localhost -d ndoutils
DBD::mysql::db do failed: Table 'ndoutils.nagios_dbversion' doesn't exist at ./installdb line 51.
** Creating tables for version 1.4b9
     Using mysql.sql for installation...
** Updating table nagios_dbversi

モジュール、コンフィグファイルのコピー

broker moduleのコピー。

$ sudo cp src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
$ sudo cp config/ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg
$ sudo chown nagios:nagios /usr/local/nagios/etc/ndomod.cfg

nagiosがbroker moduleを読み込むように設定。

$ sudi vi /usr/local/nagios/etc/ndomod.cfg
broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg 

ndo2dbのコピー。

$ sudo cp src/ndo2db-3x /usr/local/nagios/bin/ndo2db
$ sudo cp config/ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
$ sudo chown nagios:nagios /usr/local/nagios/etc/ndo2db.cfg

ndo2dbの設定を先ほど作成したデータベース情報に変更。

$ sudo vi /usr/local/nagios/etc/ndo2db.cfg
db_name=ndoutils
db_user=ndoutils
db_pass=ndoutils

ndo2dbデーモンの起動設定。

$ sudo cp daemon-init /etc/init.d/ndoutils
$ sudo chmod 755 /etc/init.d/ndoutils
$ sudo chkconfig ndoutils on

最後にndo2db,nagiosを起動して終わりです。

$ sudo service ndoutils start
$ sudo service nagios restart

動作確認

正常に動作していればnagiosのログ(/usr/local/nagios/var/nagios.log)に
こんな感じで表示されているはずです。

[1326691682] Nagios 3.3.1 starting... (PID=14465)
[1326691682] Local time is Mon Jan 16 14:28:02 JST 2012
[1326691682] LOG VERSION: 2.0
[1326691682] ndomod: NDOMOD 1.4b9 (10-27-2009) Copyright (c) 2009 Nagios Core Development Team and Community Contributors
[1326691682] ndomod: Successfully connected to data sink.  0 queued items to flush.
[1326691682] Event broker module '/usr/local/nagios/bin/ndomod.o' initialized successfully.
[1326691682] Finished daemonizing... (New PID=14469)


また、MySQLにもデータが格納されます。

mysql> SELECT * FROM ndoutils.nagios_hosts\G
*************************** 1. row ***************************
                          host_id: 2
                      instance_id: 1
                      config_type: 1
                   host_object_id: 1
                            alias: oreore.dtdns.net
                     display_name: oreore.dtdns.net
                          address: 127.0.0.1
          check_command_object_id: 13
               check_command_args: 
   eventhandler_command_object_id: 0
        eventhandler_command_args: 
notification_timeperiod_object_id: 43
       check_timeperiod_object_id: 2
       failure_prediction_options: 
                   check_interval: 1
                   retry_interval: 1
               max_check_attempts: 10
         first_notification_delay: 0
            notification_interval: 120
                   notify_on_down: 1
            notify_on_unreachable: 1
               notify_on_recovery: 1
               notify_on_flapping: 0
               notify_on_downtime: 0
                      stalk_on_up: 0
                    stalk_on_down: 0
             stalk_on_unreachable: 0
           flap_detection_enabled: 1
             flap_detection_on_up: 1
           flap_detection_on_down: 1
    flap_detection_on_unreachable: 1
               low_flap_threshold: 0
              high_flap_threshold: 0
         process_performance_data: 1
         freshness_checks_enabled: 0
              freshness_threshold: 0
           passive_checks_enabled: 1
            event_handler_enabled: 1
            active_checks_enabled: 1
        retain_status_information: 1
     retain_nonstatus_information: 1
            notifications_enabled: 1
                 obsess_over_host: 1
       failure_prediction_enabled: 1
                            notes: 
                        notes_url: 
                       action_url: 
                       icon_image: 
                   icon_image_alt: 
                       vrml_image: 
                  statusmap_image: 
                   have_2d_coords: 0
                             x_2d: -1
                             y_2d: 0
                   have_3d_coords: 0
                             x_3d: 0
                             y_3d: 0
                             z_3d: 0
1 row in set (0.00 sec)

nginx + Nagios のインストール(後編)

前編に続き、今回はNagiosのWebコンソール表示に必要な設定をしていきます。
configureスクリプトを実行した時に表示されていたように、/nagiosへのエイリアスを設定します。

これです。

 Web Interface Options:
 ------------------------
                 HTML URL:  http://localhost/nagios/
                  CGI URL:  http://localhost/nagios/cgi-bin/
 Traceroute (used by WAP):  /bin/traceroute

nginxのコンフィグに下記の通り追記します。

$ sudo vi /etc/nginx/conf.d/default.conf

server {
....
....
....
  location /nagios {
    alias /usr/local/nagios/share;
    index index.php;
    auth_basic            "Nagios Access";
    auth_basic_user_file  /usr/local/nagios/etc/htpasswd.users;
  }
}

Basic認証設定

Basic認証のパスワードファイルを作成します。
なお、ここで設定したユーザIDについてはWebコンソールでのアクセス制御に用います。

# sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password: 
Re-type new password: 
Adding password for user nagiosadmin

ちなみに、ディストリビューションのバージョンによってはデフォルトでCryptを使った暗号化がされるので気をつけてください。
長いパスワードを設定しても9文字目からは効果がありません。
※Fedora16ではMD5がデフォルトになっているので問題ありません

PHP関連の設定

nginxはデフォルトのままではPHPを処理してくれないので、php-fpmを使って設定してみます。
user, groupがapacheになっているのでnginxへと書き換えます。

$ sudo vi /etc/php-fpm.d/www.conf 

user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

次にnginxの設定も変更します。

$ sudo vi /etc/nginx/conf.d/default.conf

  location ~ ^/nagios/(.*\.php)$ {
    alias /usr/local/nagios/share/$1;
    include /etc/nginx/fastcgi.conf;
    fastcgi_pass 127.0.0.1:9000;
    auth_basic            "Nagios Access";
    auth_basic_user_file  /usr/local/nagios/etc/htpasswd.users;
  }

後はphp-fpmの起動、nginxの再起動を実施します。

$ sudo systemctl start php-fpm.service
$ sudo systemctl restart nginx.service

ブラウザで http://IPアドレス/nagios/ へアクセスするとWebコンソールが表示されるようになります。
f:id:unyu1979:20120113120818j:plain

CGI関連の設定

CGIの実行にはspawn-fcgiとfcgiwrapを用います。

まずはfcgiwrapをインストールします。

$ git clone git://github.com/gnosek/fcgiwrap.git
$ cd fcgiwrap
$ autoreconf -i
$ ./configure && make && sudo make install

続いてspawn-fcgiの設定をします。

$ sudo vi /etc/sysconfig/spawn-fcgi

FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
FCGI_EXTRA_OPTIONS="-M 0700"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

spawn-fcgiを起動して

$ sudo systemctl start spawn-fcgi.service

nginxに設定を追加して

$ sudo vi /etc/nginx/conf.d/default.conf

  location ~ ^/nagios/(.*\.cgi)$ {
    root /usr/local/nagios/sbin/;
    rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
    fastcgi_param AUTH_USER $remote_user;
    fastcgi_param REMOTE_USER $remote_user;    
    include /etc/nginx/fastcgi.conf;
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
    auth_basic            "Nagios Access";
    auth_basic_user_file  /usr/local/nagios/etc/htpasswd.users;
  }  

nginxを再起動して終わり。

$ sudo systemctl restart nginx.service

これでひと通りの設定が終わりました。

f:id:unyu1979:20120113124050j:plain

自動起動設定

最後にnginx, php-fpm, spawn-fcgiの自動起動設定をします。

$ sudo systemctl enable nginx.service php-fpm.service spawn-fcgi.service
$ sudo chkconfig nagios on

nagiosのみchkconfigを用いていますが、他もchkconfigで問題ありません。
native serviceではないということで結局はchkconfigが実行されます。

nginx.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig nginx on

これでnginx + Nagios を用いた監視サーバの構築ができました。
今後は監視で取得したデータのグラフ化やNagios設定のカスタマイズ、監視設定等について書いていこうと思います。

はーどでぃすく

とあるサーバのハードディスクの容量が7.999ZBに到達した。
ディスク周りの故障があってパーツ交換待ちなんだけど、今日はファイルシステムがread-onlyになって色々おかしくなった。

OS再起動で復旧したけど不安でしかたないな('A`)

Adapter #0

Enclosure Device ID: 32
Slot Number: 0
Device Id: 0
Sequence Number: 2
Media Error Count: 0
Other Error Count: 0
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
PD Type: SAS
Raw Size: 0 KB [0x0 Sectors]
Non Coerced Size: 7.999 ZB [0xfffffffffff00000 Sectors]
Coerced Size: 0 KB [0x0 Sectors]
Firmware state: Unconfigured(bad)
SAS Address(0): 0x5000c5000d2df3b9
SAS Address(1): 0x0
Connected Port Number: 0(path0) 
Inquiry Data: SEAGATE ST3500620SS     XXXXXXXXXXXXXXX            
FDE Capable: Not Capable
FDE Enable: Disable
Secured: Unsecured
Locked: Unlocked
Foreign State: None 
Device Speed: Unknown 
Link Speed: Unknown

Matchディレクティブを使って制御する

仕事で使う機会があったので書いておく。
OpenSSH 4.4以降ではMatchディレクティブを使ってユーザ、グループ、ホスト名、IPアドレスに応じて設定を再定義することが可能。

Matchディレクティブはグローバルの設定よりも優先され、利用できるオプションは下記の通り。

  • AllowAgentForwarding
  • AllowTcpForwarding
  • AuthorizedKeysFile
  • AuthorizedPrincipalsFile
  • BannerChrootDirectory
  • ForceCommand
  • GatewayPorts
  • GSSAPIAuthentication
  • HostbasedAuthentication
  • HostbasedUsesNameFromPacketOnly
  • KbdInteractiveAuthentication
  • KerberosAuthentication
  • MaxAuthTries
  • MaxSessions
  • PasswordAuthentication
  • PermitEmptyPasswords
  • PermitOpen
  • PermitRootLogin
  • PermitTunnel
  • PubkeyAuthentication
  • RhostsRSAAuthentication
  • RSAAuthentication
  • X11DisplayOffset
  • X11Forwarding
  • X11UseLocalHost

設定例

PasswordAuthentication no
X11Forwarding no
Match User hoge
  PasswordAuthentication yes

Match Address 192.168.1.0/24
  X11Forwarding yes

詳しくはマニュアルで。
http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config&sektion=5

はじめてのはてなブログ

はてなブログのアカウントを入手できたので記念書き込み。

いままでは自分でWordpressやら何やらを入れて公開していたんだけど、メンテナンスが面倒なので切り替えてみようと思う。