내부 네트워크 VSFTP 서버 구축

12219 단어 vsftp
배경
회사 의 한 제품 은 업로드 기능 을 제공 해 야 합 니 다. http 는 업로드 속도 수 요 를 만족 시 키 지 못 해서 FTP 로 업로드 합 니 다.
2. 설치 와 설정
1. 설치 명령:
yum install vsftpd, 설치 완료 후 service vsftpd restart 가 vsftp 를 시작 합 니 다.
2. 설정:
1). vsftp 설정
/ etc / vsftpd / vsftpd. conf, vsftp 의 주요 프로필, 프로필 의 전 부 를 붙 이지 않 겠 습 니 다.
        
        anonymous_enable=NO,        ,           ,          



        chroot_local_user=YES  



              chroot_list_enable=YES  



         chroot_list_file=/etc/vsftpd/chroot_list          chroot_list              。



         userlist_deny=NO



             userlist_file=/etc/vsftpd/user_list           ,      user_list      

  
우 리 는 FTP 의 기본 감청 통신 포트 가 21 이 고 데이터 포트 가 20 이라는 것 을 알 고 있 습 니 다. 그러나 인터넷 에서 항상 사용 하 는 포트 를 청소 하 는 사람 이 있 습 니 다. 저 는 Window 에 FTP 를 구축 한 적 이 있 습 니 다. 그 당시 에는 하나의 기능 을 테스트 하 는 것 이 었 습 니 다. 설정 파일 에 대해 너무 많은 변경 을 하지 않 았 고 한 시간 만 에 소프트웨어 에 의 해 쓸 렸 습 니 다.제 사이트 루트 디 렉 터 리 에 jsp 파일 을 놓 았 습 니 다. 제 가 호출 을 해서 식은땀 이 났 습 니 다. 서버 디 렉 터 리 정 보 는 기본적으로 모두 나 타 났 습 니 다. 이런 '해커' 의 소프트웨어 에 쓸 리 지 않도록 스스로 포트 를 설치 하 는 것 이 좋 겠 습 니 다.
        listen_port=8021       

        ftp_data_port=8020     

        pasv_enable=YES        

        pasv_addr_resolve=YES                      ,   NO,               ,   YES,          

        pasv_address=222.185.xxx.xxx            ,    ,         

        pasv_min_port=10001   pasv          

        pasv_max_port=10010  pasv          

        local_max_rate=200000         ,   bytes/second,0     

 
service vsftpd 재 시작, 재 부팅 유효
2). 방화벽 설정
/ etc / sysconfig / iptables 에 vsftp 에 사용 할 포트 추가
       
        -A INPUT -m state --state NEW -m tcp -p tcp --dport 8021 -j ACCEPT

        -A INPUT -m state --state NEW -m tcp -p tcp --dport 8020 -j ACCEPT

        -A INPUT -m state --state NEW -m tcp -p tcp --dport 10000:10010 -j ACCEPT

 
service iptables 재 시작, 재 부팅 이 적 용 됩 니 다.
3). VSFTP 사용자 추가 및 SSH 로그 인 금지
      
      #adduser -d /home/ftp/bruce -g ftp -s /sbin/nologin bruce    vsftp  ,/home/ftp/bruce       (       ),-g ftp    ftp  ,/sbin/nologin        ,bruce->   (       )



       #passwd bruce   bruce    



         chmod            
          chmod 755 /home/ftp/bruce

 
 
지금까지 우리 의 vsftp 서버 구축 은 절반 을 완 성 했 습 니 다. 다음은 하드웨어 설정 과 클 라 이언 트 의 작성 입 니 다.
3. 포트 맵 과 클 라 이언 트 작성
1. 포트 맵
이 문 제 는 매우 중요 하고 전체 서버 구축 과정 에서 나 를 가장 괴 롭 히 는 부분 이다.두 번 째 설정 이 완료 되 고 클 라 이언 트 가 작 성 된 후에 저 는 디 렉 터 리 에 있 는 파일 목록 을 연결 하고 조회 하려 고 했 습 니 다. 클 라 이언 트 는 항상 Connectiontimeout 으로 돌아 갑 니 다. vsftp 설정 부터 프로그램 검사 까지 여러 번 검 사 했 습 니 다. 연결 만 할 수 있 고 데 이 터 를 가 져 올 수 없 었 습 니 다. 나중에 저 는 스냅 백 도구 로 가방 을 잡 았 습 니 다. 문제 가 있 는 것 을 발 견 했 습 니 다. 다음은 프로그램 이 잘못 되 었
        
 
1.[2013/4/27     16:04:13:129]

   220 (vsFTPd 2.2.2)





2.[2013/4/27     16:04:13:130]

   USER bruce





3.[2013/4/27     16:04:13:133]

   331 Please specify the password.





4.[2013/4/27     16:04:13:133]

   PASS bruce,2013





5.[2013/4/27     16:04:28:208]

   230 Login successful.





6.[2013/4/27     16:04:28:209]

   TYPE I





7.[2013/4/27     16:04:28:211]

   200 Switching to Binary mode.





8.[2013/4/27     16:04:28:247]

   PASV





9.[2013/4/27     16:04:28:249]

  227 Entering Passive Mode (192.168.1.122,39,16).



500 OOPS: vsf_sysutil_recv_peek: no data

500 OOPS: child died

9 단계 까지 달 렸 을 때 잠시 멈 추 었 다가 자바. net. connect Exception: Connection timed out: connect, 위의 마지막 두 줄 500 오류 가 발생 했 습 니 다.첫 번 째 반응 은 바로 돌아 오 는 IP 가 틀 렸 다 는 것 이다. 왜냐하면 내 가 외부 네트워크 포트 를 비 추 었 기 때문에 여기 서 클 라 이언 트 에 게 돌아 오 는 것 은 내부 네트워크 주소 이기 때문에 위 에서 언급 한 매개 변 수 를 더 한 것 이다.
        
        pasv_addr_resolve=YES                      ,   NO,               ,   YES,          

        pasv_address=222.185.xxx.xxx            ,    ,         

다시 뛸 때 돌아 오 는 게 맞 는데,
      
227 Entering Passive Mode (222,185,xxx,xxx,39,24).

주해: 괄호 안에 39, 24 는 연 결 된 포트 번 호 를 표시 합 니 다. 알고리즘 은 39 * 256 + 24 = 10008 이 고 포트 는 vsftp. conf 설정 파일 의 상계 와 하계 사이 에 떨 어 졌 습 니 다. 포트 설정 이 유효 하 다 는 것 을 설명 합 니 다.그러나 문 제 는 여전히 존재 한다. IP 주소 처럼 간단 한 일이 아 닌 것 같다.그러면 포트 번호 만 남 았 습 니 다. 돌아 가서 FTP 의 두 가지 작업 방식 을 다시 배 웠 습 니 다.
    
  FTP:



    :    >1024   ->     21  (     8081,     15321)



    :    >1024   <-     20  (     8020,     15320)



  FTP(                  ,    ):     :     1024    ->     21   (     8081,     15321)
    :     1024    ->       1024   (     10001-10010)

실제 상황 은 그 당시 에 공공 네트워크 가 내부 네트워크 포트 에 매 핑 했 을 때 8021 과 8020 두 개의 포트 만 매 핑 했 을 뿐 vsftp. conf 설정 파일 중의 10001 - 10010 을 매 핑 하지 않 았 기 때문에 IT 관리 부서 에 신청 하여 이 10 개의 포트 를 매 핑 했 습 니 다. 10001 - > 10010 처럼 엄격하게 매 핑 하고 클 라 이언 트 프로그램 을 실 행 했 습 니 다.
[2013/4/27     16:04:17:114]

220 (vsFTPd 2.2.2)



[2013/4/27     16:04:17:116]

USER bruce



[2013/4/27     16:04:17:118]

331 Please specify the password.



[2013/4/27     16:04:17:119]

PASS bruce,2013



[2013/4/27     16:04:32:203]

230 Login successful.



[2013/4/27     16:04:32:203]

TYPE I



[2013/4/27     16:04:32:206]

200 Switching to Binary mode.



[2013/4/27     16:04:32:236]

PASV



[2013/4/27     16:04:32:238]

227 Entering Passive Mode (222,185,xxx,xxx,39,24).



[2013/4/27     16:04:32:241]

LIST /



[2013/4/27     16:04:32:243]

150 Here comes the directory listing.

226 Directory send OK.

해결!!
2. 클 라 이언 트 프로그램
      
import java.io.IOException;

import java.net.SocketException;



import org.apache.commons.net.ftp.FTP;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPClientConfig;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;





public class FTPTools {

    private FTPClient ftp=new FTPClient();

    /**

     *   ftp   

     * @param hostname   IP

     * @param port      

     * @param username  ftp   

     * @param password  ftp  

     * @return

     */

    public boolean  connect(String hostname,int port,String username,String password){

        try {

            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);

            conf.setServerLanguageCode("zh");

            ftp.configure(conf);

            ftp.setControlEncoding("GBK");//         

            ftp.setConnectTimeout(150000);

            ftp.enterLocalPassiveMode();

            ftp.connect(hostname, port);

            int code=ftp.getReplyCode();

            if(FTPReply.isPositiveCompletion(code)){

                if(ftp.login(username, password)){

                    ftp.enterLocalPassiveMode();//   pasv    

                    ftp.setFileType(FTP.BINARY_FILE_TYPE);//   ,   2    

                    ftp.setDataTimeout(60000);

                    ftp.setSoTimeout(120000);

                    FTPFile[] files = ftp.listFiles("/");

                    System.out.println(files.length);

                    for(FTPFile file:files){

                        System.out.println(file.getName());

                    }

                    return true;

                }

            }

            

        } catch (SocketException e) {

            e.printStackTrace();

            try {

                ftp.disconnect();

            } catch (IOException e1) {

                e1.printStackTrace();

            }

        } catch (IOException e) {

            e.printStackTrace();

            try {

                ftp.disconnect();

            } catch (IOException e1) {

                e1.printStackTrace();

            }

        }

        try {

            ftp.disconnect();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return false;

        

    }

    public static void main(String[] args) {

        new FTPTools().connect("222.185.xxx.xxx", 15321, "bruce", "bruce,2013");

        

    }

    

}

 
자, vsftp 서버 구축 은 여기까지 입 니 다. 클 라 이언 트 코드 는 간단 한 연결 테스트 코드 만 보 여 주 었 습 니 다. 그 다음 에 프로젝트 가 추진 되면 서 업로드, 다운로드, 정지점 전송 과 발생 하 는 다른 문제 해결 방법 을 공유 할 것 입 니 다. vsftp 를 처음 접 하거나 이 위 에서 문제 가 발생 한 학생 들 에 게 도움 이 되 기 를 바 랍 니 다.
 PS: 나중에 에피소드 가 발생 했 습 니 다. 서버 에 마 운 트 된 디스크 배열 에 디 렉 터 리 를 가리 키 고 다운로드 할 수 있 지만 죽 어 라 전송 할 수 없고 권한 도 부여 되 었 습 니 다.나중에 알 게 되 었 습 니 다. 마 운 트 기기 에서 ftp 사용자 chmod 777 에 게 는 소 용이 없습니다. 디스크 를 마 운 트 하 는 슈퍼 관리자 에 게 만 권한 을 부여 할 수 있 습 니 다.
 

좋은 웹페이지 즐겨찾기