2024_0216_FTP

이기태·2024년 2월 16일

리눅스

목록 보기
16/27

1. FTP 소개

  • FTP
    -> sftp/ftos, scp로 바뀌는 추세
  • FTP 프로그램 종류
    wu-ftpd
    proftpd -> 주로 사용
    vsftpd -> 주로 사용

1-1 Command 포트와 Data 포트

  • Command 포트: 연결이나 명령어를 전달한다.
  • Data 포트: Data를 주고 받는다.

1-2 Active 모드

  • 동작 단계
  1. FTP Client에서 FTP Server서버로 인증 요청을 한다.( 클라이언트 포트: 2222, 서버포트 :21)
  2. Client PC에서 Data 전송 포트번호(2223)을 패킷에 포함해 서버로 전달한다.
  3. FTP Server에서 Client PC로 OK응답을 보낸다.
  4. FTP Server에서 Data포트(20)으로 Client의 data(2223)으로 연결 요청한다.
  5. FTP Client는 Server에게 OK 응답을 보내면 연결이 된다.

여기서 문제가 없는 것처럼 보일 수 있지만 4번에서 장애가 발생한다. FTP서버를 구축한 Server측은 연결포트든 Data포트든 설정을 해서 지정할 수 있고 당연히 방화벽도 해지가 되어 있을 것이다.
그러나 Client PC의 포트번호 1024이상 중에서 사용 가능한 포트를 랜덤으로 지정해서 접속 및 Data포트로 지정해서 전달 한다.

Client PC가 서버가 되어 인바운드 데이터를 처리 해야한다. 이 때 Client PC나 네트워크 장비에서 방화벽이 있다면 정상적으로 Data를 주고 받을 수 없다. 만약 Client PC의 네트워크 장비에서 포트 보안이 걸려있으면 Active로 접속이 힘들다.

1-3 Passive 모드

  • 동작 단계
  1. FTP Client에서 FTP Server서버로 인증 요청을 한다. (클라이언트 포트 : 2222, 서버 포트 :21)
  2. Client PC Passive Mode로 연결할 것을 전달한다.
  3. FTP Server에서 FTP Client로 OK 응답과 데이터 포트(1025)를 전달한다.
  4. Client PC에서 사용가능한 포트(2223)로 Server 데이터 포트(1025)으로 연결 요청한다.(outbound)
  5. FTP Server가 Client PC에게 OK 응답을 보내면 연결이 된다.

Active 모드와 다르게 Client는 인바운드 접속이 없다. 서버에서 지정된 포트로 연결을 하여 처리가 FTP 사용이 가능하다. 서버측에서는 설정을 통해 연결포트 지정, 데이터 포트 범위 지정 등이 가능하다.

1-3.1 Passive 모드 설정

<vi /etc/vsftpd/vsftpd.conf>
pasv_enable=YES -> 패시브 모드 적용
allow_writeable_chroot=YES -> root 접근 허용
pasv_min_port=12000 -> 포트번호 12000~12100 설정.
pasv_max_port=12100

# systemctl restart vsftpd

2. FTP Server 설정 절차

  1. 패키지 설치
    # yum -y install vsftpd ftp

  2. 서버 설정
    /etc/vsftpd/*

  3. 서비스 기동
    # systemctl enable --now vsftpd

4.방화벽 등록
# firewall-cmd --premanent --add-service=ftp

  1. SELinux(?)

3. FTP Server 설정 + 실습

패키지: vsftpd, ftp
데몬 & 포트 & 프로토콜: vsftpd(21/tcp, 20/tcp, 1024~/tcp)
주 설정 파일: /etc/vsftpd/vsftpd.conf
하위 설정 파일: /etc/vsftpd/{ftpusers,user_list}
서비스: vsftpd.service


[ex] 기본 설정 확인
ex사용자 접근 제어 - /etc/vsftpd/{ftpusers,user_list}
/etc/vsftpd/ftpusers, /etc/vsftpd/user_list
-> 둘중 한 곳이라도 등록되어있으면 로그인 불가
exFTP 클라이언트 프로그램
(GUI) Filezilla
(CLI) ftp CMD

ex배너 메세지 출력 - file

  • banner_file=/etc/vsftpd/banner.txt

ex인사 메시지 출력 - string

  • ftpd_banner="Greeting Messages"
    vsftp 데몬의 버전 정보를 보여주지 않기 위해 보안상 설정하는 것.

ex FTP 사용자 chroot 구성 - root 사용자는 제외 설정
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

ex FTP 사용자 접근 제어
# vi /etc/vsftpd/user_list
oracle
wasuser
# vi /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO -> user_list에 있는 사람만 접근 가능.

[ex] Anonymous FTP 사이트

  • 1) Anonymous FTP 사이트 enable
    anonymous_enable=YES
    • YES이면 익명 계정으로 FTP 접속이 가능하다.
    • NO이면 익명 계정으로 접속 할 수 없다.
  • 2) Anonymous FTP 업로드 설정
    chown_uploads=YES
    chown_username=ftpupload
  • 3) Anonymous FTP 다운로드 설정
    # cd /var/ftp/pub -> r권한 있어서 GUI로도 볼 수 있음.
    # mkdir -p -m 751 download -> r권한이 없어 존재하지만 볼 수 없음.
    # mkdir -p -m 751 download/os -> 위와 동일
    # mkdir -p -m 751 download/os/centos -> 위와 동일
    # cp /etc/services download/os/centos/test.img
    => test.img 이 파일을 다운 받기 위해서는 파일 경로와 이름을 정확히 알아야 다운 가능. (GUI에선 다운 x)

보안

FTP -> SFTP/SCP, FTPs

1) 접근 제어

  • 호스트/네트워크에 대한 접근 제어: firewall
  • 사용자에 대한 접근제어: /etc/vsftpd/ftpusers, user_list
    # vi /etc/vsftpd/vsftpd.conf
    userlist_deny=NO
    # vi /etc/vsftpd/user_list
    dbuser
    wasuser

2) 최대 접속자 수 제한

  • max_clients=100
  • max_per_ip=5

3) 프로그램 패치

# yum update vsftpd

4) vsftpd 보안 관련 정보 얻기

http://vsftpd.beasts.org

  • /usr/share/doc/vsftpd/SECURITY -> 보안 관련 정보
  • /usr/share/doc/vsftpd/TUNING -> 성능 튜닝 팁

5) 포트 관리

  • FTP 포트 변경(list_port=2121)
  • "passive mode" vs "active mode"

[실무에서]
1. FTP 서버 구축했을때
2. 방화벽 서비스 오픈 요청을 하면
3. 보통 21번 포트를 열어주는데 데이터 전송하려면 다른포트를 사용하게 되는데 차단되게 되는 경우가 있다.
4. 21/20열어달라할때 보안팀이 안열어줄 수 있음.
5. 그때 패시브모드로 방화벽에 걸리지 않는 클라이언트 포트를 통해 데이터를 받음.

6) 로그 기록

  • 로그 파일 모니터링
    # tail -f /var/log/xferlog -> 파일 업로드/다운로드 기록
    # tail -f /var/log/secure -> FTP 인증 실패 기록

0개의 댓글