Contents

리눅스 vsFTP 서버 / 서비스 유형 / Firewall, NAT

   Apr 6, 2023     7 min read

기본 구성

Untitled

FTP 서버 모드

Positive 모드

  • 21 : ftp 클라이언트에서 ftp 서버 포트로 접속한다. (명령 전송 포트)
  • 20 : ftp 서버에서 ftp 클라이언트 포트로 접속한다. (데이터 전송 포트)

Untitled (1)

  • 먼저 클라이언트에서 서버의 21번 포트로 접속 후 클라이언트가 사용할 두 번째 포트를 서버에게 알려준다.
  • 서버는 이에 대한 ack 로 응답하고(여기까지 일반적인 TCP/IP 작동방식임), 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속을 시도한다.
  • 마지막으로 클라이언트가 ack로 응답한다.

Passive 모드

  • 21 : ftp 클라이언트에서 ftp 서버 포트로 접속한다. (명령 전송 포트)
  • 1024 포트 이상 사용 : ftp 서버에서 ftp 클라이언트 포트로 접속한다. (데이터 전송 포트)

Untitled (2)

  • 먼저 클라이언트가 command 포트로 접속을 시도하면 서버에서는 서버가 사용할 두 번째 포트를 알려준다.
  • 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도하고, 서버는 ack로 응답한다.
  • 단점은 비 특권포트(1024부터 65535까지)를 방화벽에서 모두 열어 주어야 한다는 것이다. ( 그러나 대부분 FTP서버에서 포트를 제한할수 있다. )
  • passive 모드에서는 두 번째 data 포트로서 active 모드가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비특권 포트를 사용하게 된다.

참고

# vi /etc/vsftpd.conf
pasv_enable=YES <= 추가
pasv_min_port=54040 <= 추가
pasv_max_port=54050 <= 추가



VSFTP (Very Secure FTP Daemon)

  • vsftp 는 보안 부분을 특히 강조한 데몬으로 Redhat, Suse, Open-BSD 에서 기본 FTP로 채택하고 있으며, 보안, 빠른 퍼모먼스, 안정성을 주요 특징으로 소개하고 있고 그 성능도 여느 ftp 서버 보다 탁월하다.

user 비고립화 시키기

# yum -y install vsftpd
# service vsftpd restart

# useradd user1
# passwd user1



user 고립화 시키기

# useradd user2
# passwd user2

# cd /etc/vsftpd
# vi vsftpd.conf
    chroot_list_enable=YES 96행
    chroot_list_file=/etc/vsftpd/chroot_list 98행

# cd /etc/vsftpd
# touch chroot_list
# vi chroot_list
    user2

# service vsftpd restart



user FTP 접근 제한 시키기

# useradd user3
# passwd user3

# cd /etc/vsftpd
# vi ftpusers
    user3

# vi user_list
    user3

# service vsftpd restart



anonymous 구성하기

# cd /etc/vsftpd
# vi vsftpd.conf
    anonymous_enable=YES 12행
    write_enable=YES 18행
    anon_upload_enable=YES 27행
    anon_mkdir_write_enable=YES 31행

# chmod 755 /var/ftp

# service vsftpd restart



Ex. user1

Untitled (3)

문제

Untitled (4)

# mkdir /dir1
# chmod 1777 /dir1

# cd /etc/vsftpd
# vi vsftpd.conf
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

# cd /etc/vsftpd
# touch chroot_list
# vi chroot_list
    user4
    user5

# vi /etc/passwd
    user4 /dir1
    user5 /dir1

# service vsftpd restart



WA2003)

  • C드라이브에 dir 폴더를 생성 후, 4랑 5 텍스트 파일을 만들기

ftp 192.168.10.2
user4 / 4
lcd c:\dir
put 4.txt <- 가져오기
get 5.txt <- 업로드
mkdir user4 <- user4 파일 생성



서비스 유형

데몬이란?

  • 데몬이란 시스템에 관련된 작업을 하는 후위 프로세스 (background process)
  • 대부분의 데몬은 시스템에 관련된 작업을 하게 되는데, 서비스 요청이 없을 때는 후위 프로세스로서 유후(idle)상태에 들어가 있게 되어 시스템의 CPU를 차지하지 않지만 메모리와 기타 자원을 상당수 차지하게 된다

standalone 방식

  • 서비스를 하려면 해당 서버가 메모리에 미리 올라와 있어야 한다.
  • 여기에 해당되는 서비스는 sendmail, apache, mysql, name server, nfs 등 이며, 이 방식으로 운영되는 서비스는 /etc/init.d/ 에 있는 스크립트 파일을 보면 알 수 있다.

  • 독립적으로 실행되는 모드
  • 독립적으로 실행되며 항상 메모리에 상주하여 서비스 요청이 있을 때 언제든 바로 응답
  • 빠른 응답속도를 요하는 경우 이 모두 사용
  • 백그라운드 프로세스

1. standalone 서비스 자동 실행 방법

  • ntsysv (chkconfig)는 부팅시 데몬의 실행여부 제어함
  • service [데몬] [상태] (/etc/rc.d/init.d = /etc/init.d/)는 실행중인 데몬을 제어함.

  • system-config-services는 그래픽 환경에서만 실행됨

  1. ntsysv
  2. chkconfig
    chkconfig [옵션] 데몬 [상태]

  • Linux 리스트 확인
# chkconfig --list [프로그램명]



  • Linux 시작시 실행되도록 설정
# chkconfig [프로그램명] on



  • Linux 시작시 실행되지 않도록 설정
# chkconfig [프로그램명] off



  • Linux 런 레벨별로 시작시 실행되도록 설정
# chkconfig --level [레벨] [프로그램명] on



  • Linux 런 레벨별로 시작시 실행되지 않도록 설정
# chkconfig --level [레벨] [프로그램명] off



Ex. 서비스 유형

Untitled (5)

방법

  1. vsftp 서버 설치
mount /dev/cdrom /cdrom
cd /cdrom/CentOS
(yum -y remove ftpd)
rpm -ivh vsftpd-2.0.5-16.e15_4.1.i386.rpm



  1. vi 편집
vi /etc/vsftpd/vsftpd.conf
:set nu
:109
    Linsten=NO



  1. restart
/etc/rc.d/init.d/vsftpd restart



하면 fail이 뜬다.

  1. cd /etc/xinetd.d

  2. 복사 후 vi 편집

cp ekrb5-telnet vsftp

vi vsftp

service telnet
{
        disable 	= no
        flags             = reuse
        socket_type   = stream
        wait              = no
        user              = root
        server            = /usr/sbin/vsftpd
        log_on_failure  += USERID
}



  1. restart
service xinetd restart



Firewall, NAT

  • 방화벽에서 패킷의 이동 경로

Untitled (6)

Untitled (7)

iptables 명령어 사용법

iptables [-t table명] 명령어 [매칭옵션] [타겟]



  1. iptables
  • [table 구문]
# iptables ( -t filter ) -D INPUT -p tcp --dport 80 -j DROP
# iptables -t nat -D INPUT -p tcp --dport 80 -j DROP
# iptables -t mangle -D INPUT -p tcp --dport 80 -j DROP



  • [rule 구문]
# iptables -A INPUT [-p tcp] [-s 주소] [multiport] [--sport 1024:] 
                    [-d 주소] [multiport] [--dport 21] 
                    [-m state] 
                    [--state NEW,ESTABLISHED,RELATED] 
                    -j ACCEPT



  1. iptables의 명령어

Untitled (8)

Untitled (9)

Untitled (10)

  1. iptables 매칭 옵션

Untitled (11)

Untitled (12)

Untitled (13)

옵션의미
NEW새로운 연결을 요청하는 패킷
ESTABLISHED기존 연결의 일부인 패킷
RELATED기존 연결에 속하지마 새로운 연결을 요청하는 패킷



기본 구성

Untitled (14)

방법

  • Firewall)
# setup



Untitled (15)

Untitled (16)

  • spacebar 누르기

# vi /etc/sysconfig/iptables



Untitled (17)

# service iptables stop
# service iptable start

# iptables -P FORWARD DROP

# service iptables save



  • 결과
# vi /etc/sysconfig/iptables



Untitled (18)

Ex.

Untitled (19)

Firewall

# vi /etc/sysconfig/iptables
# service iptables stop
# service iptables start

# iptables -P FORWARD DROP

# iptables -A FORWARD -s 1.1.1.1 -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# service iptables save

# vi /etc/sysctl.conf
    net.ipv4.ip_forward=1   -- 7행

# /sbin/sysctl -p



결과

Untitled (20)