500 Illegal PORT command. | Linux, vsftpd
Столкнулся с проблемой при доступе к ftp серверу – vsftpd.
При попытке соединения получал ошибку:
FTP command: Client "1.2.3.4", "PORT 172,16,5,239,15,188"
FTP response: Client "1.2.3.4", "500 Illegal PORT command."
При этом – 1.2.3.4 – это айпи шлюза через который я шёл клиентом, а 172,16,5,239,15,188 – это внутренний айпи клиента и соответственно порт.
На фтп я шёл total commender’ом. При этом тотал командер показывал что соединение и запрос PORT шел от имени внутреннего интерфейса шлюза, за которым находится vsftpd.
Схема такая:
клиент (172.16.5.239) -> шлюз (172.16.5.1/1.2.3.4) -> шлюз (2.3.4.5/192.16.2.1) ->
шлюз (192.168.2.3/10.0.0.1) -> vsftpd (10.0.0.2)
На шлюзах – нат и форвардинг портов. Все настроено, соединение доходило до vsftpd, но отдавать директорию он не хотел, спотыкаясь на «500 Illegal PORT command».
Решение оказалось в следующем. В конфиге vsftpd (vsftpd.conf) есть переменная:
tcp_wrappers=YES
Это значит что vsftpd использует линуксовые /etc/hosts.allow и /etc/hosts.deny для контроля доступа.
При этом он может дополнительно указывать какой конфиг применять к какому клиенту через переменную VSFTPD_LOAD_CONF. У меня строки выгладели примерно так:
vsftpd: 1.2.3.4: setenv VSFTPD_LOAD_CONF /etc/vsftpd/conf/secure.conf
В файле /etc/vsftpd/conf/secure.conf – одна строка – pam_service_name=vsftpd-secure (важно, но не суть).
Собственно необходимо было добавить в /etc/hosts.allow адрес внутреннго интерфейса шлюза за которым был vsftpd и который показывал во время соединения ftp клиент (total commender) – в нашем случае это – 192.168.2.3:
vsftpd: 192.168.2.3: setenv VSFTPD_LOAD_CONF /etc/vsftpd/conf/secure.conf
Или пробовать отключать tcp_wrappers (по дефлту эта переменная стоит в NO).