LoginSignup
0
0

【2023年9月版】NAT環境で、PASVモードのFTPサーバ構築【Ubuntu22.04】

Last updated at Posted at 2023-08-14

はじめに

NAT環境でFTPサーバ構築しよう。
NATの設定してすぐにできそう。ftpはpasvモードで余裕でいけるでしょ。

curl コマンドで。。。アクセスできる。
ftp コマンドで。。。あれ? ls コマンドが帰ってこない。。。pasvモードになってるのに。。。

なんか、PASVモードで接続できるクライアントとできないクライアントがあるぞ。。。

からの、ChatGPTに質問しながら、NAT環境でPASVモードによるFTPサーバ構築のメモ

環境

FTPサーバ

  • Windows Server 2019 + IIS (10.10.10.100)

NATサーバ

  • Ubuntu22.04 + iptables (10.10.10.254, 192.168.100.254)

FTP クライアント

  • Ubuntu22.04 (192.168.100.10)
    • curl
    • ftp

うまくいかなかったパターン

単にNAPTサーバでNATを構成したパターン

パッケットのフォワードができるように設定

$ echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
net.ipv4.ip_forward = 1

iptables を設定

$ sudo iptables -F -t nat && sudo iptables -F
$ sudo iptables -t nat -A PREROUTING -d 192.168.100.254 -p tcp --dport 21 -j DNAT --to-destination 10.10.10.100
$ sudo iptables -t nat -A PREROUTING -d 192.168.100.254 -p tcp --dport 1024:65535 -j DNAT --to-destination 10.10.10.100
$ sudo iptables -t nat -A POSTROUTING -d 10.10.10.254 -j MASQUERADE

FTPクラアントからアクセス

  • curl OK
    • curl ftp://192.168.100.254
  • ftp NG
    • ftp 192.168.100.254

アクセスできない理由は、tcpdump でFTPコマンドを覗けばすぐわかる。
FTPサーバからのPASVのアクセス先が、192.168.100.254ではなく、10.10.10.100(NATされる前の元IP)で返されるから。
curlはそのあたりを理解して、アクセス先IPに自動で変換してくれる。
以下は ftp でうまくいかないパターン

$ ftp 192.168.100.254
Connected to 192.168.100.254 (192.168.100.254).
220 Microsoft FTP Service
Name (192.168.100.254:dev): ftpuser
331 Password required
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
227 Entering Passive Mode (10.10.10.100,243,215).
150 Opening ASCII mode data connection.
425 Cannot open data connection.
ftp> exit

以下は crul でうまくいくパターンの抜粋、元のIPアドレスを再利用してくれている。

> PASV
* Connect data stream passively
* ftp_perform ends with SECONDARY: 0
< 227 Entering Passive Mode (10.10.10.100,240,151).
* Skip 10.10.10.100 for data connection, re-use 192.168.100.254 instead
* Connecting to 192.168.100.254 (192.168.100.254) port 61591
*   Trying 192.168.100.254:61591...

うまくいったパターン

カーネルモジュール ip_conntrack_ftpip_nat_ftp を導入する。

conntrack インストール

ip_conntrack_ftpip_nat_ftp による接続を確認するためのツール

$ sudo apt install conntrack

パッケットのフォワード、ip_conntrack_ftpip_nat_ftp が利用できるように設定

$ echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
$ echo "net.netfilter.nf_conntrack_helper = 1" | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
net.ipv4.ip_forward = 1
net.netfilter.nf_conntrack_helper = 1
$ echo "ip_conntrack_ftp" | sudo tee -a /etc/modules
$ echo "ip_nat_ftp" | sudo tee -a /etc/modules
$ sudo modprobe ip_conntrack_ftp
$ sudo modprobe ip_nat_ftp

iptables を設定

$ sudo iptables -F -t nat && sudo iptables -F
$ sudo iptables -t nat -A PREROUTING -d 192.168.100.254 -p tcp --dport 21 -j DNAT --to-destination 10.10.10.100
$ sudo iptables -t nat -A POSTROUTING -d 10.10.10.254 -j MASQUERADE

FTPクラアントからアクセス

  • curl OK
    • curl ftp://192.168.100.254
  • ftp OK
    • ftp 192.168.100.254

NAPTサーバで、FTPのPASVの返りを加工してくれるようになるので、アクセスできる

以下は ftp でうまくいったパターン

$ ftp 192.168.100.254
Connected to 192.168.100.254 (192.168.100.254).
220 Microsoft FTP Service
Name (192.168.100.254:dev): ftpuser
331 Password required
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
227 Entering Passive Mode (192.168.100.254,251,57).
125 Data connection already open; Transfer starting.
08-14-23  12:01PM       <DIR>          abc
08-14-23  12:01PM                    9 test.txt
226 Transfer complete.
ftp> exit

うまくいかないとき

conntrack コマンドで ftp で検索し、pssvモードのftp接続を行った時にエントリが表示されているか確認する

$ sudo conntrack -L | grep ftp    # pasvモードでftp接続してから確認、エントリが表示される
conntrack v1.4.6 (conntrack-tools): 11 flow entries have been shown.
tcp      6 431998 ESTABLISHED src=192.168.100.10 dst=192.168.100.254 sport=53110 dport=21 src=10.10.10.100 dst=10.10.10.254 sport=21 dport=53110 [ASSURED] mark=0 helper=ftp use=2

iptables の設定の保存

iptables-persistent を使う

$ sudo apt install iptables-persistent
$ sudo mkdir /etc/iptables
$ sudo sh -c "iptables-save > /etc/iptables/rules.v4"

さいごに

かんたんでしたね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0