mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

NSCodingでIntをdecodeする際にdecodeObjectじゃなくてdecodeIntegerを使う

    // MARK: Properties
    var hoge: String
    var piyo: Int
    
    // MARK: Types
    struct PropertyKey {
        static let hogeKey = "hoge"
        static let piyoKey = "piyo"
    }
    
    // MARK: Initialization
    init?(hoge: String, piyo: Int) {
        self.hoge = hoge
        self.piyo = piyo
        
        super.init()
        
        if hoge.isEmpty || piyo < 0 {
            return nil
        }
    }
    
    // MARK: NSCoding
    func encode(with aCoder: NSCoder) {
        aCoder.encode(hoge, forKey: PropertyKey.hogeKey)
        aCoder.encode(piyo, forKey: PropertyKey.piyoKey)
    }
    
    required convenience init?(coder aDecoder: NSCoder) {
        let hoge = aDecoder.decodeObject(forKey: PropertyKey.hogeKey) as! String
        let piyo = aDecoder.decodeObject(forKey: PropertyKey.piyoKey) as! Int
        
        self.init(hoge: hoge, piyo: piyo)
    }

とか書いてたら、Intのdecodeのところでthread 1 exc_bad_instruction(code=exc_i386_invop subcode=0x0)が出て落ちた。なにやらnilが返ってきてたぽくて、上記エラーになったみたい?
as! Intas? Int ?? 0とかすると0が返ってきてしまう。入れるところまでは値あるので、なんでかなと思っていじってたら、decodeObjectdecodeIntegerに変えたら正しい値が返ってきた。Intの扱いで普通にdecodeObjectでもできた部分もあったのでなんでだろ。備忘録。

elasticsearchで、marvel, shield, licenseをremoveする

入れていたmarvel, shieldなどの有料プラグインを外す。(有料プラン1node辺りめちゃ高かったw)

$ /usr/share/elasticsearch/bin/plugin remove shiled
$ /usr/share/elasticsearch/bin/plugin remove marvel
$ /usr/share/elasticsearch/bin/plugin remove license

shield関連で入れていた設定を解除する。

// ssl周りの設定を解除
$ vim /opt/kibana/config/kibana.yml

まぁ、httpsだけに制限しててもいいっちゃあいいかも。

$ service elasticesearch restart
$ service kibana restart

アクセスをオフィスのwifiに限定して、外からはVPNでアクセスできるようにする

オフィスのwifiに接続した状態で、

// 今接続してるグローバルIPを確認
$ curl httpbin.org/ip

サーバーのiptablesの設定を変更して、オフィスwifiのアクセスだけアクセスを許可する。適当にIP=123.456.789.12とする。

// iptablesの設定を編集する
$ vim /etc/sysconfig/iptables
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [34:3064]
-A INPUT -s 123.456.789.12 -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 123.456.789.12 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 123.456.789.12 -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state NEW -j REJECT --reject-with tcp-reset
COMMIT

$ service iptables restart

な感じでINPUT ACCEPTしつつ、制限したポートのところを-s 123.456.789.12IP指定してACCEPTする。iptablesの設定は上から見られて、一度読まれると同じ意味のものはそれでFixされてしまうので、後ろに書いても上書きはされない感じ。
Anyways, これで、オフィス以外からはアクセスできなくなる。

VPNアカウントはもう作ってる状況とする。
Macで、VPN使って入れるようにする。以下参考にすればOK。(余談だけど、Macツールバーの上のところにいつでもVPNに接続できるようにアイコンおけるの便利)
- Mac OS X からの接続方法 - SoftEther VPN プロジェクト
- 特定の接続のみ VPN 経由させる方法。「すべてのトラフィックを VPN 経由で接続」にチェックは不要。 | 雑記 BOOOKs

Elasticsearch、KibanaにShieldプラグインを入れる

ES、Kibanaを本番で使うために、認証を入れられるようにShieldプラグインを入れる。
Shield: Enterprise Security for Elasticsearch | Elastic

環境

  • CentOS 6.8
  • Elasticsearch 2.4.1
  • Kibana 4.6.1
  • Shield 2.4

ESとKibanaは入ってるものとする。

Shield入れる

基本この辺そのまま。
Getting Started with Shield | Shield [2.4] | Elastic

// ライセンスインストール(30日無料で、それ以上は有料プラン入らなあかん)
$ /usr/share/elasticsearch/bin/plugin install license
// ESのshieldプラグイン入れる
$ /usr/share/elasticsearch/bin/plugin install shield
// Kibanaのshieldプラグイン入れる
$ /opt/kibana/bin/kibana plugin --install kibana/shield/latest

設定

kibanaからESにアクセスできるように、kibana4-server-manというユーザーを作成する。shield/roles.ymlkibana4_serverというこの役割をするroleがデフォルトで書かれてるので、このroleをこのユーザーに付与する。

$ /usr/share/elasticsearch/bin/shield/esusers useradd kibana4-server-man -r kibana4_server
// role書かれてるの確認
$ less /etc/elasticsearch/shield/roles.yml

ログインユーザーを設定する。name: hoge, password: hogehogeで作る。roleはadminにしとく。

$ /usr/share/elasticsearch/bin/esusers useradd hoge -r admin
// ユーザー確認
$ /usr/share/elasticsearch/bin/esusers list

SSLの設定

KibanaでShield使う場合はssl化必要。
ここでは使用ドメインに対してSSL化対応は完了してるとする。(まだならここ見る サイトをSSL化する(VPS, CentOS6 + Apache) - mazeltov7のweb断片
kibana.ymlにSSL情報書く

$ vim /opt/kibana/config/kibana.yml
server.ssl.cert: /path/to/cert/hoge.crt
server.ssl.key: /path/to/key/hoge.key
(略)
shield.encryptionKey: "something_secret"

// 再起動
$ service kibana restart

で、アクセスして、ログインできたら、OK。
あ、firewall使ってたら、kibanaでアクセスする、5601を開けておく。

参考:

【新機能】ShieldがKibanaに対応しました | Developers.IO

centosにjava入れる

環境

入れる

参考: JDK 8 and JRE 8 Installation Start Here

確認

// 何も出ない
$ java -version
$ echo $JAVA_HOME

// yumパッケージ確認
$ yum list installed | grep java
$ yum list | grep java
$ yum list | grep jdk // この辺でjava-1.8.0-openjdkのパッケージが出るので、これを入れる

// 入れる
$ yum install java-1.8.0

// 確認
$ java -version

サイトをSSL化する(VPS, CentOS6 + Apache)

ssl化の必要できたので、さっとやってみた。大体以下な流れ
1. SSL用の鍵作成とCSRの作成
2. 証明書を申し込みと支払い
3. 証明書等をセット
4. OK

環境:

  • CentOS6
  • Apache: Apache/2.2.15 (CentOS6の標準そのまま)

まず、どこで証明書を買うかを決める

が、結局、
ラピッドSSL | さくらのSSL
こちらに決定。

mod_ssl入れる

入ってない場合は入れる。

$ yum install mod_ssl

SSL用の鍵作成とCSRの作成

*鍵をどこに置くかだけど、今回は/etc/httpd/conf/以下にフォルダ作って置いた。他にも/etc/pki/tls/certs以下に置いてたりがデフォっぽい。(ssl.confの設定では、これ以下にあったし、この以下にはダミーも置いてたので、こちらのがええかも…)

$ cd /etc/httpd/conf
$ mkdir ssl.key // 秘密鍵用
$ mkdir ssl.csr // CSR用
$ mkdir ssl.crt // 証明書用

// 秘密鍵作成 (2048bitで作ります)
// パスワード求められます。このパスワード忘れないように
$ openssl genrsa -des3 -out ./ssl.key/hogehoge.com.2016.key 2048

// CSR作成 (さっきのkeyを使って作成する)
// で、ここで国とか組織名とか色々聞かれる
$ openssl req -new -key ./ssl.key/hogehoge.com.2016.key -out ./ssl.csr/hogehoge.com.2016.csr

申し込みと支払いする

ここは各プラットフォームの流れにそってやる。上で作ったCSRの中見を$ cat hogehoge.com.2016.csrしてコピペするシーンもあり。

セットする

審査中・審査後、メールでOOセットしてくれ、とか言われるので、その通りにする。
終わったらこんな感じになってる。

/etc
  |
  |-httpd
    |
    |-conf
      |
      |-ssl.key
      |  |
      |  |-hogehoge.com.2016.key
      |
      |-ssl.csr
      |  |
      |  |-hogehoge.com.2016.csr
      |
      |-ssl.crt
      |  |
      |  |-hogehoge.com.2016.crt
      |  |-intermediate_sha256.cer

で、あとはssl.confに反映させるのと、firewallでsslのポートを通す

$ vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile  SSLサーバ証明書ファイルを指定します。
SSLCertificateKeyFile   SSLサーバ証明書とペアになる秘密鍵を指定します。
SSLCertificateChainFile CSPSSLの中間証明書ファイルを指定します。

$ vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT // これを追加したりする

$ service iptables restart
$ service httpd restart

で、https://hogehoge.comでアクセスして表示されたらOK!

参考:

あと、key, crt, csr !?!?!!?とかの詳しい説明についてはここがわかりやすい。
RSA鍵、証明書のファイルフォーマットについて - Qiita

ざっくり、 keyが秘密鍵
csrが証明申込書(Requestリクエスト)
crt(Certificationなので)証明書
って感じ。(ざっくり…)

CentOSにElasticsearch, kibana, sense, embulkを入れる

バージョン

  • CentOS: 6.8
  • ES: 2.4
  • Kibana: 4.6

Elasticserachを入れる

ここに書いてる感じのことをやる。
Installation | Elasticsearch Reference [2.4] | Elastic

java入ってることを確認

$ java -version

yumでインストール

$ yum install elasticsearch
-> No package elasticsearch available.

こちらにyumで入れる場合が書いてある。
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html

$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
$ vim /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

$ yum install elasticsearch
// chkconfigでよろしくやるように登録
$ chkconfig --add elasticsearch
// もしくは随時起動は
$ service elasticsearch start
// 確認
$ curl 'localhost:9200/_cat/health?v'
// 設定ファイル
$ less /etc/elasticsearch/elasticsearch.yml

ログなどはデフォルトで以下。

path.home=/usr/share/elasticsearch
default.path.logs=/var/log/elasticsearch
default.path.data=/var/lib/elasticsearch
default.path.conf=/etc/elasticsearch

Kibanaを入れる

これもyumで入れる。
https://www.elastic.co/guide/en/kibana/current/setup-repositories.html

// これはさっき入れたのでやらなくてOK
$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
// ファイル作る
$vim /etc/yum.repos.d/kibana.repo
[kibana-4.6]
name=Kibana repository for 4.6.x packages
baseurl=https://packages.elastic.co/kibana/4.6/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
// インストール
$ yum install kibana
// 自動起動追加
$ chkconfig --add kibana

senseプラグインを入れる

Installing Sense | Sense Documentation | Elastic
senseはkibanaのプラグイン。kibanaのディレクトリで$ ./bin/kibana plugin --install elastic/senseな感じでやると入る。そいえば、kibanaどこいるかなと思って、起動service kibana startして、ps aux | grep kibanaで確認すると/opt/kibanaにあった。
てことで、

$ /opt/kibana/bin/kibana plugin --install elastic/sense

embulkを入れる

GitHub - embulk/embulk: Embulk: Pluggable Bulk Data Loader. http://www.embulk.org

$ curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
$ chmod +x ~/.embulk/bin/embulk
$ echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
$ embulk --version

あと、elasticsearchにデータ入れたり、mysqlからデータ取得したりの場合、gemをインストールする必要がある。

$ embulk gem install embulk-input-mysql
$ embulk gem install embulk-output-elasticsearch

適宜必要なgemをインストールする。

kibanaのドメインセットアップ

// kibana.ymlに使うipアドレスを記載する
$ vim /opt/kibana/config/kibana.yml
# The host to bind the server to.
 server.host: "123.456.789.123"
$ service kibana restart
// firewallでkibanaのポート5601からのアクセスを許可する
$ vim /etc/sysconfig/iptables
-A INPUT -i eth0 -p tcp -m tcp --dport 5601 -j ACCEPT
$ service iptables restart

http://ドメイン:5601アクセスしてみてkibana画面出たらOK