Proftpd SFTP(mod_sftp)とユーザーごとのIP制限(mod_ifsession)

Proftpdで、SFTPのユーザーごとにIP制限をしたいことがありますね。ねっ。

その場合、コンパイル時にmod_ifsessionとmod_sftpを追加し、設定に少し加えることで可能になります。

インストール方法および、制限概要に沿ったサンプルは以下の通りです。
※proftpdのsftpの詳細は、 ProftpdのSFTPとFTPSの覚書(まとめ中) を参照すること。



<インストール作業手順>
tar zxvf proftpd-1.3.4x.tar.gz
cd proftpd-1.3.4x
./configure --with-modules=mod_ifsession:mod_sftp
make
su -
make install



<今回の制限概要>

  • IPアドレスのグループを作る(Class)
  • ユーザーα、β、Θ以外はアクセスできない(AllowUser)
  • ユーザーαは、192.168.0.0/16からしかアクセスできない
  • ユーザーβは、10.0.0.0/8からしかアクセスできない
  • ユーザーΘは、どこからでもアクセスできる。




<サンプルConfig内容>
<Class private-a>
 From 10.0.0.0/8
</Class>
<Class private-b>
 From 172.16.0.0/12
</Class>
<Class private-c>
 From 192.168.0.0/16
</Class>
<Class private-all>
 From 10.0.0.0/8
 From 172.16.0.0/12
 From 192.168.0.0/16
</Class>
<IfModule mod_sftp.c>
 <VirtualHost xxx.xxx.xxx.xxx>
 <Limit LOGIN>  ←ここがユーザーのホワイトリストを定義する
  AllowUser ユーザーα
  AllowUser ユーザーβ
  AllowUser ユーザーΘ
  DenyAll  ←指定した以外のユーザーはここで明示的に拒否する。
 </Limit>
 <IfUser ユーザーα>  ←ユーザーαの詳細設定
  <Limit LOGIN>
   AllowClass private-c ←<Class private-c>に含むIPを許可
   DenyAll  ←それ以外のIPはここで明示的に拒否する。
  </Limit>
 </IfUser>
 <IfUser ユーザーβ>  ←ユーザーβの詳細設定
  <Limit LOGIN>
   AllowClass private-a
   DenyAll
  </Limit>
 </IfUser>
 <IfUser ユーザーΘ>
  <Limit LOGIN>
   order allow, deny ←許可と拒否のどちらを先に評価するか
   AllowAll ←すべてを許可
   DenyAll ←すべてを拒否(だけど、上ですでに許可済なので意味がない)
  </Limit>
 </IfUser>
  Port 22 ←適宜変更で
  DefaultRoot     ~/
  AllowOverwrite  on
  SFTPEngine      on
 SFTPLog         /var/log/proftpd/sftp.log ←適宜変更で
  SFTPHostKey     /etc/ssh/ssh_host_dsa_key
  SFTPHostKey     /etc/ssh/ssh_host_rsa_key
 SFTPAuthMethods publickey ← 公開鍵認証のみにしてパスワード認証を禁止する。
 SFTPAuthorizedUserKeys file:~/.ssh/id_rsa.pub ←公開鍵の保存場所を指定する。
 </VirtualHost>
</IfModule>


あとは、sftp以外の接続を全部なしにするために、configのドあたまに
 <Limit LOGIN>
    DenyAll
  </Limit>
とかやっておくと、より安全かもしれませんね~