nftablesでFTPポートを許可 (CentOS 8)
vsftpdやpro-ftpdでFTPサーバーを起動し、コントロールポートをTCP/21、パッシブ通信のデータ転送ポートをTCP/10030-10059 に限定して運用しているものとします。
このとき、nftablesではどのように設定すればよいでしょうか?
CentOS 6, iptablesの場合
nftables の設定の前に。
CentOS 6, iptablesであれば、ヘルパーモジュール ip_conntrack_ftp を使用すると、パッシブ通信のデータ転送時に、パケットのステータスを RELATED(接続開始時)または ESTABLISHED(接続後のデータセッション時)としてくれます。
このため、iptablesの設定では、
- 任意のポート宛てのステータス RELATED, ESTABLISHED パケットの受信を許可。
- TCP/21宛てのステータス NEW パケットの受信を許可。
これらのルールを追加すればよく、
「TCP/10030-10059宛てのステータス NEW パケットの受信を許可」
のルールは不要となります。
-- /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp" ... -- -- /etc/sysconfig/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ... -A INPUT -p tcp -m state --state NEW -m tcp --dport 10030:10059 -m set --match-set WHITELIST src -j ACCEPT --
nftablesの場合
nftables では、ct helper で、iptablesのヘルパーモジュールと同様のことが実現できます。
nftalbesのルールはこんな感じ。
-- /etc/sysconfig/nftables.conf(CentOS 8の場合) table ip myhelpers { ct helper ftp-standard { type "ftp" protocol tcp } chain prerouting { type filter hook prerouting priority 0; tcp dport 21 ct helper set "ftp-standard" } } table ip filter { chain INPUT { type filter hook input priority 0; policy drop; ... ct state established,related counter accept ... ct state new tcp dport 21 counter accept ... } ... --
table ip myhelpers {} ブロックで、type “ftp” の ct helper を定義して、ルーティングの前に(prerouting)、TCP/21ポートに適用。
table ip filter {} のinputチェーンのIPフィルターで、関連するルールを追加。
- 任意のポート宛てのステータス RELATED, ESTABLISHED パケットの受信を許可。
- TCP/21宛てのステータス NEW パケットの受信を許可。
これで、データ転送ポートの
「TCP/10030-10059宛てのステータス NEW パケットの受信を許可」
のルールは不要となります。
FTPのコントロールポートを TCP/21 から例えば TCP/10921 などに変更するときは、2箇所の
tcp port 21~
を
tcp port 10921~
のように書き換えればOKです。
nftablesでは、ヘルパーの設定が、ルール定義ファイルの中で完結するのがよいですね。
ちなみに、ct helper を使う代わりに、カーネルパラメータで nf_conntrack_helper を有効にセットする方法もあるそうです。
-- /etc/sysctl.conf net.netfilter.nf_conntrack_helper = 1 -- # sysctl -p
(参考)
・ct helper – debian Manpages nft
https://manpages.debian.org/testing/nftables/nftables.8.en.html#CT_HELPER
・Setting packet connection tracking metainformation – wiki.nftables.org
https://wiki.nftables.org/wiki-nftables/index.php/Setting_packet_connection_tracking_metainformation
(関連記事)
・nftablesでSSHを日本国内からの接続に限定する (CentOS 8)
https://inaba-serverdesign.jp/blog/20191219/nftables-country-ipaddress-centos8.html