내부 네트워크 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 에 게 는 소 용이 없습니다. 디스크 를 마 운 트 하 는 슈퍼 관리자 에 게 만 권한 을 부여 할 수 있 습 니 다.