vps上にメールサーバ構築

webサービスのアカウント登録などに使うための捨てアドレスが欲しかったので自前でメールサーバ構築。
以下の環境で構築開始。

サーバ Serversman@vps
OS CentOS7.0

サーバの設定

本題に入る前にvpsの設定をいじる。
 userアカウント作成 
 sshでrootログイン禁止
 SELINUX Disabled
 ホスト名変更
 iptables設定変更
  INPUT DROP
   sshのポート穴あけ
  

Postfixを設定

設定自体はwebに沢山あるので調べながら進める。
今回参考にさせてもらったのは以下のサイト。
centossrv.com


vi /etc/postfix/main.cf
※左の数字は行番号
75 #myhostname = host.domain.tld
76 #myhostname = virtual.domain.tld
77 myhostname = duck-dz.kazika.net ※追記

85 #mydomain = domain.tld
 86 mydomain = kazika.net ※追記
 
 101 #myorigin = $myhostname
102 #myorigin = $mydomain
103 myorigin = $mydomain ※追記

117 #inet_interfaces = all
118 #inet_interfaces = $myhostname
119 #inet_interfaces = $myhostname, localhost
120 inet_interfaces = localhost
↓ に変更
117 inet_interfaces = all
118 #inet_interfaces = $myhostname
119 #inet_interfaces = $myhostname, localhost
120 #inet_interfaces = localhost


168 mydestination = $myhostname, localhost.$mydomain, localhost
169 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
170 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
171 #       mail.$mydomain, www.$mydomain, ftp.$mydomain
↓ に変更
168 #mydestination = $myhostname, localhost.$mydomain, localhost
169 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
170 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
171 #       mail.$mydomain, www.$mydomain, ftp.$mydomain

422 #home_mailbox = Mailbox
423 #home_mailbox = Maildir/
424 home_mailbox = Maildir/ ※追記

577 #smtpd_banner = $myhostname ESMTP $mail_name
578 #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
579 smtpd_banner = $myhostname ESMTP unknown ※追記
master.cfを編集
#smtp      inet  n       -       n       -       -       smtpd ※コメントアウト

submission inet n       -       n       -       -       smtpd ※コメントアウト解除
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes ※コメントアウト解除
各種サービス起動
sasl起動
systemctl start saslauthd
systemctl enable saslauthd.service


Postfix起動
systemctl restart postfix.service
systemctl enable postfix.service
ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/postfix.service'

とりあえず以上でサーバからメール送信することはできる。


はまった箇所
 サーバから自分のgmailにメール送信したときに遅れない問題
  

  • デフォルトメールクライアントがpostfixでなくsendmailだった

  →解決:alternatives --config mta コマンドでデフォルトmailコマンドを変更

  • dnsで名前解決ができていなかった

  →iptablesでINPUTに53ポートが許可されていなかった
   これが原因でyumcurlが出来なかった
   sshでログインする際も遅かった。これはアクセス元のIPアドレスを逆引きしようとしていて、
   名前解決できずにタイムアウトしてから次の処理に進むためだった。
   ログインしたときに、"Last login: Mon Jul 17 21:24:44 2017 from xxxxx.jp"
   これを表示するときのやつ。

  • logにipv6関連のメッセージが記載してあった。

   →IPv6に対応していないサーバ環境で出るメッセージだった模様。
       postfixのmain.cfの"inet_protocols = all"を"inet_protocols = ipv4"に変更

Linux sarコマンドあれこれ

sarコマンドについて少し調べたのでメモ。

sarコマンドとは?

Linuxでシステムの負荷状況などをモニタリングするコマンド。
主に以下の情報が取得できる。

 CPUが何に時間を使っていたか
 アプリ、カーネル、ディスクへの書き込み

  • メモリ使用率(空き容量、使用率、キャッシュ使用率など)
  • Disk負荷状況(read,write)
  • NW負荷状況(パケット送受信)

大まかな使いどころはこのぐらいかと。
調べてみると結構いろんな情報が見れるっぽい。
sysstatのバージョンによりけりなのだろうけど、
CPU温度、CPUクロック周波数なんかも見れるらしい。

ちょっと使ってみる

AWSのEC2インスタンスで試してみる。
Amazon Linuxだと標準で入っていないようなのでインストール。

$ sudo yum install sysstat

OSのバージョンの確認でつまずく。。

$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2017.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2017.03"
PRETTY_NAME="Amazon Linux AMI 2017.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2017.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
sarコマンド実行

基本的には以下のようにコマンド実行。

sar <オプション> <情報取得間隔(秒)> <情報取得回数>

情報取得回数はなくても大丈夫。その場合はctrl + Cとかで止めるまで情報取得し続ける。

主なオプションは以下。
特にこだわりがなければ「-A」で取得しておけば間違いない。

オプション 内容
-A 全ての情報を取得
-P ALL CPUの情報
-r メモリの情報
-n DEV ネットワークの情報
-d ディスクの情報
-o <ファイル名> アウトプットファイルを指定


コマンド最後の数字は"1秒間隔"で"5回取得する"という意味。
最後の数字はなくても大丈夫。その場合はずっと情報取得し続ける。


CPUの情報を取得

$ sar -P ALL -o sardata 1 5

Linux 4.9.32-15.41.amzn1.x86_64        07/04/2017      _x86_64_        (1 CPU)

01:22:52 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:22:53 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
01:22:53 PM       0      0.00      0.00      0.00      0.00      0.00    100.00

01:22:53 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:22:54 PM     all      0.00      0.00      1.00      0.00      0.00     99.00
01:22:54 PM       0      0.00      0.00      1.00      0.00      0.00     99.00

01:22:54 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:22:55 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
01:22:55 PM       0      0.00      0.00      0.00      0.00      0.00    100.00

01:22:55 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:22:56 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
01:22:56 PM       0      0.00      0.00      0.00      0.00      0.00    100.00

01:22:56 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:22:57 PM     all      0.00      0.00      0.99      0.00      0.00     99.01
01:22:57 PM       0      0.00      0.00      0.99      0.00      0.00     99.01

Average:        CPU     %user     %nice   %system   %iowait    %steal     %idle
Average:        all      0.00      0.00      0.40      0.00      0.00     99.60
Average:          0      0.00      0.00      0.40      0.00      0.00     99.60
取得した情報を後から確認したい場合

-fオプションでsarファイルを指定 ※-oオプションで保存したファイル

sar -P ALL -f sartest

Linux 4.9.32-15.41.amzn1.x86_64       07/05/2017      _x86_64_        (1 CPU)

04:28:30 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:28:31 PM     all      0.00      0.00      0.00      2.00      0.00     98.00
04:28:31 PM       0      0.00      0.00      0.00      2.00      0.00     98.00

04:28:31 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:28:32 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
04:28:32 PM       0      0.00      0.00      0.00      0.00      0.00    100.00

Raspberry Pi2に無線設定

Raspberry Pi2 typeBにUSB無線ドングルを買ってきて設定。DHCPで。

あんまり安いと発熱がすごいらしいのでこちらを購入。少し使用した状態だと発熱は大丈夫そう。

sudo iwlist wlan0 scan |grep ESSID
                    ESSID:"xxxxxxxxxx"
                    ESSID:"oooooooooo"
                    ESSID:"aaaaaaaa"

wpa_passphrase <ESSID> ←検索したSSIDを指定
# reading passphrase from stdin
ここにパスワード打ち込む

以下のようにネットワークの設定が生成されるので、コピー
network={
	ssid="xxxxxxxxxx"
	#psk="hogehoge"
	psk=4923805fdgnoas0gtwn4fgntl2l410anebtpabe0
}

sudo vim /etc/wpa_supplicant/wpa_supplicant.conf 
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
#先ほどコピーしたネットワークの設定をここに貼り付け

再起動して、ifconfigでIPが振られていることを確認。

Linuxでキャッシュを追い出す

root権限が必要。

# sync
# echo 3 > /proc/sys/vm/drop_caches

echoする数字は1~3があり、


1 : ページキャッシュ

2 : ダーティーキャッシュとinode

3 : ページキャッシュ、ダーティーキャッシュ、inode

Linuxでキャッシュをクリアしたい時に使える。
「1」が読み込みに、「2」が書き込みに関連してそう。
とりあえず「3」を指定しておけば良さそう。
なお、これが使用できるのはkernel2.6.6以降とのこと。
rootでスクリプト作成しておいて、スティッキービット付けておけば便利そう。


rootが使えない環境はmemhogコマンドなどで対応。

搭載量よりも大きくmemhogしてしまうとoomキラーが発動してOSが落ちる可能性があるので注意。

以下は500MBのメモリ領域をクリアした例。ギガの時は「g」とか指定。

$ memhog 500m
..................................................

bashでランダムな2進数を生成

8bitの2進数をランダムに出したかったのでメモ。
bashでランダムな10進数の数字を2進数に変換する。

echo "ibase=10; obase=2 ; `expr $RANDOM % 256`" | bc

$RANDOM は0~32767までの数字を出力する
それをnで割った余りを割り出す。0~255までのランダムな数字がでてくる。
ibase=10進数; obase=2進数; <変換したい数字> | bc

という感じで、bashでランダムな10進数を2進数に変換。

linuxコマンドライン上からメール送信

linux上からメール送信したときのメモ。

[user@hostname ~]$ mail -s “件名” -r 送信元アドレス 宛先アドレス

#Enterを押したあとに本文入力。
#ヒアドキュメント的に入力できる。

お疲れ様です。
明日の飲み会行けたら行きます。
以上、よろしくお願いいたします。

入力終わったら、ctrl+Dで抜ける

grepコマンドで特定の文字列を抜きだす

linuxgrepコマンドを使っていて、特定の文字だけ抜き出したい時に調べたメモ。
以下のようなテキストファイルをベースに色々試す。「-w」「-x」などのオプションでの挙動の違いなど。

$ cat test.txt
duck
duckduck
hogehogeduck
duck 12345

#オプション無し
$ grep duck test.txt
duck
duckduck
hogehogeduck
duck 12345

#「-w」オプション
$ grep -w duck test.txt
duck
duck 12345

#「-x」オプション
$ grep -x duck test.txt
duck

「-w」は検索語にマッチする「行」を出力。

「-x」は行全体が検索語にマッチするかを判定。

manにも書いてある。