2020年6月14日日曜日

Microsoft 365 Business BasicでのDKIMとDMARCの有効化

2020/6/30までの契約でMicrosoft 365 Business Basicが半年無料で使えるとのことだったので試しに契約してみた

独自ドメイン(MSの表記上はカスタムドメイン)のサブドメインでの運用だが、DNSに記載する必要があるレコードは全て管理コンソール上で明示されるので、ほぼコピペだけで問題なく設定が完了した



ただ、Exchange Onlineで利用するメールに対してDKIMとDMARC認証を行うにはGUIだけではできなかった



まずは以下のドキュメント通りに【Exchange Online PowerShell V2 モジュール】をインストールする

PowerShellを管理者権限で開いて以下コマンドを実行
> Set-ExecutionPolicy RemoteSigned

> Install-Module -Name ExchangeOnlineManagement
#yで使用許諾証明書に同意

Exchange Online に接続する
> $UserCredential = Get-Credential

> Connect-ExchangeOnline -Credential $UserCredential -ShowProgress $true
#【Windows PowerShell 資格情報の要求】で表示されるダイアログボックスへは今回契約したMicrosoft365のアカウント情報を入力する


■DKIMを手動でセットアップする
以下のドキュメントを参考にPowerShellでコマンドを叩く

Microsoft365の初期ドメインと独自ドメインの両方に適用するため、似たような事を繰り返す
> New-DkimSigningConfig -DomainName <domain> -Enabled $false
Get-DkimSigningConfig -Identity <domain> | Format-List Selector1CNAME, Selector2CNAME
#<domain>のところを初期ドメインと独自ドメインのFQDNでそれぞれ実行する

実行するとPowerShellの画面にDNSに記載するためのレコードが発行されるのでこれをメモしておく

以下がレコードの例
selector1-<domainGUID>._domainkey.<initialDomain>
selector2-<domainGUID>._domainkey.<initialDomain>
#初期ドメインはMicrosoft365側で自動設定されるため気にする必要はない
 <domainGUID>は独自ドメインのFQDNと末尾に文字が挿入された
 <initialDomain>は初期ドメインがそのまま入る

それぞれtxtレコードのHost nameは【selector1._domainkey】と【selector2._domainkey】になっているが、独自ドメインのサブドメインを利用しいているため【selector1._domainkey.<サブドメイン>】と【selector2._domainkey.<サブドメイン>】となる

上記の情報を確認したら、DNSレコードに必要情報を登録する
その上で、Microsoft365管理センターにログインして【Exchange】からExchange管理センターへ移動、【保護】>【dkim】から該当ドメインのdkimを有効にするをクリックする
DNS情報の伝播の関係でエラーが出た際は数時間~1日程時間を空けて再試行すればいい


■DMARCの設定
DKIMさえ有効になればDMARCはレコードを追加するだけで良い
DNSに以下のtxtレコードを追加する
【Host name】 _dmarc.<サブドメイン>
【種類】TXT
【値】"v=DMARC1; p=none"




値を有効にしたのち、gmail宛にテストメールを送り、メールのソースを表示して確認すれば、問題なくDKIMもDMARCも有効化されている



G Suiteの方がこの辺りの設定は簡単なものの、個人で利用する上では540円/月で50GBの独自ドメインのメールが使えて、1TBのクラウドストレージが使えて、ついでにモバイルのアプリが使えると思えばコスパの良いサービスだと思う

今後仕事で関わる可能性も考慮した場合、安価にMicrosoftの管理者として色々設定を確認できるので、何かしらの参考にもなればいいかなとも思う

2020年6月12日金曜日

雨上がりの蛍

撮影日:2020/06/10 20時頃
撮影場所:山口県岩国市錦町府谷


今年はタイミングが悪く梅雨入り前から雨予報だったものの、夕方雨が止む予報だったので急ぎ仕事終わりに車を出した

若干の霧雨は残っていたものの、湿度も高く多くの蛍が飛んでいた


2020年6月3日水曜日

OPNsenseでのOpenVPN設定

OPNsenseにOpenVPNの設定を追加する

公式サイトにドキュメントはあるものの、TOTPによる二要素認証を利用した方法等、今回使わない情報が載ってるので少し混乱した

【 Setup SSL VPN Road Warrior 】

構成は以前の記事同様XG Firewallと並列の構成
OpenVPNで接続したクライアントはXG FirewallのIPoEトンネルを利用してインターネットに抜ける構成になる
また、PPPoE側は個人向けOCNサービスのためダイナミックDNSとしてGoogle Domains内のDNSサービスに内包されているダイナミックDNSサービスを利用する



■ダイナミックDNS設定
まずは外部アクセス用にダイナミックDNSの設定を行う

GoogleDomainsのページにアクセスして【DNS】>【合成レコード】のプルダウンから【ダイナミックDNS】を選択
今回はサブドメインで運用するので、空欄に任意のサブドメインを入力して追加する

追加したダイナミックDNSの情報を開くと【ユーザ名】と【パスワード】が表示されるので、これを後でコピペする

次にOPNsenseにログインして【サービス】>【ダイナミックDNS】のページ内右上の【追加】から設定する
設定か所は以下
【有効】にチェック
【サービスタイプ】Google Domains
【監視するインターフェース】WAN
【ホスト名】Google Domainsで作成したサブドメインのFQDN
【ユーザ名】Google Domainsからコピペ
【パスワード】Google Domainsからコピペ

保存して強制更新すると、OPNsenseのダイナミックDNSのページ内で追加したものが有効化され、取得したグローバルIPアドレスが表示される
このアドレスはGoogle Domains上にも同様の値が表示される


■内部認証局作成
【システム】>【セキュリティ】>【認証局】から新しい認証局を追加する
【説明】OpenVPN-CA #任意の値
【方法】内部認証局を作成
【鍵長】4096
【ダイジェストアルゴリズム】SHA512
【国コード】JP(Japan)
【都道府県】#任意の値
【市】#任意の値
【組織】#任意の値
【電子メールアドレス】#任意の値
【コモンネーム】#任意の値

■サーバ証明書作成
【システム】>【セキュリティ】>【証明書】から新しいサーバ証明書を追加する
【方法】内部証明書の新規作成
【説明】OpenVPN-CE #任意の値
【認証局】OpenVPN-CA #上で作成した認証局を選択
【タイプ】サーバ証明書
【鍵長】4096
【ダイジェストアルゴリズム】SHA512
国コードからしたは認証局の情報が自動転記される

■VPNユーザ作成とユーザ証明書作成
【システム】>【アクセス】>【ユーザ】からVPN用のユーザを追加する
【ユーザ名】#任意の値
【パスワード】#任意の値
【証明書】クリックすると、ユーザ証明書を作成します にチェック

保存してユーザ証明書の作成画面に移管する
【方法】内部証明書の新規作成
【説明】user-CE #任意の値
【認証局】OpenVPN-CA #上で作成した認証局を選択
【タイプ】クライアント証明書
【鍵長】4096
【ダイジェストアルゴリズム】SHA512
国コードからしたは認証局の情報が自動転記される


■OpenVPNサーバ作成
【VPN】>【OpenVPN】>【サーバ】から【新規サーバの設定にウィザードを使用】にてVPNサーバを追加する

・認証タイプ選択
【サーバのタイプ】Local User Access #初期値

・証明局選択 #誤訳?
【認証局】OpenVPN-CA #上記で作成した認証局を選択

・サーバ証明書選択
【証明書】OpenVPN-CE #上記で作成したサーバ証明書を選択

・サーバ設定
【インターフェース】WAN
【プロトコル】UDP
【ローカルポート】1194
【DHパラメータ長】4096
【暗号化アルゴリズム】AES-128-CBC(128 bit key, 128 bit block)
【認証ダイジェストアルゴリズム】SHA512(512-bit)

【IPv4 トンネルネットワーク】192.168.0.0/29 #VPNクライアントに割り当てるNW
【リダイレクトゲートウェイ】チェック入れる #VPNサーバ経由でインターネットへアクセスさせる
【IPv4 ローカルネットワーク】192.168.0.0/28

【動的IP】チェック入れる
【アドレスプール】チェック入れる



・ファイアウォールルール構成
【クライアントからサーバへのトラフィック】チェック入れる
【クライアントからVPN経由のトラフィック】チェック入れる

■作成されたFWルールの確認
【ファイアウォール】>【ルール】の【OpenVPN】と【WAN】それぞれに新しいルールが追加されている




これでOPNsense側のOpenVPN設定は完了

【VPN】>【OpenVPN】>【クライアントのエクスポート】からプロファイルをダウンロードして端末へ設定してやればつながる

androidの場合は
【Export type】ファイルのみ
として画面下の証明書からユーザ証明書のデータをダウンロードすれば利用できる


認証局や証明書を別途作成するのが面倒だったものの、サーバ自体はウィザードが用意されておりFWルールも自動作成なので設定自体は簡単だった

実スループットは回線とOPNsenseへの割り当てリソースに左右されるだろうから、実用的かどうかは様子見

2020年5月26日火曜日

Zabbix 5.0 へのsnmpホスト登録(標準MIBのみ)

Zabbixが構築できたので自宅のNW機器を登録していく

厳密に管理するわけではないので、MIBは【標準MIB】のみで【Read Only】、community nameは【public】で統一して設定する

設定対象は以下の4機種
NGFW:Sophos XG Firewall Home Edition(ESXi上)
FW: Deciso OPNsense(ESXi上)
L2SW: Netgear GS310TP
無線AP:Netgear WAC505-10000S

ESXiは少しコマンド打つ必要があるのでまた別の機会に回す



■Sophos XG Firewall Home Edition
ログインしたら【システム】>【管理】>【SNMP】から以下の設定を行う
有効化してしまえば後の値は適当でいい
【SNMPエージェントを有効化する】のチェックを入れる
【名前】任意
【位置情報】任意
【連絡担当者】任意
【マネージャポート】162(初期値)


次に画面下の【コミュニティ】を設定するため【追加】を押して設定画面へ移る
【名前】public #community name
【IPアドレス】192.168.1.10 #Zabbixサーバ
【プロトコルバージョン】v2c
【トラップサポート】v2c


■Deciso OPNsense
初期設定ではsnmpが有効ではなくpingも通らないため、その設定も併せて行う
ログインしたら【システム】>【ファームウェア】>【プラグイン】から【os-net-snmp】をインストールする
右側の【+】でインストールしたら再度ログインし直して有効化

次に【サービス】>【Net-SNMP】からsnmpの設定を行う
【Enable SNMP Service】チェックを入れる
【SNMP Community】public #community name
【SNMP Location】任意
【Layer 3 Visibility】チェックを入れる


Zabbixサーバと疎通できるようにFWルールを追加する
【ファイアウォール】>【ルール】>【フローティング】にて
【送信元】LANネット
【送信先】このファイアウォール
としてICMPとUDP161(SNMP)の許可ルールを設定する
最初はLAN側に設定してうまくいかなかったが、フローティング側に設定するんだったのか



■Netgear GS310TP
ログインしたら【システム】>【SNMP】>【SNMPv1/v2】>【コミュニティ設定】から以下の設定を行う
【管理ステーションIP】192.168.1.10 #Zabbixサーバ
【管理ステーションIPマスク】255.255.255.240 #/28
【コミュニティ文字列】public #community name
【アクセスモード】Read Only
【状態】有効


SNMP Trapの設定もついでに追加
【システム】>【SNMP】>【SNMPv1/v2】>【Trap設定】から以下の設定を行う
【受信者IP】192.168.1.10 #Zabbixサーバ
【バージョン】SNMPv2
【コミュニティ文字列】public #community name
【状態】有効



■Netgear WAC505-10000S
ログインしたら【Management】>【Mantenance】>【Remote Management】から以下の設定を行う
【SNMP】Enableのラジオボタンを有効化
【read-Only Community Name】public #初期値
【IP Address (to receive traps)】192.168.1.10 #Zabbixサーバ
【Trap Port】162 #初期値

有効化してIP入れるだけなのでこれが一番設定が簡単だった


■Zabbix 5.0 (raspbian上)
Zabbix側にホストの追加を行う
ログインして【設定】>【ホスト】>【ホストの作成】から以下の設定を行う

・ホストタブ
【ホスト名】任意
【グループ】Templates/Network Devices
【インターフェース】初期値を削除してsnmpを追加して監視対象機器のIPアドレスを指定


・テンプレートタブ
【新規のテンプレートをリンク】Template Net Network Generic Device SNMPv2

・マクロタブ
【マクロ】{$SNMP_COMMUNITY}
【値】public



該当機種分同じ作業を繰り返して登録し、ある程度時間が経過するとSNMPが有効化されて値が取得される
これで死活監視や各機器のインターフェーストラフィック量が見やすくなるので、グラフの表示とかをまた調整しよう

2020年5月18日月曜日

Raspbian Buster LiteへZabbix 5.0 LTSのインストール

Ubuntu18.04へZabbix 4.0 LTSを入れたものの、OPNsenseを導入した影響でESXiのリソースが心も解くなったので、Zabbixのインストール先を変更する必要が出てきた

ちょうど5/12にZabbix 5.0 LTSがリリースされたのでそちらをダウンロードすることにした

Sambaサーバに利用しているRaspberry pi 3 B+であればもう少しソフトウェア動かせそうなのと、公式ドキュメントにインストールマニュアルがあったのでそちらを参考にした
DBはUSBメモリにディレクトリを移して容量を確保する
尚、Raspberry piの日本語化はすでに済ましてある


各ソフトウェアのバージョンは以下の通り
    Raspbian Buster Lite
    PostgreSQL 11.7
    Apache 2.4.38
    PHP 7.3.14-1
    Zabbix 5.0 LTS



まずはApacheとPHPとPostgreSQLのインストール
Raspbian BusterはDebina10ベースなので、以下のサイトのDebian10のページを参考にしてコマンドをコピペしていく


■Apacheのインストール
    $ sudo apt -y install apache2


■PHPのインストール
    $ sudo apt -y install php php-cgi libapache2-mod-php php-common php-pear php-mbstring

・タイムゾーンの変更
 $ vim /etc/php/7.3/apache2/php.ini
# 960行目:コメント解除しタイムゾーン設定
    date.timezone = "Asia/Tokyo"


■PostgreSQLのインストール
    $ sudo apt -y install postgresql

■PostgreSQLのデータディレクトリ変更
    ・フォルダ作成と権限変更
    $ sudo mkdir /mnt/usb/pgdata
    $ sudo chmod go-rwx /mnt/usb/pgdata
    $ sudo chown postgres:postgres /mnt/usb/pgdata

    ・DB初期化
     ユーザpostgresにログインして初期化コマンド叩いてユーザpostgresからログアウト
    $ sudo -s -u postgres
    $ /usr/lib/postgresql/11/bin/initdb -D /mnt/usb/pgdata
    $ exit

    ・設定ファイル書き換え
    $ sudo vim /etc/postgresql/10/main/postgresql.conf
     該当箇所を以下の通り書き換え
    data_directory = '/var/lib/postgresql/11/main' # use data in another directory
        
    data_directory = '/mnt/usb/pgdata' # use data in another directory

    ・postgesqlの再起動
    $ sudo /etc/init.d/postgresql stop
    $ sudo /etc/init.d/postgresql start


■Zabbixのインストール
    ・リポジトリ更新
    $ wget https://repo.zabbix.com/zabbix/5.0/raspbian/pool/main/z/zabbix-release/zabbix-release_5.0-1+buster_all.deb
    $sudo dpkg -i zabbix-release_5.0-1+buster_all.deb
    $ sudo apt -y update

    ・パッケージインストール
    $ sudo apt -y install zabbix-server-pgsql zabbix-frontend-php php7.3-pgsql zabbix-apache-conf zabbix-agent

    ・DB作成
    $ sudo -u postgres createuser --pwprompt zabbix
        #パスワードは任意で設定
    $ sudo -u postgres createdb -O zabbix zabbix

    ・初期スキーマとデータのインポート
    zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix

    ・Zabbixサーバの構成変更
 $ sudo vim /etc/zabbix/zabbix_server.conf
        #以下コメントアウトして追記
    DBPassword=(任意の値、後で使う)

    ・Zabbixサーバーとエージェントプロセスを開始
    $sudo systemctl restart zabbix-server zabbix-agent apache2
    $sudo systemctl enable zabbix-server zabbix-agent apache2



無事インストールが完了したらブラウザでIPアドレス/zabbixにてログイインする
問題なく表示されたら【Next Step】で次へ


インストール情報が出てくるので問題なければ【Next Step】で次へ


PostgreSQLへの接続情報を入れる欄には上で作成したパスワードを入力して【Next Step】で次へ


Zabbixサーバの情報を登録する
空欄でも可能だがとりあえずNameを【Zabbix】として【Next Step】で次へ


登録情報の確認画面
問題なければ【Next Step】で次へ



正常に設定完了された画面が表示されたら【Finish】で初期設定終了


ログイン画面に遷移したら初期のログインIDとパスワードでログイン


ログインした状態
GUIの表示が4.0LTSと変わってメニューが上から左に移っている


このままだと英語表記なので左下の【User setting】から【Language】を日本語に変更する


これで一通りの設定は完了
今度こそ自宅NW機器のsnmp設定を始めていこう

2020年5月13日水曜日

ESXi上にOPNsenseを構築

XG FirewallにIPoEの設定入れたらダイナミックDNS使えなくなってOpenVPNも利用できなくなったので、対処策としてPPPoEセッション用にルータを追加することに


構成は以下の感じ
XG FirewallのデフォルトルートはIPoEのIPIPトンネル向いてるので、優先度低めでOPNsenseにデフォルトルート向ければ、PPPoEもバックアップ回線に使えそう

色々設定できたら構成図綺麗に作り直そう




LIVA Zのリソースはあまり残って無いのでそれなりに軽量でも動くもので良さそうなのを探していたら【 OPNsense 】なる仮想Firewallがあるらしい

公式wikiの情報だと基本要件は以下の通り
  • Processor:1GHz dual core cpu
  • RAM:1GB
  • Install target:40GB SSD
メモリとストレージは余裕があるものの、CPUは4CoreともXG Firewallに振っているので、CPUだけは最小構成の1Coreでイケるだろう1GHzはあるし


設定はさくらのナレッジを参考にした


まずは公式サイトのダウンロードページからISOファイルをダウンロードする
Architectureは【amd64】
Select the image typeはdvd
Mirror Locationは好きなところを選べばいい

bz2形式で落ちてくるので7z使って適当なフォルダに解凍しておく
ダウンロードしたバージョンは20.1とのこと



ESXiにログインして仮想マシンを新規作成する
名前はわかりやすく【OPNsense】
互換性は初期値
ゲストOSファミリは【その他】
ゲストOSのバージョンは【FreeBSD11より前のバージョン(64ビット)】


利用するデータストアは一つしかないのでそのまま選んで次へ
CPU:1
メモリ:1024MB
ハードディスク1:40GB (シンプロビジョニング)
ネットワークアダプタ1:WAN側の仮想NW
ネットワークアダプタの追加で新規NIC追加してそちらはLAN側の仮想NWを割り当て
CD/DVDドライブ:データストアISファイル
として先ほど回答したISOファイルをアップロードする



作成完了したら起動して仮想コンソールから初期設定を行う
画面が起動したらエンターを押して先へ


途中でPress any key to start the manual interface assignment:
と聞かれるのでエンター押して手動設定へ移行
nic名とMACアドレスが表示されるのでESXi上の画面と照らし合わせてWANとLANを間違えない様に気を付ける
VLNAは使わないのでn
WANはem0
LANはem1
追加インターフェースは利用しないので未入力のままエンター

login:が表示されたら
login:root
PW:opnsense
でログインしてCLIで変更画面へ


【2) set interface IP address】の2を選んでIPアドレスを設定する
IPアドレスは192.168.1.14
サブネットは28
defaultgatewayを聞かれるが、VLAN越しにSSHで繋げる予定なのでXG Firewallの値の192.168.1.1を入れておく
これやらないとVLAN越しにルーティングできずにブラウザからのアクセスができなくなる
ラズパイ踏み台にしてやればいいんだろうけど


設定したら一旦ログアウトして以下の値でログインする
これでFirewall本体のインストール作業に入る
login:installer
PW:opnsense

キーボード設定を変更するため【Change Keymap(default)】から【jp.kbd】を選択
インストール方法は【Guided installation】を選択してストレージを選択
インストールモードは【GPT/UEFI】を選択
最後にrootパスワードの再設定、後で変更する場合は空欄のままエンター押せば初期値のままとなる

インストールが完了したらrebootして、起動後にIPアドレスでWebブラウザからアクセスできる




後はVLAN側へのスタティックルートとWANへのPPPoE設定とダイナミックDNS設定とOpenVPNの設定をやっていこう