SSHサーバーを外向きに開けてるん。でも総当たりされるので面倒だ。そこで対策。
このうち1,2について。
外側と内側で認証方式を変える
これが意外と便利なんだな。WAN側は公開鍵、LAN側はパスワードで認証。
ここで便利に使えるのが、Matchエントリ。クライアント条件別に設定が出来る。
49 # Change to no to disable tunnelled clear text passwords 50 PasswordAuthentication no #パスワードで認証を禁止する。鍵だけ。 #中略 #192.168.*.*からの接続だけパスワードで認証許可する 81 Match Address 192.168.*.* 82 PasswordAuthentication yes 83 ~ ~
Matchで条件を変えられるのがうれしい。特に、PasswordAuthenticationが設定できるのが、うれしい。
マニュアルには(man sshd_config)にはこんなことが書いてある。
Match Introduces a conditional block. If all of the criteria on the Match line are satis-
fied, the keywords on the following lines override those set in the global section
of the config file, until either another Match line or the end of the file.Match 条件別設定を紹介しましょう。Match条件の全てに適合したときに、設定を上書きすることが出来ます。全体設定を上書きして、個別設定ができます。マッチ以下設定ファイルの最終行までが条件別個別設定になります。
The arguments to Match are one or more criteria-pattern pairs. The available crite-
ria are User, Group, Host, and Address. The match patterns may consist of single
entries or comma-separated lists and may use the wildcard and negation operators
described in the PATTERNS section of ssh_config(5).
Match条件は1つ以上の適合基準とその閾値を記述します。基準条件にはAddress/Group/User/Hostが利用できます。Match条件が複数の時はカンマ区切りで記述します。そしてwild card(*)が条件に使えます。さらにssh_condigのmanページに記載してあるPATTERNに準拠します。The patterns in an Address criteria may additionally contain addresses to match in
CIDR address/masklen format, e.g. ``192.0.2.0/24'' or ``3ffe:ffff::/32''. Note that
the mask length provided must be consistent with the address - it is an error to
specify a mask length that is too long for the address or one with bits set in this
host portion of the address. For example, ``192.0.2.0/33'' and ``192.0.2.0/8''
respectively.CIDRでアドレス条件を記載できます。(でも実際やらないよねぇ。192.168.10.*とか takuya_?thと書く方が楽だし)
Only a subset of keywords may be used on the lines following a Match keyword.
Matchで上書きに(Match条件以降ファイル終了までの位置)に記載できる設定項目は次の通りです。
Available keywords are AllowTcpForwarding, Banner, ChrootDirectory, ForceCommand,
GatewayPorts, GSSAPIAuthentication, HostbasedAuthentication,
KbdInteractiveAuthentication, KerberosAuthentication, MaxAuthTries, MaxSessions,
PasswordAuthentication, PermitOpen, PermitRootLogin, RhostsRSAAuthentication,
RSAAuthentication, X11DisplayOffset, X11Forwarding, and X11UseLocalHost.
応用例
- あるユーザーはSFTPだけだから、Chrootする。
- あるユーザーにだけパスワードで認証を認める
- あるグループにはログイン時のメッセージを見せる。
などなど結構応用が利きそうですね。
設定項目にユーザー名を使う。
たとえば、ユーザー名毎にSFTPルートを分けたいとき。こんなことが出来る。
86 Match group chroot 87 ChrootDirectory /root/virtual/%u 88
iptablesでSSHへの総当たりを止める
SSHのポートに60秒で3回以上接続に来たら、そのIPを拒否する。
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH --rsource -j DROP COMMIT
2010-06-23追記