강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

ftp를 통한 와레즈 차단

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

ftp를 통한 와레즈 차단

 

최근 배포되는 리눅스 배포판에서는 스팸으로 인하여 메일 서버의 릴레이는 기본적으로 거부되어 있지만, Anonymous FTP는 열려 있어 자신도 모르게 FTP 서버가 와레즈로 악용되는 경우가 있다.

 

 

 

 

이는 암호 없이 로그인이 가능한 Anonymous FTP를 이용한 경우가 대부분인데, 이의 악용을 제한하려면 다음과 같이 설정하면 된다.

 

/etc/passwd 파일에서 ftp 계정을 삭제 또는 주석 처리한다.

 

 

 

 

ftp 계정은 사용할 일이

없으므로 삭제해도 무방하다.

또는 설정 파일인 proftpd.conf에서 <Anonymous> 부분을 삭제하면 된다.

 

만약 자신이 관리하는 네트워크 내에 서버가 여러 대 있고 모두 Anonymous FTP 여부를 체크하기가 힘든 경우 아래와 같이 별도의 스크립트를 이용하면 Anonymous FTP가 열려 있는지 효율적으로 체크할 수 있다.

 

 

 

 

먼저 http://david.weekly.org/code/ftpcheck.txt 파일을 다운로드 받아 ftpcheck.pl로 이름을 변경 후 서버에서 다음과 같이 실행한다.

 

 

 

 

이때 Socket, Net::FTP perl 모듈도 함께 설치되어 있어야 한다.

 

- 형식 : ./ftpcheck.pl C Class IP 대역

- 실행 예 : 아래의 경우 192.168.3.0/24 대역을 조회한다.

 

 

 

 

 

 

# ./ftpcheck.pl 192.168.3

ftpcheck v0.32 by dave weekly <dew@cs.stanford.edu>

 

FTP on 192.168.3.3 []

FTP on 192.168.3.4 []

FTP on 192.168.3.9 []

FTP on 192.168.3.7 []

FTP on 192.168.3.14 []

FTP on 192.168.3.15 []

FTP on 192.168.3.17 []

FTP on 192.168.3.19 []

.......

Anon FTP on 192.168.3.226 []

 

위의 경우 192.168.3.226Anonymous FTP가 열려 있는 것을 알 수 있는데, 매번 체크하기가 번거로우면 ftpcheck.pl 스크립트를 cron에 설정하여 일정 시간마다 결과를 체크하여 Anon 메시지가 보일 경우 해당 정보를 관리자에게 메일로 발송하도록 스크립트를 실행하면 유용하게 사용할 수 있을 것이다.

 

 

 

 

 

 

Perl모듈을 설치할 때 아래와 같이 실행하면 쉽게 설치할 수 있다.

 

# perl -MCPAN -e shell

 

이후

cpan> 와 같이 나오면

install Unix::Syslog와 같이 실행하면 지정한 모듈이 자동으로 설치된다.

 

 

5.3.2 ftp 장애 발생 시 문제해결

 

특별한 원인 없이 FTP 접속에 장애가 있거나 특정 문제의 원인을 찾고자 할 때에는 다음과 같이 debug 모드로 데몬을 시작할 수 있다.

 

 

 

 

아래와 같이 debug 모드로 실행 후 실시간으로 출력되는 메시지를 보면 자세한 상황을 모니터링 할 수 있는데, debug 모드로 모니터링을 하면 시스템적인 문제인지 보안적인 문제인지의 여부를 쉽게 알 수 있어 FTP서비스 트러블슈팅에 많은 도움이 될 것이다.

 

 

 

 

 

 

[root@www root]#/usr/sbin/proftpd -d 9 -n

- <Directory />: deferring resolution of path

192.168.78.249 -

192.168.78.249 - Config for FTP SERVER:

192.168.78.249 - ~ftp/

192.168.78.249 - Limit

192.168.78.249 - MaxClientsPerUser

192.168.78.249 - TimesGMT

192.168.78.249 - /

192.168.78.249 - AllowOverwrite

192.168.78.249 - Umask

192.168.78.249 - MaxClientsPerUser

192.168.78.249 - TimesGMT

192.168.78.249 - DefaultServer

192.168.78.249 - IdentLookups

192.168.78.249 - ServerIdent

192.168.78.249 - Umask

192.168.78.249 - MaxClientsPerUser

192.168.78.249 - UserID

192.168.78.249 - opening scoreboard '/usr/local/var/proftpd/proftpd.scoreboard'

192.168.78.249 - ProFTPD 1.3.1 (stable) (built Fri Feb 15 10:58:27 KST 2008) standalone mode STARTUP

192.168.78.249 - ROOT PRIVS at pidfile.c:42

192.168.78.249 - RELINQUISH PRIVS at pidfile.c:44

 

위와 같이 실행하면 수많은 결과가 그대로 화면에 출력되어 정확한 에러 등을 찾기가 어려울 수 있다.

 

 

 

 

이러한 경우 아래와 같이 실행하면 로그 정보가 실시간으로 /var/log/proftpd-debug.log 파일에 저장되게 된다.

 

 

 

 

 

 

[root@www root]# proftpd -nd5 2>&1 >& /var/log/proftpd-debug.log

 

ftp 접속 시에는 다음의 조건이 만족될 경우 로그인이 되므로 만약 특정 유저가 ftp 접속이 안 되는 경우 다음 순서대로 확인하면 된다.

 

 

 

 

 

 

/etc/passwd, /etc/shadow에 사용자 계정이 있는지 검사한다.

/etc/ftpusers에 사용자 id가 있으면 거부하므로 목록에 있는지 확인한다.

/etc/shell에 등록되지 않은 쉘을 사용하는 유저는 접근을 거부하므로 어떤 쉘을 사용하는지 확인한다.

 

 

 

 

특정 유저가 어떤 쉘을 사용하는지는 /etc/passwd 파일에서 확인하면 된다.

 

아래는 특정한 유저가 로그인이 되지 않을 경우 위와 같이 서버에서 debug 모드로 실행한 후 출력되는 메시지를 모니터링 한 결과이다.

 

 

 

 

아래의 결과에서 abc라는 유저가 로그인하지 못한 이유는 해당유저(abc)의 쉘인 /bin/nosh이 유효하지 않기 때문이다.

 

 

 

 

 

ftp.server,com (127.0.0.1[127.0.0.1]) - USER abc (Login failed): Invalid shell: '/bin/nosh'

 

만약 /etc/shell에 등록되지 않은 사용자의 ftp 로그인을 허용하려면 proftpd.conf에 다음과 같이 설정을 추가하면 된다.

 

 

 

 

 

 

RequireValidShell off

 

 

5.3.3 SSL이 지원되는 proftpd 설정

 

기존의 ftp는 접속을 하기 위한 아이디/암호 인증 시 평문(plain text)을 사용하기 때문에 스니핑(sniffing)될 경우 아이디/암호가 그대로 유출되는 문제가 발생할 수 있다.

 

 

 

 

이러한 취약성에 대비하기 위해 최근에는 파일 전송을 할 때 FTP 대신 SSH에서 제공하는 scp를 많이 사용하는 추세이지만, 특별한 이유로 SSL/TLS가 지원되는 proftpd를 구축하여야 할 경우가 있다.

 

 

 

 

 

이러한 경우에는 아래에서 설명하는 방법으로 "SSL이 지원되는 proftpd"를 설치할 수 있다.

 

* SSL/TLS 패치

 

이전 버전에서는 SSL이 지원되는 proftpd를 구축하려면 별도로 패치 파일을 다운로드하여 설치하여야 하는 번거로움이 있었지만 최근 버전에서는 자체적으로 이 기능이 포함되어 있어 단지 설치 과정에서 이 모듈을 포함 시켜주기만 하면 된다.

 

 

 

 

rpm에는 포함되어 있지 않으므로 SSL/TLS 패치를 하려면 소스 컴파일 시 configure과정에서 옵션을 추가하여야 한다.

 

 

 

 

아래는 proftpd 1.3.x를 압축해제 한 디렉토리에서 configure 설정 후 컴파일 하는 과정을 보여주고 있다.

 

 

 

 

 

 

[root@www proftpd-1.3.x]# ./configure --with-modules=mod_tls

[root@www proftpd-1.3.x]# make; make install

 

시스템에서 SSL을 이용하려면 SSL 툴킷인 openssl이 설치되어 있어야 하는데, 혹 아직 설치되어 있지 않다면 http://www.openssl.org/http://rpmfind.net/에서 적당한 버전을 다운로드받아 설치하면 된다.

 

아래는 서버에 대해서 암호로 보호된 RSA 비밀키를 생성 후 인증서요청(CSR)을 생성하고, CA를 사용하여 자체적으로 사인(self sign)하는 단계를 보여주고 있다.

 

 

 

 

여기에서

“Common Name (eg, your name or your server's hostname) []” 부분에는 반드시 정확한 호스트 이름(FQDN)을 입력하여야 한다는 점을 주의하기 바란다.

 

# openssl req -new > proftpd.cert.csr

Using configuration from /usr/share/ssl/openssl.cnf

Generating a 1024 bit RSA private key

...............++++++

.++++++

writing new private key to 'privkey.pem'

Enter PEM pass phrase:xxxxx <-- 임의의 암호 입력

Verifying password - Enter PEM pass phrase:

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [GB]:KR

State or Province Name (full name) [Berkshire]:Seoul

Locality Name (eg, city) [Newbury]:Gangnam

Organization Name (eg, company) [My Company Ltd]:TTIDC

Organizational Unit Name (eg, section) []:Network-Security

Common Name (eg, your name or your server's hostname) []:cofw.tt.co.kr

Email Address []:antihong@tt.co.kr

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

 

 

# openssl rsa -in privkey.pem -out proftpd.cert.key

read RSA key

Enter PEM pass phrase:xxxxx <-- 앞에서 입력한 임의의 암호 입력

writing RSA key

 

# openssl x509 -in proftpd.cert.csr -out proftpd.cert.cert -req -signkey proftpd.cert.key -days 1095

Signature ok

subject=/C=KR/ST=Seoul/L=Gangnam/O=TTIDC/OU=Network-Security/CN=cofw.tt.co.kr/Email=antihong@tt.co.kr

Getting Private key

 

위의 명령으로, 자신이 사인한 3(365*3=1095) 기한의 인증서를 생성하였다.

 

이후, proftpd.conf 파일에 아래의 내용을 추가하면 된다.

<IfModule mod_tls.c>

TLSEngine on

TLSRequired on

TLSLog /var/log/proftpd-tls.log

TLSProtocol TLSv1

TLSRSACertificateFile /usr/local/cert/proftpd.cert.cert

TLSRSACertificateKeyFile /usr/local/cert/proftpd.cert.key

</IfModule>

 

여기에서 "TLSEngine on"SSL/TLS 기능을 사용한다는 의미로 SSL/TLS가 가능한 클라이언트만 접속을 허용하게 된다.

 

 

 

 

각 옵션에 대한 좀 더 자세한 설명은 아래 URL을 참고하기 바란다.

http://www.castaglia.org/proftpd/modules/mod_tls.html

 

위와 같이 설정한 후 proftpd를 재가동 하면 되는데, 이후 proftpd -l을 실행하였을 때 아래와 같이 mod_tls.c가 포함되어 있으면 SSL/TLS가 지원되는 proftpd는 정상적으로 작동하는 것임을 알 수 있다.

 

 

 

 

 

 

[root@www root]# /usr/local/sbin/proftpd -l

Compiled-in modules:

mod_auth.c

mod_tls.c

mod_cap.c

 

 

* SSL이 지원되는 FTP 클라이언트

 

이렇게 해서 proftpd서버에서의 SSL설정은 끝났고, 클라이언트를 살펴볼 차례이다.

 

 

 

 

클라이언트 프로그램은 아무런 FTP 프로그램이나 사용할 수 없고 반드시 SSL/TLS가 지원되는 프로그램을 이용하여야 하는데, 이러한 프로그램의 목록은 아래 URL에서 확인할 수 있다.

 

 

 

 

http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext.html#client

 

많은 프로그램 중 개인적으로는 Windows 환경에서도 자유롭게 이용이 가능한 filezilla (http://filezilla-project.org/)를 사용할 것을 추천한다.

 

 

 

 

filezilla는 무료로 제공되면서 기본 FTP 뿐만 아니라 SSH2를 이용한 SFTP, FTP over SSL등을 지원한다.

아래는 SSL/TLSenable된 서버에 접속할 때 SSL 호환 클라이언트가 아닌 경우 다음과 같이 접속이 바로 종료되는 것을 알 수 있다.

 

 

 

 

 

# ftp cofw.tt.co.kr

Connected to 211.xx.xx.xx (211.xx.xx.xx).

220 ProFTPD 1.3.1 Server (ProFTPD Default Installation) [cofw.tt.co.kr]

Name (cofw.tt.co.kr:root): test

550 SSL/TLS required on the control channel

Login failed.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> bye

221 Goodbye.

 

다음은, filezilla 프로그램을 이용하여 접속할 때 ServerType[FTP over SSL (explicit encryption)]로 설정 후 접속 시도를 하면 아래와 같은 인증서 관련 메시지가 뜨는 것을 알 수 있다.

 

 

 

 

이는 공인 인증서가 아니라 자기 자신이 사인한 인증서가 설치되어 있기 때문이며 “Always trust this certificate"를 선택 후 Accept를 하면 이후부터는 경고화면이 뜨지 않게 된다.

 

 

 

 

 

 

b79dcaadfffc9b5b7c0619c272b5f46c_1675068235_9526.png
 

[그림] SSL을 통한 접속

 

 

5.3.4 접속 속도가 느릴 때 살펴보아야 할 것

FTP 속도는 파일 전송을 많이 하는 사용자에게는 매우 민감한 부분 중 하나인데, 가끔 접속을 하다보면 특별한 이유 없이 느려질 때가 있다.

 

 

 

 

이러한 경우에는 최적화와 관련 있는 다음의 부분을 살펴보도록 한다.

 

 

 

 

 

 

ServerType standalone

 

FTP 데몬을 시작할 때 ServerTypestandalone이나 inetd가 될 수 있는데, inetd에 비해 standalone의 경우 속도가 더 빠르므로 ServerType을 체크하기 바란다.

 

 

 

 

접속자가 별로 없다면 inetd가 관리하기는 편하지만 접속자가 많을 경우 속도차이가 나므로 standalone으로 설정하는 것이 좋다.

 

 

 

 

 

 

UseReverseDNS off

 

데몬에서는 외부 클라이언트가 접속할 때 클라이언트 IP를 호스트이름으로 변환하는 역질의(Reverse lookup)를 하는데, 이 과정에서 해당 IP 대역에 대한 위임권한을 가진 DNS 서버가 제대로 응답하지 못할 경우 이로 인한 속도 지연이 발생할 수 있다.

 

 

 

 

따라서 UseReverseDNSoff로 설정하여 proftpd가 역 질의를 하지 않도록 한다.

 

 

 

 

 

 

IdentLookups off

 

또한 proftpd 데몬에서는 외부 클라이언트가 접속할 때 해당 클라이언트에 대해 ident(113/tcp) 질의를 하게 된다.

 

 

 

 

이때 해당 클라이언트가 방화벽(firewall)등이 설치되어 있는 환경에서 ident(113/tcp)에 대한 필터링 정책을 잘못 설정할 경우 이로 인한 속도지연이 발생할 수 있다.

 

 

 

 

따라서 ident 질의를 하지 않기 위해 off로 설정하는 것이 좋다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,015 명
  • 현재 강좌수 :  35,688 개
  • 현재 접속자 :  185 명