プログラミング

AWSのNATインスタンス経由で外部のFTPサーバーにActiveで通信しようとしたら死んだ話

AWS外部のFTPサーバーに諸々の要件が重なって、

サブネットAに所属するアプリサーバーから、サブネットBに所属するNATインスタンスで通信を1度NATした上で、且つActiveモードでFTPするという異次元のような過去の負の遺産の塊のような案件がありました。

 

そこで通信を成功させるのにすごく苦労したので備忘録としてまとめておきます。

もうFTPのActiveとか禁止にしよう。。

 

結論、特別な対応を行ったのはNATインスタンスのiptablesの設定です。

 

ちょっと宣伝。Youtuberやってます。よかったら見てくださいw

 

iptablesの地獄

そもそも恥ずかしながらiptablesを触ったことがありませんでした。

iptablesを簡単に説明すると、Linuxが持っているサーバー自体に設定できるファイアーウォールやルーティング、NATの機能を提供するものです。

 

今回はこのiptablesをいい感じに書き換えて、以下のようにNATをした上でAWS上から外部のFTPサーバーへと通信します。

 

AWS上のアプリサーバー(サブネットA) → AWS上のNATインスタンス(サブネットB) → 外部のFTPサーバー

 

外部のFTPサーバー側では、NATインスタンスのIPアドレスのみが許可されています。

 

以下、iptablesの設定で行ったこと。

 

1. カーネルモジュールの追加

NATしてFTPするためのカーネルモジュールをロードします。

 

$ modprobe ip_conntrack_ftp

$ modprobe ip_nat_ftp

 

「ip_conntrack_ftp」と「ip_nat_ftp」をロードします。

1点注意点があって、lsmodで確認すると以下のように「nf_conntrack_ftp」と「nf_nat_ftp」という名前でロードされます。

[root@ip-10-4-180-132 ~]# lsmod
Module                  Size  Used by
nf_nat_ftp             16384  0
nf_conntrack_ftp       20480  1 nf_nat_ftp

 

これは名前にエイリアスが貼られているようで、上記がロードされればOKです。

「nf_conntrack_ftp」は「nf_nat_ftp」で依存関係があるから必要な様子。

 

iptables再起動時にもロードするように、iptables-configにも書き加える。

[root@ip-10-4-180-164 ~]# vi /etc/sysconfig/iptables-config
#IPTABLES_MODULES=""
IPTABLES_MODULES="nf_conntrack_ftp nf_nat_ftp"

 

2. iptablesを修正

以下の通りにiptablesを修正します。

 

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s [AWS上のアプリサーバーの所属するサブネットBのCIDR] -j MASQUERADE
COMMIT
*raw
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 21 -j CT --helper ftp
COMMIT

 

今回は、iptablesで通信の制限は行わずあくまでNATするのみだったのでfilterは全通ししています。

IPマスカレードしている部分にはNATする前の、アプリサーバーの所属するサブネットBのCIDRを指定します。

 

iptablesの最終行は空白行を入れておいた方が良いです。環境によってはないとエラーになります

 

以上で設定は完了。

 

Activeの闇

今回の通信要件はなかなかあるものではないと思います。そもそもPassiveならこんなことせずにSNATだけ適切に記載すればOKでした。

FTPのActiveは段々となくなって来ていると思いますが、もし誰か同じような境遇に陥った方が奇跡的にいたら参考になったら幸いです。

 

もう無くそうActive。

 

 

よく読まれている記事

1

  現在5年目のエンジニアで26歳です。 今回は20代の現役エンジニアとして、自分も含め転職について考えている方に向けて20代エンジニア転職に完全特化したおすすめのサービスを3つ紹介していき ...

2

これからエンジニアになりたい、プログラミングを使えるようになりたいという方に向けて 山のようにあるプログラミングスクールの中から、特におすすめなスクールをタイプ別に逆引きで3つ紹介します。 &nbsp ...

3

みなさんはを使っていますでしょうか。   本記事を見ていただいているということは、   プログラミングの勉強でを使うことに興味がある、 もしくはこれから動画を購入したいけどどれを買 ...

-プログラミング
-, ,

© 2020 クラインの備忘壺