vsftpd Active-Passive mode configuration

Active/Passive 모드 설정

서버에서는 Active 모드, Passive 모드 둘다 지원하도록 기동시켜두고 클라이언트 프로그램에서 이를 선택하도록 한다.

1. Conf 설정

 # vi /etc/vsftpd/vsftpd.conf

– Passive 

 pasv_enable=YES

pasv_max_port=11000

pasv_min_port=10000

– Active

ㄴ Active모드는 특별한 옵션을 주지 않으면 Default로 동작한다.

2. 재기동

 # systemctl restart vsftpd.service
3. SELINUX 설정
Conf 파일을 수정하고 재기동 후에, 클라이언트에서 Active모드로 접속했지만 아래와 같은 로그를 보여주고 접속되지 않는다.
– Active 모드에 접근할 수 없어서 Passive모드로 접속하겠다는 로그 내용.. 그러나 접속하지 못함.
 명령: PORT 192,168,0,100,17,9

응답: 200 PORT command successful. Consider using PASV.

명령: LIST

응답: 425 Failed to establish connection.

오류: 디렉터리 목록 조회 실패

SELINUX 때문인데.. SELINUX 로그를 보면 아래와 같은 부분이 남겨져 있다.

 …  avc:  denied  { name_connect } for  pid=20401 comm=”vsftpd”  …

– 로그는 설정에 따라 /var/log/audit/audit.log 또는 /var/log/message 에 남겨진다.

– avc는 SELINUX커널에 있는 서비스 – Access Vector Cache

– Active 모드에서 사용하려는 Data세션이 사용하는 포트가 방화벽에 막혔기 때문이라고 한다.

 

 # setsebool -P ftp_home_dir 1

# setsebool –P ftpd_use_passive_mode 1

setsebool은 SELINUX의 정책을 설정한다.

– P옵션은 영구설정을 의미, 1은 on / 0은 off

– ftp_home_dir 은 ftp서버가 홈디렉토리에만 접근가능하도록 하는 옵션.

– ftpd_use_passive_mode는 ftpd가 Passive모드 사용을 허가하는 옵션.

4. 확인

 # getsebool -a | egrep “^ftp_home_dir|^ftpd_use_passive_mode”

getsebool은 SELINUX의 정책을 확인한다.

5. 접속테스트

– Active 모드로 접속.

– 클라이언트에서 정상 접속 후에 21번 포트로 외부에서 접속.

– 파일 다운로드시에 Active모드이므로 20번 포트가 open되어 파일 다운로드

– Passive 모드로 접속.

– 파일 다운로드 시에 Passive모드 이므로 Passive모드 사용을 위해 설정해둔 10000~11000 사이의 포트로 Data전송.

 

Leave a Reply

Your email address will not be published. Required fields are marked *