a tomato

トマトが大好きです

golangのパッケージ管理ツールglideが非推奨になっていることに気づく・・

概要

golang1.11がリリースされたので、言語のバージョンアップと一緒に利用しているパッケージのバージョンも確認していたところ、glideのgithub上に以下の記載がありました。

f:id:kzdev:20180908165349p:plain

Golang Dep
The Go community now has the dep project to manage dependencies. Please consider trying to migrate from Glide to dep. If there is an issue preventing you from migrating please file an issue with dep so the problem can be corrected. Glide will continue to be supported for some time but is considered to be in a state of support rather than active feature development.ent.

github GitHub - Masterminds/glide: Package Management for Golang

いずれdisconになるので、depへの切替を検討して下さいとのこと。すぐにやらないとこういったことは、後回しにされがちなので、対応しました。

続きを読む

Google Cloud Platformの無料利用枠を攻める(準備編)

タイトルの通り、他社と比べても太っ腹なGoogle様から提供されている、Google Cloud Platformを無料で使える枠をギリギリまで使い切ってみました。
実際のサービスをこの枠で展開するのは不可能ですが、クラウド環境構築の練習や実験、検証にはもってこなので、ガンガン利用しましょう。

f:id:kzdev:20180818180007j:plain

続きを読む

raspberry pi zero whをUSB経由でインターネットに接続する

前回はraspberry piにOSインストールまで行いました。 このままだとraspberry piIPアドレスがなく、インターネットに接続出来ない状態のままとなり困るので、 USBを通してインターネットに接続する設定を行います。

続きを読む

raspberry pi zero whにOSをインストールする

raspberry pi zeroの最新版であるwhを購入したので、インストールしてカメラ動作の確認、各種センサーの動作を確認まで行います。 今回のテーマは、OSのインストールです。

f:id:kzdev:20180811204021j:plain

購入した機種

機材使用は以下のページの通りです。
whはGPIOが標準搭載された機材なので、センサー周りの追加なども簡単に行うことが出来ます。

www.switch-science.com

続きを読む

monitを使ったサービス簡易監視の設定

本格的な監視をするならzabbixですが、スモールサービスで簡易な監視を行う場合はmonitがお手軽です。

実行環境

CentOS Linux release 7.5.1804 (Core)

インストール

# epel install
[root@vmhost01 ~]# yum install -y monit
Installed:
  epel-release.noarch 0:7-11                                                                                                                                                                                        

Complete!

# monit install
[root@vmhost01 ~]# sudo yum -y install monit
Installed:
  monit.x86_64 0:5.25.1-1.el7                                                                                                                                                                                       

Complete!

ディレクトリ構成

path 役割
/etc/monitrc monitの基本設定
/etc/monit.d 各種監視の設定

プロセス監視

httpdの設定を例にした場合は、以下のように設定する

[root@vmhost01 ~]#  vim /etc/monit.d/httpd
check process httpd with pidfile /var/run/httpd/httpd.pid
        start program = "/bin/systemctl start httpd"
        stop program  = "/bin/systemctl stop httpd"
        if failed
          host localhost
          port 80
          protocol http
        then restart

リソース監視

リソースを監視する設定を例にした場合は、以下のように設定する

[root@vmhost01 ~]#  vim /etc/monit.d/sysresrc
check system 127.0.0.1
## cpu/mem check
 if loadavg (15min) > 2 then alert
 if cpu usage (user) > 90% then alert
 if memory usage > 80% then alert 
## service restart when high load
 if loadavg (1min) > 2 then exec "/etc/init.d/postgresql restart" 
 if loadavg (1min) > 2 then exec "/etc/init.d/httpd restart"
 
##disk check
check device disk_/ with path /
 if space usage > 90% for 5 times within 15 cycles then alert 
 if space usage > 98% then stop

構文チェック

設定した記述が正しいかチェックを行う。

[root@vmhost01 ~]# monit -t
Control file syntax OK

起動設定

# monit起動
[root@vmhost01 ~]#  systemctl start monit

# monit自動起動設定
[root@vmhost01 ~]#  systemctl enable monit

状態確認

現在サーバがどのような状態なのか、以下のコマンド結果で確認が可能です。

[root@vmhost01 ~]# monit status
Monit 5.25.1 uptime: 1m

Process 'httpd'
  status                       Initializing
  monitoring status            Initializing
  monitoring mode              active
  on reboot                    start
  data collected               Fri, 10 Aug 2018 22:33:32

System 'vmhost01'
  status                       OK
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  load average                 [0.05] [0.05] [0.05]
  cpu                          0.3%us 0.3%sy 0.0%wa
  memory usage                 694.2 MB [37.8%]
  swap usage                   7.5 MB [0.4%]
  uptime                       13d 12h 11m
  boot time                    Sat, 28 Jul 2018 10:22:23
  data collected               Fri, 10 Aug 2018 22:33:32

ansibleを使うためのssh周りの設定

ansibleを使う時に必要なsshの設定です。

SSH用の公開/秘密鍵生成

兎にも角にもまずは、鍵認証によるログインが必要ですので、 公開鍵と秘密鍵を作成します。

% ssh-keygen -t rsa -b 4096                        
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kzdev/.ssh/id_rsa): /Users/kzdev/.ssh/iscdhcp/id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/kzdev/.ssh/iscdhcp/id_rsa.
Your public key has been saved in /Users/kzdev/.ssh/iscdhcp/id_rsa.pub.
The key fingerprint is:
SHA256:mQUfAGwyCJ68bFD9gQvkozUTZNiPZyhiTknP5+Wgr4s kzdev@MacBook-Pro
The key's randomart image is:
+---[RSA 4096]----+
|.**o o..o..      |
|+==.= +  o .     |
|o+X= * .  o      |
|=*+*=o.. +       |
|*= o+ + S        |
|.. . . .         |
|    .            |
|  .  .           |
| E oo            |
+----[SHA256]-----+
公開鍵を構築対象サーバに登録

作成した公開鍵を構築対象となるサーバに登録します。

% ssh-copy-id -i  /Users/kzdev/.ssh/iscdhcp/id_rsa.pub  root@10.211.55.6          
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/kzdev/.ssh/iscdhcp/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.211.55.6's password: 

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'root@10.211.55.6'"
and check to make sure that only the key(s) you wanted were added.
SSH接続確認

パスワード入力無しでSSH接続が可能となることを確認します。

% ssh -i /Users/kzdev/.ssh/iscdhcp/id_rsa root@10.211.55.6            
Last login: Sat Aug  4 01:34:38 2018 from 10.211.55.2
[root@localhost ~]# 
構築対象側のSSH設定

これで最低限の準備は整いましたが、基本は鍵認証でログインするのでパスワード認証をOFFにします。セキュリティ観点においても、パスワード認証は様々な脆弱性に晒されるので、やはりオフにしておいた方が良いと思います。

[root@localhost ~]# sed -i -e 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
[root@localhost ~]# sed -i -e 's/^ChallengeResponseAuthentication yes/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config

iptablesでアクティブモードFTPが通るように設定する

ftpクライアント側でiptablesを利用するケースが発生し、ftp通信を許可する設定(tcp:20, tcp:21)をしたところ、ls等のデータコネクションで通信を行うコマンドがエラーになってしまいました。

ftp 192.168.10.1
Connected to 192.168.10.1 (192.168.10.1).
220 (vsFTPd 2.2.2)
Name (192.168.10.1:kzdev): xxxxx
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
425 Failed to establish connection.

これは、クライアント側からデータコネクションを確立にいくため、ランダムポート(1024〜65535)から動的に選択されてしまいます。そのため、tcp:20, tcp:21を開いてもランダムポートでの通信が通らないのです。

これだと、通信を行うには、iptablesを無効にしてしまうか、ランダムポートを全て許可しなければならず、ファイアウォールの意味をなさなくなってしまいます。 こんな時に使えるのが、ip_conntrack_ftpです。

このモジュールは、制御ポートを通してクライアントから通知されるデータコネクションやパッシブモードで利用するポート番号を自動的に開閉してくれる便利なモジュールです。

まずは、モジュールが存在しているか確認を行います。

$ lsmod | grep ftp

ない場合は、以下を実行してカーネルモジュールをロードする

$ modprobe ip_conntrack_ftp 
$ lsmod | grep ftp
nf_conntrack_ftp       11953  1 nf_nat_ftp
nf_conntrack           79206  4 nf_nat_ftp,nf_nat,nf_conntrack_ipv4,nf_conntrack_ftp

参考

Linuxコマンド集 - 【 modprobe 】カーネルモジュールをロードまたはアンロードする:ITpro

iptablesの起動スクリプトである/etc/sysconfig/iptables-configに以下の行を記述する。

IPTABLES_MODULES="ip_conntrack_ftp"

iptablesにモジュールをロードさせるため、サービスを再起動させる。

$ service iptables restart

これで、iptablesが有効な状態でFTP接続とデータコネクションの通信が無事に通るようになりました。