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をいくらいじっても、基本的にはメールログには記録されない。(ログレベルを上げればできるかも。この辺は調べてない。)

参考サイト)

 

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

ファイル検索でよく使われる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)

 

CentOS7にmysqlインストール

1.mariaDBの削除

CentOS7にはデフォルトで競合するmariaDBが入っているので削除する

・mariaDBのインストール確認

・mariaDBとデータ削除

 

2.MySQL5.7のインストール

・公式リポジトリ追加

本記事執筆時では、mysql57-community-release-el7-11.noarch.rpmが最新 のよう。

・インストール

・確認する

・自動起動設定

・起動する

 

3.mysqlに入る

・初期パスワード確認

・******の部分がパスワード。このパスワードを使って入る。

・SQL発行の前に、新しいパスワードを設定する必要があるので設定する。

・ちなみにパスワードの強度が低いと怒られて変更できない。

・SQL発行テスト

これでOK。

 

参考URL)

 

CentOS7でSSHのポート変更

  • 現在の状態を確認

  • sshd_configの修正

  • sshd再起動

  • firewalldの設定からSSHを削除

  • firewalldの設定にssh-10022を追加

既存のssh.xmlをコピーしてssh-10022.xmlを作成する

ssh-10022.xmlファイル内のポート番号を22から10022に変更する

ファイアウォール設定に追加

 

  • firewalldをリロード

  • 変更後の状態を確認

 

参考URL)

CentOS7でファイアウォールの設定

  • サービス状態確認

※”…/firewalld.service; disabled;”になっているので自動起動無効

  • 自動起動するように設定

  • サービス起動

  • 現在の有効な設定を確認

  • sshの設定を追加(22番ポートを許可)

  • mysqlの設定を追加(3306番ポートを許可)

  • 削除する場合

  • 設定一覧を表示(必要に応じて)

  • 再度設定を確認

※mysqlとsshが追加された

 

  • ちなみにiptables使う場合

インストール方法は割愛
※firewalldと併用でないのでiptablesを使う場合はfirewalldは停止する

 

参考URL)

CentOS7でのサービス起動・停止・自動起動設定など

  • サービス一覧と自動起動設定の確認

CentOS6まで

CentOS7から

enabled →自動起動有効
disabled →自動起動無効
static →単体で自動起動設定ができないサービス

 

  • 個別に確認したい場合

CentOS6まで

CentOS7から

例:sshdの状態確認

“…/”Unit名”; eabled;” →自動起動有効
“…/”Unit名”; disabled;” →自動起動無効

Active: active (running) →サービス起動中
Active: inactive (dead) →サービス停止中

 

  • 自動起動の設定

CentOS6まで

CentOS7から

例:sshdの自動起動設定

 

  • 起動・停止・リスタート・リロード

CentOS6まで

CentOS7から

例:sshdを起動するとき

 

参考URL)
http://qiita.com/haisaihiroki/items/c38cb3c0a331db9b6f69

メール本文にピリオド(.)のみの行がある場合の対処

今更感がありますが、、。

SMTP通信上は、原則ピリオドのみの行(正確にはCRLF.CRLF)はメールの終わりを意味します。

本文にこれらが含まれていた場合、以降のデータが無視されてしまいますので、SMTPとPOPのルール上は、本文にピリオドのみの行があった場合には、送信時にピリオドをさらに1つつけ、受信時(POP処理時)には1つピリオドを落とします。

sendmailでは-iオプションで送信時に上記の処理を勝手にやってくれます。(逆に-iオプションを付けないとデフォルトでピリオドだけの行を終端と見なし以降は無視される、という仕様に驚き)

 

qmailやPostfixで、sendmailラッパを利用している場合でも、きちんと動作します。

 

参考サイト)

https://fumiyas.github.io/2014/12/13/sendmail.postfix-advent-calendar.html