DKIMの複数ドメイン対応と作成者署名,第三者認証(CentOS7.2+Postfix+OpenDKIM)

Postfix, OpenDKIMはインストール済み、firewallも適切に設定済みであると仮定。

鍵ペアの作成

※複数のドメインを異なるキーペアで認証する場合は上記を繰り返し、必要数分キーペアを作成する。ドメインが異なればセレクタ名は同じでも大丈夫だが、混乱を避けるため変えてもよいと思う。

OpenDKIMの設定

1つのドメインしか扱わない場合

複数のドメインを扱うが、すべて同じキーペアを使う場合

複数のドメイン、複数のキーペアを扱う場合

※上から順に処理されるので、ワイルドカード(ex: *@*, *@*.example.com, *@sub.*)を使うとその下の行は無効になる。ドメインを明示的に指定する場合はワイルドカード行の上に書いておく。

 

キーペアの公開鍵を取得

公開鍵をDNSに登録

①FROMドメインが“example.com”で“example.com”の署名を使い作成者認証する場合は、”example.com”のDNSサーバに公開鍵を登録。

項目
Name selector._domainkey
Type TXT
Value “v=DKIM1; k=rsa; p=MIGfMA0GCS…”

ポリシーが登録されてなければポリシーも登録。

項目
Name _policy._domainkey        
Type TXT
Value “t=y; o=~”
項目
Name _domainkey            
Type TXT
Value “t=y; o=~”

②~③FROMドメインが”hoge.com”で“hoge.com”の署名を使い作成者認証する場合は、”hoge.com”のDNSサーバに公開鍵を登録。

FROMドメインが”任意のドメイン”で“example.com”の署名を使い作成者認証する場合は、任意ドメインのDNSサーバに公開鍵を登録。

⑤~⑥FROMドメインが”fuga.com”で“example.com”の署名を使い第三者認証する場合は“example.com”ドメインのDNSサーバに公開鍵を登録。

⑦FROMドメインが”任意のドメイン”で“dkim.example.com”の署名を使い第三者認証する場合は“dkim.example.com”ドメインのDNSサーバに公開鍵を登録。

項目
Name selector_common._domainkey.dkim
Type TXT
Value “v=DKIM1; k=rsa; p=MIGfMA0GCS…”
項目
Name _policy._domainkey.dkim     
Type TXT
Value “t=y; o=~”
項目
Name _domainkey.dkim         
Type TXT
Value “t=y; o=~”

レコード返却の確認

Postfixの設定

サービス再起動

確認

Gmailが一番わかりやすいので、Gmailでテスト

受信したメールで、DKIMがPassで、ヘッダが以下のようになってればOK。

作成者認証の場合

DKIMSignature: (~略~)
d=example.com;
s=selector;
b=xdIeG4cUHIBhU0nix2V5tK9Z
(~略~)
From: <someone@example.com>        

第三者認証の場合

DKIMSignature: (~略~)
d=example.com;
s=selector;
b=xdIeG4cUHIBhU0nix2V5tK9Z
(~略~)
From: <someone@hoge.com>        

 

参考サイト)

 

UTF-8のCSVファイルを文字化けなくエクセルで開く

エクセルの仕様なのか、何も考えずにUTF-8のファイルエクセルで開くと、標準文字コードで開くため、だいたいの確率で文字化けします。

ちなみにShift JISであれば、問題なく開けます。

対策としては、適当なテキストエディタなどで開いて、UTF-8(BOM付き)で一度保存すれば、次からはエクセルでも文字化けせず問題なく開くことが出来ます。

このことから、コンテンツの最初にBOMをつけてやれば、ダウンロード後すぐにエクセルで文字化けなく開くことが出来ます。

動的出力するCSVファイルであれば、対策は簡単です。以下はPerlでの例です。

たったこれだけです。

なお、他サイトなどで、BOMは”0xFE 0xFF”などと紹介しているところがありますが、”0xFE 0xFF”はUTF-16のBEエイディアンのBOMであり、UTF-8のBOMは”0xEF 0xBB 0xBF”ですのでご注意ください。

テキストエディタだと”0xFE 0xFF”をつけてもちゃんと解釈してくれることがありますが、エクセルの場合は”0xEF 0xBB 0xBF”を付けないとダメ見たいです。

参考サイト)

 

Postfixのメールログで特定のキューIDを抽出する

あるメール配信で配信エラーになった場合に、相手先からどのようなエラーコードとバナーが返却されているかを調べるときに便利。

ちなみに、postfixのログは、一行ごとに、

といった構造で書かれる。同じキューIDのログを調べれば、一通のメールの一連の動きを追うことが出来る。

直近の”to@hoge.com”宛てのメールのキューIDを取得するシェルスクリプト

結果

ちなみに上記は「said: 550 Invalid recipient: <to@hoge.com>」と返ってきているので、メールを送ったこのユーザ(to@hoge.com>)は存在しなかったということになる。

ちなみに理想としては、エンベロープFROMに、宛て先と送信するたびの履歴番号など、特定の情報を仕込んでおくと、時系列で探しやすい。

sendmail使うなら、

とかしておくとよい。(この場合「to=hoge.com-001@fuga.com」がエンベロープFROM)

そうしておけば、何回も同じ宛先に送っている場合でも、下記のように目的のキューIDを探しやすくなる。

なおヘッダーFROMをいくらいじっても、基本的にはメールログには記録されない。(ログレベルを上げればできるかも。この辺は調べてない。)

参考サイト)

 

サブドメインで公開していたバーチャルホストをaliasを使ってメインサイトの配下に配置する

例えば、

  • www.hoge.com →サービスのメインサイト
  • help.hoge.com →サービスのヘルプサイト(バーチャルホスト)

のような形で運用していたものを、ファイル構成などを変更せず、

  • www.hoge.com
  • www.hoge.com/help

のように、メインサイト配下に内包して見せたい場合。主にSEO対策。

 

まず、help.hoge.comのapache設定ファイル(httpd.confなど)の内容をコピーしておく。

※今回はPlesk9下のバーチャルホストで動いているので、httpd.includeの内容をコピーしておく。

 

次に、alias用のapache設定ファイルを作成する。Plesk9配下で動いている場合は、confの下にvhost.confという名前で作成する必要がある。

参考にしたサイト)

 

SSL用にもこの設定ファイルをコピーしておく。Pleskの場合SSL用のファイル名は、vhost_ssl.confにする必要がある。内容はとりあえず同じでOK。

 

作成した設定ファイルをapacheに読み込んでもらうようにする。

参考にしたサイト):https://ex-cloud.jp/support/question/g-437

 

ヘルプサイトがワードプレスやCMSを使用している場合、.htaccessでリダイレクト設定(SEF 設定)を行っている場合があるので、静的URLでも動くよう修正する。

参考にしたサイト)

 

最後にWEBサーバをリロード

 

後はGoogleにインデックス登録してもらえるように、Search Console からsitemap.xmlなどを送信しておけばよいでしょう。

 

phpmyadminで大きなサイズのファイルをインポートする

.sqlファイルをインポートするときなど、制限があるとアップロードが途中で止まってしまう。

エラー:「アップロードしようとしたファイルが大きすぎるようです。…」など。

解決法としては、

  • エクスポート時にファイルを圧縮しておく。
  • Bigdumpを利用する。
  • sshで接続し、SCP転送する。

などがあるが、VPSやクラウド環境などの場合は、php.iniを編集した方が早いかも。

編集後、このままだと反映されないので、WEBサーバを再起動する必要があります。

以上。

参考サイト)

 

CentOS5環境に yum を使って sysstat を導入する

CentOS5はEOL(End of Life)で yum を使っての更新が出来ません。
例えば「yum install -y sysstat」というコマンドがエラーとなってしまいます。
yum での更新が必要な場合、古いリポジトリを参照するようにレポジトリ定義ファイルの設定を変えます。

修正したレポジトリ定義ファイルは下記。
/etc/yum.repos.d/CentOS-Base.repo

修正内容は下記。

ところが、この修正だけでは sysstat を拾ってきてくれませんでした。
エラーの内容は下記の通り。

なぜかRepoForgeに向いてしまっているので、その設定を無効化します。
修正するファイルは下記。
/etc/yum.repos.d/rpmforge.repo
修正内容は
enabled を 1 から 0に変更するだけです。

ここまでの変更で、yum を使った更新作業が可能になりました。

参考資料

特定の名前のファイルを再帰的に削除する

ファイル検索でよく使われるfindと併用するといいらしい。

 

WindowsのローカルからLinuxのリモートにSCPしたときに、余計な「desktop.ini」が一緒にアップされちゃったときとか。

 

 

sshd_configによる接続制限

接続元のIP制限を行うとき、一番お手軽なのはやはりTcpWrapperによる制限

しかしこれだとTCPレベルで一括制限され、ユーザ別の判定はできないので、ユーザ別やグループ別に制限したいときはsshdで制限するのがよろしいかと。

1.sshd_configを編集

2.sshd再起動

以上。

 

参考URL)

 

TcpWrapperによるSSHのIP制限

・環境はCentOS5.5および7.2

1.設定ファイルバックアップ

2.許可する接続元を指定

“hosts.allow”に許可する接続元を指定。”hosts.deny”で全接続を拒否。

3.許可されていない接続元から接続できないことを確認

OK.

 

参考URL)

SSHのIPアクセス制限 まとめ

 

社内用プロキシサーバの作成

複数のサーバを運用している場合、それぞれのサーバにどこからでも接続できる状態だと、セキュリティやスタッフ管理の面でよろしくないので、プロキシサーバを使用してセキュリティを高める。

 

1.プロキシ用サーバ作成

まずプロキシ用のバーチャルサーバを立ち上げ、NICや必要なIP(最低限グローバルとローカル1つずつ)を割り当てる。
やり方については各ベンダーでマニュアルなど用意していると思うので割愛する。

なおスペックについては、SSHトンネルするだけなので、最低限のリソースでOKかと思う。
今回はCentOS7.2 Xen 64bitを使用した。

 

2.ユーザ作成

弊社の場合は某社のクラウドなので最初はVPN接続してログインユーザ作成

ちなみにAWSであればec2-userなどで最初からログインできるので上記は不要

 

3.rootログイン禁止

使いやすいPuttyやPoderosaなどのSSHクライアントで接続

・sshのrootログイン禁止

 

4. ファイアウォールの設定

今回はポート10022(ssh用)だけを許可する。

やり方はこちらを参照。

 

5. sshのポート番号変更

攻撃回避のためssh用のポートを22から10022に変更する。

やり方はこちらを参照。

 

6. 不要サービスの停止

・必要最低限のサービスだけで動かしたいので不要なものは停止する。

判断はこちらとほぼ同じ
違いはcron停止、firewalld残し。

・SELinuxも無効に

 

7. スタティックルーティングの設定

弊社の場合ローカルネットワークのセグメントがもう1つあり、そちらのセグメント(172.18.0.0/16)にも接続できるようにするためスタティックルーティングの設定を行う。

・ローカルネットワークのデフォルトルーティング設定ファイルを無効化(デバイス名をeth1とした場合)

⇒ No such file or directoryとなっても、もともと無いのでそのままでOK

・別セグメント(172.18.0.0/16)へのルート設定追加

・ネットワーク再起動

(service network restartでも一応いける)

ちなみにCentOS7から採用されたnmcliで行うときは、

のようなコマンドを打つが、ベンダーの仕様の関係なのか、eth1もeno1もnmcliでは認識されていなかった。
ただNetworkManagerは動いてるのでipコマンドは通る。昔の名前(eth**)でデバイス名が認識されていた。
やり方あるのかもしれんがネットワークは疎通してるのでまあいいか。

nmtuiで行う方法もあるらしいが、TUI画面は起動したがなぜかうまく動かなかった、、、。

・ルート確認

ちなみにベンダー側のコンソールでネットワークの再構築を行うとどうなるか。
→案の定スタティックルーティングの設定が初期化された
→ネットワーク再構築をしたら、再度スタティックルートの設定を行う必要あり。

・疎通確認

OK。

 

以上で基本的なプロキシ構成は完了。

プロキシを使用するスタッフ数分、useraddしてユーザを作成し、それぞれ接続して使用する。
あとは必要に応じて鍵認証にしたり、IP制限したり、トンネルするときのやり方を社内で決めてあげればOK。

スタッフが辞めた場合は、userdelしてそのスタッフ用のユーザを削除してやればOK。

 

参考URL)