フロリダのゲイクラブ銃撃について — トロントのハッテン車窓から

いつもと同じ日曜日の朝。 紅茶を飲みながら携帯をチェックした。 フロリダのゲイクラブ銃撃のヘッドラインでニュースフィードが埋め尽くされていた。 「死者20人」という数字はどんどん増えて、午後には「死者50人」になっていた。 イスラム教徒であるオマル・マーティン容疑者がゲイを嫌悪していたという証言も出てきた。 そんな悲しいニュースと共に、ネット上は醜い言葉で溢れていた。 多くの人たちは怒りの矛先をイスラム教徒へと向けた。 携帯の電源を切った。 正直、あまりのショックに頭の中が真っ白だった。 6月、トロントはプライド月間を盛大に祝っている真っ只中である。 プライドが抗議デモから祝典に変わったのは、それだけ社会が変わったという証拠だ。 しかし、2016年にフロリダのゲイクラブで50人が銃殺されたというニュースはそれを揺るがすには十分だった。 その場にいた人たちのことを考えただけで胸が痛んだ。 時代が変わっても、ゲイだということで殺される。 その現実は残酷だ。 そして、今でも多くの人が差別や偏見のせいで命を落としている。 毎年、多くのトランスジェンダーの人たちがヘイトクライムで殺されている。 LGBTコミュニティの自殺率は相変わらずで、いじめ問題も深刻である。 ゲイクラブの帰りに夜道を歩く時、恐怖とは隣り合わせだ。 同性婚という華やかな権利で何もかも解決したわけではない。 今夜、世界各地で追悼イベントが行われた。 トロントも例外ではない。 ロウソクを手に握って、1000人以上の人たちがチャーチストリートに集まった。 トロント市長やオンタリオ州首相まで出席していたことに驚いた。 近くに立っていた男の子は声に出して大泣きしていた。 周りの人たちは彼を気にかけていた。 そこには笑顔や優しさや愛が溢れていた。 こうやって支え合うことで、このコミュニティは悲しい出来事を乗り越えてきた。 「暴力に対して、暴力で立ち向かってはいけない。このコミュニティは愛で暴力に打ち勝ってきた歴史がある。どうか、イスラムフォビアでホモフォビアに対抗しないでほしい。」 「ゲイを嫌う行為も、イスラム教徒を嫌う行為も、同じ差別である。別々の問題ではない。片方の差別を許さずに、もう片方の差別に手を貸してはいけない。」 「フロリダ州と同じように、トロントにも未だに問題がたくさんある。ホモフォビア。トランスフォビア。人種差別。性差別。そうした問題から目を背けてはいけない。」 数々のスピーチの末に、数え切れないロウソクに火が灯された。 暖かい光に照らされながら、手を繋いでみんなで祈った。 朝からずっとモヤモヤしていた気持ちが少し晴れた気がした。 「こんな悲しい事件があったからって、私たちがプライドを祝うことをやめるわけがない。暴力と恐怖で攻撃されるなら、私たちは愛で立ち向かうだけだ。自分を誇りに思う権利は誰にも奪えない。」 このスピーチの言葉がとてもしっくり来た。 今年のプライドは例年以上に盛り上がりそうだ。

経由: フロリダのゲイクラブ銃撃について — トロントのハッテン車窓から

広告
カテゴリー: 未分類 | コメントをどうぞ

いつかは中年になるみなさまへ

この記事はコミュニケーション Advent Carender 2015の19日目の記事です。

 

コミュ障の中年がコミュニケーションについて書きます。

 

おいちゃんはコミュ障ではありますが、過去に営業をやっていたこともあったりします。

営業職当時はおおむねご年配の方がお客様でした。

世の中には神様がお客様になっている業界もあるようですが、おいちゃんはポンコツ営業だったせいか、お客様の中に神様はいらっしゃいませんでした。

たまに糞様か仏様(物理)が混じっていた程度です。

そんな中で「歳を取ったら気を付けよう」と学んだこと、今気を付けていることを書きます。

 

 

笑顔が大事

 

人間は不機嫌な顔の人を好ましく思うことはほとんどありません。

歳を取れば否応なく生物的な美醜は衰える方向に動いていきます。

この二つを並べて考えた時、「不機嫌な中年」は相当に人から嫌がられるであろうということはご理解いただけると思います。

しかも歳を取ると色々なことがおっくうになって、世の中のいろんなことがつまらなく見え始め、新しい事にもドキドキしなくなってきます。

「箸が転がってもおかしい」と思う年頃の子はさして努力をせずとも毎日何かにドキドキして面白いと感じて笑顔になる瞬間は多いかと思いますが、中年はまずもって不機嫌な顔になりやすい心理状態にあるわけです。

歳を取ればとるほど意識的に朗らかな顔を心がけましょう。むしろ怒る時でも笑顔でいる、くらいでちょうどいいのです。

いつも怖い顔をしないと若いモンがお説教をちゃんと聞かないと思っている人がいたら、

「そりゃ、あんた、顔云々じゃなくてアンタの説教に実がねぇんじゃねぇの?」

とおいちゃんは思うのです。

 

 

「それは違うよ」と若い人に話すとき

 

歳を取ればある程度経験が身についています。

この場合の「経験」とは意識的に学んだものや自分から進んで得たもの以外のいわゆるKKD(勘と経験と度胸)の経験、ですね。

人を育てる大事さが理解できている中年なら若い人が危なっかしいことをし始めた時、必ず「あ、そこダメ。そこ通ると転ぶよ」と手を差し伸べたくなるものです。

そういうとき、前述のように怖い顔でお説教をする人もいるでしょう。「そうやって仕事を覚えるんだ、俺もそうだった」と思い、何も言わない人もいるでしょう。

おいちゃんがそういう時に心掛けているのは

  • まずは「転んだ時の最大被害コスト」を考えて、チームとして、ビジネスとして、その若い人本人の力量として許容範囲内であると考えたら口を挟まない
  • 口を挟むべきと考えたら、若い人の意見、どうしてそうしようと思っているのか、どういう結果が得られると考えているのかを聞いて、それを肯定する
  • 次においちゃんが考えるそのデメリットを伝え、その対策を聞く
  • だいたいの場合、デメリットのリスクに対する見積もりは甘いので、そこを一つ一つ指摘して、違う道を考えねばならないと理解してもらう

という流れです。

こうやって列挙すると完全に嫌味な中年ですよねぇ。

所謂「正論で論破する」系の流れなので乱暴にやるとこれはむしろこちらが痛い目を見ます。しかしながら自分も歳を経てきたなかでなんとなく感覚で身に付いた「経験」を若い人に説明するならちゃんと理論立てて話さないと理解はしてもらえないので、必然的にこういう流れになるのです。

ただ、相手も馬鹿ではないし、中年よりも脳細胞が躍動的な若者です。下手に考え方を押し付けるより、粛々と課題を提示していってそれを解決する方法を考えてもらったほうが、時には中年が思いつかないようないいアイデアを出してくるかもしれません。

そうなったら、4番目のところが「こちらが納得してその道を進んでもらう」に変更されます。この変更が出来ない中年は若いモンのやることに口を挟むべきじゃない。

 

 

 

若い人同士のコミュニケーションにおけるリーダーを見つけて、そっと観察する

 

会社でよくやりがちなのが「若いモンを育てるために積極的に会話の中に入っていく中年」を推奨することです。

これは正直糞以外の何物でもない。

中年の長話はだりぃし、話してる間中気を使わなきゃいけないし、で正直チームを疲弊させる元にもなります。

なにより
俺らも若い頃はこういうおっさんおばさんが嫌で嫌でしょうがなかった。
という一語に尽きます。

あの当時の嫌な中年に自分がなりたいとは思いません。

中年のおいちゃんがチームに貢献出来る方法を考えて、若い人同士の会話でリーダーになっている人を見つけ、そっと観察するようにしています。

自分だったらああいう言われ方をしたらどう考えるだろう、ああいう物言いで話しかけてくる人に対して、話の中身は別としてどういう印象を受けるだろう。

そういうことを考えながら観察し、受け手の反応を見ます。

若い人も様々です。リーダー格でありたいと考えているけど物言いがネガティブな人、育成を重視しているけどスキルがそれに追いついていない人。

そういうのは受け手の若い人もちゃんと感じているのです。

しかし、リーダーの役割を頑張っている人も欠点はあってもすべてが悪意で動いているわけではないと思うのです。(つーか、悪意だけでチーム内で動く奴ってもっと陰険だし、クソだからね。)

受け手がリーダーの話をネガティブにとらえていると感じた時に中年はその補完をすべき立場にいると考えています。

おいちゃんがやっていることは

  • 正しくはあるがネガティブな物言いをする人、ようは話を否定から入る、疑問形に疑問形で返す、言うことが毎回違う人と話をする前に話の要件を聞き、受け手が理解できていない部分を補強。その上で要件に対する案を複数パターン伝える。
  • 育成を重視しているけどスキルが追いついていない人と話をするときはリーダー、受け手、おいちゃん、で話をし、リーダーに「提案をする」格好で話を進める。

です。

そしてどれのパターンでも一貫して「自分がリーダーになろうとしない」という姿勢で対応します。彼らの関係性を崩してはいけません。

これはおいちゃんがマネジメントのキャリアを持とうとしていない点が大きな理由ですが、おいちゃんくらいの世代の場合、マネジメント職であっても「直属の部下」は複数いて部下は部下同士、先輩後輩などの職位とは違う日常業務におけるリーダー・メンバーの組みがある程度出来ていると思うので、マネジメント職の中年でも有効だと思います。

中年は若い人から見れば妖怪と同じで歳を経た分、正直若いモンを懐柔して「子飼い」を作ることは比較的簡単だと思います。しかしそれをやると手痛いしっぺ返しを食らうのです。このしっぺ返しで致命傷を負った中年はたくさんいます。

自分の仕事を完遂したいなら「子飼い」を作らないことをお勧めします。

 

 

まあ、つらつらと書きましたが、おいちゃんが気を付けていることはこんな感じです。

当然ですが、おいちゃんはポンコツ中年ですので、これを実践できる時もありますが、実践できない時もあります。

おいちゃんもできなかった時には出来なかったなりに「あ、アカンかった・・・」と反省します。

ただ、覆水盆に返らず、発言は消しゴムでは消せない、などと言われるように、コミュニケーションは一期一会であり、取り返しはつきません。

こうあるべきだ、という考えはちゃんと持っていた方がいいし、ちゃんと意識して心掛けるようにした方がいいでしょう。

 

 

※おまけ

みなさんが中年になったら、たまに親と会話をしてください。

愚痴を垂れ流すだけでもよいです。愚痴を我慢して聞くのもよいです。

親は一番身近な「先輩中年」です。

自分が歳を取ればとるほど、親も年老いていき、「親だから」「手本だから」という仮面がぽろぽろ剥がれてむき身の中年像が出てくると思います。

「嫌な考えだ」「歳を取ってちょっと違ってしまった」「こんなにも理解力のない人だったっけ?」などいろいろと思うことがあると思いますが、恐らくそれが自分に対する親の最後の躾なのだと思います。

「歳を取るとこういうふうになる」というのを若いうちに見せて、対策をする時間をくれる、大切な躾なのだと思います。

 

カテゴリー: お仕事, もの言わぬは腹膨るるわざなり | コメントをどうぞ

メールサーバを作ります-4

3の続きです。

・dovecotの設定

dovecotの設定をします。

dovecotは/etc/dovecot.confと/etc/dovecot/conf.d/配下にあるxx-hoge.confで設定を行います。
作業前には必ずバックアップを取りましょう。

/etc/dovecot.confの内容です。

# Protocols we want to be serving.
protocols = imaps pop3s

23行目くらい。
プロトコルを指定します。行頭のコメントアウトを外して、今回はサーバ証明書を使うのでimapsとpop3sにします。
POPoverSSLを利用しない場合には末尾のsがないimapとpop3と書きます。

/etc/dovecot/conf.d/10-auth.confの内容です。

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
# See also ssl=required setting.
disable_plaintext_auth = yes

5行目くらい。
認証にプレーンテキストを使うかどうかを設定します。yesでSSL/TLS以外の場合の平文認証を拒否します。SSL/TLSの場合は自動で平文認証になります。
デフォルトはyesになっているのでコメントアウトを外します。

# Space separated list of wanted authentication mechanisms:
#   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
#   gss-spnego
# NOTE: See also disable_plaintext_auth setting.
auth_mechanisms = cram-md5 digest-md5 plain login

96行目くらい。
認証に使う暗号方式を設定します。
メールクライアントによってサポートする暗号方式がいろいろ違うのですが、メジャーなところでcram-md5とdigest-md5を追加しました。

!include auth-passwdfile.conf.ext

125行目くらい。
認証に使う方式を設定します。他にも#!include hoge.conf.extとコメントアウトされた状態の認証方式設定ファイルが並んでいます。おいちゃんはパスワードファイルを使う方法を選んでみました。対象の行のコメントアウトを外します。

/etc/dovecot/conf.d/auth-passwdfile.conf.extの内容です。

10-auth.confで指定した「パスワードファイルを使った認証方式」のための設定になります。
指定した認証方式が違う場合は対象のhoge.conf.extを設定していくことになります。

passdb {
  driver = passwd-file
  #args = scheme=CRYPT username_format=%u /etc/dovecot/users
  args = /etc/dovecot/user
}

userdb {
  driver = passwd-file
  #args = username_format=%u /etc/dovecot/users
  args = /etc/dovecot/user

8行目くらい。
デフォルトのargs~をコメントアウトし、パスワードファイルの場所を記載します。パスワードファイルは次で作ります。

パスワードファイルの作成です。

まず、以下のコマンドでパスワードを暗号化したものを作ります。

[root@centos7 dovecot]# doveadm pw -s CRAM-MD5
Enter new password:
Retype new password:
{CRAM-MD5}<password>

のところに暗号化された文字列が出るので、それをコピーして新規ファイルを作ります。
ファイルを作る場所、ファイル名は上記のauth-passwdfile.conf.extで指定したものにします。

user1@oichan.com:{CRAM-MD5}<password>:<uid>:<gid>::Maildir:/home/user1/Maildir

/etc/dovecot/conf.d/10-mail.confの内容です。

# Location for users' mailboxes. The default is empty, which means that Dovecot
# tries to find the mailboxes automatically. This won't work if the user
# doesn't yet have any mail, so you should explicitly tell Dovecot the full
# location.
・
・
・
mail_location = maildir:~/Maildir

30行目くらい。
メールボックス形式をしていします。
コメントアウトを外して右辺を記載します。

/etc/dovecot/conf.d/10-master.confの内容です。

service imap-login {
  inet_listener imap {
    #port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
・
・
・
service pop3-login {
  inet_listener pop3 {
    #port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

17行目と38行目くらい。
使うポートを指定します。imapsとpop3sを使う、としたのでimapsとpop3sのほうだけコメントアウトを外します。

/etc/dovecot/conf.d/10-ssl.confの内容です。

# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
# disable plain pop3 and imap, allowed are only pop3+TLS, pop3s, imap+TLS and imaps
# plain imap and pop3 are still allowed for local connections
ssl = yes

5行目くらい。
SSLの設定を有効にします。デフォルトはrequiredなのでyesに変えます。

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert = </etc/pki/tls/certs/mailserver.crt
ssl_key = </etc/pki/tls/certs/mailserver.key

10行目くらい。
keyファイル、crtファイルの場所を記述します。

# If key file is password protected, give the password here. Alternatively
# give it when starting dovecot with -p parameter. Since this file is often
# world-readable, you may want to place this setting instead to a different
# root owned 0600 file by using ssl_key_password = <path.
ssl_key_password = <password>

17行目くらい。
keyファイルのパスワードを書きます。
説明文にもありますが、パスワードを書いているのでこのファイルは編集が終わったら所有者をrootとし、root以外は読み書きできない(0600)ようにします。忘れないでね。

これでpostfix、Dovecotの設定は終了しました。
サービスの再起動と自動起動設定をします。

[root@centos7 ~]# systemctl restart postfix
[root@centos7 ~]# systemctl enable postfix
[root@centos7 ~]# systemctl restart dovecot
[root@centos7 ~]# systemctl enable dovecot

メールユーザを作ります。
最初にメールディレクトリをユーザを作ったら自動で作れるようにします。

[root@centos7 ~]# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
[root@centos7 ~]# chmod -R 700 /etc/skel/Maildir/

実際にメールユーザを作ります。
基本的にメールはどんな人にでもアカウントを付与しなければならないのでログインできないユーザで作ります。
dovecotでパスワードファイルに書いたユーザで作ります。

[root@centos7 ~]# useradd -s /sbin/nologin user1
[root@centos7 ~]# passwd user1
Changing password for user user1.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

firewalldの穴あけをします。

[root@centos7 ~]# firewall-cmd --add-service=imaps --zone=public --permanent
[root@centos7 ~]# firewall-cmd --add-service=pop3s --zone=public --permanent
[root@centos7 ~]# firewall-cmd --zone=public --add-port=587/tcp --permanent
[root@centos7 ~]# firewall-cmd --reload

firewallだとサービス、という設定が別にあってpop3sやimapsはあるのですが、smtpで指定すると25番ポートが空いてしまうので、smtpはポート番号で指定します。

最後にメールドメインを設定します。
postfixでしていしたドメイン(ここではoichan.com)をMXレコードに設定します。
やり方は各サービスで手順を公開していると思うので、それを参照にしてください。

えっちらおっちらで作りましたが、なんとかまともに動いてくれました。
で、小人さんにも会えたのです。

小人さんがRFCという謎のルールで会話している事実が分かったわけです。

とりあえずね、おいちゃんはね、思い知ったのよ。

メールサーバ運用するならRFC嫁

(>’A`)>ウワァァ!!

それはさておき、やっぱりわかんない時は手を動かすのが一番だなぁ、と。
あと、手を動かして作った後はこうやってまとめると「あれ?この設定なんで入れたっけな」とかまた調べなおすことで見直すきっかけにもなるなぁと思う中年です。(これ書いてる間、アカンとこをいろいろ直してたりする。)

ちなみにこの後、

メールサーバ立てる→トラブルシューティング、っていうかトラブルしかない→泣きながらRFC読む

という拷問にあって、引き続きまたデカい知見を得るのです。

メールには相手がいる

メールには名前解決がいる

そう。メールのトラブル、つまり「送れない」「届かない」「遅れる」はMTA側だけじゃなく複合的に発生するので一個一個潰していかなければならないのです。
DNSを調べ、ネットワークを調べ、相手の状況を確認し、「セキュリティの都合上、回答できません」とか言われる日々・・・。

いやぁ、メールって本当に奥が深いでつね(ヽ’ω`)

カテゴリー: お仕事 | タグ: | コメントをどうぞ

メールサーバを作ります-3

2の続きです。

・postfixの設定

postfixの設定をします。
実際にはかなり試行錯誤したのですが、かなり間抜けなミスで何時間もハマったりとお恥ずかしい次第なので結論のみを書いていきます。
実際に作業した頃から時間もたっているので、エラーログとか細かく覚えてor保存してないってのもあります。

postfixは/etc/postfix/main.confと/etc/postfix/master.confで設定を行います。
作業前には必ずバックアップを取りましょう。

postfixに限らずですが、confファイルはデフォルトでいろいろ説明書きがあることが多いです。
たいていの人がそうだと思いますが、おいちゃんもGoogle先生のご託宣に従って色んなサイトの情報をつぎはぎしてconfファイルの編集をしています。
この時、confファイルの説明書きをざっくりでいいから読んでおきましょう。どのくらいざっくりかというと英検4級の斜め読みくらいのざっくり加減です。
そんなん意味あるのかよ、と思われるかもしれませんが、動詞と名詞くらいはなんとか読めるので何をどうする設定なのか、くらいは理解が可能です。
おいちゃんみたいなド素人だと「とりあえずこのサイトにここにこう書けばいいって書いてあった」という理解だけで進めがちです。
これだとエラーに遭遇した時に何が悪かったのかの判断が遠ざかることになります。当然エラーの解消までの道のりも遠ざかります。
最低でも「今弄ったのはSSLに関係するところ」「今弄ったのは認証に関係するところ」と何を弄って吐いたエラーなのかは理解しておくと、解消方法も「エラー 起動しない」だけでなく、「SSL エラー 起動しない」などキーワードを絞り込んで探せるので少しでも解消までの道が近くなります。

/etc/postfix/main.confの内容です。

# INTERNET HOST AND DOMAIN NAMES
#
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = centos7.oichan.com

68行目くらい。
サーバに割り当てたホスト名を追記します。コメントアウト外してホスト名部分を書き直してもいいです。

# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
#mydomain = domain.tld
mydomain = oichan.com

78行目くらい。
メールドメインになるドメイン名を追記します。

# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname,
# which is fine for small sites.  If you run a domain with multiple
# machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# user@that.users.mailhost.
・
・
・
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain

78行目くらい。
配信元になるOriginを書け、とのことのようです。
おいちゃんはこのサーバ、このドメインでメールを送信するわけなので、前述のmydomainを指定します。
多分たくさんMTAを作っていろいろ用途別にこの送信はこう、この送信はこう、と分けて設定するとか以外ならmydomainを書けば問題ないと思います。

# RECEIVING MAIL

# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on.  By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
・
・
・
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = all

101行目くらい。
メール受信できるネットワークを書くらしいです。
普通に外部ともメールのやり取りをしたいのでallとします。

# The mydestination parameter specifies the list of domains that this
# machine considers itself the final destination for.
・
・
・
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

136行目くらい。
とりあえず「ドメインのリスト」を書くところのようです。
多分、たくさんドメインを取り扱う場合にはここでいろいろ設定するんでしょうね。
今回は1個のドメインだけなのでデフォルトの記載の後ろに$mydomainを追加します。(デフォルトだと「localhost」までになっています。)

# Alternatively, you can specify the mynetworks list by hand, in
# which case Postfix ignores the mynetworks_style setting.
・
・
・
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
mynetworks = 192.168.0.0/24, 127.0.0.0/8

253行目くらい。
ネットワークの設定です。
たぶん、自環境内で接続を許可したかったり許可したくなかったりなんてときに使うんではないかな、と。
今回は特にないのでローカルのアドレスを書いておきます。

# The relay_domains parameter restricts what destinations this system will
# relay mail to.  See the smtpd_recipient_restrictions description in
# postconf(5) for detailed information.
#
・
・
・
relay_domains = $mydestination

272行目くらい。
メール中継をするドメイン(中継したいメールが飛んでくる元のSMTPサーバのドメイン)を書くようです。
ここは普通にメールを送信するだけならひょっとしていらなかったのかも。
とりあえずmydestinationとして自ドメインを指定しておきました。

# DELIVERY TO MAILBOX
#
# The home_mailbox parameter specifies the optional pathname of a
# mailbox file relative to a user's home directory. The default
# mailbox file is /var/spool/mail/user or /var/mail/user.  Specify
# "Maildir/" for qmail-style delivery (the / is required).
#
#home_mailbox = Mailbox
#home_mailbox = Maildir/
home_mailbox = Maildir/

411行目くらい。
メールボックスの位置をしていするところのようです。
Maildir/としました。
あとでメールユーザ作るときに必要なので覚えておきます。

# SHOW SOFTWARE VERSION OR NOT
#
# The smtpd_banner parameter specifies the text that follows the 220
# code in the SMTP server's greeting banner. Some people like to see
# the mail version advertised. By default, Postfix shows no version.
#
# You MUST specify $myhostname at the start of the text. That is an
# RFC requirement. Postfix itself does not care.
#
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP unknown

564行目くらい。
メール送信サーバアプリケーションのバージョンを聞かれたときにこたえる内容です。
当然ですが、な・い・しょ♡なのでunknownとします。

デフォルトから変更する内容は以上です。
あとは自分が作りたいメールサーバの設定、認証をどうするだとかユーザをどうしたいだとかをファイルの末尾に追加していきます。

・disable_vrfy_command = yes
ユーザの存在を問い合わせるコマンドVRFYを拒否します。

・smtpd_sasl_auth_enable = yes
SASL認証を有効にします。

・broken_sasl_auth_clients = no
SASL認証に失敗したクライアントは拒否します。

・smtpd_sasl_security_options = noanonymous
匿名認証を拒否します。

・smtpd_sasl_local_domain = $mydomain
SASL認証をするドメインを指定します。

・smtpd_sender_restrictions = reject_unknown_sender_domain
送信者のアドレスのドメインがDNSでAレコードかMXレコードでちゃんと引けないものは拒否します。

・smtpd_client_restrictions =
permit_mynetworks,
reject_unknown_client,
permit
送信者の制限を指定します。
上記の場合、自分のドメインは許可、知らないクライアントは拒否としています。
ブラックリストのドメインをここで登録することで変な人に使われないようにすることもできます。

・smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
受信者の制限を指定します。
自ドメイン、SASL認証をした人は許可。認証がない人は拒否します。

・message_size_limit = 10485760
メールサイズの制限をします。

・smtpd_tls_cert_file = /etc/pki/tls/certs/mailserver.crt
・smtpd_tls_key_file = /etc/pki/tls/certs/mailserver_noenc.key
・smtpd_use_tls = yes

SSL/TLSの設定をします。
crtファイルを指定、keyファイルを指定、tlsの利用を有効にします。

4へ続きます。

カテゴリー: お仕事 | タグ: | コメントをどうぞ

メールサーバを作ります-2

1の続きです。

・証明書の作成

今回は「とりあえずSMTPoverSSLでメールが出来るようにする」が目標です。
当然お仕事ではちゃんと証明書を購入しますが、小人さんに会うためだけにそこまでお金をかけるわけにはいかないので、オレオレ証明書でいきます。
ちなみにおいちゃんは会社で「オレオレ証明書」を連呼して怒られたことがあります。
良い子の社会人は「自己証明書」等と呼んでおきましょう。

[root@centos7 ~]# cd /etc/pki/tls/certs
[root@centos7 certs]# make server.key
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
.................................+++
........+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
[root@centos7 certs]#

/etc/pki/tls/certsに移動してキーファイルを作成します。入力したパスフレーズを忘れないようにしてください。

つぎ、csrファイルを作ります。

[root@centos7 certs]# make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:pengin village
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:*.oichan.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@centos7 certs]#

キーファイルのパスフレーズを聞かれたのち、国やら都道府県名やらの入力を要求されます。
認証局でちゃんと手続きした証明書の場合はきちんと入力しないといけませんが、オレオレ証明書は別にそのままエンターで飛ばしてかまいません。
Common Nameにはサーバのドメイン名を入れましょう。
そのあともエンターで飛ばしていきます。

[root@centos7 certs]# openssl x509 -in server.csr -out server.crt -req -signkey test.key -days 3650
Signature ok
subject=/C=JP/ST=Tokyo/L=pengin village/O=Default Company Ltd/CN=*.oichan.com
Getting Private key
Enter pass phrase for server.key:
[root@centos7 certs]#

crtファイルを作ります。

これで証明書ファイルが出来ました。
作ったファイルはrootでしか読めないようにしておきましょう。

[root@centos7 certs]# ls -l server*
-rw-r--r--. 1 root root 1212 12月 31 01:41 server.crt
-rw-------. 1 root root 1009 12月 31 01:32 server.csr
-rw-------. 1 root root 1766 12月 31 01:22 server.key
[root@centos7 certs]# chmod 400 server.*
[root@centos7 certs]# ls -l server*
-r--------. 1 root root 1212 12月 31 01:41 server.crt
-r--------. 1 root root 1009 12月 31 01:32 server.csr
-r--------. 1 root root 1766 12月 31 01:22 server.key
[root@centos7 certs]#

3に続きます。

カテゴリー: お仕事 | タグ: | コメントをどうぞ

メールサーバを作ります-1

タイトルのままです。

諸事情あってメールサーバを立てることに相成りました。

・諸事情

仕事でメール中継サーバを立てて運用しなければいけなくなった。
環境はすでに決定している。(GUIがあるから、という理由のみで選ばれたIIS。決めた奴を脳内で既に50000回くらい殴っている。)
おいちゃんは業務SEである。ゆえにSMTPは「メールを運んでくれる小人さん」という理解である。
このままでは構築も運用も土台無理な話である。

結論。

「小人さんに会ってみよう!」

準備するもの

・公開用サーバ

小人さんと会うための場所を用意します。小人さんはLAN環境にも当然いるわけですが、最終的に仕事で作るブツはインターネットを相手にするため、DNS等振る舞いも含めて学習する必要があるのでインターネットに出れる環境が必要と考えました。
おいちゃんの住宅事情とお財布とスキルレベルにより、自宅にサーバマシンを買うわけにはいかなかったので安直にクラウドを利用します。
目的が小人さんに会ってみよう、なので出来るだけプレーンな環境で自力構築できるようIaaSサービスを選びます。

 

・ドメイン

インターネットで公開するので必須です。
超適当なドメイン名なら最低価格で入手できます。

 

・折れない心と大人社会への怒り

特にコメントはありません。

クラウドサービスで手頃なサーバを立て、OSをインスコします。
おいちゃんはCentOS7.0にしました。
ドメイン契約を済ませ、立てたサーバに割り当てます。
この時点ではAレコードだけでいいです。
クラウド上の自サーバのGIPを調べて、ホスト名を決定し、ドメインのサービスコンソールからホスト名とGIPをAレコードで登録します。

公開サーバ、ドメインを準備したらさっそくメールサーバに必要なパッケージを入れていきます。

 

postfix

postfixはSMTPサーバです。メールを送信する小人さんです。
一般的にqmailのほうが信頼性が高いと言われているのですが(*1)、今回は「ポンコツが小人さんにコンニチワ」がテーマなのであまり難しそうなところから手を付けず、OSに同梱されているpostfixを使います。
バージョンを確認します。

[root@centos7 ~]# postconf | grep mail_version
mail_version = 2.10.1
milter_macro_v = $mail_name $mail_version

CentOS7.0だとpostfix2.10.1が入っています。

 

dovecot

dovecotはPOPサーバです。メールを受信する小人さんです。
IMAPサーバにもできますが、今回は(以下略)POPサーバのみとして使います。
dovecotは自分でインストールします。

[root@centos7 ~]# yum install dovecot
.
.
.

================================================================================
 Package            アーキテクチャー
                                 バージョン                 リポジトリー   容量
================================================================================
インストール中:
 dovecot            x86_64       1:2.2.10-4.el7_0.1         updates       3.2 M
依存性関連でのインストールをします:
 clucene-core       x86_64       2.3.3.4-11.el7             base          528 k
.
.
.
インストール:
  dovecot.x86_64 1:2.2.10-4.el7_0.1

依存性関連をインストールしました:
  clucene-core.x86_64 0:2.3.3.4-11.el7

完了しました!
[root@centos7 ~]#

2.2.10がインストールされました。

 

OpenSSL

STARTTLSを利用するため、OpenSSLを使います。
OpenSSLはOSインストール時に同梱されてきますが、昨今話題になった脆弱性HeartBleadへのパッチ適用がされているか、されていない場合は最新版orパッチ適用版へバージョンアップしましょう。

以上で必要なもののインストール、アップデートは終了です。
ここからGoogle大先生のお導きに従い、メールサーバの設定を行います。

2へ続きます。

*1 qmailは堅固なセキュリティが強みです。そのため商用や企業内で業務に利用する場合はqmailが多いようです。その反動か、運用管理については結構面倒な点が多いです。

カテゴリー: お仕事 | タグ: | コメントをどうぞ

OpenJPAでエンハンスできない件。

いろいろありすぎて疲れたので、すっごい書き殴り。
同じ問題にぶつかる人はまずいないでしょうが、メモしときます。
前提はMaven3+Eclipse kepler +OpenJPA2.2.2+テスト実行です。サーバのほうはまた別、ということで。

persistence.xmlで

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="SystemAccount"
		transaction-type="RESOURCE_LOCAL">
		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
		<class>.......</class>
		<properties>
			<property name="openjpa.ConnectionDriverName" value="org.mariadb.jdbc.Driver" />
			<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/database" />
			<property name="openjpa.ConnectionUserName" value="root" />
			<property name="openjpa.ConnectionPassword" value=<passwd> />
			<property name="openjpa.ConnectionFactoryProperties"
				value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=60000" />
			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
			<property name="openjpa.DynamicEnhancementAgent" value="false" />
			<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
			<property name="openjpa.Log" value="DefaultLevel=INFO,SQL=TRACE" />
			<property name="openjpa.LockManager" value="pessimistic" />
			<property name="openjpa.MaxFetchDepth" value="3" />
			<property name="openjpa.LockTimeout" value="30000" />
		</properties>
	</persistence-unit>
</persistence>

こんなんやってると、だいたいproperty name=”openjpa.RuntimeUnenhancedClasses” のエンハンスでこけます。もともとsupportedは非推奨なんですな。デフォルトの値はunsupported。
たいていは-javaagentでOpenJPAのjarを指定するらしいんですが、これがうまくいかないケースが結構あるようで、某スタックが漏れちゃうところでも「バグ多いからそもそも使うな!」なんてのがベストアンサーになってたりします。

何もしないで実行するとだいたいこんな風に怒られます。

重大: null
<openjpa-2.2.2-r422266:1468616 fatal general error> org.apache.openjpa.persistence.PersistenceException: null
	at org.apache.openjpa.enhance.ClassRedefiner.redefineClasses(ClassRedefiner.java:96)
	at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:176)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:314)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
	... more

で、解決策は公式にも乗っていて、Mavenのプラグインがあるので、それを入れます。

   <plugin>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa-maven-plugin</artifactId>
        <version>2.2.2</version>
        <configuration>
            <includes>**/model/*.class</includes>
            <excludes>**/model/XML*.class</excludes>
            <addDefaultConstructor>true</addDefaultConstructor>
            <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
        </configuration>
        <executions>
            <execution>
                <id>enhancer</id>
                <phase>process-classes</phase>
                <goals>
                    <goal>enhance</goal>
                </goals>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>org.apache.openjpa</groupId>
                <artifactId>openjpa</artifactId>
                <!-- set the version to be the same as the level in your runtime -->
                <version>2.2.2</version>
            </dependency>
        </dependencies>
    </plugin>

バージョンはお使いのOpenJPAのバージョンに合わせてください。
ゴールの「enhancer」はm2eでライフサイクルがサポートされてないとエラーが出るので、クイックフィックスで無視する設定を入れてあげてください。
公式そのまんまの情報ですが、日本語少ないのでとりあえず書いておきます。

カテゴリー: お仕事, プログラミング | タグ: , , | コメントをどうぞ