CentOS 7 に FTP (vsftpd) をインストールして特定のIPからのみアクセスを許可したいなぁということで Firewalld のリッチルールでポリシー追加をしてみたのですが、いざクライアントPCからFTP接続しようとしても「ディレクトリの取得に失敗」とか言われて繋がりませんでした。
いろいろと確認したところ、どうやらパッシブモードだとつながらない感じ。
というわけで対応してみましたのでその流れをメモしておきたいとおもいます。
最初に追加したポリシー
FTP(ポート21)を追加しとけばOKやろ、と思って下記コマンドでFirewalldに追加したのですが。
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="[許可したいIP]" port protocol="tcp" port="21" accept"
パッシブモードだと繋がりませんでした。
原因と対策
原因はパッシブモードで利用するポートを開けていなかったから。
というわけでまず vsftpd.conf にパッシブモードで利用するポートの制限を追加します。
# vim /etc/vsftpd/vsftpd.conf 下記を追記 pasv_min_port=4000 pasv_max_port=4029
これでパッシブモードの際にはポート4000~4029を利用することになります。
続いてFirewalldで該当のポートを開けます。
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="[許可したいIP]" port protocol="tcp" port="4000-4029" accept" # firewall-cmd --reload
これで無事に接続できるようになりました。