Ansible: vsftpd でFTPサーバを構築する
はじめに
レガシーなシステムに携わっているとデータ置き場としてFTPサーバによく出くわします。今回は最低限の設定で vsftpd を構築する手順をPlaybook化してみました。
前提
- OS は RHEL8 を利用する
- FTPサービスとして vsftpd を利用する
実装
段取りとしては以下のようになります。
上記を踏まえて今回書いたPlaybookは以下の通り。
--- - name: Setup vsftpd hosts: servers vars: pasv_min_port: 10021 pasv_max_port: 10031 become: true tasks: - name: Install vsftpd ansible.builtin.dnf: name: vsftpd state: present - name: Start vsftpd ansible.builtin.systemd: state: started name: vsftpd - name: Add passive mode to vsftpd ansible.builtin.blockinfile: path: /etc/vsftpd/vsftpd.conf state: present block: | pasv_enable=Yes pasv_min_port={{ pasv_min_port }} pasv_max_port={{ pasv_max_port }} register: _res - name: Restart vsftpd ansible.builtin.systemd: state: started name: vsftpd when: _res.changed - name: Permit ftp service with firewall ansible.posix.firewalld: service: ftp state: enabled permanent: true immediate: true - name: Enable nf_conntrack_helper kernel module ansible.posix.sysctl: name: net.netfilter.nf_conntrack_helper value: '1' sysctl_file: "/etc/sysctl.d/10-nf_conntrack_helper.conf" state: present reload: true
今回はvsftpdのの設定項目が少ないので blockinfile モジュールで済ませています。
また、パッシブモード時のFTP通信許可設定については sysctl の設定変更( ftp サーバをパッシブモードで起動する場合にfirewall 側で必要な通信許可を行うため、 nf_conntrack_helper
カーネルモジュールをロードする)で対応しています。
実行結果は以下の通り。
PLAY [Setup vsftpd] ************************************************************ TASK [Gathering Facts] ********************************************************* ok: [server.test.local] TASK [Install vsftpd] ********************************************************** changed: [server.test.local] TASK [Start vsftpd] ************************************************************ changed: [server.test.local] TASK [Add passive mode to vsftpd] ********************************************** changed: [server.test.local] TASK [Restart vsftpd] ********************************************************** changed: [server.test.local] TASK [Permit ftp service with firewall] **************************************** changed: [server.test.local] TASK [Enable nf_conntrack_helper kernel module] **************************************** changed: [server.test.local] PLAY RECAP ********************************************************************* server.test.local : ok=1 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2回目以降は changed を可能な限りなくしたい派です。再実行結果は以下の通り。
PLAY [Setup vsftpd] ************************************************************ TASK [Gathering Facts] ********************************************************* ok: [server.test.local] TASK [Install vsftpd] ********************************************************** ok: [server.test.local] TASK [Start vsftpd] ************************************************************ ok: [server.test.local] TASK [Add passive mode to vsftpd] ********************************************** ok: [server.test.local] TASK [Restart vsftpd] ********************************************************** skipping: [server.test.local] TASK [Permit ftp service with firewall] **************************************** ok: [server.test.local] TASK [Enable nf_conntrack_helper kernel module] **************************************** ok: [server.test.local] PLAY RECAP ********************************************************************* server.test.local : ok=6 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
ok と skip のみになりました。
まとめ
vsfptd の構築方法についてまとめました。1年に1回くらいFTPサーバ構築のPlaybook作っている気がしたので今回アウトプットでもう大丈夫なはず。
参考情報:
2.8.6. FTP を使用するインストールソースの作成 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
centos - How to configure vsftpd to work with passive mode - Server Fault