본문 바로가기

Programming &/Server & OS

pure-ftp 계정마다 ip 접속 제어를 해보자

요즘 iframe 삽입공격이 날로 심각해지고 있다.
ftp 계정을 열어주게 되면 따로 고정아이피가 아닌이상 제어하기도 힘들고
유동아이피라도 지정해서 접속을 제어해주는게 어떨까

주로 ftp 계정정보가 털려서 접속이 되는경우가 많은거 같은데
이건 뭐...대책도 방법도 없다 ㅡ.ㅡ
맨날 패스워드를 바꾸는 수밖에 ... 참 귀찮다.

나는 pure-ftp 를 사용한다.
사용상 편하기도 하고 특히 호스팅할때 참 편한점이 있다. 계정관리면에서... 가상계정셋팅이 참 편하다.
그래서 pure-ftp 설정을 조금 바꿔봤다.
어디서 봤는지 누가 수정햇는지는 모르겠지만
내가 아는 서버에 누군가 ip 제어하는 기능을 추가해놨던데
번거롭기도 하고 쿼리 설정도 잘못해놔서 ㅋ

1. pure-ftp 를 mysql 과 연동해서 설치한다. (이건 알아서 설치잘 할거라 생각하고 생략)

2. users 테이블의 컬럼 수정
   pure-ftp DB 에 보면 users 라는 테이블이 있다.

   alter table users change column Uid Uid varchar(16) not null default '';
   alter table users change column Gid Gid varchar(16) not null default '';
   alter table users add column ipaccess enum(0, 1) not null default '0';

   요부분들은 users 테이블 만들때 추가해도 무방하다.

   Uid랑 Gid 는 수정하지 않아도 된다.
   관리상 문자가 편해서 수정한거다.

   이미 users 테이블이 있다는 전제로 alter 했다.

3. access 테이블 추가
   CREATE TABLE access (
      User varchar(16) not null,
      ip varchar(15) not null,
      memo varchar(255),
      primary key (User, ip)
   )
   
   access 테이블에는 User 에는 계정명, ip 에는 접속허용할 아이피, memo 에는 설명문구를 입력하면 된다.

4. pureftpd-mysql.conf 에서 MYSQLGetPW 와 MYSQLGetUID 를 찾아서 아래로 바꾼다.
   MYSQLGetPW      SELECT IF(a.ipaccess = '0', a.Password, IF (ISNULL(b.User), '', a.Password)) as Password FROM users a LEFT JOIN (SELECT User FROM access WHERE User = '\L' AND ip = '\R') b ON b.User = a.User WHERE a.User = '\L';
   MYSQLGetUID     SELECT IF(a.ipaccess = '0', a.Uid, IF (ISNULL(b.User), '', a.Uid)) as Uid FROM users a LEFT JOIN (SELECT User FROM access WHERE User = '\L' AND ip = '\R') b ON b.User = a.User WHERE a.User = '\L';

셋팅은 요기까지다.

대략 요약하자면 pure-ftp 기본은 users 에 계정정보등을 추가하면서 접속이 가능하게 되는건데
ipaccess 라는 컬럼을 뒀다.
ipaccess 컬럼에 '0' 을 입력하면 ip제어를 하지 않겠다는 뜻이고 '1' 을 입력하면 ip제어를 하겠다는 뜻이다.
ipaccess 컬럼에 '1' 을 입력한경우
access 테이블에 해당 유저, 아이피 그리고 설명을 추가해둔다.
설명은 추가해도 되고 안하지만 관리상 적어놓으면 도움이 될거 같다.

혹시라도 pure-ftp 사용하시는 분들이 도움이 됐으면 하는 마음에...^^