狐の社

覚書とかとか

daemontools 覚書

daemontoolsFreeBSDに入れて設定してみた時の覚書

FreeBSDならば、pkgでinstallできる。

# pkg search daemontools
daemontools-0.76_18            Service monitoring and logging utilities by djb

※ソースからインストールする場合は、以下の手順を追うことになるらしい?

installが終わったら、自動起動の設定をします。
FreeBSDならば、rc.confに以下の様に記載することになるでしょう。

svscan_enable ="YES"

基本的に、/usr/local/etc/rc.d以下にある、svscanの中身を確認すると
rc.confに記載する内容がわかります。

rc.d以下のスクリプトを利用せずに起動する場合は、以下を用いると良さそう(?)

csh -sf 'svscan /service &'

また、上記の内容で自動化したい場合は、rc.localを作成して以下のように記載すると良い?(引用元)

env - PATH=/usr/local/bin:/usr/bin:/bin csh -sf 'svscan /service &'

次に、daemontoolsで管理したいプログラムを指定します。

適当に、ディレクトリを作成します。

mkdir /myjob

作成したディレクトリ以下に任意のプログラムのrunファイルを作成します。

mkdir /myjob/test_job
touch /myjob/test_job/run
vim /myjob/test_job/run

runファイルには、今回は以下のスクリプトを記述します。

#!/bin/sh

i=1
while [ 1 ];
do
    echo $i
    i= expr $i + 1
    sleep 1
done;

任意のプログラムを実行したい場合は、以下のような記載をする必要があります。

#!/bin/sh
echo starting nginx
exec /usr/local/sbin/nginx

logを吐かせるためには、以下の操作が必要になります。

mkdir /myjob/test_job/log
touch /myjob/test_job/log/run
vim /myjob/test_job/log/run

logを吐かせるためのrunファイルには、今回は以下のように記載します。

#!/bin/sh

exec multilog t n50 ./main

これで、daemontoolで管理した際に、対象プロセスの管理状態についてのログが出力出来るようになります。

最後に、各runファイルの権限の修正をします。

chmod  1755 /myjob/test_job 

test_jobのスティッキービットを立てることで、log以下をsvscanが参照できるためlogを吐く場合は必要です。

これで、一通り準備ができました。

あとは、 /service以下に、 /myjob/test_jobのシンボリックリンクを作成します。

cd /service
ln -s /myjob/test_job

シンボリックリンク作成後は、5秒以内にrunファイルが実行されます。 (この実行によって、execで指定されたプログラムが実行されます。)

svstatを使って実行状態が確認できます。

# svstat /service/test_job
/service/test_job: up (pid 1179) 5845 seconds

svcを利用して、プロセスの起動、終了が制御できます。 ・ 終了

# svc -d /service/test_job
# svstat /service/test_job
/service/test_job: down 6 seconds, normally up

・ 起動

# svc -u /service/test_job
# svstat /service/test_job
/service/test_job: up (pid 12770) 7 seconds

注意点としては、runファイルを修正する場合は、
/myjob/test_jobをリネームして、新規でフォルダ構成を作り直す必要があるとのこと。
(superviseディレクトリが作られると、runファイルの書き換え後の処理が読まれない場合がある模様)

以上が、daemontoolsをいじった時の覚書です。

daemontoolsを弄ってた時に調べたサイトのURL一覧
http://yang.amp.i.kyoto-u.ac.jp/~yyama/FreeBSD/adm-ps/daemontools-j.html
http://www.emaillab.org/djb/daemontools/daemontools-howto.html
http://www.omakase.org/freebsd/daemontools.html
http://keisyu.hateblo.jp/entry/2014/02/12/234834
https://www.slideshare.net/klab-tech/daemontools-systemd (これは、daemontoolsからsystemdへ移行する話の模様)
http://q068891.hatenablog.com/entry/2018/06/10/021338
https://bayashi.net/wiki/linux/daemontools
http://www.marronkun.net/linux/other/daemontools_000039.html
http://www.unixuser.org/~euske/doc/daemontools/myfaq/faq-3.html

DNS温泉に参加してきたことを振り返ってみる

DNS温泉 Advent Calendar 2019 - Adventar 14日目です。

みなさん、今回はDNS温泉 Advent Calendar 2019に参加していただきありがとうございます:)
イベントを主催した一人のfateです。

久々のブログ投稿になります。

今回は、DNS温泉に参加してきたことについて私なりに振り返ってみたいと思います。

自己紹介

名古屋で、業務系システムの開発保守をしている社会人4年目の人です。
学生のころは、tssさん基、鈴木先生のゼミでネットワークやDNSなどの技術について
学んでいました。
ConvivialNet (AS45689)にも参加してました。

参加のキッカケ

DNS温泉に参加したきっかけは、 目の前でイベントが作り上げられていくのを目の当たりにしたというのと、 大学の講義とは違った環境でDNSに関する勉強がしたかったというのがあります。

そんな事もあり、私が初めて参加したのは2014年の第1回でした。
ちょうど大学3年の秋でしたね。(卒論、就職活動?)

元々、ITに興味があり、情報関連の学部のある大学に入学しましたが、入る前のDNSに対する印象は、
OSI参照モデルのL7にあるプロトコルの一つで、IPアドレスドメイン名を紐付けるもの」
というイメージを持っていましたが、

今ではDNS温泉を通してそのイメージを改めていくことができました。(もっと複雑でした:-|)

参加してみて思ったこと

こういう泊り込みでの勉強会に初めて参加したのがDNS温泉が初めてだったのもあり
その他の泊まるようなイベントに参加したときの場の雰囲気を感じ取るの基準になっていたりもします。
また、tssさんのこれまでの話も、内容は難しいものはありますがどれも印象に残りやすかったのと、資料を公開して頂いてるのであとで自分学んでいくの参考になっています。

参加してきた中で特に思うことは、講師含めみんな楽しくやれているところだと思います。
分かりづらい技術や概念でありながらも講義をしつつ質問を投げあいながらやれる光景というのは
とても良いものだと思ってます。

仕事ではDNSを触ることはまずないですが、DNS温泉に参加したのもあり個人でDNS権威サーバの
実装を動かして遊んでみたりとか、ほかの技術やその実装を扱う時もでもマニュアルを読み込んだり動かしながら
試したりすることを昔よりも深くやれるようになったのかなと思っていたりします。
そしてそういうのを「楽しむ」という感覚が今まで参加してきた中で得れたものだと思います。
(余談 最近は、dnsdistとかを弄ってます。)

今後も、参加したときには温泉に浸かり、お酒を浸透させつつDNS
それに紐付く技術や概念について楽しく学んでいこうと思います : )

Postfix + Dovecotでメールサーバ構築

メールサーバを構築したので、その時の操作記録
ついでに、LetsEncryptでTLS化もしました。
MDAで使用するプロトコルimapです。 (個人での利用ならPOP3は不要?)

環境

※ 今回設定ファイルが存在するディレクトリは /usr/local/etc 以下となる。

1. FreeBSDへのインストール

pkg install postfix-3.3.1_1,1 dovecot-2.3.2 procmail py36-certbot 

2. Postfix設定

  • 編集対象ファイル
main.cf
master.cf   
  • main.cf
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 168.100.189.0/28, 127.0.0.0/8
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
mailbox_command = /usr/local/bin/procmail #procmailを入れたい
smtpd_banner = $myhostname ESMTP autherWorld #お好み
    
# Dovecot-SASL Configuration
 smtpd_sasl_type = dovecot
 smtpd_sasl_path = private/auth
 smtpd_sasl_auth_enable = yes
 smtpd_sasl_security_options = noanonymous
 smtpd_sasl_local_domain = $myhostname
    
#TLS Configuration
 smtpd_use_tls = yes
 smtpd_tls_CAfile = /usr/local/etc/letsencrypt/live/mail.example.com/cert.pem
 smtp_tls_security_level = may  ※1
 smtp_tls_loglevel = 1
 smtpd_tls_cert_file = /usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem
 smtpd_tls_key_file = /usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem
 smtpd_tls_session_cache_database = btree:/usr/local/etc/postfix/smtpd_scache

※1 TLSで通信を行うかの設定。 Gmailでやり取りするのに必須。詳しくは下記
http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#smtp_tls_security_level

  • mater.cf
 submission inet n       -       n       -       -       smtpd
    -o syslog_name=postfix/submission
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
    -o milter_macro_daemon_name=ORIGINATING
    
 smtps     inet  n       -       n       -       -       smtpd
    -o syslog_name=postfix/smtps
    -o smtpd_tls_wrappermode=yes
    -o smtpd_sasl_auth_enable=yes

3.Dovecot設定

  • 編集対象ファイル
 dovecot.conf
 conf.d/10-auth.conf
 conf.d/10-mail.conf
 conf.d/10-master.conf
 conf.d/10-ssl.conf
 conf.d/auth-passwdfile.conf.ext (編集なしでもよい)
   protocols = imap
  • 10-auth.conf
   auth_mechanisms = plain login cram-md5 (plainだけなので、 loginとcram-md5を追加)
   !include auth-passwdfile.conf.ext
  • 10-mail.conf
   mail_location = maildir:~/Maildir
  • 10-master.conf
   service imap-login {
   inet_listener imap {
     port = 0
   }
   inet_listener imaps {
     port = 993
     ssl = yes
   }   
   
   # Postfix smtp-auth
   unix_listener /var/spool/postfix/private/auth {
     mode = 0666
     user = postfix
     group = postfix
   }
   ssl = yes
   
   ssl_cert = </usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem
   ssl_key = </usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem
   
   ssl_dh = </usr/local/etc/dovecot/dh.pem

3.SSL設定

上記の設定でTLS/SSL関連の設定時に必要となる証明書等の発行を以下で行う。
* LetsEncrypt
certbot (py27 or py36) installed( 1にて実行済み)

   certbot-3.6 certonly --standalone -d mail.example.com -m <連絡が欲しいメールアドレス>
   ※上記で証明書が発行される
  • dh.pem
   openssl dhparam -out /usr/local/etc/dovecot/dh.pem 4096
   dovecotで認証を行う際にDH鍵を使用するため、生成する

4. ユーザ作成

PostfixSMTP-AuthDovecot-SASLを利用する形にする
基本的には、/usr/local/etc/dovecot/usersを作成する
形式は

<username>:<password>(cram-md5):uid:gid::<home directory>

パスワードの作成は以下で行う

doveadm pw -s cram-md5 
Enter new password:
Retype new password:
{CRAM-MD5}XXX

5.procmailrc

見よう見まねで書いたもののため、試行錯誤する余地がまだあります。

  • 編集対象ファイル
procmailrc
  • 内容
    SHELL=/bin/sh
    PATH=/bin:/usr/bin:/usr/local/bin
    DROPPRIVS=yes
    MAILDIR=$HOME/Maildir
    DEFAULT=$MAILDIR/
    #LOGFILE=$MAILDIR/procmail.log
  
    #remove loan
    :0
    * ^Subject: .*loan.*
    /dev/null

まとめ

上記の設定以外に、 DNSのMXレコードの設定やSPFレコードの設定が存在するが
またいずれ追記することにします。
ひとまずは、上記の設定でメールのやり取りができるようになりました。
また、バージョンが変化したりすることで設定の仕方が変わってしまう可能性はありますが
その時はその時です:p
(実際、Dovecotの設定方法は1.xと2.xでだいぶ異なる...)
あとは、clamAVとかの設定も必要ですね

以上、今後のための記録:)

Python.h: No such file or directory

わりとメインになりつつあるLinux Mint機にpythonのpcapyを入れようとしたら

cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default] pcapdumper.cc:10:20: fatal error: Python.h: そのようなファイルやディレクトリはありません #include <Python.h> ^ compilation terminated. error: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

と怒られたので、いろいろ探してみたら

python-devを入れればいいことがわかったので、とりあえず

sudo aptitude install python-dev

をしてみた

そしたら無事成功したもよう

Processing dependencies for pcapy Finished processing dependencies for pcapy

( v'ω')vイエーイ

※参考サイト

unix.stackexchange.com

Ciscoルータを初期化するときに使うであろうscreenのコマンド

なんか毎回これを忘れるのでメモ程度な記事を書くよん。

screenから標準のキーバインドでbreakキー信号を送るには

  • break Ctrl+a b

でよろしいみたいです。

ついでに 初期化手順が

  • Ciscoルータなどの機器にコンソールケーブルさし〜の

  • ルータのスイッチ入れ〜の

  • 起動から60秒以内にbreakキー信号送り〜の

  • rommonになり~の

  • レジスタ値を confreg 0x2142 に変更し〜の

  • reset し〜の(再起動)

  • en で特権execモードになり〜の

  • copy starting-config runnning-config 実行し〜の

  • enable secret で設定し〜の

  • レジスタ値をconfig-register 0x2102に戻し〜の

  • copy running-config starting-configで保存し〜の

嫁がない。

Nginxでメールプロキシサーバを立ててみる。

Nginxでメールプロキシサーバを建てみました。

今回は設定云々の話ですね。

環境はFreeBSD 9.2-RELEASEを使ってます。

/usr/ports/www/nginx/に移動したあと、make configを実行。

f:id:fatefox:20141206164353p:plain

すると上記のような選択画面がでます。

MAILとMAIL_POP3,MAIL_IMAP,MAIL_SMTPを選択しておきましょう。 (SSLも使う人は MAIL_SSLも選択)

そうしましたら make installしましょうね。(sudo か # でやりましょう。)

インストールが完了したら、/usr/local/etc/nginx/に移動しましょう。

nginx.confをスキなエディタ(私はVim)で開きましょう。

http server などの設定の後ろのほうに追記でmail proxy serverの設定を書きます。

nginx.conf

あとはこれを保存して、 FreeBSD だと、 service nginx onestartしましょう。 

何もなければ起動すると思います。

P.S.

serviceを実行するときに、oneをつけて実行したくない場合は

/etc/rc.confに nginx_enable="YES"を追記しておきましょう。

Unicast Local Address generator作った。

簡単にですが、Unique Local AddressをMAC Addressから生成するプログラムを書いたので
おいておきます。

IPv6では、インターネットからの通信を受信するにはGlobal Unicast Address(※1)が
必要ですが、 組織や自宅など自分で管理ができる範囲で用いるときに使われる
アドレス形態がUnique Local Address(※2)です。
これのジェネレータはkame.netさんなどが作成されておりますが、個人的に
勉強になると思いつくってみました。
Pythonで動いてるので、大体はどの環境でも動くと思います。

※1 Gulobal Unicast Addressは、RFC3587等で定義されており、基本的にはプロバイダから
割り当ててもらう必要がある。(基本的にはです。
※2 Unique Local Addressは、RFC4193で定義されています。

以下がソースコードです。

gist3368661cd658c1e55d52

まとめ
bit変換の時に文字列に変換して操作するとか面倒だったのでもう少し効率よく出来ないものだろうか。と思いつついます。