ban4ipインストールしてみました

オープンソースアンカンファレンス金沢2016でT.Kabuさんからのご紹介のあった
fail2banをやめてBan4ipにしませんか?
を早速試してみました。
ApacheやSSH、postfix、dovecot等のログを解析して失敗を検知した接続元のIPアドレスをiptablesに書き込みしてフィルタリングするデーモンになります。
IPv6にも対応しているところが優れています。
CentOS7の環境でしたが、問題なく導入でき1日間で17回BANできています。
インターネット環境にサーバを公開するということは常に攻撃にさらされていると感じました。
自動BANツールを導入していない方はぜひ導入してみるとよいと思います。
なお、サーバを再起動する際には、banした設定が消えてしまうので /sbin/service iptables save を忘れずに!

logrotateを使う

ログファイルによってディスクフルにしないようにするためには、logrotateを利用するわけだが、一部ハマったことがあったので、記録しておく。
1.logrotateを実行すると怒られる
$ sudo /usr/sbin/logrotate /etc/logrotate.conf
error: skipping “(ログファイルのパス)/logs/debug.log” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.
どうやらログが記録されているフォルダの権限が、rootユーザではないことが原因のようだ。(腑に落ちない点はあるが。。。。)
設定ファイルにsu設定を行っておき、ログの書き込みを行うことが可能なユーザー、グループを指定する。
$ cat /etc/logrotate.d/hogehoge
(ログファイルのパス)/logs/debug.log {
daily
rotate 7
missingok
notifempty
create 0664 apache apache
su apache apache
nodateext
}
2.ローテートされたファイルに日付が付加される。
昔は、ローテートされたファイルに数字が付加されていたような気がしたが、Cent OS 7では、ファイル名-YYYYMMDDになっている。
見やすいのだが、プログラムでログファイルを自動解析しようとするといささか不便である。
/etc/logrotate.conf
に dateext が設定されていることが原因。これをコメントアウトするか、個別のログで解除したい場合には、上記例のように nodateext を設定すればよい。
参考サイト:
ログローテートしない – 揮発性のメモ
logrotate パーミッション エラー (r271-635)

mbox形式のデータをMaildir形式に変換する

サーバ移行作業中に誤ってメールをmbox形式で/var/spool/mail/(username) で受信してしまっており、Maildir形式に移行する必要が発生した。
優れたツールがあったので、紹介しておく。
wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
cd /usr/local/bin/
chmod u+x perfect_maildir.pl
./perfect_maildir.pl /home/(username)/Maildir < /var/spool/mail/(username) >> /tmp/migrate-maildir.log 2>&1
root権限での実行を想定しています。
上記を実行すると、/tmp/migrate-maildir.log には、
Inserted NNN messages into maildir /home/(username)/Maildir/ in N seconds
というログが表示され、実際にNNN件のメールデータが移行されています。

xfsファイルフォーマット

BUFFALOのNASのディスクフォーマットによく採用されており、最近ではRed Hat Enterprise Linux 7(Cent OSも7)よりデフォルトのファイルフォーマットになったxfsについて。
昔からあるファイルフォーマットらしいが、その割にはCent OS 6以下ではパッケージを読み込まないとマウントできないという変わったファイルフォーマットである。
ちなみにCent OS 6では、xfsprogsパッケージをインストールすればよいのだが、64bit版にしかパッケージにないため、32bitではどうやってもマウントできない。
ということで、32bitマシンでは、KNOPPIX 7のLive DVDのイメージをDVDに書き込みして、そこからマウントすることがxfsフォーマットしたディスクを読み出すための最短ルートという話でした。
32bitマシンもう捨てろよって話なんだけども、、、、

CentOS 6.4にVirtualBoxをインストールする

WindowsXPがサポート切れになるための対策として、最新のパッチが当たった状態の仮想マシンを作っておいて残しておこう作戦。
最近の仮想化ソフトの市場がだいぶ変わっていて、VMWareは有償みたい。というわけで、VirtualBoxにすることにした。
インストールはできるが、起動させようとすると怒られる。
http://www.ivoryworks.com/blog/tag/kern_dir
を参考にKERN_DIRを環境変数に設定して起動したらできた。
ちょっと不親切。

ジョブの操作

たとえば、vmstat 3 100
とすると、vmstatコマンドは、フォアグランドで動作する。
また、vmstat 3 100 &
とするとvmstatコマンドは、バックグラウンドで動作する。
いずれの場合も、SSHで接続している場合に、exitをしても接続が切断されず、SSHを強制的に切断するとプロセスが強制終了してしまう。(シェルの種類とsshのバージョンによっては挙動が異なるようだ)
リモート接続している場合において、処理が接続中に終わらないことが分かっている場合には、
nohup vmstat 3 100 &
などとすることで、exitをすれば接続が切断される。
ただ、当初はすぐに終わる処理だと思っていて、フォアグラウンドで処理していたが、なかなか終わらない場合には、(bashシェルの場合)次の操作をするとよい。
Shift+Z でフォアグラウンド処理を停止したうえで、
jobsコマンドを発行し、対象のジョブ番号を確認する。
そして、bg ジョブ番号
とすることでバックグラウンドプロセスに変更できる。(フォアグラウンドプロセスにする場合には、fcコマンドをする)
そのうえで、disown %ジョブ番号
とすれば、nohupしたのと同じ状態になるはずなのだが、自分の環境ではうまくいかない。

sambaによるファイルアクセス監査

しばらくインターネット記事を見る機会も少なくなってしまって、ブログの書き込み頻度が少なくなってしまっているけれど、ちょっと気になったものがあったので、紹介しておきます。
vfsという追加機能であるauditを利用することでどのファイルにアクセスしたかログを取得することができるようです。情報はファイルサーバーに集約して管理することが多いと思いますので、Linuxサーバーで運用している場合には検討してもよいのかもしれません。

SSHを利用してノンパスワードログインする

別のサーバー同士でコマンドをやり取りするには
ssh username@servername commandname として実行できるが、このときにパスワードが要求されてしまう。
また、別のサーバーからファイルをセキュアに転送するには、
scp username@servername:(リモートサーバーのパス) (ローカルのパス) として実行できるが、このときにやはりパスワードが要求されてしまう。
これは自動化する上でかなり問題があり、expectという方法でパスワードを自動入力させる方法もあるが、これはクレバーではない。
sshにはノンパスワードログインという方法があり、接続元で発行した公開鍵を接続先のアカウントの.ssh/authorized_keys に保存することで実現できる。
設定方法でわかりやすかったサイトは、ぴえ~るの活動日記だけれども、デフォルトではauthorized_keys2ではなくauthorized_keysなので注意が必要。
また、多くのサーバーではこれだけでは接続できないので、接続先サーバーの/etc/ssh/sshd_configを編集(RSA公開鍵認証の有効化)しなければならない。わかりやすいサイトは、Gentoo Linuxで自宅サーバ であり、

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeyFile .ssh/authorized_keys

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeyFile .ssh/authorized_keys

とすればよい。
僕の場合には、これをやってもうまくいかず、vオプションをつけてデバッグしてみたら
Offering public key: /home/hogehoge/.ssh/id_rsa
から先の認証手続きがうまくいっていないことがわかった。
いろいろ調べてみたら、おさかな学習帳にあるとおり接続先の/var/log/secureにエラーが出ていて、.ssh フォルダのパーミッションが正しくなかったために接続できなかったというオチだった。

Linux標準教科書

というものがオンラインでダウンロードできます(ユーザー登録の必要があります)
発行元はLPIC試験を実施しているLPI-JAPANというところです。
誤植は多少ありますが、Linuxを触っている私でもはじめて知るような内容が盛り込まれていて、一読する価値はあります。またLPIC試験を受験される方は必読になるんだと思います。
わかっているようでわかっていないLinux。奥が深いですね。

タイムスタンプの話

Linuxでタイムスタンプでファイルを検索する話。
UNIXの部屋 検索: タイムスタンプに詳しく解説されているので、これを見ればよく理解できるのだが、通常 ls -l コマンドで時刻を出すとファイルを変更した時間(mtime)が出てくるが、ファイルの属性を変更した場合(ファイル名を変更した、権限を変更した、オーナーを変更したなど)にはその時間が反映されない。
それらの時間を変更したものを表示させるには、 ls -lc とする必要がある。
たとえば、全ファイル内で、1時間以内にファイル属性が変わったものを調べるには、
find / -cmin -60
とすればよい。
mtime, ctimeは理解できるのだが、atimeがよくわからない。ファイル内容をreadするためにはどうしたらよいのか?catコマンドで見ても駄目だし。。。