nftablesでFTPポートを許可 (CentOS 8)

vsftpdやpro-ftpdでFTPサーバーを起動し、コントロールポートをTCP/21、パッシブ通信のデータ転送ポートをTCP/10030-10059 に限定して運用しているものとします。

このとき、nftablesではどのように設定すればよいでしょうか?

isdCentOS 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
--

 

isdnftablesの場合

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
 

Follow me!