Postfix+DovecotサーバからGSuite(Gmail)へ移行する

仕事で、Postfix+Dovecotで構築されたメールサーバからGSuite(旧GoogleApps)のGmailにメールサーバの移行をしてるので、その際の内容を備忘として残しておく。 既存メールサーバ⇒GSuiteへの移行は、基本的には以下の流れで行うようだ。

  1. GSuiteにドメインの登録
  2. 既存のメールユーザ作成(ふつうにユーザ作成 or AD連携の実施)
  3. 旧メールサーバのメールがGSuiteに転送されるよう二重配信の設定をしておく (プライマリメールサーバは旧メールサーバで、GSuiteにメールが転送される)
  4. メール利用ユーザへの切り替え周知(GSuiteをサーバと...

前回、Let's Encryptを使って無料のSSL証明書を取得してWebサーバの暗号化を行ったので、今回はメールサーバ(Postfix+Dovecot)での対応を行う。 なお、すでにPostfix + Dovecotでメールサーバは構築済みの状態とし、同居しているWebサーバはいないものとする。

1.Let's Encryptのインストール

まずは、以下のコマンドでgitをインストールしてLet's Encryptをダウンロードしてくる。

yum install -y git openssl mod_ssl
git clone https://github.com/lets...

CentOS 7にて、Postfix+Dovecotでのメールサーバ構築を行う。 あくまでも基本的な内容のみなので、SSL非対応・PAM認証方式とする。

1.Postfix+Dovecotのインストール

まず、以下のコマンドでPostfixおよびDovecotのインストールを行う。

yum install -y postfix dovecot cyrus-sasl cyrus-sasl-*

これでパッケージのインストールは完了。

2. Postfixの設定

Postfixの設定を行う。 設定ファイル「/etc/postfix/main.cf」にて、以下の項目について記述...


Postfixで、メールサーバの移行などでメールを"ユーザ名は同じだが別ドメインのメールアドレス"にも送信する場合は、普通にalias_mapsで正規表現を書くだけだとうまく転送されない。 この場合はvirtual_alias_mapsを設定し、正規表現で記述してやることでメールを複製して転送させることができる。

まず、「/etc/postfix/main.cf」にて以下の記述を追記(もしくは変更)する。

virtual_alias_maps = regexp:$config_directory/virtual_alias.regexp

社内や社外のクラウド上に構築する検証サーバでSSLを設定していたりするのだが、検証用のために証明書をちゃんと買うというのも懐事情としては厳しい時もある。 だからと言って認証されていない状態だと、RestAPIなどにアクセスする際に処理がうまくできないことがある。 社内の場合であればプライベート認証局でも作れという話かもしれないがめんど(ry...もとい、設計とかでそれなりに工数がかかる。

なんかいい感じに手抜きできる方法ないかなと思っていたのだが、最近は無料でSSL証明書を発行してくれるプロジェクト「Let's Encrypt」というものがあるようなので、試してみることにした。 これな...


ツイートで『sedsed』なるツールについて流れてきてたので、何だこりゃと思ったらどうやらsedスクリプトのデバッグとかができるツールらしい。 Pythonで書かれているようで、比較的昔からあるツールのようだ。

インストールは以下のコマンドで行える。

git clone https://github.com/aureliojargas/sedsed
cp sedsed/sedsed.py /usr/local/bin/sedsed

とりあえず、実際にデバッグをしてみよう。 以下のように、「--debug」オプションを付与して普通にsedを実行するように条件を入力する。

コマ...

CentOS 7にソースコードの静的解析を行う『SonarQube』をインストールする

JavaやC、PHPやPythonなど複数言語のソースを統合管理できるツール『SonarQube』なるものを知ったので、試しにCentOS 7にインストールしてみることにする。
『SonarQube』については、以下の概要が詳しい。

なお、すでにSELinux/Firewalldについては停止・無効化しているものとする。

1.前提パッケージの導入

『SonarQube』では、JavaとPostgreSQL(MariaDBはサポート外だが、MySQLも利用できる)を使うのでそれらを導入する。 まず、...


CentOS 7にWebベースのオープンソース請求情報管理システム『Simple Invoices』をインストールする

別件の調べものをしていたところ、Webベースのオープンソース請求情報管理システム『Simple Invoices』なるものを見かけた。
請求管理システムというと商用ではいろいろとあると思うのだが、オープンソースのものもあるのかと。
まぁ、日本と海外だと商習慣とか税金とか色々と違いがあるのでそのまま使えるかどうかはわからないけど、とりあえずインストールしてどんなもんかだけ触ってみることにする。なお、今回は検証なので、事前にFirewalldおよびSELinuxは停止住みとする。
(最後に更新されたのが2013年なのだが、大丈夫かな…?)

1.前提となるパッケージのインストール

ま...


WordPressとSlackの連携をする

WordPressで予約投稿やコメントがされた際にSlackにポストされると便利だと思って調べてみたところ、ちゃんとプラグインがあるようだ。
まず、[プラグイン] > [新規追加]から「Slack」で検索をかけて、プラグインのインストールを行う。

こちらからWebHookのURLなどを生成したら、WordPressの左メニューより[Slack] > [Add New]を選択し必要となる情報を入力する。

以...


最近、あのMicrosoftがOSSに歩み寄ってきており、先日にはLinux Foundationのプラチナメンバーにまでなった。何があるかわからないものだなぁ…。
で、先日知ったのだがどうやらMicrosoft SQL ServerもLinuxにインストールできるようになってたようだ。一体どういうことなんだ…。

というわけで、せっかくなのでCentOS 7にMicrosoft SQL Serverをインストールしてみる。手順についてはMicrosoftで用意されているRHEL用のものを使用する(なお、Ubuntu Serverの場合はこちら)。事前にsudoが使用できる...


単純にRsyslogでログ転送の設定をした場合、サーバへのログのパケットは平文で転送されるのでパケットキャプチャをされると中身が見えてしまう。 これを防ぐには、ログの転送時に暗号化をするように設定をする必要がある。

今回は、RsyslogサーバにCentOS 7を用いての設定を行う。

1.Rsyslogサーバ側の設定

前提となるパッケージの導入

まず、以下のコマンドを実行し暗号化に必要となるパッケージの導入を行う。

yum install -y gnutls-utils rsyslog-gnutls openssl

CA証明書の作成

パッケージの導入後、CA証明書の...


今触っている環境ではクライアントの接続するネットワークではDHCPサーバを動かしているのだが、ふとクライアントの固定IPの設定を許可しない方法(DHCPを強制する方法)が何かないかと思っていたところ、職場のチームリーダーからDHCPスヌーピングを利用するとよいとのアドバイスを受けた。
DHCPスヌーピングとはなんぞ?という点については、以下のページが参考になる。

上記ページを見てもらえればわかるが、クライ...


Ubuntu Server 16.04でRsyslogサーバへのログ転送をする場合は、クライアント側で以下のようコマンドを実行し、設定ファイルを作成する。

sudo sh -c 'cat <<"EOF" > /etc/rsyslog.d/60-toserver.conf
*.*     @@Rsyslogサーバのホスト名orIPアドレス:514

$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionRes...

CentOS 7でrsyslogサーバを構築し、クライアントからのログを受け付ける設定をする。

1.基本的な設定

サーバ側の設定

まずはrsyslogサーバとなるホスト上で、以下のように設定ファイル(/etc/rsyslog.conf)の記述を変更する。

/etc/rsyslog.conf
# Provides UDP syslog reception $ModLoad imudp # コメントアウトを解除(UDP) $UDPServerRun 514 # コメントアウトを解除(UDP) # Provides TCP syslog reception $ModLoa...

ドメインやホスト名に関する情報をDNSサーバから取得するコマンドといえば、やはりdigコマンドだろう。
いろいろとオプションのあるdigコマンドだが、今回は普段使ってて便利なオプションや使い方について残しておくことにする。

1.基本的な使い方

基本的には、以下のように該当のドメインを指定して名前解決をする際に利用する。

dig ドメイン名
blacknon@BS-PUB-UBUNTU-01:~$ dig orebibou.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> orebibou.com
;; global options: +cmd
;;...

コンソール上に一行のお天気情報を出力する『AnsiWeather』

調べものしてたところ、コンソール上に一行でお天気情報の出力を行うコマンド『AnsiWeather』なるものを見かけたので、少し触ってみることにする。
シェルスクリプトで書かれているようだ。bcコマンド、jqコマンドが必要になる。

インストール方法は簡単で、以下のコマンドで行える。

git clone https://github.com/fcambus/ansiweather
cp ansiweather/ansiweather /usr/local/bin/

もしくは、MacやUbuntuであればbrewやapt-getでインストールが可能だ。
インストール後は、以下のよ...


Linuxでファイルを比較して片方にしかない内容のみ抜き出す

コンソール上でファイルを比較した際、片方にしかない行のみを抜き出したい場合があったので備忘として残しておく。

1.commコマンドを使う

一番簡単なのが、commコマンドを使ってやる方法だろう。
commコマンドでは、比較するファイルを引数で指定することで以下のように出力される。

comm --nocheck-order ファイル1 ファイル2

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt
aaaa
bbbb
cccc
dddd

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test2.tx...

AWSの昨日までの各サービスの利用料金をSlackに通知させる

AWSで、昨日までの各サービス、アカウント全体での利用料金についてSlackでポストさせるようにしたかったので、とりあえずPythonで簡単なスクリプトを作ってみた。
Lambdaでやってもよかったのだが、手元にあるジョブサーバを使わないといかんという使命感の元普通にサーバ上で動くようにした。認証情報についても事前にexportしとけばいけるはずなのだが、とりあえずスクリプト内で記述するようにしてる。
利用料金についてCloudWatchに連携されている必要があるので、事前にCloudWatchへの連携をしておくこと。
ライブラリとしてboto3とSlackWebを使っている。


『Spacewalk』でOpenSCAPを用いたセキュリティチェックを行う

Spacewalkでは、各クライアントサーバに対しOpenSCAPを用いたセキュリティチェックを行うことができる。
なお、事前にosadサービスをクライアントにインストール済である必要があるので注意。

まず、以下のコマンドでクライアント側にSpacewalkでOpenSCAPを使うためのパッケージをインストールする。

yum install -y spacewalk-oscap

クライアントへのパッケージインストール後、まずスキャンを行うためのファイルを配布する。
こちらからスキャン用のファイルをダウンロードして、各クライアントにファイルをデプロイしてやる(今回は、「/tm...


『Spacewalk』で各クライアントサーバへファイルのデプロイを行う

RHEL系OSの統合管理ツール『Spacewalk』では、特定のチャンネルに所属サーバへファイルのデプロイを行えるので、その設定を行う。
まず、以下のコマンドをクライアント側で実行し、ファイルのデプロイが即座に行えるようにする。
デフォルトではrhnsdがSpacewalkサーバからの指示を確認する(rhn_checkコマンドの実行)のが240分なので、「/etc/sysconfig/rhn/rhnsd」で60分に書き換えてやるのもいいが…それだと定期的に実現できないので、osadというツールを入れる。なお、SSL接続が前提になるので、接続先のサーバのアドレスはFQDNで記述したりしてやる...


『Spacewalk』からクライアントにコマンドを実行する

Spacewalkからクライアントにコマンドを実行する場合は、システム設定マネージャでまとめて実行する場合と、クライアント単体での実行の場合の2パターン存在する。
なお、どちらの場合でもosadが必要になるので、事前に設定しておくこと。

1.システム設定マネージャでまとめてコマンドを実行させる

複数のクライアントに対しまとめてコマンドを実行させる場合は、まず対象のシステムをシステム設定マネージャに登録する。
[システム] > [システム]からシステム設定マネージャに追加するクライアントを選択し、「選択対象をシステム設定マネージャーに追加」をクリックする。

システム設定マネー...


『Spacewalk』でクライアントが参照するローカルリポジトリサーバを構築する(CentOSのSecurityUpdate用のリポジトリサーバ構築)

前回、RHEL系OSの統合管理ツール『Spacewalk』についてインストールしたが、今回は『Spacewalk』上にクライアントから参照できるローカルリポジトリサーバを構築して各クライアントに参照させてみる。
設定には、有志の作ったこちらのスクリプトを用いている。
今回は、CentOSで「yum --security」を利用できるようにローカルリポジトリサーバを『Spacewalk』上に構築して、各クライアントがこのリポジトリサーバを参照するようにする。

1.Spacewalkでのセキュリティリポジトリサーバの構築

まず、以下のコマンドでスクリプトをダウンロード、インス...


データの流れを制御するツール『Apache Nifi』をCentOS 7にインストールする

データの流れを制御するためのツール『Apache Nifi』というものがあって、前々から興味を持っていたのでインストールをしてみることにした。
データフローを制御するってなんじゃいと最初思ったのだが、データ(ログとかセンサーのデータ)をApacheNifiに投げてやることで、Nifi側でこのログはこっちのシステム、あのログはあっち、このセンサーデータはそっちというようにデータの連携先を定義してやることができるらしい。ろ過装置のように流れているデータを少し加工して連携先に投げることもできるようで、まさにデータフローを制御することができるシステムのようだ。

その他『Apache Nifi』に...


CentOS 7でOpenSCAPを使ったセキュリティチェックを行う

今回は、OpenSCAPというツールをCentOSにインストールして、パッケージの脆弱性やセキュリティ設定のスキャンを行わせてみる。
OpenSCAPというツールに関する概要は、以下が詳しい。

その他、Spacewalkなどで統合管理をしつつ、定期的なスキャンを行わせることもできるようだ(クライアントとなるサーバにパッケージが必...


コンソール上に一行のグラフを表示させる『spark』コマンド

前々から知ってはいたのだが、コンソール上にフォント使ってグラフを描くという『spark』コマンドをインストールしてみる。
シェルスクリプトのようなのだが、フォントをうまいこと使ってグラフを書いてるのでちょっと面白い。

インストールは、以下のコマンドで行える。

sudo sh -c "curl https://raw.githubusercontent.com/holman/spark/master/spark -o /usr/local/bin/spark && chmod +x /usr/local/bin/spark"


仕事で、S3のバケットごとの利用容量取得を行う必要があったので、その備忘。
スクリプトをわざわざ作るのは面倒だったので、とりあえず以下のコマンドで取得した。

aws s3 ls | awk '{print $3}' | xargs -I{} sh -c 'echo {}:$(aws s3 ls s3://{} --recursive --human-readable --summarize | awk -F: "/Size:/{print \$2}")'

「geoiplookup」というコマンドを使うことで、コンソール上からグローバルIPがどこの国のものなのか見れるようなので、コマンドのインストール方法と簡単な使い方について備忘として残しておく。
コマンドのインストール方法は、以下のように行う。

yum install GeoIP # CentOSなどRHEL系の場合
sudo apt install geoip-bin # Ubuntu/Debian系の場合
brew install geoip # MacOS Xの場合

以上でインストールができる。
使い方としては、以下のようにコマンドを実行することでそのグローバルIPアドレスが...


『Spacewalk』に管理対象サーバ(クライアント)を追加する

前回Spacewalkのインストールを行ったので、今回はそのSpacewalkに管理対象ノード(クライアント)を追加する。
Spacewalkで管理するクライアントには専用のパッケージをインストールする必要がある。今回は、CentOS 7をクライアントとして追加する。

なお、クライアント側がサーバに登録されるよう、事前にサーバ側で設定を行っておく。

1.Spacewalkサーバ側での設定

Spacewalkで[チャンネル] > [ソフトウェアチャンネルの管理]を選択し、「チャンネルの作成」を押下する。

[ソフトウェアチャンネルの作成]画面に遷移するので、チャンネル名やチャ...


Red Hat SatelliteのOSS版『Spacewalk』をCentOS 7にインストールしてRHEL系OSを統合管理する

RHELの運用管理ソフトウェアとして『Redhat Satellite』というのがあるのだが、これがあると各サーバのパッケージのバージョンや設定の管理などを統合管理できる。
で、CentOSなどでこれと同じようなことをしたいなぁ…という場合はSatelliteのOSS実装である『Spacewalk』を入れるといいだろう。

今回は、この『Spacewalk』をCentOS 7にインストールする。
なお、事前にSELinuxとFirewalldは停止しているものとし、今回の検証でのサーバ名は「BS-PUB-SPACEWALK-M.BLACKNON.LOCAL」とする。

1.

...