SSH のポート番号はデフォルトで 22です。不正ログインの試みとしては、ポート番号22に対してログインしてきて、上手くログインできればパスワードが確定されるというものになります。以下は、手元にあったログイン失敗回数とその接続先アドレスの上位5件の記録です。223.99.60からだけで、20万回以上試行されています。ログインアカウント名は、root,user,test,tomcat・・・と様々です。
ログイン失敗回数 | 接続IP |
91152 | 223.99.60.44 |
90280 | 223.99.60.42 |
35280 | 183.214.141.102 |
32299 | 223.99.60.41 |
29451 | 59.63.166.83 |
[server,centos7]SSHポート番号を変更して接続。セキュリティー対策
ここでは、現状の確認方法、SSHポート番号の変更、ファイアウォール (firewalld) の設定変更と作業を進めて、不正ログインを防止します。対象はcentos7です。
ちなみに、パスワードの保護について言えば、まず、きちんとしたパスワードを設定することが一番です。先に20万回も不正ログインを受けてもパスワードが漏洩しなかったのは、安易なパスワードを使用しなかった為です。20万回と言えば、総当たりで試しても6桁までしか行えません。8文字以上のパスワードにするのには意味があります。また、sshのログインユーザーを決めるのは良い方策です。そもそも、rootとかuserとかシステムやアプリのアカウントのログインを不許可にするだけで、多くの不正ログインを防止できます。
lastbコマンドで、失敗したログインを確認する
lastbはシステムのログインエラー履歴を一覧表示するコマンドです。ログイン失敗の履歴は「/var/log/btmp」ファイルに記録されますが、バイナリファイル(テキストファイルではない)ので、専用のコマンドからしか読み出せません。その専用のコマンドがlastbになります。lastbのコマンド実行には管理者権限(root権限)が必要になります。

オプションがいろいろとありますが、-10(-数値)は、表示行数になります。ここでは、-10としましたので、10行(件)が表示されました。
1行目は、userというアカウントで、64〜始まるアドレスからログインしようとして失敗したという履歴になります。
不正ログインを試みたIP一覧を出すワンライナー
lastb | awk '{print $3}' | sort | uniq -c | sort -nr | head -10
実行すると、アドレス毎に集計されて一覧表示されます。
[ログインに失敗した回数] + [ログインしてきたアドレス]
で表示されます。
最後の-10は表示件数です。適時、書き換えてください。
ドメイン開設後、ポート22が開いていると面白いようにログインが試みられてきます。
ほっておくと1万回とか10万回とか試行してきます。
これに対する対応としては、公開鍵暗号方式を使用した SSH ログインがあります。これはログインする可能性のあるPCに鍵をおかなければなりませんし、鍵は流出した際が面倒です。(キチンと管理するのがセキュリティの基本ですが)
ここでは、掲題の通り、ポート番号を変更して対応します。
SSH ポート番号の変更
ポート22でSSH接続していたものを他の番号に変えた上で、ポート22を閉鎖します。
手順を誤るとアクセスできなくなってしまうので注意ですが、VPSの場合、専用コンソールがあったりしますので確認しておいてください。
また、ssh接続ができているのなら、その接続を新規のポート番号で接続確認ができるまでとっておきます(切らない)。
sshの設定ファイルを別名保存して編集します。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ORG vi /etc/ssh/sshd_config
エディタはお好きなもので。
sshユーザーの設定。既にsshで接続している場合は読み飛ばしください。
以下の3箇所を記述、変更します。許可ユーザーは、centosに登録済みのユーザー名になります。
AllowUsers 許可ユーザー PermitRootLogin no PasswordAuthentication yes
「PermitRootLogin no」でrootでのssh接続を不許可にしています。
続けて、sshの待ち受けポート番号の変更。
Port 20022
デフォルトだと、「#Port 22」とコメントアウトされていますので、行頭の#を削除し、変更ポートに修正します。
0~1023番以外で65536までのポート番号が利用できます。ここでは、20022にしました。
systemctl restart sshd
sshdのサービスを再起動させます。
ファイアウォール (firewalld) の設定変更
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-alt.xml vi /etc/firewalld/services/ssh-alt.xml
/usr/lib/firewalld/services/ssh.xmlファイルが、22番ポートを使用するsshの設定ファイルです。 このファイルを、/etc/firewalld/services/ディレクトリへssh-alt.xmlファイルとしてコピー作成し、編集します。
<port protocol="tcp" port="20022"/>
port=”22″を port=”20022″へ書き換えます。
firewall-cmd --reload
サービスを追加させます。利用可能なサービスというだけで、まだ動作はしていません。
firewall-cmd --get-services
sshg-altサービスが追加された事を確認します。上記コマンドでfirewalldのサービス一覧が表示されますので、ここでは「ssh-alt」が追加されていることを確認します。
# firewall-cmd –get-services
〜一部、略、長いので〜
smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh ssh-alt steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
firewall-cmd --permanent --zone=public --add-service=ssh-alt firewall-cmd --zone=public --remove-service=ssh
publicゾーンに、ssh-altサービスの登録とsshサービスの削除をします。
firewall-cmd --reload firewall-cmd --list-all
firewalldをリロードし、設定を確認します。
services: ssh-alt
servicesの行に、ssh-altがあって、sshがなければ上手くいってます。
20022のポートから接続できることを確認してください。
macのターミナルからだと、こんな感じで接続します。
ssh -p 20022 ユーザー名@接続IPアドレス
ssh接続ユーザーをsudoの許可をするなら、以下のコマンドから
visudo
許可ユーザーを追加します。
許可ユーザー名 ALL=(ALL) ALL
この行を追加して、保存終了させてください。
以上です。
コメント