GCPのUbuntuでsshguardを有効にしてみる

GCP(Google Cloud Platform)で建ててみたサーバのsshへのアタックがかなり多いので(普通はsshのポート番号を変えておくのだと思いますが)sshguardとufwを連携してみます。

失敗したときシリアルコンソールで繋げられるように、パスワード付きのアカウントを一つ用意しておいて下さい(ユーザ名『ubuntu』のパスワードを変更でも良いかも)。

設定でちょっと嵌まったので、自分用にチラ裏。

# ufw自動起動設定
systemctl enable ufw
# ufw起動
ufw enable
# SSHを許可する例
ufw allow from 0.0.0.0/0 to any port ssh
# httpを許可する例
ufw allow from 0.0.0.0/0 to any port http
# GCPのヘルスチェッカーを許可
ufw allow from 169.254.169.254/32 to any
# ポリシー読み込み
ufw reload

# sshguardの設定(ちょっぴり厳しくしてみる)
vi /etc/default/sshguard
# 15行目
ARGS="-a 30 -p 420 -s 3600"
systemctl restart sshguard

念のため再起動して動作を確認して下さい。

# これらで確認してみる
tail -f /var/log/auth.log
systemctl status ufw
systemctl status sshguard
iptables -vL ufw-user-input
iptables -vL sshguard

設定に失敗してufwやsshguardがコケている時もありますので…。

GCP上にDNSゾーンを一括処理で作ってみる

  • 緊急にDNSサーバを立ち上げなければならない場合を想定して作成しました
  • 『事前準備』と『作業環境構築』は(やっておいて損は無いので)事前に準備しておいて下さい
  • 『ゾーン作成』以降がイベント発生時の作業となります
  • CLIで流し込む方法を主に書いてあります
  • 2019/04時点での手順書です
  • whoisの更新は自由に出来るものとします

事前準備

Googleアカウントを作成します。

GCPコンソールにログインし、プロジェクトだけ作成しておいて下さい。

このテキストでは『my_zone』とします。

作業環境構築

WindowsPCを想定しています。

Node.jsやPythonを入れるのが面倒環境依存を排除するため、WSLで作成します。

ゾーン作成

GUIから可です。

CLIの場合は、(外部公開/非公開設定がbetaのみのため)betaコマンドで作成します。

gcloud beta dns managed-zones create --dns-name="my_domain." --visibility=public --description=my_zone my_zone
# ドメイン名
#   my_domain
# 外部公開
#   する
# ゾーン名
#   my_zone

ゾーン内容のフラッシュ

# 一括削除はCLIから行います
touch empty-file
gcloud dns record-sets import -z my_zone --delete-all-existing empty-file

ゾーンの削除

# ゾーンをクリアしてから削除します
touch empty-file
gcloud dns record-sets import -z my_zone --delete-all-existing empty-file
gcloud dns managed-zones delete my_zone

レコード一括追加

gcloud dns record-sets transaction start   -z=my_zone
gcloud dns record-sets transaction add     -z=my_zone --name="ns1.my_domain."  --type=A     --ttl=300 "192.168.0.1"
gcloud dns record-sets transaction add     -z=my_zone --name="ns2.my_domain."  --type=A     --ttl=300 "192.168.0.2"
gcloud dns record-sets transaction add     -z=my_zone --name="www.my_domain."  --type=A     --ttl=300 "192.168.0.3"
gcloud dns record-sets transaction add     -z=my_zone --name="mx1.my_domain."  --type=A     --ttl=300 "192.168.0.4"
gcloud dns record-sets transaction add     -z=my_zone --name="mx2.my_domain."  --type=A     --ttl=300 "192.168.0.5"
gcloud dns record-sets transaction add     -z=my_zone --name="test.my_domain." --type=CNAME --ttl=300 "www.my_domain."
gcloud dns record-sets transaction add     -z=my_zone --name="my_domain."      --type=MX    --ttl=300 "10 mx1.my_domain." "100 mx2.my_domain."
gcloud dns record-sets transaction execute -z=my_zone

レコード一括追加中断

# 一括処理中にエラーが出たり誤りを見付けた時
# 一旦中断しないと以後の作業に差し支えが出ます
gcloud dns record-sets transaction abort -z=my_zone

GCPにPandora FMSを入れてみるテスト

本コンテンツの内容は2019年3月現在の情報を元にしています。

前提条件

  • GCP(Google Cloud Platform)のアカウントを作成済みのこと
  • プロジェクト名を適当に作成済みのこと
  • Tera Termを使っていること
  • FQDNでアクセスする場合は、DNSサーバへのレコード登録が出来ること

Tera Term でSSH鍵を作成

※既に鍵を持っている場合は、ここはパスして構いません
※ここで鍵を作成するときのWindowsログイン名が、後程作成するVMのログイン名になります

  1. Tera Term のメニューから『設定』→『SSH鍵生成』
  2. 『生成』
  3. 鍵の種類は『RSA』ビット数は『2048』で、『生成』
  4. パスフレーズは空のままで
  5. 『公開鍵の保存』で任意の場所に公開鍵を保存
    ファイル名はデフォルトの場合、id_rsa.pub
    この公開鍵をあとでVMに突っ込みます
  6. 『秘密鍵の保存』で任意の場所に公開鍵を保存
    ファイル名はデフォルトの場合、id_rsa
    この秘密鍵をあとで Tera Term で使います

固定IP取得

  1. GCPのコンソールを開く
  2. 左上の三本線(ナビゲーションメニュー)をクリック
  3. ネットワーキング→VPCネットワーク→外部IPアドレス
  4. 『+静的アドレスを予約』
  5. 名前を適当に設定
  6. 『標準』『IPv4』『リージョン』を選択
  7. リージョンは『asia-northeast1』
  8. 『予約』

FQDNで使う場合は、取得したIPアドレスを利用しているDNSに登録ください

VM作成

  1. GCPのコンソールを開く
  2. 左上の三本線(ナビゲーションメニュー)をクリック
  3. コンピューティング→Compute Engine→VMインスタンス
  4. 『+インスタンスを作成』
  5. 名前は適当に
  6. リージョンは『asia-northeast1』
  7. ゾーンとマシンタイプはそのまま
  8. ブートディスクの『変更』
  9. 『CentOS7』『標準の永続ディスク』『20GB』で『選択』
  10. ファイアウォールで『HTTPトラフィックを許可する』
  11. 『作成』
  12. 起動したVM名をクリックし、『VMインスタンスの詳細』で『編集』
  13. ネットワークインターフェースの鉛筆マークををクリック
  14. 外部IPに、先程作成した固定IPを選択し、『完了』
  15. 少し下の『SSHキーが0個あります』の『表示して編集する』
  16. 『認証鍵全体を入力』フィールドに、公開鍵をコピペ
    鍵が有効な場合、ログイン名が鍵フィールドの左側に表示されます
    この名前でVMにログインすることになります
  17. 『保存』

Tera Term にホストを登録

  1. 管理者権限でコマンドプロンプトを開き、teraterm.ini をノートパッドで開く
  2. [Hosts]セクションに、Hostを追加(Host番号は適当に編集下さい)
    Host1=VMのIPまたはFQDN /ssh /auth=publickey /user=公開鍵内のログイン名 /keyfile=path\id_rsa /KR=UTF8 /KT=UTF8

VM内での作業

Tera Term でVMに公開鍵認証なSSHで接続し、sudo su – でrootになってください。

# SELinux無効化
setenforce 0
vi /etc/sysconfig/selinux
# 7行目 変更
SELINUX=disabled 
# 保存してvi終了

# タイムゾーンを変更
timedatectl set-timezone Asia/Tokyo
# Apache登録
yum -y install httpd
# ウェルカムページ削除
rm -f /etc/httpd/conf.d/welcome.conf
vi /etc/httpd/conf/httpd.conf
# 86行目 管理者アドレス指定
ServerAdmin root@foo-bar.com
# 95行目 サーバー名設定
ServerName pandora.foo-bar.com:80
# 151行目 変更
AllowOverride All
# 164行目 変更
DirectoryIndex index.html index.php
# 最終行に追記
ServerTokens Prod
KeepAlive On
# 保存してvi終了
# Apache起動/自動起動設定
systemctl start httpd
systemctl enable httpd

# /var/www/html に適当なファイルを置いて、httpdの動作を確認
# 確認後テストファイルは削除下さい

# IPアドレス制限(可能であれば何らかの方法で制限しておいた方が良いと思います)
# 先程アクセスしたIPアドレスを確認
cat /var/log/httpd/access.log
vi /etc/httpd/conf/httpd.conf
# 104行目 追加(Requireの方が良いかも)
Allow from localhost
Allow from 先程のIPアドレス
Deny from all
# 保存してvi終了
systemctl restart httpd

# PHP7.2のインストール
# epelリポジトリとremiレポジトリのインストール
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# PHPのインストール
yum -y install --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql php-zip php-pecl-zip php-ldap php-snmp
# php.iniの編集(ファイルのバージョンにより、各行の位置は微妙に変わる筈)
vi /etc/php.ini
# 902行目 変更
date.timezone = "Asia/Tokyo"
# 1509行目 変更
mbstring.language = Japanese
# 1516行目 変更
mbstring.internal_encoding = UTF-8
# 1524行目 変更
mbstring.http_input = UTF-8
# 1534行目 変更
mbstring.http_output = pass
# 1542行目 変更
mbstring.encoding_translation = On
# 1547行目 変更
mbstring.detect_order = auto
# 保存してvi終了
# Apache再起動
systemctl restart httpd
# PHP動作確認
echo '<?php phpinfo(); ?>' > /var/www/html/info.php
curl http://localhost/info.php | grep 'PHP Version' | tail -1 | sed -e 's/<[^>]*>//g'
# PHP Version が表示されることを確認すること
rm -f /var/www/html/info.php

# MariaDBインストール
yum -y install mariadb-server
vi /etc/my.cnf.d/server.cnf
# 13行目 追加
character-set-server=utf8
# 保存してvi終了
# MariaDB起動/自動起動設定
systemctl start mariadb
systemctl enable mariadb
systemctl restart httpd
# MariaDB初期設定
mysql_secure_installation
# 最初に聞かれるパスワードはそのままEnter
# Set root password? で y
# パスワードを適当に設定(記録しておいてください)
# 残りの設問は全て y

# Pandoraインストール
# 次のような流れになります
#  ①パッケージインストール
#  ②インストーラ実行(初期設定)
#  ③confファイルの設定
#  ④pandora_server 起動
#
vi /etc/yum.repos.d/pandorafms.repo
# 以下の内容を追加
[artica_pandorafms]
name=CentOS7 - PandoraFMS official repo
baseurl=http://firefly.artica.es/centos7
gpgcheck=0
enabled=1
# 保存してvi終了
yum -y install pandorafms_console pandorafms_server bind-utils
systemctl restart httpd

# localhostからのMariaDBへのアクセス権を設定する
# これをやっておかないと、Pandoraインストーラが完走しません
mysql -u root -p
# パスワードは先程設定したもの
grant all privileges on *.* to root@localhost identified by '先程のパスワード' with grant option;
flush privileges;
exit;

# Pandora初期設定
# http://IPまたはFQDN/pandora_console/ にアクセス
# Step1 『Next』
# Step2 『Yes』
# Step3 『Next』
# Step4 DB Password に先程設定したパスワードを入力し、『Next』
# Step5 A new random password has been generated: に表示されているパスワードを記録し、『Next』
# ※パスワードを忘れた時は、Step4の『Drop Database if exists』にチェックを入れて再試行
# Step6 『Yes』
# 一旦ブラウザを閉じます

# confファイルの設定
vi /etc/pandora/pandora_server.conf
# 59行目 編集
dbpass Step5で提示されたパスワード
# 保存してvi終了

# Pandora Server 起動
/etc/init.d/pandora_server start

http://IPまたはFQDN/pandora_console/ にアクセス
左側のCommunity edition のIDにadmin、パスワードにpandoraでログイン

メール発報を行いたいとき

  1. Postfix設定
    https://www.server-world.info/query?os=CentOS_7&p=mail&f=1
    の『574行目:追記』まで実行
  2. /etc/pandora/pandora_server.conf の 234行目を有効化
  3. SendGridの設定
    https://qiita.com/ariaki/items/e389cc3dce549f450e3b
    にて外部へのメール送信を実装
  4. postfix と pandora_server をリスタート