本文 |
CentOS 8インストールのデフォルト状態で
firewall-cmd --add-service=ftp [--permanent] (あるいは --add-rich-rule、--direct --add-rule)
を行ってもコネクショントラッキングが行われないため、FTPをpassiveモードで接続すると一覧表示の段階で停止してしまいます。
ftp側の設定を /etc/vsftpd/vsftpd.conf ----- pasv_min_port=xxxx pasv_max_port=yyyy ----- などとして、 ----- firewall-cmd --add-rich-rule="rule ipv4 port protocol=tcp port=xxxx-yyyy [... 他IPアドレス制限など] accept" ----- のようにfirewalldで予めxxxx-yyyyの穴を開けておく方法もありますがこれだと不用意にポートを開ける必要が有りあまりよろしくないため、予め穴を空けない方法があるのか模索しました。
結果、起動直後の状態が ----- cat /proc/sys/net/netfilter/nf_contrack_helper 0 ----- の場合、 以下のようにするとコネクショントラッキングが有効になるようでした。
firewall-cmd --set-automatic-helpers=yes (または /etc/firewalld/firewalld.conf ----- AutomaticHelper = yes ----- への変更でも同じ)
蛇足ですが、lsmodでnf_conntrack_ftpは読み込まれていてもautomatic-helper = systemがトラッキングモードにスイッチされないのは、おそらくfirewall-cmdで追加されるエントリが
nft list ruleset ----- ..... table inet firewalld ..... chain filter_IN_public_allow tcp dport ftp ct state new,untracked accept ----- のようにuntrackedになってるから?helperは必要なし、と判断されているためかもしれません。(直接 nft add rule inet firewalld filter_IN_public_allow tcp dport 21 ct state new accept でuntrackedにならないエントリを追加すると、トラッキングをするようになるので、おそらくそうではないかという個人的な推測です)
お役に立てば。
|