CentOS7でのRPMパッケージ作成手順(sshguard編)

だいぶ前に sshguardでブルートフォースアタック対策 という記事を書きましたが、最近CentOS7で環境を作りなおしていることもあり、最新バージョンのパッケージがなかったので自作してみました。

どこにでもありそうな内容ですし、別にCentOS”7″だからという部分もほぼないのですが──主にRPMパッケージの作成手順を目的として、sshguardパッケージの作成をまとめていきたいと思います。



RPM作成用パッケージ

インストールします。


sshguardのソースを用意

一般ユーザーで作業ディレクトリを準備します。

ソースをゲットして解凍します。少し編集するので、仮で .orig をつけています。

  • 下記 $DIRECT_LINK は本家筋 (Sshguard | Download) の Source code から辿ってゲット
  • 今回は少しだけ手を入れます。起動時に大量、その後も毎秒一行のログが出てウザ過ぎて、止める手立てがなさそうだったので、しょうがなくです。
    (※syslog側で破棄するより元を絶ちたかったので)

    微量のパッチですが作成して、

    パッチを当てて、また固めます。


    追加ファイルの作成

    ソースアーカイブ内に存在しないファイルを作成しておきます。作成場所は、引き続き SOURCES 配下です。

    systemdのユニットファイル

    1.6.3 から examples/sshguard.service が追加されたので、それを流用して好みに仕上げます。内容は主にこんな感じ
  • sysconfigでオプションを環境変数として扱えるように
  • “sshguard”チェインは作成されてたけど、そこへ渡る条件がなかったのでTCPポート条件を同時に作成&削除
  • sysconfigでデフォルト環境変数を設定

    /etc/sysconfig/sshguard のファイルを作成します。
  • OPTIONS の -a 50 により、secureログに5回の同じIPアドレスによる失敗行が出たらDROPを追加します。失敗回数ではなく行数なので、一度に二行のIPアドレスが記録される場合、3回目でアウトとなります
  • PORTS に sshd が使用する可能性のあるポートを羅列することで、そのINPUTパケットをsshguardチェインに渡します
  • ホワイトリスト

    ほぼexamplesそのままですが、/etc/sshguard/ に置いて利用します。


    SPECファイルの作成

    RPM作成のためのSPECレシピを書きます。本家の古いRPMから持ってきて、少し書き換えた感じです。昔と比べて、追加したファイルは %files に書かないとエラーが出る、といったバージョンの違いがあるようです。


    RPM作成

    一通りファイルが揃ったら、作成を実行します。

    エラーが出たら、ひたすらSPECファイルを編集して再実行します。成功したら、RPMファイルの確認をします。

    インストール前に中身を確認したい場合は、こんな感じ。

    実際にインストールして、

    入ったのを確認したり、

    起動してプロセスや諸情報を確認したり、

    このデーモンに必要な動作確認──今回の場合は外部からわざとSSHログインに数回失敗して、iptablesで遮断されるまで確認します。

    最後に、パッケージを削除して綺麗になるところまで確認して完了です。今回のだと、/etc/sshguard/ とか消すのサボってますけど、場合によってはゴミは完全に掃除したほうがよいですね。


    その他

    SPECのトラブル例

    SPECファイルの、例えば %preun 部の記述をミスると、アンインストール時にスクリプトエラーが出てパッケージ自体の削除ができなくなったりします。yum では強制アンインストール的なものはないので、そういう場合は rpm を使います。



    .rpm を作ったら、あとは自前のyumリポジトリサーバーに置くなり、プロビジョニング・ツールの files としてぶち込むなり、都合に合わせて管理したらよいと思います。

    .rpm はSPECだけで済むので、Debian系の .deb で多くの設定ファイルが必要なのに比べて、だいぶ扱いやすい印象です。最近はどのミドルウェアも迅速にパッケージを用意してくれるので、作成の機会はだいぶ減りましたが、まれに必要になるため、そういう時はヤンチャして直にコンパイルからぶち込んだりしないで、ちゃんとパッケージを作って運用しましょう、そうしましょう。