tohokuaikiのチラシの裏

技術的ネタとか。

またdebianのvsftpdでハマったのでメモ

環境

uname -a
Linux www 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u2 (2017-06-26) x86_64 GNU/Linux

いつものように、chrootしてバーチャルユーザーでのログイン。

症状1.

vsftpでつなごうとするとConnection Refusedされる。

ローカルからFTPコマンドでたたいても同じ。

$ ftp
ftp> open localhost
ftp: connect to address ::1: Connection refused
Trying 127.0.0.1...
ftp: connect: Connection refused

チェック項目

こんな感じで調べて何とかなった。

modprobeでモジュールチェック

# lsmod|grep ftp
nf_nat_ftp             16384  0
nf_nat                 28672  1 nf_nat_ftp
nf_conntrack_ftp       20480  1 nf_nat_ftp
nf_conntrack          114688  5 nf_conntrack_ftp,nf_conntrack_ipv4,nf_nat_ftp,xt_conntrack,nf_nat

これがなかったら以下を入れておく。

# modprobe nf_conntrack_ftp
# modprobe nf_nat_ftp

バーチャルユーザーのshell

とりあえずバーチャルユーザーの割り当てにはftp_userというユーザーを作ってたんだけど、これのshellが/usr/sbin/nologinだと動作しない。

vsftpd.conf

この2つは両立させられないらしいので、ipv6は使わないようにする。

listen=YES
listen_ipv6=NO

ホームディレクトリを555パーミッションに設定

こんな感じでバーチャルユーザーを設定していると、

# more /etc/vsftpd.d/vsftpd_user_conf/vftpuser
guest_username=vftpuser
local_root=/home/example

/home/exampleのパーミッションを555にしなければならない。

が、最近のVSFTPDだと

allow_writeable_chroot=YES

で行ける。

パッシブモードで引っかかる

このあたりでお勉強

FTPのアクティブモードとパッシブモード + vsftpdでの設定方法|A Day In The Boy's Life

centos - How to configure vsftpd to work with passive mode - Server Fault

どうもポートを開放しないとダメっぽい。あれー、今まで動いてたのになぁ・・・。

ということで、vsftpd.confに以下を記述。

pasv_enable=YES
pasv_min_port=61050
pasv_max_port=61100

で、iptablesをこんな感じで。192.168.xxx.xxxは自ホスト。

iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 192.168.xxx.xxx --dport 61050:61100 -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.xxx.xxx --sport 61050:61100 -d 0.0.0.0/0 -j ACCEPT

毎回何かしら引っかかるね。。。