CentOSなどのLinux系OSでFTPサーバとして利用することが多いProFTPDにて、ユーザーごとにアクセス制限を掛ける方法です。
ProFTPDでは<Limit>コンテキストで簡単にアクセス制限が可能ですが、<IfUser>コンテキストを追加することでユーザー単位でアクセス制限のルールを設定することが出来ます。
基本的なアクセス制限と、ユーザー単位でのアクセス制限の方法を解説します。
※動作確認環境
CentOS Linux 7.6
ProFTPD version 1.35
基本的なアクセス制限(全てのユーザー)
ProFTPDの設定ファイル「 /etc/proftpd.conf 」をviなどで編集します。
以下の書式で設定を追加します。
#アクセス制限
<Limit LOGIN>
Order allow,deny
Allow from 【許可するIPアドレス又はクライアントホスト名】
Deny from All
</Limit>
ProFTPDの再起動で完了です。
# systemctl restart proftpd
※【許可するIPアドレス又はクライアントホスト名】が複数ある場合はカンマで区切りましょう。
【例】Allow from 192.168.1.100, 192.168.2.200
ユーザー単位でのアクセス制限
ProFTPDの設定ファイル「 /etc/proftpd.conf 」を編集します。
LoadModule mod_ifsession.c のコメントアウトを外して mod_ifsession.c を有効化します。※無ければこの行を追加してください。
LoadModule mod_ifsession.c
以下の書式で設定を追加します。
#ユーザー単位の設定
<IfUser 【ユーザー名】>
<Limit LOGIN>
Order allow,deny
Allow from 【許可するIPアドレス又はクライアントホスト名】
Deny from all
</Limit LOGIN>
</IfUser>
#アクセス制限
<Limit LOGIN>
AllowUser 【ユーザー名】
DenyAll
</Limit>
ProFTPDの再起動で完了です。
# systemctl restart proftpd
※これだけでもユーザー単位のアクセス制限は掛かりますが、FFFTPで接続すると、接続が拒否された際に以下のような画面が出ます。

「正しいパスワードを入力してください。」という画面はあまり気持ちよくないので、更に厳密に設定した例を以降で紹介していきます。
設定例A(単一の指定ユーザーをアクセス制限、それ以外は全拒否)
アクセス制限内容
■ユーザー①「testuser1」
192.168.1.100
.tokyo.ocn.ne.jp
からの接続許可
■それ以外のユーザー
全て接続拒否
この制限だと設定は以下のようになります。
設定内容
/etc/proftpd.conf を編集します。
LoadModule mod_ifsession.c のコメントアウトを外して mod_ifsession.c を有効化。
LoadModule mod_ifsession.c
#ユーザー①の設定
<IfUser testuser1>
<Limit LOGIN>
Order allow,deny
Allow from 192.168.1.100, .tokyo.ocn.ne.jp
Deny from all
</Limit LOGIN>
</IfUser>
#その他のユーザー用設定
<IfUser !testuser1>
<Limit LOGIN>
DenyAll
</Limit LOGIN>
</IfUser>
#アクセス制限
<Limit LOGIN>
AllowUser testuser1
AllowUser !testuser1
DenyAll
</Limit>
ProFTPD再起動で完了。
# systemctl restart proftpd
備考(テクニック)
IfUserとAllowUserにて「!」を先頭に付加することで否定の意味になります。
<IfUser !testuser1>~</IfUser >でtestuser1以外のユーザーのアクセスを全て拒否しています。※この設定によりFFFTPでの「正しいパスワードを入力してください。」という画面が出なくなります。
設定例B(単一の指定ユーザーとそれ以外を別々にアクセス制限)
アクセス制限内容
■ユーザー(1)「testuser1」
192.168.1.100
.tokyo.ocn.ne.jp
からの接続許可
■それ以外のユーザー
192.168.1.200
からの接続許可
この制限だと設定は以下のようになります。
設定内容
/etc/proftpd.conf を編集します。
LoadModule mod_ifsession.c のコメントアウトを外して mod_ifsession.c を有効化。
LoadModule mod_ifsession.c
#ユーザー(1)の設定
<IfUser testuser1>
<Limit LOGIN>
Order allow,deny
Allow from 192.168.1.100, .tokyo.ocn.ne.jp
Deny from all
</Limit LOGIN>
</IfUser>
#その他のユーザー用設定
<IfUser !testuser1>
<Limit LOGIN>
Order allow,deny
Allow from 192.168.1.200
Deny from All
</Limit LOGIN>
</IfUser>
#アクセス制限
<Limit LOGIN>
AllowUser testuser1
AllowUser !testuser1
DenyAll
</Limit>
ProFTPD再起動で完了。
# systemctl restart proftpd
備考(テクニック)
<IfUser !testuser1>~</IfUser >でtestuser1以外のユーザーのアクセス制限(許可)を行っています。
設定例C(複数のユーザーとそれ以外をそれぞれ別々にアクセス制限)
アクセス制限内容
■ユーザー(1)「testuser1」
192.168.1.100
.tokyo.ocn.ne.jp
からの接続許可
■ユーザー(2)「testuser2」
.tokyo.ocn.ne.jp
からの接続許可
■それ以外のユーザー
192.168.1.200
からの接続許可
この制限だと設定は以下のようになります。
設定内容
/etc/proftpd.conf を編集
LoadModule mod_ifsession.c のコメントアウトを外して mod_ifsession.c を有効化。
LoadModule mod_ifsession.c
#ユーザー(1)の設定
<IfUser testuser1>
<Limit LOGIN>
Order allow,deny
Allow from 192.168.1.100, .tokyo.ocn.ne.jp
Deny from all
</Limit LOGIN>
</IfUser>
#ユーザー(2)の設定
<IfUser testuser2>
<Limit LOGIN>
Order allow,deny
Allow from .tokyo.ocn.ne.jp
Deny from all
</Limit LOGIN>
</IfUser>
#その他のユーザー用設定
<IfUser AND !testuser1, !testuser2>
<Limit LOGIN>
Order allow,deny
Allow from 192.168.1.200
Deny from All
</Limit LOGIN>
</IfUser>
#アクセス制限
<Limit LOGIN>
AllowUser testuser1
AllowUser testuser2
AllowUser AND !testuser1, !testuser2
DenyAll
</Limit>
ProFTPD再起動で完了。
# systemctl restart proftpd
備考(テクニック)
IfUserとAllowUserにて「AND」を利用しています。
演算子は「AND」と「OR」が利用可能です。
書式は「AND」又は「OR」と記述してからカンマ区切りで記述します。
【書式例】
<IfUser AND !testuser1, !testuser2>
<IfUser OR testuser1, testuser2>
AllowUser AND !testuser1, !testuser2
AllowUser OR testuser1, testuser2
その他、「regex」と記述すると正規表現が可能です。
【書式例】
<IfUser regex ^testuser>
AllowUser regex ^testuser
まとめ
ProFTPDでは<Limit>コンテキストと<IfUser>コンテキストを組み合わせると複雑なユーザーごとのアクセス制限が出来ます。
「AND」と「OR」の演算子や「regex 」による正規表現も可能です。
これらのルールを知っていると様々な設定が可能ですので、上記の設定例を参考に色々とアレンジしてProFTPDのセキュリティを高めましょう。
※設定を変更したらちゃんとアクセス制限が掛かっているかの動作確認・接続テストも忘れずに行いましょう。

