専用サーバ運営では必須の不正アクセス対策 SSHのポート番号変更

サーバを運営していると、SSH経由でユーザ名とパスワートの総当たりで不正な接続を試みる攻撃 (ブルートフォースアタック) を受けることが多い。ログ監視ツール Logwatch から毎日送られてくるレポートでも多数確認できる。root には数千件の数で試みられているのが見受けられることも。

対策は、ssh のポート番号を変更すること。デフォルトのポート番号 22 での接続を避ける。

デフォルトのポート番号 22 から別の番号に変更することで断続的な不正アクセスを無くして、サーバの負荷軽減にもなる。

ということで、sshのポート番号を変更。

設定ファイルを編集。

$ vi /etc/ssh/sshd_config

デフォルトではコメントアウトでポート番号 22 が使われているので、任意のポート番号 **** に変更。ポート番号は、使用されていない 0~1023 (ウェルノウンポート) 以外のポート番号に変更しましょう。

#Port 22
Port ****

SSHを再起動。

$ /etc/init.d/sshd restart

iptablesの設定

iptables でファイアウォールの設定をしている場合、変更したポートを通す必要があります。設定せずに ssh の接続を切ってしまうと、ssh に接続できなくなるので要注意。

$ vi /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

から

-A INPUT -p tcp -m tcp --dport 任意のポート番号 -j ACCEPT

に変更。

iptablesを再起動して、設定を再読み込み。

$ /etc/rc.d/init.d/iptables restart
iptables: Setting chains to policy ACCEPT: filter [  OK  ]
iptables: Flushing firewall rules: [  OK  ]
iptables: Unloading modules: [  OK  ]
iptables: Applying firewall rules: [  OK  ]

接続確認

接続確認は、念のため元のターミナルでの接続を保ちつつ、新規ウインドウでターミナルを立ち上げて接続を確認することをおすすめします。

まずはポート番号 22 で接続。

$ ssh ユーザID@ホスト名
$ ssh: connect to host **.**.**.** port 22: Connection refused

ポート番号 22 では接続が拒否される。

変更したポート番号で接続。

$ ssh -p ポート番号 ユーザID@ホスト名

接続できれば完了。

analogのログフォーマット (turn debugging on or try different LOGFORMAT)

Cron からアラートメールが返ってくる。

/etc/cron.daily/logrotate:
/usr/bin/analog: analog version 5.32/Unix
/usr/bin/analog: Warning L: Large number of corrupt lines in logfile stdin:
turn debugging on or try different LOGFORMAT
(For help on all errors and warnings, see docs/errors.html)
Current logfile format:
%v %S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b "%f" "%B"\n
%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b "%f" "%B"\n
%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b "%f" "%B"\n
%S %j %u [%d/%M/%Y:%h:%n:%j] "%r" %c %b "%f" "%B"\n

analog のログフォーマットが違うみたいだ。Apache のログ形式は combined なので、analogの LOGFORMAT ( /etc/analog.cfg ) を確認。なかったので末尾に以下を追記。

LOGFORMAT COMBINED

Apache のログ形式を変更したときには見直すことを忘れずに。

サーバ管理ツール Plesk アップデートエラー対処法

サーバ管理ツールである Parallels Plesk Panel をバージョン 8.6.0 から 9.x.x にアップデートすると、管理画面にアクセスできなくなった。届いてるメールは「Plesk autoupdate success report」だけど。

メールの内容をみると、Plesk の起動に失敗している。

Trying to start Plesk...
Stopping Plesk... done
Starting xinetd service... done
Starting named service... done
Starting mysqld service... done
Starting postgresql service... done
Starting psa-spamassassin service... done
Plesk: Starting Mail Server... already started
Starting Plesk... failed
Starting drwebd service... failed

再びサービスを開始しても同じに。

$ /etc/rc.d/init.d/psa start

ログをみると、どうやら SSL でエラーになっているようだ。

$ tail /var/log/sw-cp-server/error_log
2010-10-24 18:44:44: (log.c.75) server started
2010-10-24 18:50:27: (log.c.135) server stopped
2010-10-24 18:50:34: (log.c.75) server started
2010-10-24 18:50:34: (network.c.336) SSL: error:00000000:lib(0):func(0):reason(0)
2010-10-24 18:50:34: (log.c.75) server started
2010-10-24 18:50:34: (network.c.336) SSL: error:00000000:lib(0):func(0):reason(0)

対処方法は、Latest update of openssl breaks Parallels Panel を参考にパッケージをインストール。

$ wget -c http://kb.parallels.com/Attachments/12669/Attachments/sw-cp-server-1.0-6.201004011105.centos5.i386.rpm
$ rpm -Uhv sw-cp-server-1.0-6.201004011105.centos5.i386.rpm
$ /etc/rc.d/init.d/psa start
startStarting xinetd service... done
Starting named service... done
Starting mysqld service... done
Starting postgresql service... done
Starting psa-spamassassin service... done
Plesk: Starting Mail Server... already started
Starting Plesk... done
Starting drwebd service... done

と無事に Plesk が起動して管理画面にアクセスできるようになった。

関連サイト

ログ監視ツール Logwatch を使ってみる

2018.2.20追記: Logwatchのコマンドが変わっていたので、書き直しました。ログ監視ツール Logwatch を使ってみる (アップデート版)

Logwatch は、いろいろなログをまとめて集計し、レポートとして毎日定期的にメールで届けてくれる。不正アクセスや不具合の発見とサーバの監視に便利なツール。

Logwatch のインストール

Logwatch は Perl で書かれていて Perl 5.8 が必要です。

yumからのインストールは、

$ yum install logwatch

で、

ソースからのインストールは、こちらから

Logwatch をインストールした時点で cron に登録されているので、毎日4時2分になると Logwatch のスクリプト (/etc/cron.daily/0logwatch) が実行されてレポートが届く。

logwatch の設定

logwatch の設定は、/usr/share/logwatch/default.conf/logwatch.conf を編集する。標準設定のままで十分ですが、以下の項目を確認して設定。

#ログが保存されているディレクトリ
LogDir = /var/log
#メールの送信先
MailTo = user@hoge.com
#アーカイブされたログも含めるかどうか
Archives = Yes
#レポートの日付範囲を3つのオプションから。All, Today, Yesterday
Range = Yesterday
ログの詳細度、Low (=0), Med (=5), High (=10) または 0から10までの数字で
Detail = High
# チェックの対象となるサービスを /usr/share/logwatch/scripts/services/ 以下、あるいは All で指定。
Service = All
# メールコマンドパス
mailer = "sendmail -t"

サービスごとの個別設定は、/usr/share/logwatch/default.conf/services/ に用意されている。各サービスの設定ファイルを編集することで個別設定できる。

logwatch コマンドを使ってみる

標準出力

logwatch --print

特定のサービスだけ出力

logwatch --print --service http

複数のサービスにも

logwatch --print --service http --service sshd

ログの詳細度を変えてみる

logwatch --print --detail 10 --service http

メールに出力

logwatch --mailto user@hoge.com

ファイルに出力

logwatch --save /path/to/logwatch.txt

関連サイト

yum コマンドリファレンス

yum (Yellowdog Updater Modified) は、Red Hat Linux や Fedora Core、CentOS などRPM系Linuxディストリビューションで使われるパッケージ管理システム。ソースコードのダウンロードしてインストールしたり、アップグレードや削除、パッケージ間の依存関係の解決とパッケージを管理できます。サーバの運営には欠かせないツールの一つ。

コマンドリファレンス

インストールできるパッケージの一覧表示

$ yum list available

パッケージをインストール

$ yum install パッケージ名

インストールしたパッケージの一覧表示

$ yum list installed

アップデートできるパッケージの一覧表示

$ yum list updates

または、

$ yum check-update

パッケージのアップデート

$ yum update パッケージ名

インストールしたパッケージすべてをアップデート

$ yum update

メッセージが表示され、確認後アップデート。
メッセージの確認を行わない場合は、

$ yum -y update

パッケージのアンインストール

$ yum remove パッケージ名

パッケージの検索

$ yum search キーワード

パッケージの詳細情報を表示

$ yum info パッケージ名

パッケージに含まれるファイルの一覧表示

$ yum provides パッケージ名

最近追加したパッケージの一覧表示

$ yum list recent

キャッシュクリア

ダウンロードしたパッケージは /var/cache/yum/ に溜まっていきます。

$ du -sh /var/cache/yum/

で容量を確認して、

$ yum clean all

で、ダウンロード済みのパッケージや古いヘッダなどキャッシュを削除。all の他、headers, packages, metadata, dbcache, plugins, expire-cache のオプションで対象も指定できる。

システムにインストールされているパッケージ (Extra Packages) の一覧表示

$ yum list extras

関連サイト

最近の投稿

カテゴリー

アーカイブ