1. Lock and Key ACL(Dynamic ACL)


Lock and Key ACL은 인증된 곳으로부터 오는 트래픽을 허용하기 위해 동적으로 ACL 항목을 추가하여 트래픽 필터링을 가능하게 하는 보안 기능이다.

- 기존 ACL은 관리자가 항목을 변경하지 않는 한 바뀌지 않지만, Lock and Key ACL은 사용자가 라우터에 인증한 다음에만 활성화되는 동적 ACL 항목을 추가한다. 인증 과정이 끝난 뒤, 동적 ACL 항목은 미리 설정된 시간이 지나거나 동적 항목의 최대 수명이 다 할 경우 삭제된다. 이 동적 ACL 항목이 삭제되면 라우터 인터페이스 설정은 원래대로 동작을 실시한다.

- 라우터에 인증을 하기 위해서 Telnet 패켓을 전송한다. 그 다음 라우터는 관리자가 설정한 인증 데이터베이스를 기반으로 인증을 수행한다. 이 인증 과정은 로컬 라우터에 저장되어 있는 사용자 이름/패스워드를 이용할 수 있고, 또는 인증 서버(TACACS+, RADIUS)를 이용할 수도 있다.

- 사용자가 인증에 성공되면 Telnet 세션은 닫히고 동적 ACL 항목이 추가된다. 이 동적 ACL 항목은 만료시간이 지나면 삭제되며, 그전에 관리자에 의해 삭제도 가능하다.

- 사용자가 DHCP 및 Dialer-Up 환경을 통해 인터넷에 연결되어 있다면 고정 IP 대신 유동 IP를 사용하게 된다. 이때, 사용자는 매번 다른 IP 주소를 가지고 네트워크 자원에 접근을 실시하게 된다. 이때, Lock and Key ACL를 사용하면 공격자로부터 보안 수준을 높일 수 있다.

- Lock and Key ACL은 두 개의 추가 필드를 제외하고는 Extended ACL과 동일하다.


2. Lock and Key ACL Example


R11은 Lock and Key ACL를 구성하여 Telnet을 통해 Local 인증이 성공된 사용자만 FTP에 접근을 허용하길 원한다.


1) Telnet으로 접속 하는 모든 사용자는 Telnet 접속 이후 연결이 끊어진다.

R11(config)# username cisco password cisco

R11(config)# access-list 113 dynamic FTP_USER timeout 60 permit tcp any host 172.16.1.113 eq ftp

R11(config)# access-list 113 permit tcp any host 11.11.11.11 eq telnet

R11(config)# interface serial 0/0

R11(config-if)# ip access-group 113 in

R11(config-if)# line vty 0 4

R11(config-line)# login local

R11(config-line)# autocommand access-enable host timeout 10


2) Telnet으로 접속 하는 Lock and Key ACL 사용자만 Telnet 접속 이후 연결이 끊어진다.

R11(config)# username cisco password cisco

R11(config)# username cisco autocommand access-enable host timeout 10(10분 동안 트래픽이 없으면 dynamic ACL 해제)

R11(config)# access-list 113 dynamic FTP_USER timeout 60 permit tcp any host 172.16.1.113 eq ftp(60 분후 dynamic ACL 해제)

R11(config)# access-list 113 permit tcp any host 11.11.11.11 eq telnet

R11(config)# interface serial 0/0

R11(config-if)# ip access-group 113 in

R11(config-if)# line vty 0 4

R11(config-line)# login local


3. Verifying Lock and Key ACL


- Lock and Key ACL를 구성한 R11은 사용자 로그인이 없을 경우에는 평범한 ACL로 동작을 실시한다.

- 만약, 사용자로부터 Telnet 접속 및 로컬 인증을 실시 하게 되면, 사용자에 대한 소스 트래픽을 동적으로 ACL 항목에 추가하여 동작을 실시한다.

- 위의 정보 확인을 통해 Lock and Key ACL의 동작 원리를 확인할 수 있다.

- 앞에 설정 중에 ‘R11(config)# username cisco autocommand access-enable host timeout 10’는 ‘cisco’라는 사용자에 대해서만 Lock and Key ACL에 적용되어 Telnet 연결을 종료시키고, 나머지 사용자들에 대해서는 Telnet 종료를 시키지 않는 구문이다. 그 이유는 FTP Server 접근을 위한 Lock and Key ACL 사용자 이외에도 관리목적상 R11으로 Telnet 접근을 실시하는 관리자를 위해서 위의 구문은 필요하다.

- 또한 ‘host’ 키워드를 사용하지 않으면 모든 트래픽들을 허용하는 동적 항목이 생성되기 때문에, ‘host’ 키워드를 빼먹어서는 안된다.


4. Reflexive ACL


Reflexive ACL은 Standard ACL과 Extended ACL에서 제한되었던 일부 기능을 가능하게 하였고, Extended ACL과 마찬가지로 상위 계층 세션 정보에 근거하여 IP 패켓을 필터링한다, 또한, 허용된 세션에 속하는 IP 트래픽에 대한 동적 연결 정보를 유지하여 세션 필터링도 할 수 있다.


- Reflexive ACL를 사용하면 내부 네트워크로부터 시작된 세션에 속하는 IP 트래픽을 허용하고, 외부 네트워크로부터 시작된 세션에 속하는 IP 트래픽을 거부할 수 있다. 설정은 Extended Named ACL으로만 설정이 가능하다.

- IP 상위 계층 세션이 내부 네트워크로부터 시작되어 외부 네트워크로 전송되는 경우, 새로운 임시 항목이 ACL 항목에 생성되어 외부 네트워크로부터 되돌아오는 트래픽을 허용한다. 되돌아오는 트래픽 중에 세션에 속하는 트래픽만 허용하고 나머지 다른 트래픽들은 거부된다.

- 이렇게 동작 하는 이유는 내부에서 외부 네트워크로 TCP 패켓이 나갈 때 임시 ACL 항목이 Reflexive ACL 항목 내에 생성되기 때문에 외부로 나가는 트래픽에 대응하여 내부로 들어오는 트래픽만 허용한다.

- Reflexive ACL은 기존의 ACL처럼 아무런 명시를 하지 않는 한 ‘deny any’ 처리는 실시 하지 않는다. 그 이유는 Reflexive ACL은 다른 ACL에 포함되어 동작하기 때문에, 일단 Reflexive ACL를 처리하고 나면, 라우터는 Extended ACL의 나머지 부분을 계속 처리를 한다.

- Extended Named ACL 구성 시 ‘reflect’ Command와 ‘evaluate’ Command가 사용된다.


5. Reflexive ACL Example


R1에서 Reflexive ACL를 구성하여, 내부 사용자 192.168.1.0/24가 외부로 나갔다가 되돌아오는 Telnet 트래픽을 허용하며, 외부에서 직접적으로 R1 내부 네트워크로 접근하는 Telnet 트래픽은 허용하지 않길 원한다. (Ping Test는 가능하게 하여라)

R1(config)# ip access-list extended OUTBOUND

R1(config-ext-nacl)# permit icmp any any

R1(config-ext-nacl)# permit tcp any any reflect RFX_USER

R1(config-ext-nacl)#

R1(config-ext-nacl)# exit

R1(config)# ip access-list extended INBOUND

R1(config-ext-nacl)# permit icmp any any

R1(config-ext-nacl)# evaluate RFX_USER

R1(config-ext-nacl)# exit

R1(config)# interface serial 0/0

R1(config-if)# ip access-group OUTBOUND out

R1(config-if)# ip access-group INBOUND in

Reflexive ACL은 Telnet과 같은 단일 채널의 어플리케이션만 다룰 수다는 단점을 가지고 있다. 이러한 어플리케이션은 세션이 지속되는 동안 동일한 정적 포트 하나만을 사용한다. 즉, 세션 중간에 포트가 변경되는 어플리케이션을 지원하지 못한다. 한 예로 하나의 통제 채널과 다른 하나의 데이터 채널을 사용하는(다중 채널 어플리케이션) FTP를 들수 있다. 만약, Reflexive ACL과 FTP를 사용한다면 FTP는 수동 모드인 Passive Mode로 동작을 실시해야 한다.


'IT > CISCO' 카테고리의 다른 글

CBAC(Context-based Access Control)  (0) 2017.02.18
Linux에서 ftp server 설치 및 운영 방법  (0) 2017.02.16
Linux에서 Telnet server 설치 및 운영 방법  (0) 2017.02.16
Linux에서 router 설치 및 운영 방법  (0) 2017.02.15
리눅스  (0) 2017.02.14

1. CBAC(Context-based Access Control)


Reflexive ACL은 오직 단일 채널 어플리케이션만 제어할 수 있다. 이러한 문제점 때문에 기업 네트워크에서 많은 제

한을 가지고 올 수 있다. 이 문제를 해결하기 위해서 나온 것이 바로 CBAC이라는 기능이다.


- CBAC은 외부로 나가는 세션을 검사하여 그 트래픽에 대한 응답 트래픽을 위한 임시 항목을 생성한다. 마치 Reflexive ACL과 비슷하게 생각되지만, CBAC은 Reflexive ACL보다 다양한 어플리케이션 계층 정보를 검사하고 안전하게 정의하는 점에서 차이가 있다.

- CBAC은 연결을 제대로 처리하려면 각 연결의 상태를 끊임없이 모니터링을 실시 하기 때문에 Stateful 상태 감시 검사법이라고 한다. 즉, 어떠한 트래픽을 정의하여 이 트래픽이 특정 인터페이스를 통해 네트워크 외부로 나가는 경우 CBAC은 그 트래픽에 대한 응답 트래픽이 내부 네트워크로 들어갈 수 있도록 임시 항목을 생성한다는 것이다. 이때 임시 항목은 Reflexive ACL과 마찬가지로 응답 트래픽을 허용하며, 초기 트래픽과같은 세션에 속하는 추가 데이터 채널이 라우터를 통해 내부 네트워크로 들어올 수 있도록 한다.

- CBAC은 네트워크와 전송 계층은 물론 어플리케이션 계층 프로토콜까지 검사하여 TCP/UDP의 세션 정보를 검사한다. 일부 프로토콜은 제어 채널을 통해 교환한 정보를 이용하여 추가적인 채널을 연다. 그렇기 때문에 IP와 전송 계층정보만 가지고 이런 프로토콜을 필터링할 수 없었지만, CBAC은 가능하다. 즉, CBAC은 외부로 나가는 세션 정보를 검사하여 응답 트래픽이 되돌아 오기 위한 임시 ACL 항목을 생성하며, 7계층 어플리케이션까지의 정보에 기반한 결정을 내릴 수 있다.

- CBAC을 사용할 경우 패켓은 인터페이스에 들어갈 때나 나올 때 검사되며 세션 정보는 패켓 상태 정보 테이블에 저장된다. 이 정보는 IP 주소와 4계층 포트 번호를 포함한다. 또한, CBAC은 라우터가 어떤 ACL이 응답 트래픽을 거부해야 할 지 자동으로 결정한 다음 임 ACL 항목을 ACL의 맨 첫 줄에 추가한다. 그리고 어플리케이션 계층 정보를 검사하여 응답 트래픽의 허용/거부 여부를 결정한다.

- Reflexive ACL에서는 FTP에 대해서 처리할 때에는 Passive Mode로 동작할 수 밖에 없는 제한이 있었지만, CBAC에서는 일반 FTP Mode에서도 트래픽에 대한 접근 제어가 가능하다. 즉, 외부로 나가는 세션을 모니터링 한 뒤에 서버에서 클라이언트로 맺는 연결을 허용하기 위한 임시 ACL 항목을 생성하여 동작하게 된다.

- CBAC은 출발지/목적지 주소가 라우터의 주소로 설정된 패켓은 검사하지 않는다. 그리고 CBAC은 오로지 TCP/UDP 패켓만 검사하기 때문에 라우터 자체가 주고 받은 패켓은 CBAC으로 제어할 수 없다.

- CBAC은 IPSec 트래픽을 검사할 수 없다. 만약, IPSec 트래픽을 검사해야 한다면 라우터를 IPSec 터널 종단으로 구성해야 한다.

- UDP/ICMP 트래픽은 비 상태 감시 프로토콜이기 때문에 CBAC은 이들 프로토콜의 세션에 대한 상태 정보를 추적할 수 없다. UDP 응답 패켓은 일정 시간 후에 만료되는 임시 ACL 항목으로 제어가 가능하지만, ICMP는 반드시 확장 ACL 명령어로 허용/거부되어야 한다. 즉, CBAC은 ICMP 제어 기능을 제공하지 않는다.


2. CBAC Process


2개의 인터페이스 중에 Ethernet 0 인터페이스 쪽은 네트워크가 우리가 보호하고자 하는 내부 네트워크에 연결되어 있고, Serial 0 인터페이스 쪽은 외부 네트워크에 연결되어 있으며, 이때 ‘Outbound Traffic’은 내부 네트워크에서 외부 네트워크로 나가는 트래픽이고, ‘Inbound Traffic’은 외부 네트워크에서 내부 네트워크로 흘러 들어오는 트래픽이라고 가정하여, CBAC 처리과정에 대해서 알아보도록 하자.


- 외부로 나가는 패켓이 라우터에 도착하면 라우터는 아웃바운드 ACL을 이용해 그 패켓을 검사한다. 만약, ACL에 그 트래픽을 허용하면, 이제 CBAC은 그 트래픽을 검사할 수 있다. 그렇지 않다면 패켓은 드랍될 것이고 CBAC은 패켓을 검사하지 않을 것이다.

- CBAC 검사 과정 동안, 출발지/목적지 IP 주소와 포트 번호를 포함한 정보가 기록된다. 이 정보는 새 연결을 위해 생성된 상태 테이블 항목에 기록된다. 이 상태 정보에 기반한 임시 ACL 항목이 생성된다. 이 ACL 항목은 인바운드 트래픽을 필터링 하도록 설정되어 있는 Extended ACL의 맨 앞에 위치하게 된다.

- 이 임시 ACL 항목은 앞에서 검사한 아웃바운드 패켓과 같은 연결에 속한 인바운드 패켓을 허용하도록 되어있다. 이제 아웃바운드 패켓이 인터페이스 밖으로 빠져나간다.

- 응답 패켓이 돌아오면 인바운드 ACL의 검사를 받게 되는데 CBAC이 생성한 임시 ACL 항목이 있기 때문에 접근이 허용된다. 여기서 CBAC은 필요할 경우 상태 테이블과 인바운드 ACL 목록을 수정한다. 그 이후로, 전송되는 모든 인바운드 아웃바운드 트래픽은 이 ACL 항목과 비교된다. 그리고 상태 테이블 접근 목록은 필요할 경우에 계속 수정된다. 연결이 끝나면 상태 테이블 항목과 임시 ACL 항목이 삭제가 된다.


3. CBAC Example


인터넷으로 나가는 모든 아웃바운드 IP 트래픽을 허용한다. 만약 누군가가 내부 네트워크에서 VPN 연결을 하는 것을 막고 싶다면 TCP, UDP, ICMP를 제외한 모든 IP 트래픽을 거부하면 된다.

R1(config)# ip inspect name TEST_CBAC tcp

R1(config)# ip inspect name TEST_CBAC udp

R1(config)# ip inspect name TEST_CBAC ftp

R1(config)# ip inspect name TEST_CBAC http

R1(config)# ip inspect name TEST_CBAC realaudio

R1(config)# ip access-list extended OUTBOUND

R1(config-ext-nacl)# permit ip 192.168.1.0 0.0.0.255 any

R1(config-ext-nacl)# exit

R1(config)# ip access-list extended INBOUND

R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 echo-reply

R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 traceroute

R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 time-exceeded

R1(config-ext-nacl)# permit icmp any 192.168.1.0 0.0.0.255 unreachable

R1(config)# interface ethernet 0/0

R1(config-if)# ip inspect TEST_CBAC in

R1(config-if)# ip access-group OUTBOUND in

R1(config)# interface serial 0/0

R1(config-if)# ip access-group INBOUND in


앞에 설정에 대한 내용을 알아보도록 하자.

- CBAC은 인터넷으로 나가는 모든 트래픽에 대한 응답 패켓이 내부 네트워크로 되돌아 올 수 있도록 한다.앞의 CBAC 설정에는 구체적으로 FTP, HTTP, Real-audio 트래픽을 검사하라는 설정을 하였다. 그 이유는 내부 네트워크 사용자가 이들 프로토콜을 이용하는 어플리케이션을 사용하고 있기 때문이다.

- 그리고 설정 마지막 부분에는 ICMP 트래픽에 대해서 라우터로 되돌아 오는 것을 허용하였다. 이렇게 한 이유는 네트워크 문제가 발생됐을 때 그 원인을 파악하기 위해서 관리목적상으로 설정하였다. 내부 네트워크 사용자는 인터넷에 있는 다른 사용자가 내부 호스트에 Ping 테스트를 원하지는 않지만, 내부 네트워크 사용자가 인터넷에 보낸 Ping과 Traceroute에 대한 응답은 받아 들이길 원하기 때문에 설정이 필요하다.

- 또한, ICMP 트래픽을 허용하면 Ping에 대한 응답 패켓 이외에도 패켓의 TTL이 만료된 때가 언제인지, 그리고 인터넷의 어딘가에서 라우팅 또는 접근 문제가 있어서 접근이 불가 되었다는 정보도 얻을 수 있다.

- ‘show ip inspect config’, ‘show ip inspect interfaces’ Command를 이용하여 CBAC 관련 정보 확인이 가능하다.


4. PAM(Port to Application Mapping)


PAM(Port to Application Mapping)은 CBAC의 단점인 오직 표준 포트에서 동작하는 서비스만을 제어할 수 있는 문제를 해결하였다.


- 한 예로, HTTP 포트(80번)가 아닌 포트에서 동작하는 웹-서버로 가는 트래픽은 CBAC으로 검사하거나 보호하는 것이 불가능하다. 그러나 PAM을 사용하여 네트워크 서비스 및 어플리케이션이 사용하는 TCP/UDP 포트를 커스터마이징을 할 수 있다.

- PAM이 동작하는 첫 과정은 어플리케이션과 기본 포트를 연결하여 PAM 테이블을 생성한다. 이 테이블 안에는 CBAC이 지원하는 모든 서비스가 동일하게 포함되어 있다. 바로 이 부분이 CBAC과 PAM이 연결되는 부분이다.

- 즉, CBAC은 PAM에 있는 정보를 이용하여 비 표준 포트에서 동작하는 서비스를 지원할 수 있다. 만약, 비 표준 포트에서 어플리케이션을 운영하고 있다면, PAM과 CBAC을 함께 사용하여 그러한 어플리케이션이 사용하는 포트를 구분할 수 있다. 그렇기 때문에, CBAC은 PAM이 없다면 표준 포트와 그 어플리케이션만을 지원할 수 밖에 없을 것이다.

- 비 표준 포트를 사용하는 네트워크 서비스나 어플리케이션이 있다면 수동으로 PAM 테이블에 포트를 설정해야 한다. 그리고 특정 어플리케이션이 사용하는 포트 범위도 입력할 수 있다. 이렇게 하려면 포트 범위에 속한 각 포트를 PAM 테이블에 개별 항목으로 추가해야 한다.

- 라우터 설정을 저장하면 모든 수동으로 입력한 항목은 기본 매핑 정보와 함께 저장되며, 만약 비 표준 포트를 사용하는 어플리케이션을 갖고 있다면, 그 포트를 PAM 테이블에 수동으로 설정해야 한다.


다음은 PAM 설정에 대해서 알아보도록 하자.

- Router(config)# ip port-map [Application_Name] port [Port-Number]

- Router(config)# ip port-map [Application_Name] port [Port-Number] [ACL List]

PAM 구성에 대한 예제를 알아보도록 하자.

- Telnet 기본 포트 23번을 8000번으로 맵핑을 실시하여라.

- Router(config)# ip port-map telnet port 8000

- 호스트 192.168.1.1인 Telnet 기본 포트 23번을 8000번으로 맵핑을 실시하여라.

- Router(config)# access-list 13 permit host 192.168.1.1

- Router(config)# ip port-map telnet port 8000 list 13

'IT > CISCO' 카테고리의 다른 글

Lock and Key ACL(Dynamic ACL)  (0) 2017.02.18
Linux에서 ftp server 설치 및 운영 방법  (0) 2017.02.16
Linux에서 Telnet server 설치 및 운영 방법  (0) 2017.02.16
Linux에서 router 설치 및 운영 방법  (0) 2017.02.15
리눅스  (0) 2017.02.14

1. Rad Hat 계열 Linux에 설치

 

Rad Hat이 설치된 컴퓨터에 ftp server를 설치하기 위한 절차를 기술함

 

# yum -y install proftpd : ftp daemon을 설치

 

2. Ubuntu Linux에 설치

 

Ubuntu가 설치된 컴퓨터에 ftp server를 설치하기 위한 절차를 기술함

 

 

# sudo apt-get install proftpd : ftp daemon을 설치


[참고]

명령어 앞의 sudo는 root 권한으로 실행하겠다는 의미임

 Ubuntu에서는 root 계정을 별도로 사용하지 않고 # sudo -s 하면 일정시간동안 root 권한으로 실행할 수 있음

 apt-get은 Internet을 통해 package 설치를 할 때 사용하는 명령임


configuration file은 /etc/proftpd/proftpd.conf이며 실행 file은 /etc/init.d/proftpd임


3. 환경설정

 

Fedora에서의 설정

# vi /usr/local/proftpd/etc/proftpd.conf 

웹서비스와 같이 실행 되도록 설정, FTP 서버의 성능과 안정성이 필요하다면 standalone으로 그냥 둠


ServerType inetd

MaxInstances 5

# 최대 연결 수 설정

Group nobody

# FTP 그룹이 없기 때문에 그룹 설정을 변경 (nogroup -> nobody)

DefaultRoot ~ !jhlee

# jhlee 그룹 사용자 이외의 사용자에 대한 home 디렉토리 이동 제한 설정

# ~ -> ~ !jhlee

#UseIPv6 off

# Fatal: UseIPv6: Use of the UseIPv6 directive requires IPv6 support (--enable-ipv6) on line 14 of '/usr/local/proftpd/etc/proftpd.conf' 오류 발생 시 IPV6 관련 옵션제거

# Anonymous 관련 설정 제거


Ubuntu에서의 설정

 

# sudo vim /etc/proftpd/proftpd.conf


[참고]

vim은 UNIX 계열에서 사용하는 editor vi의 improved program이며 vim 대신에 vi 또는 gedit 등을 사용하여도 무방함


##############

# Global 섹션   

##############

 

ServerName                  "ProFTPD Default Installation-WOW"

# 서버의 이름을 정해서 적어준다.

ServerType                   inetd

# inetd와 standalone 모드 중에서 선택

DefaultServer                 on

# 주 IP address 또는 <VirtualHost> 설정 블록에서 지정되어진 address 중의 하나가 아

# 닌 IP address로 들어오는 connection이 있을 때 기본으로 사용되어질 서버 설정 조절

Port                         21

# Proftpd가 사용할 기본 포트를 지정

# ADSL이나 케이블 같은 유동 IP 환경에서는 ISP 업체에서 21번 23번 25번 80번 포트 등

# 을 필터링 하기 때문에 ftp 기본 포트를 변경해야 외부에서 접속 가능

Umask                       022

# umask를 설정해주는 지시자

# 새로 생성되는 파일이나 디렉토리의 기본 permission을 결정

# umask 022는 644의 permission을 가진 파일과 755의 permission 가진 디렉토리 생성

MaxInstances                 30

# proftpd가 standalone 모드로 작동할 때 최대로 생성할 수 있는 자식 프로세스 정의

# DoS 공격에 대한 보호 목적이므로 적당한 값을 설정해서 사용

User                         nobody

# proftpd가 실행 될 때 User 지시자로 정의된 사용자명으로 실행

# 보안상 절대 root로 실행되게 해서는 안 됨

Group                       nobody

# User 지시자와 마찬가지이고 proftpd가 실행 될 때 Group 지시자로 정의된 Group 명

# 으로 실행

UseReverseDNS              off

# 접속자의 IP 주소를 Reverse Mapping을 하지 않겠다는 설정

# Reserver Mapping이란 IP 주소를 도메인으로 변경하는 것

IdentLookups                off

# 일반적으로, 클라이언트가 proftpd로 연결했을 때, ident protocol(RFC1413)은 remote

# username의 확인을 시도되기 위해 사용

# IdentLookups 지시자를 통해 조절

AuthPAMAuthoritative        on

# PAM이 인증에 있어서 최종 단계의 권한을 가지게 함

# 즉 PAM 인증이 실패할 경우 클라이언트와의 연결을 거부함

RootLogin                   off

# ftp로의 root 로그인을 허락 또는 거부하기 위한 지시자

<Directory /*>

          AllowOverwrite                on

# 모든 디렉토리 내의 파일에 대해 같은 이름의 파일을 전송할 때 overwrite를 허락 또는

# 거부하기 위한 지시자

</Directory>

 

#  아래부터는 anonymous접속에 대한 설정

##################

anonymous섹션

##################

<Anonymous ~ftp>

# anonymous 설정을 시작

# anonymous 설정은 </Anonymous>까지 임

          User                  ftp

          Group                 ftp

# anonymous접속의 경우 proftpd가 실행 할 때 사용자명 "ftp" 그룹명 "ftp"로 실행

          UserAlias              anonymous      ftp

# anonymous로 ftp에 접속한 사용자들에 대해 접속자명을 ftp로 alias해 줌

# 즉 anonymous로 접속한 사용자들은 사용자명 "ftp"의 권한을 가지게 됨

          MaxClients            10   "Sorry, maxium users %m -- try again later"

# 동시 접속자수를 정의하는 지시자

# 정의한 수를 초과할 때 " " 안의 문자열을 사용자에게 출력

          MaxClientsPerHost      2   "Sorry, Allow only one client for host"

# 하나의 호스트 당 최대 접속수를 정의하는 지시자

# 정의한 수를 초과 했을 때 " " 안의  문자열을 사용자에게 출력

          DisplayLogin           welcome.msg

# ftp로그인 때 보여 지는 메시지 파일 이름을 정의

          DisplayFirstChdir        .message

# 각 서브 디렉토리로 이동할 경우 보여줄 메시지 파일을 정의

          RequireValidShell       off

# /etc/shells에 없는 shell binary로그인 여부를 결정

# 특별한 이유가 없다면 off로 설정

          HideUser              root

# HideUser로 설정된 유저 소유의 파일은 보이지 않음

 

# Anonymous's Uploads Directory

# 업로드 디렉토리 이름을 변경하고 싶으면 아래의 uploads를 적당한 이름으로 변경

<Directory uploads/*>

        AllowOverwrite            on

# overwrite를 허용

        AllowRetrieveRestart        on

        AllowStoreRestart           on

       <Limit DELE RMD>

               DenyAll

# 디렉토리 삭제(RMD) 권한을 주지 않음

       </Limit>

       <Limit READ STOR MKD>

# 파일 읽기(READ), 업로드(STOR), 디렉토리 생성(MKD)에 대한 제어

# 읽기(READ)권한은 다운로드를 의미

# 와우 리눅스 7.0에는 MKD가 MDK로 잘못 설정되어 있음

       AllowAll

# 읽기(READ), 업로드(STOR), 디렉토리 생성(MKD)에 대해 모두 허락

# 하지만 특정 권한에 DENY 설정을 하지 않는 이상 AllowAll 설정을 하지 않아도 Dney # 설정된 권한을 제외한 나머지 권한을 가짐

       </Limit>

</Directory>

# Anonymous's Public Directory

<Directory pub/*>

      <Limit READ>

      AllowAll

# 읽기(READ)권한을 허락

      </Limit>

 

      <Limit  STOR  DELE  RMD   MKD>

      DenyAll

# 업로드(STOR), 파일 삭제(DELE), 디렉토리 삭제(RMD), 디렉토리 생성(MKD)을 허락

     </Limit>

</Directory>

</Anonymous>

 Order를 이용한 권한 제어

 

위에서 다루었던 proftpd.conf는 단순히 AllowAll 과 DenyAll만을 사용해 권한 제어를 했는데 Order 명령을 이용해서 접근제어와 권한 제어를 할 수 있음

 

특정 호스트만 로그인을 허용할 때

<Limit LOGIN>

Order       allow,deny

Allow       from 203.241.205.,.rootman.co.kr

Deny        from all

</Limit>

 

Order 명령에서 Allow 와 Deny는 공백 문자가 아닌 쉼표(,)로 구분함

Allow 와 Deny의 대상을 입력할 때도 대상들의 구분은 공백이 아닌 쉼표(,)로 구분함

위의 설정은 203.241.205의 네트워크 주소를 가지거나 rootman.co.kr을 포함해 하위 호스트들만 접근이 가능하고 그 이외의 호스트에 대해서는 Login을 받아들이지 않음

 

예)

203.241.205.97          ---> 로그인 가능(203.241.205의 네트워크 주소를 가진다)

203.241.202.16          ---> 로그인 불가(203.241.205의 네트워크 주소를 가지지 않는다)

linux.rootman.co.kr       ---> 접속 가능(rootman.co.kr의 하위 호스트이다)

microsoft.com          ---> 접속 불가(rootman.co.kr의 하위 호스트가 아니다)

order명령은 LOGIN외에 READ, MKD, DELE, RMD, STOR등에도 적용할 수 있습니다.

 

 ftp 루트( / ) 디렉토리 지정


DefaultRoot                  ~

사용자가 fpt로 접속해서 자신의 홈 디렉토리 외에 다른 곳에는 접근하지 못하게 함

~(물결표시)는 사용자의 홈 디렉토리를 가리킵니다. 즉 자신의 홈 디렉토리가 루트(/) 디렉토리가 됨

이 지시자를 설정 하지 않으면 기본적으로 DefaultRoot는 /로 설정되어 있기 때문에 사용자는 최상위 경로(/) 까지 접근 할 수 있음

 

예)

DefaultRoot           ~aaa,bbb,ccc

--> aaa, bbb, ccc 그룹에 속하는 ftp 접속 시 자신의 홈 디렉토리가 루트(/) 디렉토리가 됨

 

DefaultRoot           ~ !aaa

--> aaa 그룹에 속하는 사용자들을 제외한 나머지 접속자들은 자신의 홈 디렉토리가 루트 (/) 디렉토리가 됨

 

 심볼릭 링크 파일 보여주기

 

ShowSymlinks            On  또는 Off

디렉토리에서 심볼릭 링크가 된 파일을 보여 주느냐, 보여 주지 않느냐에 대한 설정임

이 설정이 안 되어 있을 때에는 기본적으로 계정 사용자 접속의 경우에는 심볼릭 링크파일이 보이고 anonymous사용자 접속의 경우는 심볼릭 링크 파일을 보여주지 않음

전체 사용자에게 On 또는 Off를 설정하고 싶다면 Global 섹션에 포함 시키면 됨

 

 숨김 파일 보여주기

 

LsDefaultOption   "-a"

이 설정을 함으로써 점( . ) 으로 시작하는 파일 또는 디렉토리명을 보여 줌. 즉 숨김 파일에 대한 설정임. 하지만 요즘 사용하는 ftp클라이언트에서도 이 기능을 제공함

 

● welcome.msg 파일에 사용할 수 있는 유용한 것들

 

호스트명 : %L

남은 용량 : %f

현재 접속자 수 : %N

최대 접속자 수 : %M

리모트 호스트 : %R

사용자명 : %U

관리자 메일 : %E

 

# vi /etc/xinetd.d/proftpd

### pro-ftpd ###


service ftp

{

disable = no

flags        = REUSE

protocol     = tcp

socket_type    = stream

instances     = 50

wait        = no

user        = root

server       = /usr/local/sbin/in.proftpd

log_on_success = HOST PID

log_on_failure  = HOST RECORD

}

(참고 : http://www.webtoedu.com/gachon_proftp2.php)

 

 

4. 실행

 

Ubuntu에서의 실행

 

# sudo /etc/init.d/xinetd restart (Ubuntu)

# service xinetd restart 또는 /etc/rc.d/init.d/xinetd restart (Rad Hat)


Fedora에서의 실행

 

# /etc/init.d/proftpd start

# /usr/local/proftpd/sbin/proftpd (compile을 통해 설치한 경우)

 

# ps -ef | grep proftpd (process 동작 확인)

nobody 23152 1 0 16:59 ? 00:00:00 [proftpd]

 

# netstat -an | grep LISTEN | grep 21 (21번 포트 확인)

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

'IT > CISCO' 카테고리의 다른 글

Lock and Key ACL(Dynamic ACL)  (0) 2017.02.18
CBAC(Context-based Access Control)  (0) 2017.02.18
Linux에서 Telnet server 설치 및 운영 방법  (0) 2017.02.16
Linux에서 router 설치 및 운영 방법  (0) 2017.02.15
리눅스  (0) 2017.02.14

+ Recent posts