[완료] iptables 기본 정책이 DROP 일때 ftp passive 문제
OS 는 CentOS 5.2 입니다.
iptables 기본 정책이 DROP 일대
내부적으로 랜덤포트를 open 하려 할때 생기는 문제 인듯 합니다.
/etc/sysconfig/iptables
파일의 내용은 아래와 같습니다.
*filter
:INPUT DROP [130:9717]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [105:11921]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.1 -p icmp -j ACCEPT
-A INPUT -s 111.222.333.0/24 -p icmp -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT
-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
-A INPUT -s localhost -p tcp --dport 3306 -j ACCEPT
-A INPUT -s 111.222.555.222 -p tcp --dport 3306 -j ACCEPT
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p tcp --sport 53 -j ACCEPT
-A INPUT -p tcp --sport 25 -j ACCEPT
-A INPUT -p tcp --dport 25 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp --sport 20 -j ACCEPT
-A OUTPUT -p tcp --sport 21 -j ACCEPT
-A OUTPUT -p tcp --sport 80 -j ACCEPT
-A OUTPUT -p udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp --sport 25 -j ACCEPT
-A OUTPUT -p tcp --dport 25 -j ACCEPT
COMMIT
보시는 바와 같이 기본정책이 일단 무조건 전부 DROP 인 상태에서
오픈을 해주는 것입니다.
위와같이 했을때 ftp 같은 경우
위와 같이 input,ouput 에 대하여 20,21 포트를 open 해주면 되는데
이건 접속할 수 있기만 할뿐(로그인 가능) 접속하고 나서
list 같은것을 받아 올수가 없죠.
뭐 그냥 접속이 안된다고 단순히 표현해도 되겠죠..
외냐하면 ftp 서버가 예를 들어 60013 같은 포트를 다시 오픈해야
되는데 그렇지 못하기 때문에 그렇겠죠.
(Passive 모드 접속을 하지 않으면 당연히 문제 없이 잘 되겠죠.)
이거 어떻게 해결할 방법이 없을까요?
그렇다고 막연히 60000~60050 정도 열어서 해결하긴 좀 그런것 같고 분명히 다른
방법이 있을것 같습니다. 상태추적테이블을 참고한다던지...
iptables 정책 설정만으로 어떻게 해결 할 방법이 없을까요?
조언 부탁드립니다.
일단 귄찮아서... ftp
일단 귄찮아서...
ftp 서버 프로그램에 5000 에서 5500 까지 사용한다고 ftp 서버 프로그램의
conf 파일에 그렇게 설정하고
-A INPUT -p tcp --dport 5000:5500 -j ACCEPT
이렇게 넣어서 하고 있습니다.
어떻게 다른 방법이 없을까요?
특정포트단위..
특정포트를 정해서 지정해주면 상관없지않을까요?
가령 10000:20000까지 쓴다는 가정하에서
10000~10030 까지는 패시모드를 위해서 열어주고 나머지는 일부로 지정해서 사용하면 되실듯합니다..
예전에 테스트해본결과 비슷한상황에서 그렇게 서비스한적이 있습니다..
가령 vsftp 같은경우 저는 이렇게 씁니다
일단 input,output 설정해두고.... 패시모드는 5000:50050포트까지 할당해주고 나머지는 꽁꽁 틀어막습니다....
필요에의한 포트만..열어주고..에러나는부분들은 포팅하여 처리합니다..
말씀하신 예로 고생한바 있기에..
컥..
위에 언급하신대로 현재 서비스를 그렇게 하고있습니다..
패시모드는 50000:55000 포트까지 열어주고 vsftp conf 파일에 패시모드 이용포트를 저렇게 설정하여 서비스하고있습니다.^^:
ftp 는 정상로그인 되도 !### LIST가 안보이는경우가 있어서 ^^;해맨적이잇더라는..
vsftp..
vsftp 예제입니다 conf파일..
# PASSIVE 모드 사용시 사용하는 포트 범위지정
pasv_min_port=50000
pasv_max_port=50100
그리고 iptables에서 50000:50100 포트까지만 허용해줬습니다 범위를..
iptables 설정은 크게
iptables 설정은 크게 문제가 없습니다.
xx_conntrack_ftp 모듈을 올려주시면 됩니다.
Cent OS 5.2 이시라면면 아마... nf_conntrack_ftp.ko 일겁니다.
해당 모듈을 올리시면 위의 설정으로도 무리 없이 사용이 가능합니다.
아 참고로 패킷은 state 의 RELATED 에 걸리게 됩니다.
man iptables
CentOS
CentOS 5.2에서는
/etc/sysconfig/iptables-config 파일의 IPTABLES_MODULES 항목에 ip_conntract_ftp 가 없다면 추가해주시면 됩니다.
위의 설정에선 20번 포트를 열어주는 부분은 빼도 되겠네요.
--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
감사합니다 :)
감사합니다 :)
iptables 괜찮은 문서가 있네요.
http://community.365managed.com/pdf_magazine/3818
액티브에서는
액티브에서는 20번포트를 데이터포트로 패시브에서는 특정포트를 범위 지정해서 쓰는 것으로 알고 있는데
위 같은 경우 패시브로 구성을 했으니 20번포트 오픈 설정이 필요없단 말씀이시군요.
조금 벗어날 수 있는 질문인지는 모르겠으나 궁금한게 있습니다.
공유기 물리면서 proftpd쓸 때 액티브로는 접속이 되긴 하더라도 리스트가 안됬던 적이 있던것 같습니다.
그래서 패시브로 썼던 것 같은데...
리스트가 출력이 안되는 것은 네트워크 단과 넷필터 포트설정만 완벽하다면 해결이 가능한 것인가요?
file zilla같은 프로그램은 리스트 보이고 다운로드 가능해도
터미널에서는 ftp 로 접속시 응답 대기중이라는 메시지와 함께 접속이 안되던 걸로 기억합니다.
패시브 모드의
패시브 모드의 원리에 대해서 다시 한 번 살펴보시기 바랍니다.
패시브 모드에서 가정하고 있는 기본적인 전제 중 하나는....
" 대부분의 방화벽은 서버에서 외부로 나가는 패킷에 대해서는 정책이 없다 " 입니다.
만약 outbound 정책이 기본적으로 DROP 이라면 패시브 모드를 사용해도 리스팅 및 파일 전송이 안될 수가 있습니다.
네 맞습니다. 그렇게만 하면 완벽한데 이를 정하는게 쉽지 않습니다.
그래서... conntrack_xxx 계열의 모듈이 있으며, ftp 에서는 conntrack_ftp 모듈이 있습니다.
여기서 말씀하시는 터미널이라는게 정확하게 어떤것을 말씀하시는지는 모르겠지만.... 해당 터미널이 액티브 모드로 사용되었기 때문에 접속이 안되었다고 추측이 됩니다.
iptables -A INPUT -p tcp
요런식으로 하는 방법도 있습니다. RELATED 요게 중요한 거죠 :-) 매뉴얼 찾아 보시기를.. 저도 정확히는 모르겠지만 contract_ftp module 에서 지원하는 것이 아닐까 살짝 생각해 보았습니다. 이 룰을 넣으면 자동으로 contract_ftp module 이 올라오거든요. 코드를 까보지는 않아서.. 확실하지는 않습니다.
conntrack_tftp
conntrack_tftp 모듈에서도 RELATED 를 사용하면 공인 + 사설 망에서 tftp 사용이 가능해집니다. ^^
처음엔 tftp 가 왜 안되나 했었는데 이넘은 udp 를 사용하면서도 ftp 처럼 임의의 포트로 연결이 다시 하면서 사용을 하더군요 ㄷㄷ;;;;
댓글 달기