インターネットにオープンになっているsshサーバは,ブルートフォース攻撃に晒されるため,パスワード認証は禁止するべき.また,sshguard(ports/security/sshguard)による防御策により,攻撃することにコストがかかるサーバに仕上げることが重要です.
パスワード認証は, sshd_config (FreeBSDなら,/etc/ssh/sshd_config) 内の
PasswordAuthentication no
で解決です.もちろん,ユーザーに公開鍵設定,sudo や, su (root権限をだせるアプリケーション)出来るように,許可するユーザーには,パスワードも設定しなければなりません.逆に言えば,sudo させないなら,vipwで,passwordは,*としておくべきです.
しかし,一部ユーザーや,一部ネットワークからは,PasswordAuthしたいとか,緩和したいとかあると思います.この時は,Match キーワードをsshd_configに書き,設定を上書きしたいオプションを指定します.例えば,特定ユーザー takenoko さんを PasswordAuthentication Yesとしたいなら,
Match User takenoko
PasswordAuthentication yes
とします.Matchキーワードの引数には, User , Group, Host, Address つまり,ユーザ名,グループ,ホスト,ネットワークが指定でき,*によるワイルドカード表記や,コンマによる複数指定,複数の引数の連続記載による同時評価もできます.
複数のMatchを組み合わせれば,次のような設定もできます.ユーザ名 kimuraと,tanaka が, 192.168/16からの接続であるならば,PasswordAuthentication を Yesとする例は,以下のような感じになります.
Match User kimura,tanaka Address 192.168.*.*
PasswordAuthentication Yes
となります.
sshの脆弱性は,ユーザーが設定する「脆弱な」パスワードです.そして,敵は,辞書やよく使われるアカウント名,アプリケーションが設定するアカウント名などを組み合わせて,何度も何度もトライして,破ろうとします.いわゆるブルートフォース攻撃です.
sshguardは,sshデーモンを監視し,ブルートフォース攻撃を行うホストを検出したら,種々にフィルタリングやアクセス制限により,そのホストからの接続を一定時間拒否する仕組みです.
アクセス制限やフィルタリングは, /etc/hosts.allowや,ipfw,ipfilter (FreeBSDなど),pf(BSD群), netfilter/iptables等に対応しています.いれておいて損はありません.