カーネル4.8.17
でGentoo
を実行しているPCに制限付きファイアウォールを設定しています。このルールを使用して、発信接続に対してFTPPASSVモードを有効にします。
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate RELATED -j ACCEPT
PASSV FTPは、上記のルールにNEW
を追加すると正常に機能しますが、これは私のニーズには許容範囲が広すぎます。また、私の設定は別のボックス(古いカーネル)でも正常に機能します。両方の構成のカーネルオプションを比較しましたが、何が欠けているのかわかりません。では、RELATED
接続がiptables
と連携するには、どのモジュールが必要ですか?
私のカーネルは次のオプションで構成されています:
Host ~ # zcat /proc/config.gz | grep 'NETFILTER\|_XT_\|_NF_' | grep -v "^#"
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_PROCFS=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_NF_LOG_IPV4=m
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_FILTER=y
CONFIG_NF_LOG_IPV6=m
次のモジュールをロードしました:
Host ~ # lsmod
Module Size Used by
xt_state 1543 0
xt_helper 1619 0
nf_conntrack_ftp 7270 0
私のiptablesは次のようになります:
Host ~ # iptables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65535 dpts:1:1024 ctstate NEW
3 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
4 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp spts:1024:65535 dpt:53 ctstate NEW
5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65535 dpts:1024:65535 ctstate RELATED
6 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 255
カーネル4.7以降(カーネル4.8.17に適用されます):
https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt
nf_conntrack_helper - BOOLEAN 0 - disabled (default) not 0 - enabled Enable automatic conntrack helper assignment. If disabled it is required to set up iptables rules to assign helpers to connections. See the CT target description in the iptables-extensions(8) man page for further information.`
そうすること:
echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
カーネル4.7より前のデフォルトに戻し、機能させる必要があります。
新しい(そしてより安全な)方法はこのブログで説明されています: https://home.regit.org/netfilter-en/secure-use-of-helpers/
すでにip_conntrack_ftp
カーネルモジュールを使用しましたが、nf_conntrack_ftp
モジュールはnftableバージョンのようです。それなら大丈夫かもしれません。
ただし、パッシブアウトバウンド接続を許可するには、次のことを試すことができます。
iptables -A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
また、最初にFTPコマンドチャネルを追跡する必要があることをiptablesに通知する必要があります(非特権ポートはデータ転送専用です)
iptables -A INPUT -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT
クレジット:ここ 、インバウドパッシブ接続に関連します(つまり、iptablesルールがサーバーに追加されます)