본문 바로가기
Linux

FTP (active, passive mode)

by Nirah 2022. 11. 9.

 

FTP ( File Transfer Protocol )

대용량 파일 전송 서비스, 인증은 TFTP로 한다.
vsftp, proftpd
파일서버는 인트라넷 서비스고, FTP는 내외부망에서 다 쓸 수 있다.

외부인에게 파일서버를 열어주면 보안상 안좋기 때문에 FTP 서비스를 쓴다 (용도 구분)

 

 active 모드: TCP 20

 

  1. Client가 서버에 FTP 통신 요청 (tcp 21), 자기가 수신할 데이터 port 통보 (ex. tcp 5151)
  2. Server가 응답, Server가 데이터 전송 (ex. tcp 5151)
  3. Client측 포트가 열려있지 않으면 몇 번을 port로 사용하는지 모름
  4. Client 측에서 모든 Port Open
  5. FTP App에 대해서만 방화벽 Open

 

(Active mode 사용 시 Client와 Server 사이에 방화벽이나 세션 장비가 있다면 양방향 열어줘야 하는 단점)

 

 

 

 


 Passive 모드: 서버가 지정한 포트,  TCP 21

  1. Client가 Server에 FTP 통신 요청 (tcp 21), PASV 모드를 사용하겠다고 통보
  2. Server가 응답, Server가 수신에 사용할 데이터 전송 포트를 Client에게 통보 (ex. tcp 3267)
  3. Server가 알려준 포트로 데이터 요청해서 데이터 받음 (ex. tcp 3267)

 

(PASV mode 사용 시 Client만 서버측에서 지정한 포트에 방화벽에서 오픈하면 가능한 장점)
그래서 passvice 모드를 더 많이 사용한다.

 

 

 

<< Active mode 구성 >>

 

사실 active mode 설정에서 몇 줄 수정하고 방화벽만 다르게 열면 passive mode가 된다.

그래서 우선 active mode를 구성한 다음 거기서 수정하는 식으로 passive mode를 소개하겠다.

 

 

 

<< 설치 >>

 

반드시 selinux 끄고 해야한다.
(켜져있으면 log파일, 배너, chroot 적용 파일 위치 변경이 불가능해진다)


# yum install -y vsftpd

 


<< 설정 파일 >>


# /etc/vsftpd/vsftpd.conf

 

12줄 어나니머스는 패스워드가 사실 있는데 메일주소 형태로 서버가 제공해 주어서 로그인 하는 형태이다.
29줄의 어나니머스 업로드 기능은 일반적으로 차단 (보안상)
37줄 디렉토리 이동시 이동했다는 메세지를 띄워주는
40줄 xferlog : ftp에서 사용하는 로그 (중요) 접속한 기록이 아니라 파일을 업로드 다운로드 한 기록이 남는 특징이 있다.
43줄 엑티브 디렉토리로 쓸거냐는 뜻


48줄 파일을 업로드 했을때 소유자를 변경할 것인지 여부
53줄에 xferlog를 사용하기로 했으면 주석처리를 제거해 줘야한다
60줄에 특정 일을 안하면 세션 아웃 시키는 120초
63줄 특정 사용자들이 대용량 파일을 다운받으며 점유하는 것을 막는 일 60초

83줄 아스키 문자로 된 파일을 업/다운로드 할 수 있는지의 여부. 이것을 허용하게 되면 용량이 큰 문자로된 파일을 생성 가능해서 디도스 공격에 쓰일 우려가 있어서 보안상 막는다.
87줄 보안팀이 맨날 시비거는 부분이라고 한다. 여기를 환영한다가 아니라 경고메세지를 넣어줘야한다. 그렇다고한다.


100줄의 chroot은 사용자가 로그인 하는 그 디렉토리를 최상위 디렉토리로 인식하게 해서 그 이상의 상위로 못올라가게 하는 보안상의 기술 /home/a
101 리스트로 위의 chroot 적용할 계정 관리할 지의 여부
102 주석 풀면 안 됨
103 리스트 활성화 후 vi /etc/vsftpd/chroot_list 안에 계정 이름을 입력하면 chroot가 적용된다.

(※ chroot를 적용하면 반드시 막줄에 추가해 줘야 하는 구문 allow_writeable_chroot=YES)

 

(셀프 추가)

max_per_ip=10 : 연결할 아이피 최대 개수 제한

max_clients=2 : 동일 사용자의 세션 최대 개수 제한

hide_file={*.sh,*.mp3} :해당 확장자 파일 숨기기

deny_file={*.exe} : 해당 확장자 업로드 금지

 

 


Q. 각종 설정 파일은 /ftp 디렉토리를 생성해서 저장한다.
chroot, xferlog, banner file의 위치는 각각 /ftp/chroot , /ftp, /ftp/ftp 로 한다



1. mkdir /ftp

2. 직접 vi 편집기로 작성한 배너를 쓰는게 더 화려하게 꾸밀 수 있다.
배너 파일의 위치는 아래와 같이 입력해 준다.

3. cmd창에서 접속해 보면 아래와 같이 ++++++ 한 배너가 뜬다.

4. xferlog 파일은 아래와 같이 입력하면 자동 생성된다.

5. chroot 기능은

 

 



<< 실행 및 방화벽 >>

위와 같이 설정 했으면 설정 저장 및 데몬을 실행한다.

# systemctl restart vsftpd

 

저장 후 restart vsftp가 안되는 문제가 일어나면 # journalctl -xe로 뭐가 잘못 됐는지 확인 가능하니,

꼼꼼하게 살펴본 후 오타를 고쳐보자.
점 하나만 잘못 있어도 고생하니까 변경 하기 전엔 미리 원본을 캡쳐해 놓던지, 사본을 복사해 놓는다.

 

# netstat -natp 로 20번과 21번 포트로 vsftpd가 잘 실행되는 지 확인

 


방화벽을 열어준다. 항상 실행 작업 후에 방화벽을 열도록 한다.
--permanent 라는 옵션은 재시작 후에도 적용되는 옵션으로, 설정파일을 건드려서 적용되는 작동 원리이다.


# /etc/firewalld/zones/public.xml

 

설정 파일로 직접 가서 수동 설정 해도 된다.

Zones라는 개념이 있다. 

일단 아래와 같이 어떤 Zone이 있는지 목록을 확인 해보자.

 


존을 안넣으면 무조건 방화벽 설정이 디폴트존에 들어가게 돼있다.


# firewall-cmd --permanent --zone=public --add-port=21/tcp
# firewall-cmd --permanent --zone=public --add-port=20/tcp
# firewall-cmd --list-all


# firewall-cmd --reload



윈도우 방화벽 열기 (클라이언트 입장에서)
이 과정을 클라이언트에서 해놓지 않으면 화이트보드 현상이 일어난다.
윈도우의 경우에선 ftp접속 시 방화벽 수락 창이 뜨면서 수락버튼을 누르게 창이 뜬다.
이때 수락 하면 아래의 과정처럼 인바운드 규칙이 자동으로 수락 추가되고
취소를 누르면 자동으로 인바운드 규칙이 차단 추가된다.

 


cmd
ftp 10.0.0.1


vi /etc/vsftpd/chroot_list 안에 포함한 a 라는 리눅스 서버의 계정을 입력하고
비밀번호도 쳐준다.
dir로 데이터 가져오기

 

 

트러블 슈팅

 

dir이 안되는건 방화벽 문제
계정 a의 만료일이 지나면 a로 접속 불가
IP 문제
화이트보드 현상 = 방화벽 문제




FTP 조작 실습

 

리눅스 FTP 서버에 다음과 같이 입력해서 300M 짜리 덤프 파일을 생성한다.

 

cmd에서 get 하여 이것을 다운로드 받아본다.

 

이렇게 이름을 바꿔서 다운로드 가능하다.

 

확인 짜잔~

 

업로드는 put을 사용해서 올린다. 역시 이름을 바꿔 올리기 가능하다.

 

확인 짜잔~

 

mget을 사용해서 한꺼번에 여러가지 파일을 다운 받는다.

* 에스터리스크를 쓸 수 있다.

 

mput을 사용해서 한꺼번에 여러가지 파일을 붙여넣는다.



서버쪽 이동 : cd
클라이언트쪽 이동 : lcd
서버쪽 디렉토리 보기: ls (dir)
클라이언트쪽 디렉토리 보기: !dir

quit 으로 나갈수 있다.



 

<< File zilla 사용 >>

 

파일질라 클라이언트용을 다운로드 실행 한 후 사이트 관리자를 고른다.

 

처음 실행하면 다음과 같이 서버에 연결하지 못한다.

그 이유는 파일질라가 써드파티 솔루션이라서 그렇다.

윈도우에서 만든 프로그램이 아닐 경우 방화벽이 자동으로 열리지 않아서 수동으로 열어줘야 한다.

 

아래와 같이 찐 경로를 복사한 뒤

 

큰 따옴표를 제거하고 인바운드 규칙에 올린다.

 

아까 접속했던 목록을 다시 골라서

 

파일질라 접속에 성공해 보자.

 



chroot 확인

 

chroot는 자신의 홈 디렉터리를 최상위 디렉터리로 인식하게 만들어 그 안에 머무르게 하는 설정이다.
그래서 아래와같이 뜬다. 사용자를 격리시키기 좋은 기술이다!

 

chroot 를 모두 주석처리하고 추가한 줄도 삭제해보자.

이번엔 home디렉터리가 보인다

 

 

 

FTP 로그


리눅스 FTP서버쪽 /ftp/xferlog 보면 업로드 다운로드 기록과 그 계정을 볼 수 있다.

 




============================================================================


<< passive 모드 >>

 

# /etc/vsftpd/vsftpd.conf

 

passive 모드에선 연결할 포트(디폴트 20) 지정이 의미가 없으므로 주석처리 해준다.

20번 포트 빠이빠이~~

 

그리고 아래와 같이 설정해 준다.

패시브모드를 켜고, 사용할 포트 범위를 지정해 주는 것이다.

 

pasv_enable=YES
pasv_min_port=65000
pasv_max_port=65100

 

# firewall-cmd --permanent --zone=public --add-port=65000-65100/tcp
passive mode (수동적 연결)에는 active mode와는 다르게 20번 포트를 허용할 필요가 없다.

 

방화벽 목록이 깔끔해졌다.

# systemctl restart vsftpd

 

 

 

========================================================================================

 


<< TCP Wrapper >>

 

방화벽 건너에 존재하는 것. 7계층 중 어플리케이션 단에서 특정한 접속을 막는 것이다.

그래서 wrapper에 걸려서 접속이 안되면 service not found라고 뜬다. (서비스 계층 아웃)
대부분의 방화벽은 deny가 이기는데 이건 allow가 이긴다.

# vi /etc/hosts 를 보면 hosts.deny 와 hosts.allow가 존재한다.

 

deny 쪽에다 넣으면 벤이고

 

allow 쪽에다 넣으면 허용이다.

 

다음과 같이 deny에 넣은 사용자는 서버에 ftp 접속이 불가능 하다.

 


TCP Wrapper가 기록하는 로그 내용은 아래에 기록된다.

# /var/log/messages

# /var/log/secure


 


======================================================================================

<< 외부 접속 >>


옆PC에서  내 PC의 vmware 의 리눅스 서버에 file zilla로 ftp 접속하는 법


passive 모드로 접속하게 하려면 vmware에서 포트를 다 열어줘야

상대방이 내 vmware안에 있는 특정 가상머신에 접속해서 특정 서비스를 받을 수 있다.

 

이런식으로 60000~60010 까지 passive 모드에서 쓸 포트를 다 열어줬고,

21번과 20번도 다 10.0.0.1 서버로 연결해뒀다.

 

FTP 설정 파일에선 이렇게 설정한다.

 

allow_writeable_chroot=YES
    130 pasv_enable=YES
    131 pasv_min_port=60000
    132 pasv_max_port=60010

 

 

chroot 파일은 home 디렉토리 아래에 넣었다.


방화벽

passive 모드에선 클라이언트가 특별히 방화벽을 열 필요가 없으나 ftp.exe 은 열어두자.

 

 

 

 

 

 

 

===========================================================================================

 

 

<< 초기화 >>



yum remove vsftpd
/etc/vsftpd 안에 chroot 설정파일도 다 있다. 귀찮으니까 이걸 지우면 다 지워진다.
rm -rf /etc/vsftpd/

firewall-cmd --permanent --remove-port=21/tcp
firewall-cmd --permanent --remove-port=20/tcp
firewall-cmd --reload

 

'Linux' 카테고리의 다른 글

보조 DNS 설정 (Master, Slave)  (0) 2022.11.14
DNS Server  (0) 2022.11.11
Process 관리  (0) 2022.11.09
netstat  (0) 2022.11.09
Rocky 리눅스 설치  (0) 2022.11.08