SSH IPアクセス制限

SSHって

サーバーにリモートアクセスする時に使います。
サーバーをインストールした時には既にSSHサービスが入っているのが普通で
お馴染みなものです。
これのおかげで全国離れた場所のサーバー機器を設定する事ができます。

ということは・・

便利ですが世界中からグローバルに侵入される恐れがあるので
portの変更+IP制限でアクセスできるIP(場所)を制限するのが一般的です。

私が自分で構築する場合にはport変更+公開鍵認証での管理が便利なので
SSHでのIP制限する事は少ないかもしれません。

とはいってもやはりIP制限が一般的なので
お客様のサーバー管理を引き継ぐ時に知識が必要になる場合があります。
今回の記事ではSSHでのIPアクセス制限についてまとめました。

制限の手段はいくつかありますが
お手軽に設定できるのはTCP WrapperでのIPアクセス制限でしょうか。

【TCP Wrapper】

○ 制限を許可するファイル
/etc/hosts.allow

○ 制限を行うファイル
/etc/hosts.deny

許可ファイルの方が優先されるので
制限ファイルで全アクセス禁止にして、
許可ファイルで許可IPを指定し上書きするのが一般的です。

※記述例

☆ /etc/hosts.deny

sshd: ALL

☆ /etc/hosts.allow

sshd: 118.xxx.yyy.39, 22.xxx.yyy.39
sshd : 192.168.1.0/255.255.255.0

118.xxx.yyy.39, 22.xxx.yyy.39からのアクセス
ローカルネットワーク()からのアクセスを許可する設定。

【iptables】

/etc/sysconfig/iptables

iptables -A INPUT -s 118.xxx.yyy.39 -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -s 22.xxx.yyy.39 -p tcp –sport 22 -j ACCEPT

設定を読み込ませる

[bash]
# service iptables restart
[/bash]

【sshd認証】

/etc/ssh/sshd_config

○SSHポート変更(例: SSHでのアクセスを99922に指定)
#Port 22
Port 99922←追加します

○ListenAddress

[書式]
ListenAddress ホスト:ポート
※記述例

[bash]
ListenAddress 127.0.0.1
ListenAddress 118.xxx.yyy.39
ListenAddress 22.xxx.yyy.39
[/bash]

または

[bash]
AllowUsers hogeuser@118.xxx.yyy.39
AllowUsers *@22.xxx.yyy.39
[/bash]

hogeuserでのログインかつ118.xxx.yyy.39からのアクセスを認める。
22.xxx.yyy.39からのアクセスを全て認める。
設定です。

【pam認証】

/etc/pam.d/sshd

以下を有効にする

[bash]
account required pam_access.so
[/bash]

/etc/ssh/sshd_config

yesに変更

[bash]
UsePAM yes
[/bash]

/etc/pam.d/sshd(account required pam_access.so accessfile=ファイル指定)
/etc/security/access.conf(またはaccess_login.confなど上記のコンフィグでファイル指定を行えばリネームしても良い。)

[bash]
+:hogehoge: 許可某IP. うちのIP.
-:ALL: ALL
[/bash]

※+は許可,-は拒否

上記ら設定後に

[bash]
# service sshd restart
[/bash]

で反映させる。

優 ( エンジニア )
この記事を書いた人:優 ( エンジニア )

システムガーディアン爆弾処理班。アクセス負荷対策やNginxへの移行案件が多いこの頃。IBM SoftLayerやAWSなどクラウド案件も多くなってきました。