pam によるSSHのIP制限

以前、 HOSTSファイルによるSSHのIP制限 をエントリーしましたが、TCP Wrapper を通るサービス自体が減っており、libwrap ライブラリを利用するサービスは現在、SSH, PostFix 位しかありません。 ldd /usr/sbin/sshd | grep libwrap コマンドでHOSTSファイルが利用できるかどうか、確認が出来ます。しかし今回は、pam(Pluggable Authentication Module)によるSSH のIP 制限の方法をご紹介します。

ユーザ、アクセス元IPアドレスでsshの接続制限をする

詳しい設定は、OpenSSH – IP制限かつユーザの制限を同時に行う – Qiita にありますが、とりあえずローカルネットのユーザーのみに制限する方法として、

/etc/pam.d/sshd

#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    required     pam_access.so (新規追加
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth

/etc/ssh/sshd_config

UsePAM yes

/etc/security/access.conf

- : gusachan : ALL EXCEPT 192.168.0.0/24
# service sshd restart

pam には他にもroot になれるスーパーユーザーをWheel グループのみに制限する、 /etc/pam.d./su もありますね。

auth  required pam_wheel.so use_uid (コメントアウト

参考:http://fnya.cocolog-nifty.com/blog/2012/03/centos-6aa8.html

HOSTSファイルによるSSHのIP制限

忘れそうなのでメモ。CentOS – SSH接続をIPアドレスで制限する – Qiita

http://qiita.com/wwwaltz/items/db774fda77cb2d6c6922

/etc/hosts.deny に拒否したいIPアドレス

・・・
sshd : all

/etc/hosts.allow に許可したいIPアドレス

・・・
sshd : 192.168.0.

間違って /etc/hosts.deny をall に設定して切断してしまうと誰も接続できなくなるので注意。

SSHへの接続制限

これまで秘密鍵認証だからと何の疑問もなくSSH でのサーバー制御をして安心していましたが、例えば総当り攻撃を受けてroot アカウントが乗っ取られれることも可能性として考えると、何らかのセキュリティ対策が求められます。Google で調べたところ、一つの手段として

sshへの攻撃に対する6個の防御方法 パソコン鳥のブログ/ウェブリブログ

Linux でSSH への接続制限をするには、

# iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --set
# iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --update --seconds 60 --hitcount 5 -j DROP
# service iptables save

 

すると接続回数を減らす効果があるとのことです。しかし、一旦突破されてしまえば関係ないのが心許ないですね。

TeraTerm SSH鍵認証

Linux のコマンド操作に欠かせないTeraTerm ですが、root 権限を多用していたのでパスワードが漏れたのかもしれません。今回は、鍵認証によるログイン方法をご紹介します。

まず、TeraTerm でパスワードでログインして [設定] → [SSH 鍵生成…] → (鍵の種類)[RSA]にチェックして、[生成] ボタンを押します。

ssh_key

[鍵のパスフレーズ] を入力して、[公開鍵の保存] [秘密鍵の保存] ボタンをクリックして、フォルダに [id_rsa.pub] [id_rsa] ファイルを保存します。

TeraTerm で、/home/ユーザーディレクトリに移動して公開鍵 [id_rsa.pub] を画面にドラッグします。

save_key

[ファイル転送しますか] のテキストボックスに、[ .ssh] と入力して [SCP]ボタンをクリックします。公開鍵を、.ssh/authorized_keys ファイルにリネームするためコマンドで

$ cd .ssh
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
$ chmod 700 . ←[ピリオドを忘れずに]

鍵が複数あるときには、mv ではなく

# cat id_rsa.pub >> authorized_keys

と入力します。TeraTerm を再起動して、先程入力した鍵のパスフレーズを入力して、[RSA鍵を使う]チェックを入れ フォルダに保存した[秘密鍵] id_rsa を指定して [OK] ボタンを押して

ssh_login

ログインします。ログインした後は、以下の設定でパスワード認証を無効にしましょう。

# vi /etc/ssh/sshd_config
# PasswordAuthentication yes ↓ 設定値を、no に変更
PasswordAuthentication no

(一部、加筆しました。)