kibatic/proftpd在主机上安装ProFTPD服务器的简单方式。此FTP服务器支持被动模式(可能也支持主动模式,但不确定)。
bashdocker run -d --net host \ -e FTP_LIST="user1:pass1;user2:pass2" \ -e MASQUERADE_ADDRESS=1.2.3.4 \ -v /用户1的FTP目录路径:/home/user1 \ -v /用户2的FTP目录路径:/home/user2 \ kibatic/proftpd
默认被动端口范围为50000-50100。
MASQUERADE_ADDRESS应设置为FTP服务器的外部地址。
定义用户和密码的方式要求用户名和密码中不得包含分号(;)或冒号(:)。
(确实不够优雅,但在2018年还在用FTP本身就不太优雅)
bashdocker run -d --net host \ -e FTP_LIST="user1:pass1;user2:pass2" \ -e USERADD_OPTIONS="-o --gid 33 --uid 33" \ -e PASSIVE_MIN_PORT=50000 \ -e PASSIVE_MAX_PORT=50100 \ -e MASQUERADE_ADDRESS=1.2.3.4 \ -v /用户1的FTP目录路径:/home/user1 \ -v /用户2的FTP目录路径:/home/user2 \ kibatic/proftpd
USERADD_OPTIONS为可选参数,用于传递给useradd命令的参数(例如指定创建的用户使用www-data的UID 33和GID 33)。
通过该参数可配置不同访问权限,确保用户在主机上创建的文件和目录使用正确的用户身份。
可使用如下docker-compose配置(如果不想将端口暴露到外部机器,可使用#注释端口):
yamlversion: '3.7' services: proftpd: image: kibatic/proftpd network_mode: "host" restart: unless-stopped environment: FTP_LIST: "myusername:mypassword" USERADD_OPTIONS: "-o --gid 33 --uid 33" # 可选:默认值为50000和50100 PASSIVE_MIN_PORT: 50000 PASSIVE_MAX_PORT: 50100 # 可选:默认未定义 MASQUERADE_ADDRESS: 1.2.3.4 volumes: - "/主机目录路径:/home/myusername" ports: - 21:21 - 50000-50100:50000-50100
主动模式下可使用以下防火墙规则:
bashiptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp --dport 50000:50100 -j ACCEPT iptables -A OUTPUT -p tcp --dport 50000:50100 -j ACCEPT
如需测试此Dockerfile,可使用tester目录:
bashcd tester docker-compose build --pull docker-compose up
若需启用FTPS(基于TLS的FTP),需准备证书、私钥及启用FTPS的配置文件。
在Linux上创建自签名证书和私钥,可使用以下命令:
bashopenssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem
假设证书名为cert.pem,私钥名为key.pem,可使用以下配置文件:
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/ftpd-tls.log TLSProtocol TLSv1.2 TLSv1.3 # 是否要求客户端使用FTPS TLSRequired on # 服务器RSA证书 TLSRSACertificateFile /etc/proftpd/cert.pem TLSRSACertificateKeyFile /etc/proftpd/key.pem # 服务器EC证书(可选) #TLSECCertificateFile /etc/ftpd/server-ec.cert.pem #TLSECCertificateKeyFile /etc/ftpd/server-ec.key.pem # 服务器信任的CA(可选) #TLSCACertificateFile /etc/ftpd/root.cert.pem # 是否验证客户端证书 TLSVerifyClient off # 允许SSL/TLS重协商(客户端请求时),但不强制 TLSRenegotiate none </IfModule>
假设配置文件名为proftpd-tls.conf,证书文件为cert.pem和key.pem,需将这3个文件挂载到容器(建议以只读方式挂载,即添加:ro)。
docker run命令示例(在镜像名称前添加):
bashdocker run ... \ -v /配置目录路径/proftpd-tls.conf:/etc/proftpd/conf.d/proftpd-tls.conf:ro \ -v /证书目录路径/key.pem:/etc/proftpd/key.pem:ro \ -v /证书目录路径/cert.pem:/etc/proftpd/cert.pem:ro \ kibatic/proftpd
docker-compose示例(添加到volumes列表):
yamlvolumes: - ... - /配置目录路径/proftpd-tls.conf:/etc/proftpd/conf.d/proftpd-tls.conf:ro - /证书目录路径/key.pem:/etc/proftpd/key.pem:ro - /证书目录路径/cert.pem:/etc/proftpd/cert.pem:ro
受Julian Haupt的hauptmedia/proftpd镜像启发。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务