カメニッキ

カメとインコと釣りの人です

HAGLOFSのROC SPRIT JACKETが日本では高すぎるので、個人輸入したメモ

この記事を参考にするのは自己責任で。正確性を保証するものではありません

デンマークから通販する機会はあまりなさそうなので、他に迷っている方の助けになれればと思ってメモ

Target

f:id:tapira:20160214094810j:plain

ハードコアに山を楽しむ人の、ハードコアな Roc スピリットジャケット! 3L GORE-TEX® Proを使用しクリーンなラインと究極の耐久性を兼ね備えた、季節を問わず活躍する機能満載のフード付きジャケット。(http://www.haglofs.com/jp/ja/Jackets/ROC-SPIRIT-JACKET-MEN/p/602656.2UY より引用)

「お前山登りしないだろ」というツッコミは無しで、釣り&通勤での利用で見た目が気に入って欲しくなったやつです。

日本では高すぎる&在庫が無い

  • 楽天 - \78,980 かつこの色は在庫なし。セール期間に \55,944 があったが在庫なし
  • Amazon - \67,000 ~ 79,900 かつこの色は在庫なし
  • ヤフーショッピング - 同上
  • 怪しい日本語の - 5万円台で過去に売っていたようだが、在庫なし

Backpacking United を検討

BACKPACKING-united(バックパッキング-ユナイテッド)はドイツにあるアウトドア専門の通販サイトです。(http://www.outdoorgear.blue/より引用)

Haglofs Roc Spirit Jacket Men Hurricane Blue - jp

が、在庫なし。

Backcountry.com

アメリカユタ州ソルトレイクにある。大手のアウトドア、スポーツのネットショップ専門店。 (http://www.kaigaituhan.com/より引用)

Haglöfs Roc Spirit Jacket - Men's | Backcountry.com

在庫ある!が、アメリカのため(?) メーカーの掛けている国外への輸出制限にひっかかり、日本国への直接発送はできない ため、malltailなどの輸入代行業者を利用する必要がある。

結局 friluftslageret.dk で購入

デンマークのアウトドアショップ

Friluftslageret - Specialbutik til friluftsliv og en aktiv hverdag

  • 商品 : 1.599,20DKK
  • 送料 : 248DKK
  • 計 : 1.847,20DKK

f:id:tapira:20160214101910p:plain

圧倒的に安い&日本に直接発送してくれる

というわけで、このサイトから日本へ個人輸入した方をネットで調べて情報を集め、問題なさそうという判断にいたり、ポチる。

f:id:tapira:20160214103147p:plain

f:id:tapira:20160214103318p:plain

  • 英語が通じるので、気になることはメールで問合せましょう。すぐ返してくれました
  • デンマークの数値表記は ドットが桁区切り カンマが小数点 らしいです

不正利用が怖いので、決済金額だけを口座に入れたVISAデビットカードを使うと良さそうです。

ドキドキしながら決済を済ませると、注文完了メールがきます。時差で多少ずれますが、おそらくその日のうちに発送完了メールがきます。

ヤマトの追跡っぽい画面で、状況を確認できます。

f:id:tapira:20160214104006p:plain

Locationがずっとデンマークのまま The shipment item has arrived at the country of destination. というステータスになって「????」となってました。

税関通過後 The shipment item has arrived at the distribution terminal になって半日くらいで手元にとどきました。

ぼくの場合郵便局が配達してきてくれて、 玄関口で関税の支払い をし、受け取りました。

関税の計算について

今回の場合 個人利用を目的 として 20万円以下 という条件で税金計算が行われます。以下のようになります。 (商品代金は 1.599,20DKK = \27,000 で計算)

  • 関税 - 27,000 * 0.6 * 0.1 = \1,620 (個人利用目的じの軽減措置として商品代金の60%が課税対象となり、衣類の簡易税率は10%)
  • 消費税 - 31,000 * 0.6 * 0.063 = \1,171(消費税は送料込みの金額にかかるっぽい?税率も6.3%でよくわからん)
  • 地方消費税 - 数百円(これも計算がよくわからん)

細かい話はこの辺参照してください 関税・消費税・諸税について(輸入時に課税されるもの)|個人輸入代行、海外発送サービス【malltail】公式サイト

大した金額でもないので、多く見積もってもお店に支払った合計の10%くらい余計にとられる、くらいの認識で良さそう。

まとめ

  • 調べて使えば海外通販はお得(およそ日本の半額で買えた)
  • デンマーク→福岡で5日間くらいで届く
  • 関税がかかるので注意
  • 国によって数字の区切り文字が違う

何かの参考になれば。

コピペでssl_ciphers(暗号化スイート)の指定をやってたけど、もうちょっと調べてみた

tapira.hatenablog.com

SSL Server Testで A+ 判定を得るために、Generate Mozilla Security Recommended Web Server Configuration Files で生成した設定を一部利用しています。 その中でも特に目につくのが↓のなっがいやつでした。

    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';

そもそも暗号化スイートとは?

鍵交換方式 & 鍵認証のアルゴリズム & 共通鍵暗号アルゴリズム & 利用するハッシュ関数 を組み合わせたものを、 暗号化スイート と呼ぶそうです。

ssl_ciphersで先頭にきている一番のおすすめ(?) ECDHE-RSA-AES128-GCM-SHA256 を例にとってみます。

  1. 鍵交換方式(Kx)に ECDHE(楕円曲線ディフィー・ヘルマン鍵共有 - Wikipedia - Elliptic curve Diffie–Hellman key exchange)を使う
    Kxは「安全でない経路で結ばれたサーバとクライアント間で共通鍵を安全に交換する」という目的を達するための仕組み。 公開鍵暗号の鍵交換を担う

  2. サーバ認証のアルゴリズム(Au)にRSA 実際に通信する相手が、証明書の持ち主か認証するための仕組み。 公開鍵暗号の署名を担う

  3. 暗号化の方法(Enc)に AES&GCM
    共通鍵を使用して暗号化通信する際の方式。 共通鍵を交換し終わったあと実際に情報をやり取りする際の暗号化・復号化を担う

  4. ハッシュアルゴリズム(Mac)に SHA256

で、いいのかな。KxとAuの役割の違いがよくわからんくなった。

結論

最新の 鍵交換方式 & 鍵認証のアルゴリズム & 共通鍵暗号アルゴリズム & 利用するハッシュ関数 を全部追っかけとかないといこうとすると辛いなーと思った。
何も考えずにコピペしない、という前提のもと Generate Mozilla Security Recommended Web Server Configuration Files などを参考に、内容を理解し、自身の環境に適用できるか検討したうえで選択する、というのが現実的なところか…

ちなみに

ssl_ciphers で完璧なものを指定しておけば安心!というわけではない(最近おしえてもらった)

  • ssl_prefer_server_ciphers on; でサーバ側の暗号化スイート設定を優先するようにしておかないと、クライアント側の設定が利用されて辛い
  • ssl_session_tickets off; デフォは有効なので、使わないのであれば明示的に off にする。(クラスタ構成にする場合は、複数台のnginxでsession cacheを共有するため有効にし、定期的にkeyの更新を行わせる必要がある。nginx.conf ssl_session_ticket_key /etc/nginx/ticket.key; とファイルを明示し、cronなどで openssl rand 48 > /etc/nginx/tickets.key で定期更新し、各nginxで同じものを使う。
  • ssl_session_timeout 5m; 有効期限が短ければ短いほど、安全なはず。サーバ負荷と相談しつつ設定
  • nginx外のそもそものサーバ設定。ミドルウェアの設定を頑張ってもfirewallが全空きでした!じゃ辛い

とても良い記事 qiita.com

tech.mercari.com

hb.matsumoto-r.jp

Let's Encryptを使用したkame.photosのSSL Server Test結果をA+にした

https://kame.photos/

f:id:tapira:20160131225443p:plain

参考

http {
    〜略〜
    # HTTP Strict Transport Security の指定。サブドメインにも適用
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
    〜略〜
    server {
        listen  443 ssl http2;
        # プロトコルはTLS1.2に限定
        ssl_protocols TLSv1.2;
        # TLSセッションキャッシュ有効期限
        ssl_session_timeout 5m;
        # TLSセッションキャッシュを全ワーカプロセスで共有。サイズは50MB
        ssl_session_cache shared:SSL:50m;
        # DH鍵交換のパラメータファイルの指定「openssl dhparam 2048 -out dhparam.pem」で生成
        ssl_dhparam /etc/nginx/dhparam.pem;
        # 暗号化スイート指定(MozillaConfigGenerator参照)
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
        # サーバサイドの暗号化スイート指定を優先
        ssl_prefer_server_ciphers on;
        # TLSセッションチケットはOFF - TLSセッションキャッシュはsession resumptionを使う
        ssl_session_tickets off;

        # OCSP Staplingを有効化にする
        ssl_stapling on;
        ssl_stapling_verify on;
        # 認証局の証明書
        ssl_trusted_certificate /etc/letsencrypt/live/kame.photos/ce-cert;
        
        ssl_certificate      /etc/letsencrypt/live/kame.photos/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/kame.photos/privkey.pem;
    〜略〜

いろいろと気にするところがあるのだな〜とおもた

cclogconv(IPアドレスから国名を取得するツール)を使ってみた

github.com

???

[PMAC226S ~/src/github.com/rhykw/cclogconv]$ echo "111.169.213.70" | cclogconv --data ./GeoLite2-Country.mmdb
JP 111.169.213.70

とりあえずtmp直下にDBはおくように設定してビルド

[PMAC226S ~/src/github.com/rhykw/cclogconv]$ git diff
diff --git a/cclogconv.go b/cclogconv.go
index e4bf4da..883fc76 100644
--- a/cclogconv.go
+++ b/cclogconv.go
@@ -15,7 +15,7 @@ import (
 func main() {

        var (
-               optMmdbFilePath = flag.String("data", "/usr/share/GeoIP2/GeoLite2-Country.mmdb", "GeoIP2 Database Filename")
+               optMmdbFilePath = flag.String("data", "/tmp/GeoLite2-Country.mmdb", "GeoIP2 Database Filename")
                selectCc        = flag.String("cc", "", "Only displays line including this country's ip")
                nFlag           = flag.Bool("n", false, "Not adding country code")
                vFlag           = flag.Bool("v", false, "Reverse condition for cc option")
cd /tmp
curl -O http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
gunzip GeoLite2-Country.mmdb.gz

準備OK

使う

  • 未使用時
[PMAC226S ~/src/github.com/rhykw/cclogconv]$ tail -10 access.log
66.249.71.213 - - [29/Jan/2016:21:47:09 +0900] "GET /feed/ HTTP/1.1" 404 168 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
17.142.156.142 - - [29/Jan/2016:21:53:00 +0900] "GET / HTTP/1.1" 200 15817 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1; +http://www.apple.com/go/applebot)"
66.249.71.213 - - [29/Jan/2016:21:56:09 +0900] "GET /%E3%81%8B%E3%82%81%E3%83%95%E3%83%BC%E3%83%89%E5%A5%BD%E3%81%8D%E4%B8%89%E4%BA%BA%E8%A1%86/ HTTP/1.1" 404 168 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
157.55.39.71 - - [29/Jan/2016:21:56:21 +0900] "GET /robots.txt HTTP/1.1" 404 168 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
157.55.39.71 - - [29/Jan/2016:21:56:26 +0900] "GET / HTTP/1.1" 200 15828 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
185.130.5.244 - - [29/Jan/2016:22:20:26 +0900] "GET /phpmyadmin/scripts/setup.php HTTP/1.0" 404 16 "-" "-"
66.249.71.252 - - [29/Jan/2016:22:26:35 +0900] "GET /?cat=11 HTTP/1.1" 200 15992 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
157.55.39.71 - - [29/Jan/2016:22:59:20 +0900] "GET /%e3%82%ad%e3%83%9c%e3%82%b75/ HTTP/1.1" 404 168 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
66.249.71.234 - - [29/Jan/2016:23:14:35 +0900] "GET /?m=201509 HTTP/1.1" 200 16072 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
184.105.139.68 - - [29/Jan/2016:23:22:49 +0900] "GET / HTTP/1.1" 200 15828 "-" "-"
  • かませてみる
[PMAC226S ~/src/github.com/rhykw/cclogconv]$ tail -10 access.log | ./cclogconv
US 66.249.71.213 - - [29/Jan/2016:21:47:09 +0900] "GET /feed/ HTTP/1.1" 404 168 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
US 17.142.156.142 - - [29/Jan/2016:21:53:00 +0900] "GET / HTTP/1.1" 200 15817 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1; +http://www.apple.com/go/applebot)"
US 66.249.71.213 - - [29/Jan/2016:21:56:09 +0900] "GET /%E3%81%8B%E3%82%81%E3%83%95%E3%83%BC%E3%83%89%E5%A5%BD%E3%81%8D%E4%B8%89%E4%BA%BA%E8%A1%86/ HTTP/1.1" 404 168 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
US 157.55.39.71 - - [29/Jan/2016:21:56:21 +0900] "GET /robots.txt HTTP/1.1" 404 168 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
US 157.55.39.71 - - [29/Jan/2016:21:56:26 +0900] "GET / HTTP/1.1" 200 15828 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
LT 185.130.5.244 - - [29/Jan/2016:22:20:26 +0900] "GET /phpmyadmin/scripts/setup.php HTTP/1.0" 404 16 "-" "-"
US 66.249.71.252 - - [29/Jan/2016:22:26:35 +0900] "GET /?cat=11 HTTP/1.1" 200 15992 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
US 157.55.39.71 - - [29/Jan/2016:22:59:20 +0900] "GET /%e3%82%ad%e3%83%9c%e3%82%b75/ HTTP/1.1" 404 168 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
US 66.249.71.234 - - [29/Jan/2016:23:14:35 +0900] "GET /?m=201509 HTTP/1.1" 200 16072 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
US 184.105.139.68 - - [29/Jan/2016:23:22:49 +0900] "GET / HTTP/1.1" 200 15828 "-" "-"

使いみち

たとえば、便利だと思うのが中国からきてるIPをまるっと弾きたいとき

[PMAC226S ~/src/github.com/rhykw/cclogconv]$ cat access.log | ./cclogconv | grep '^CN' | awk '{print $2}' | sort | uniq
101.254.204.65
171.214.248.34
180.76.15.13
180.76.15.135
180.76.15.136
180.76.15.137
180.76.15.141
180.76.15.143
180.76.15.147
180.76.15.155
180.76.15.157
180.76.15.162
180.76.15.17
180.76.15.19
180.76.15.22
180.76.15.31
180.76.15.6
180.97.106.161
202.46.50.12
222.191.236.114

かんたんに取り出せる。

シェルスクリプトで巨大な文字列とのマッチング処理をするとき、変数格納よりもファイル参照したほうが速かった

この前必要があってお粗末なスクリプトを書いた時、速度に大きな差があったので気になった。

なんとなく変数に持ったほうが、試行回数が増えるほど早くなるのかとおもってた

宣伝

tapira.hatenablog.com

今回の環境

KagoyaVPS 最小構成CentOS6.5 日毎課金なので特にこだわりなければ安くあがっておすすめです。ちょっと触ってすぐ削除するような使い方

[root@v8794 work]# cat /proc/cpuinfo | grep processor
processor   : 0
processor   : 1
processor   : 2
[root@v8794 work]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@v8794 work]# free
             total       used       free     shared    buffers     cached
Mem:       2097152     445288    1651864          0          0     424992
-/+ buffers/cache:      20296    2076856
Swap:      4194304      21420    417288

使用するファイル

# ファイルに対してgrep
[root@v8794 work]# cat file.sh
#! /bin/sh

cat << EOF | while read txt
`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n $2 | sort | uniq`
EOF
do

grep ${txt} $1

if [ $? -eq 0 ]; then
    echo "true"
else
    echo "false"
fi

done

# 変数に格納したあとgrep
[root@v8794 work]# cat val.sh
#! /bin/sh

testtxt=`cat $1`

cat << EOF | while read txt
`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n $2 | sort | uniq`
EOF
do

echo $testtxt | grep ${txt}

if [ $? -eq 0 ]; then
    echo "true"
else
    echo "false"
fi

done

ファイル観たほうが速い

[root@v8794 work]# time ./file.sh test.txt 10
false
false
false
false
false
false
false
false
false
false

real    0m0.179s
user    0m0.087s
sys 0m0.085s
[root@v8794 work]# time ./val.sh test.txt 10
false
false
false
false
false
false
false
false
false
false

real    0m51.921s
user    0m45.767s
sys 0m7.232s

ちなみに、小さいファイルにしたら逆転するのかと思ったら、そんなことなかった

[root@v8794 work]# ll test2.txt
-rw-r--r-- 1 root root    17000  123 20:48 2016 test2.txt

[root@v8794 work]# time ./file.sh test2.txt 10
false
false
false
false
false
false
false
false
false
false

real    0m0.019s
user    0m0.002s
sys 0m0.007s
[root@v8794 work]# time ./val.sh test2.txt 10
false
false
false
false
false
false
false
false
false
false

real    0m0.049s
user    0m0.032s
sys 0m0.008s
[root@v8794 work]

あれ?これって当たり前の話??? もしかして恥ずかしい疑問なのかもしれない