新人PGの学び

プログラマーの卵のlog

postfix の設定やmaillogの確認

postfixの転送先設定ファイル

/etc/postfix/main.cf


relayhost

転送先の上位メールサーバを指定できる設定値。


fallback_relay

デフォルト配送先に配送できないときの配送先


設定値による挙動

relayhost:無し、fallback_relay:無し

 どこにも転送を行なわず、そのサーバからの配信のみ


relayhost:無し、fallback_relay:有り

 そのサーバからの配信を試みるが、失敗したらfallback_relayへ転送


relayhost:有り、fallback_relay:無し

 relayhostに転送・再送する


relayhost:有り、fallback_relay:有り

 relayhostに転送し、fallback_relayへ再送する


設定反映後

postfixのサービス再起動

/etc/init.d/postfix reload


maillogの確認

/var/log/maillog/


maillogの追跡

※問題や処理は syslogd に記録
※日時、ホスト名、syslog_name、postfix内部プログラム名、プロセスID、メッセージ の順

postfix/pickup:ローカルメール(内部配送)の収集

デーモンは新しいメールが maildrop ディレクトリに入るのを待ち、そ
れを cleanup(8) デーモンに送る。
間違った書式のファイルは作成者に 通知せずに削除される。

postfix/cleanup:メッセージのカノニカル化およびキューの発行

デーモンは入ってきたメールを処理し、incoming メールキューに入れ
て、キューマネージャに到着したことを知らせる。
それぞれのメッセージに問題がないかチェックし、デフォルトではクライアントに診断ステータスが返され、問題をクライアントが取り扱うようにする。
または問題が起こったらクライ アントが cleanup デーモンに、メッセージを送信者にバウンスするように要求できる。

postfix/qmgr:キューマネージャ

デーモンは入ってくるメールの到着を待ち、Postfix 配送プロセスが配送
するための準備をする。
size=800 メッセージのサイズ
nrcpt=1  メッセージの配送先
※メーリングリストのメンバー数が表示
  • ファイル

/var/spool/postfix/incoming, incoming キュー

/var/spool/postfix/active, active キュー

/var/spool/postfix/deferred, deferred キュー

/var/spool/postfix/bounce, 非配送状態

/var/spool/postfix/defer, 非配送状態

/var/spool/postfix/trace, 配送状態


postfix/smtp:

SMTP サーバはネットワーク接続要求を受け取り、1接続につきゼロまたはそれ
以上の SMTP 処理を行う。

受信したそれぞれのメッセージは cleanup(8)
デーモンにパイプで渡され、incoming キューに単一のキューファイルとしておかれる。


ログを検索する場合

上記のように一連のログは、キューIDが同じなので
1、grep メールアドレス maillog で検索し、該当のメールキューIDが判別
2、grep キューID maillog のように再度キューIDで検索すると良いかも


/var/log/maillog(送信)

postfix/picup[17166]: C7640280020: uid=48 from=

pickupプロセスが送信メール(キューID:C7640280020)を検出した

uid:送信者のユーザID

from=:送信者のメールアドレス


postfix/cleanup[17482]: C7640280020: message-id=

cleanupプロセスがメールをキューに保管した


postfix/qmgr[3323]: C7640280020: from=, size=800, nrcpt=1 (queue active)

キューマネージャー(qmgr)がキューに保管されたメール(キューID:C7640280020)を発見した

メールサイズ:800byte

nrcpt=1:宛先数が1つ


postfix/smtp[17484]: C7640280020: to=, orig_to=, relay=ZZZ.com[ZZZ.ZZ.ZZZ.ZZZ]:25, delay=0.07, delays=0.04/0/0.01/0.02, dsn=2.0.0, status=sent (250 ok 1472524725 qp 3370)

smtp配送プロセス(smtp)が、キューID:C7640280020のメールを配送した

宛先:YYY@YYY.com

relay:メールがZZZ.ZZ.ZZZ.ZZZに配送済み

delay:配送の遅延(秒)

status=sent:相手正常に配送


postfix/qmgr[3323]: C7640280020: removed

キューマネージャー(qmgr)がメールをキューから削除した

参考になるサイト

binlogファイルの見方

■binlogファイルの確認

cd /var/lib/mysql


mysqlbinlog 【binlogファイル】 |less


■binlog出力ファイルの設定箇所

[root@~]# less /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock


■バイナリログの見方

  • 実行されたステートメント
  • 実行に必要な時間
  • 発行したクライアントのスレッドID
  • 実行時のタイムスタンプ


i-node調査

i-node(Index Node) とは

簡単に言えば、ファイルの実体。
メタ情報(パーミッション情報など)と、データ(ファイルの中身)から成り、「i-node 番号」で識別される。
i-node番号には上限があり、この上限を超えるi-nodeは作成する事ができないため、i-nodeを使い切ると実際にディスクに空き容量があっても新規にファイルを作成できなくなる。

80%超えた場合は、削除対応をおすすめ。

ファイル名は、ファイルシステム階層に作られた、ラベルのようなもので、ファイル名と i-node の関係が「リンク」である。

メタ情報とは

  • ユーザーID(UID:ファイルの所有者)
  • パーミッション(ファイルのアクセス権)
  • サイズ
  • 作成日時
  • 更新日時
  • 実データの場所(ディスク上の物理的な場所)
  • そのファイル自身への参照数

i-node番号とは

ファイルやディレクトリに割り振られる、重複しない番号の事。
パーティションサイズにより限界値が決められる。
全てのファイル、ディレクトリに対しi-node番号が割り振られ、全てのi-node番号に対応するi-nodeが存在する。


例えば、細かいファイルを大量に作成し、i-node番号を使い切ると、データ領域の容量が余っていても新規にファイルを作成する事はできなくなる。
※i-nodeの空きと、残容量は比例しない。


調査コマンド


■ディスクのi-node使用量

[root@ ~]# df -ih


Filesystem Iノード I使用 I残り I使用% マウント位置

/dev/mapper/VolGroup00-LVM_ROOT

5.0M 104K 4.9M 3% /

/dev/mapper/VolGroup00-LVM_VAR

29M 45K 28M 1% /var

/dev/sda1 258K 41 258K 1% /boot

tmpfs 997K 1 997K 1% /dev/shm

tmpfs 997K 798K 199K 81% /var/virtualdomains/session/

■下記ディレクトリのファイル数調査

[root@ ~]# ls -1 /var/virtualdomains/session/. | wc -l

816695

■最終更新時が50日より前のファイル削除対象ファイル数

[root@ ~]# find /var/virtualdomains/session/ -mtime +50 -name "*" | wc

710283 710283 36845200

枯渇していた場合

該当ファイルの削除対応が必要


参考になるサイト


ApacheのupdateによるSSLの設定変更

現象

apacheをupdateした場合にhttpが起動していなかった


原因

Apacheをupdateした場合、SSl.confが自動でインストールされて、
ポート重複エラーでapacheが停止。
そのため、SSL通信を複数のバーチャルホストで行う場合に必要な設定をする、
または、不要であればssl.confを読み込まないようにしてapacheの再起動が必要。


状況確認

[root](VM-GUEST)# /etc/init.d/httpd status

httpd は停止しています


[root](VM-GUEST)# /etc/init.d/httpd start
httpd を起動中:
[Thu Aug 18 12:58:39 2016] [warn] module ssl_module is already loaded, skipping

[Thu Aug 18 12:58:39 2016] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
[Thu Aug 18 12:58:39 2016] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs
[失敗]


warningの種類

※ほぼ1IPしかないサーバーで複数のSSLを設定すると出力されるエラー

[warn] module ssl_module is already loaded, skipping

sslのモジュールが既に読み込まれてるから、再度読みこむけどスキップするね
→/etc/httopd/conf/ssl.conf(今回インストールされた)と/etc/httpd/conf.d/XXX_ssl.conf(事前に読み込んでいたsslのconf)


[warn] _default_ VirtualHost overlap on port 443, the first has precedence

defaultに設定したバーチャルホスト(ssl.conf側)と443 ポートが重複してるよ


(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443

同上。既に使用されているので、/etc/httpd/conf.d/XXX_ssl.confで定義した「0.0.0.0:443」が使用できないよ


[warn] NameVirtualHost *:80 has no VirtualHosts

名前ベースのバーチャルホストの使用宣言がないよ


一括でこの警告を除く的確な方法

不要であればApacheのupdateでインストールされたssl.confを読み込まないように設定。


リネームがおすすめ。

[root](VM-GUEST)# mv /etc/httpd/conf/ssl.conf /etc/httpd/conf/ssl.conf_org


■シンタックス確認

※conf修正後は必ずシンタックスの確認が必要

[root](VM-GUEST)# /etc/init.d/httpd configtest


■状態確認

[root](VM-GUEST)# /etc/init.d/httpd status

httpd は停止しています


■Apache再起動

[root](VM-GUEST)# /etc/init.d/httpd graceful


warningを一つずつつぶしていく場合

[warn] _default_ VirtualHost overlap on port 443, the first has precedence

※下記エラーも一緒につぶせる
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443


■Portの確認

[root](VM-GUEST)# grep -n Listen /etc/httpd/conf*/*.conf

/etc/httpd/conf.d/ssl.conf:19:Listen 443

/etc/httpd/conf/XXX_ssl.conf:2:Listen 0.0.0.0:443

→Listen 443の記述が2か所あった
※grp -nで行数つきで検索できる

■ssl.confの修正

/etc/httpd/conf.d/ssl.conf



■バックアップ取得

[root](VM-GUEST)# cp -p ssl.conf ssl.conf_20160818


■修正箇所
1.Portをふさぐ

#Apacheのupdateに伴うSSLの設定変更(2016.08.18)

#Listen 443


2.の項目全てをコメントアウト



■シンタックス確認

※conf修正後は必ずシンタックスの確認が必要

[root](VM-GUEST)# vi /etc/httpd/conf.d/ssl.conf

[root](VM-GUEST)# apachectl configtest

[Thu Aug 18 13:38:27 2016] [warn] module ssl_module is already loaded, skipping

[Thu Aug 18 13:38:27 2016] [warn] NameVirtualHost *:80 has no VirtualHosts

Syntax OK


■Apacheの再起動

[root](VM-GUEST)# /etc/init.d/httpd status

httpd は停止しています


[root](VM-GUEST)# /etc/init.d/httpd start

httpd を起動中: 

[Thu Aug 18 13:47:42 2016] [warn] module ssl_module is already loaded, skipping

[Thu Aug 18 13:47:42 2016] [warn] NameVirtualHost *:80 has no VirtualHosts

[ OK ]


[root](VM-GUEST)# /etc/init.d/httpd status

httpd (pid 5023) を実行中...


[warn] NameVirtualHost *:80 has no VirtualHosts

重複で宣言しているよ、宣言ないよなどこちらは色々な理由があるのですが、今回は、
名前ベースのバーチャルホストの使用宣言があうけど実際にバーチャルホストtagの記載ないよ


使用宣言している箇所を検索

[root](VM-GUEST)# grep -n NameVirtualHost /etc/httpd/conf*/*.conf


出てきた内容の箇所をコメントアウトし、
シンタックス確認、Apacheの再起動して修正完了。



■参考になるサイト


Ystream: apacheで複数のSSL設定を行う


Cygwin64 Terminal

WindowsでLinux(UNIX)のコマンドが使用したい場合にインストール!


POSIXのシステムコールをシミュレートするDLLを核にして

GNUツールをはじめとするUNIXライクなコマンドをコンパイルできるようにし、そのうえで数々のUNIXライクコマンドをコンパイル/パッケージングしたWindows上で動くUNIXライク環境である。

gccもviもemacsも動く!


勘違いしてはいけないのは、Cygwinはシステムコールをエミュレートしているだけであって

VMwareのようにハードやOSをエミュレートしているわけではないので

コンパイルされた結果、つまり機械語レベルではLinuxと互換性がない。

よってLinuxのバイナリをそのままもってきても動かないし、

CygwinのgccでコンパイルしたものもLinux上では動かない。

しかしながら、Linux上でコンパイルできるソースはほとんどわずかな修正だけでコンパイルできる。