[Memo2021][ITPASS]サーバ交換作業 (Mail)

作業内容

phase 0 (準備)

  • サーバ交換中は Hiki 上のマニュアルを参照できなくなるため, 作業者は予めサーバ交換マニュアルを手元に保存しておく.
    • サーバ交換マニュアルから引用されているページについても忘れないこと.
    • Hiki ページの印刷は推奨されない. 長いコマンドなどが切れてしまうため.

phase 1

特に作業を行わない.

phase 2

特に作業を行わない.

phase 3

特に作業を行わない.

phase 4

特に作業を行わない.

phase 5

ホスト名と IP アドレスの変更

各種設定ファイルに存在する, ika と tako のホスト名と IP アドレスを入れ替える. 編集の際は元のファイルを hoge_old としてバックアップを取る.

  • 担当
    • /var: Mail 班
      • システムログ内は変更しなくてよい
  • ika と tako のホスト名を交換 (新 ika には ika, 新 tako には takoと書く)

    • /var/qmail/control/defaulthost
    • /var/qmail/control/me

    上記の場所以外にも古い名前が残っているかどうかを grep で確認する.

    # grep tako (または ika) /var/qmail/*
    # grep tako (または ika) /var/qmail/*/*
    # grep tako (または ika) /var/qmail/*/*/*
    ...

    など. ファイルの編集をするときはエディタの検索機能を活用すると早く作業できる. ただし一括置換はホスト名とは関係ない文字列も置換してしまう恐れがあるので使わないこと.

システムログ, /var/qmail/queue/mess 以下は変更しなくても良い. ( /var/qmail/control/rcphosts と /var/qmail/control/locals が grep に見つかるが, phase 7 で作業するので, 変更しなくてもよい.)

phase 6

特に作業を行わない.

phase 7

ここからホスト名が入れ替わっているので注意すること.

tako の qmail の設定変更 (担当: 旧 Mail 班)

以下のファイルを変更する. 設定ファイルのバックアップを取ること.

  • /var/qmail/control/locals
  • /var/qmail/control/rcpthosts

変更前

localhost
ika-itpass.scitec.kobe-u.ac.jp
itpass.scitec.kobe-u.ac.jp
epa.scitec.kobe-u.ac.jp
aoe.scitec.kobe-u.ac.jp

変更後

localhost

ika の Mail 関連の設定変更 (担当: 新 Mail 班)

  • qmail の設定変更

以下のファイルを確認・変更する. 設定ファイルのバックアップを取ること.

  • /var/qmail/control/locals
  • /var/qmail/control/rcpthosts

上のファイルの内容が下のように変更されていることを確認する. 下のようになっていない場合には下のように変更する.

localhost
ika-itpass.scitec.kobe-u.ac.jp
itpass.scitec.kobe-u.ac.jp
epa.scitec.kobe-u.ac.jp
aoe.scitec.kobe-u.ac.jp

また,

  • /var/qmail/control/defaulthost
  • /var/qmail/control/me

が以下のように変更されていることを確認する.

ika-itpass.scitec.kobe-u.ac.jp

qmail-showctl で設定を確認する.

ika# qmail-showctl

具体的には以下の通り.

ika# cd /etc/init.d
ika# insserv -d qmail
ika# chmod 755 qmail
ika# systemctl enable dovecot
  • メーリングリスト毎の bouncer 設定

メーリングリストのエラーメール転送設定が行われているかチェックする. この作業が必要なメーリングリストは,

itpass-ml_at_itpass.scitec.kobe-u.ac.jp

である. ただし, "_at_" はアットマークである. /home/itpass/ml/ml-ctrl/bouncer が以下のように変更されていることを確認する. 変更されていない場合は以下のように編集する.

&itpadmin_at_itpass.scitec.kobe-u.ac.jp
|/usr/local/ezmlm/bin/ezmlm-weed
|/usr/local/ezmlm/bin/ezmlm-return -D '/home/itpass/ml/ml-ctrl’

phase 8

特に作業を行わない.

phase 9 (再起動後の動作確認)

サービスの起動確認

ps aux で以下の確認作業を行う.

  • ika
    • qmail, dovecot が起動していることを確認する.
  • tako
    • qmail, tcpserver (smtp) が起動していることを確認する.
    • inetd (pop3) が起動していないかを確認する. 起動していたら以下を実行して停止する.

      #systemctl disable inetd
      #systemctl stop inetd

サービスの動作確認

ika
  • fail2ban: は正しく動作しているか確認する.
  • ssh のテスト
    • johoXX から存在しないユーザー名でログイン失敗し, ログで ban されているか確認する.

      # lv /var/log/fail2ban.log
      2021-11-24 16:09:27,548 fail2ban.actions        [672]: NOTICE  [ssh] Ban XXX.XX.XXX.XX
  • error のテスト

    • /etc/fail2ban/jail.conf の findtime, maxretry, bantime の値を適宜変えて, fail2ban を再起動し, ブラウザを立ち上げ, ika-itpass.scitec.kobe-u.ac.jp/ 以下 の others にパーミッションがないところに findtime 以内に maxretry 回以上アクセスする. ログで ban されているか確認する.今回は findtime 60, maxretry6,bantime60 に設定する.

    # lv /var/log/fail2ban.log

    2020-12-01 15:20:27,583 fail2ban.actions        [2213]: NOTICE  [apache-ddos] Ban 150.84.188.45

(2021/11/24) findtime 以内に maxretry 回以上アクセスしたが, ban されずログが残らなかった.

  • access のテスト

/etc/fail2ban/jail.conf の [apache-ddos] を以下のように一時変更する.

[apache-ddos]
enabled  = true
port     = http,https
filter   = apache-ddos
findtime= 10
logpath  = /var/log/httpd-*access.log
maxretry = 3
bantime  = 60

fail2ban を再起動する.

# systemctl restart fail2ban

itpass.scitec.kobe-u.ac.jp 以下の実在するファイルに findtime 内に maxretry 回アクセスして /var/log/fail2ban.log を見て ban されているか確認する.

2018-12-04 16:58:35,807 fail2ban.actions        [2205]: NOTICE  [apache-ddos] Ban XXX.XX.XXX.XX

/etc/fail2ban/jail.conf の findtime と maxretry の値をもとに戻して再起動する.

# systemctl restart fail2ban

(11/24) findtime 以内に maxretry 回以上アクセスしたが, ban されずログが残らなかった.

(12/09) 上の問題に対する処置を行なった. 本ページ最後の追記事項を参照せよ.

  • ベーシック認証が ban されるかの確認

https://itpass.scitec.kobe-u.ac.jp/hiki-secret/hiki.cgi にアクセスすると 出てくるログイン画面で以下の操作を findtime 内に maxretry 回行う.

  • 存在しないユーザでログインしようとする
  • 存在するユーザで間違ったパスワードを入力する

上の 2 つの作業について ban されることを確認する.

(11/24) findtime 以内に maxretry 回以上アクセスしたが, ban されずログが残らなかった.

(12/09) 上の問題に対する処置を行なった. 本ページ最後の追記事項を参照せよ.

  • pop: メールをとってこれるかを確認.
    • ika での作業
      • 自分のホームディレクトリで作業を行う.
      • ~/.qmail の転送先メールアドレスをコメントアウトし, 以下を書き足す.
個人のアカウントでテストする場合はテスト後設定を元に戻しておくこと

    ./Mailbox

 * メールを受け取る ika 以外の計算機での作業
   * メーラーの設定は pop サーバ, smtp サーバはどちらも itpass.scitec.kobe-u.ac.jp とする.
   * pop も smtp も暗号化されたパスワード認証を選択する.
     * 接続は暗号化されていないという警告が表示される場合があるが, そのまま進める.

 * Thunderbird を使ったサーバへのアクセスが上手くいかなかったため, telnet を用いて 110 番ポートに接続し, メールが届いているかを確認した.

  • smtp: メールを出せるか, 受け取れるかを確認する.
    • Thunderbird を使ったサーバへのアクセスが上手くいかなかったため, telnet を用いて 25 番ポートに接続し, メールを送れるかを確認した.
  • qmail-inject で外にメールが届くか

    他のホスト上のアカウントへ送って, 届いていることを確認する.

    $ echo to: 18XXXXXs_at_stu.kobe-u.ac.jp | /var/qmail/bin/qmail-inject
  • 外からメールを送って届くか

個人のメーラーから hoge_at_itpass.scitec.kobe-u.ac.jp へメールを送りメールが届いていることを確認する. imap 対応メーラー(例. Thunderbird)を用いて imap サーバを ika に指定して, ika 上の自分のアカウントあてに届いたメールを確認する. メーラの設定は以下の通り.

受信サーバ: IMAP
サーバのホスト名: ika-itpass.scitec.kobe-u.ac.jp
受信サーバのポート番号: 143
受信サーバのSSL: 接続の保護なし
認証方式: 暗号化されたパスワード認証 
  • mailing list: メールが配送されるかどうか確認する.
    • Thunderbird を使ったサーバへのアクセスが上手くいかなかったため, telnet を用いて 143 番ポートに接続し, メールが届いているかを確認した.
    • itpass-ml_at_itpass.scitec.kobe-u.ac.jp にメールを送信する.
    • gate の動作確認をするという連絡も同時に行う.
    • itpass-ml は現在, 外部サーバ (一部) のメールを受け付けない.
  • gate:による登録(承認, 廃止まで)や変更は可能かどうか確認する.
  • gate: の設定の確認
    • /usr/local/gate/sbin/gate-db-to-sudoers に Defaults で始まる 4 行が書かれていることを確認する.

      # This is /etc/sudoers file, generated by gate-db-to-sudoers.
      
      # If you are to edit this file, do not edit it directly.
      
      Defaults    env_reset
      Defaults    mail_badpass
      Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      Defaults    mailfrom=root
    • visudo で, /etc/sudoers が上と同様に書き替えられていることを確認する.

      # visudo

tako
  • pop: 無効になっているか
  • smtp: submit は有効にするが, 受け取らない設定になっているかどうか確認する.
    • 以下のコマンドを実行し, メールが転送されないことを確認する.

      $ echo to: hogehoge | /var/qmail/bin/qmail-inject
      • マニュアルには 「MAILER-DAEMON@ika-itpass.scitec.kobe-u.ac.jp から failure notice のメールが来ていることを確認する.」とあったが, コマンド実行時そのようなメールが来ることはなかった. メールが転送されないことは確認できたので, この件は無視して進むことにした.
    • cron ログが管理者に届くようになっているか

      • /etc/crontab に書かれている mail コマンドを実行し, 届くことを確認した. (コマンド実行後, 入力待ちになるので, ピリオドを打つ.)

      ただし _at_ は @ に読み替えた.

      # mail -s "`hostname -f` test" itpadmin_at_itpass.scitec.kobe-u.ac.jp
        .
        Cc:

phase 10

特に作業を行わない.

2021 年度 ITPASS サーバ交換作業時の不具合と修正 (12/09)

サーバ交換作業時の fail2ban の動作テストが上手くいかなかったため, 以下のファイルに対し修正を加えた.

apache-ddos の設定

  • apache-ddos.conf のバックアップを行なった.
# cd /etc/fail2ban/filter.d
# mv apache-ddos.conf apache-ddos.conf.bk2
  • 下の内容を持つ apache-ddos.conf を新たに作成した.
# Fail2Ban apache-ddos filter
#

[Definition]

failregex = ^<HOST> -.*GET.*
ignoreregex = \.(?i)(jpe?g|gif|png|bmp|pdf|js|css|woff|eot|ttf|ico|txt|xml|swf|xlsx?|docx?|pptx?)
  • apache-ddos のテスト

    • /etc/fail2ban/jail.conf 内の [apache-ddos] の項目の maxretry, bantime を下のように書き換えた.
    maxretry = 3
    bantime  = 60
    • fail2ban を再起動した.
    # systemctl restart fail2ban
    • 上記のテストと同様に, DDOS 攻撃に対して設定通りにアクセス拒否されることを確認した.
    • /var/log/fail2ban.log を確認し, ban されていることを確認できた.
    • 確認後, /etc/fail2ban/jail.conf 内の [apache-ddos] の項目の maxretry, bantime を下のように戻した.
    maxretry = 60
    bantime  = 1200

apache-auth の設定

  • apache-auth.conf のバックアップを行なった.
# cd /etc/fail2ban/filter.d
# mv apache-auth.conf apache-auth.conf.bk2
  • 下の内容を持つ apache-auth.conf を新たに作成した.
# Fail2Ban apache-auth filter
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# apache-common.local
before = apache-common.conf

[Definition]

# Mode for filter: normal (default) and aggressive (allows DDoS & brute force detection of mod_evasive)
    mode = normal

# ignore messages of mod_evasive module:
apache-pref-ign-normal = (?!evasive)
# allow "denied by server configuration" from all modules:
apache-pref-ign-aggressive =
# mode related ignore prefix for common _apache_error_client substitution:
apache-pref-ignore = <apache-pref-ign-<mode>>

#prefregex = ^%(_apache_error_client)s (?:AH\d+: )?<F-CONTENT>.+</F-CONTENT>$
prefregex =

failregex = ^.* \[client <HOST>:[0-9]+\] AH01618: user .*? not found:
                   ^.* \[client <HOST>:[0-9]+\] AH01617: user .*?: authentication failure .* Password Mismatch, referer:

ignoreregex = ^<HOST> -.*GET.*(jpg|jpeg|gif|png).*
  • apache-auth のテスト

    • /etc/fail2ban/jail.conf 内の [apache] [apache-multiport] の項目の maxretry, bantime を下のように書き換えた.
    maxretry = 3
    bantime  = 60
    • fail2ban を再起動した.
    $ sudo systemctl restart fail2ban
    • 上記のテストと同様に, ベーシック攻撃に対して設定通りにアクセス拒否されることを確認した.
    • /var/log/fail2ban.log を確認し, ban されていることを確認できた.
    • 確認後, /etc/fail2ban/jail.conf 内の [apache] [apache-multiport] の項目の maxretry, bantime を下のように戻した.
    maxretry = 60
    bantime  = 1200