질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

CentOS 5.3 에서 iptables 설정에서 막혀 버립니다.

작성자 정보

  • 문성민 작성
  • 작성일

컨텐츠 정보

본문

현재 게시판을 참고하여 아래와 같은 룰을 만들었습니다.
아래 22번 포트 ssh접속에 대한 10초 접근차단룰이 적용이 안되는것 같아
콘솔에서
 
/sbin/iptables -P OUTPUT DROP

명령으로 기본정책을 Drop으로 설정하려고 실행했다가 웹에서 기존 접속해 있던
ssh 접속까지 다 끊어져 버렸습니다....
저는 룰은 항상 상위에 있는것이 우선 적용된다고 알고 있어서...

/sbin/iptables -P OUTPUT DROP

룰을 마지막에 추가하여도 괜찮다고 생각했는데 서버의 모든 접근이 막혀 버렸습니다.
서버에 다른지역에 위치해서 상당히 조심스럽구요...
서버를 강제로 리붓해서 iptable 데몬이 자동실행 되지 않게 되어 있어서 다행이
다시 접속해서 룰을 수정할수 있었지만 큰일날뻔 했습니다.^^

어디에서 실수를 한것일까요?


===================설정화일===============================

[root@www sysconfig]# cat iptables

# Generated by iptables-save v1.3.5 on Mon Nov 23 12:41:36 2009
*filter
:INPUT ACCEPT [432161:43647462]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [390191:590331115]
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 109 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 10/sec --limit-burst 1 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 ! --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j LOG --log-prefix "[OverSSH]" --log-level 5
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -p tcp -m tcp --dport 1:65535 -j DROP
COMMIT
# Completed on Mon Nov 23 12:41:36 2009
[root@www sysconfig]#

관련자료

댓글 7

탱이님의 댓글

  • 탱이
  • 작성일
위에 나열되어있는 모든 iptables 정책은 INPUT에 적용되는 것들인데..

/sbin/iptables -P OUTPUT DROP

 명령은 OUTPUT 으로 나가는 모든 패킷들에 대해 DROP 정책을 적용하겠다는 것입니다.

 OUTPUT 의 기본정책이 DROP 인데 반해, OUTPUT 에서의 ACCEPT 정책이 없으니 모든 패킷들이 DROP 되어 연결이 종료된것으로 보입니다.

 문제를 해결하기 위해서는

 /sbin/iptables -P INPUT DROP

 으로 바꿔주시면 될듯 싶습니다.

 덧붙이자면, 위의 명령어를 실행 하셨다면 INPUT 정책에서 제일 아래쪽

-A INPUT -p tcp -m tcp --dport 1:65535 -j DROP

 은 중복되는 규칙이므로 삭제를 하셔도 무방할 듯 싶습니다.

문성민님의 댓글의 댓글

  • 문성민
  • 작성일
탱이님....감사합니다.

Input 으로 변경해서 정상적으로 처리했습니다...

gurum님의 댓글

  • gurum
  • 작성일
다음은 홍석범님의 보안실무를 참고하여 저희 회사 형상관리 시스템에 도입한 부분입니다. 참고 하세요

############################################################
# Infrware.net TMS_Project iptables
# 작성자 : 이승환
# 작성일 : 2009년 09월 10일 목요일
# 최종 수정일 : 2009년 11월 24일 화요일
# 이메일 : lucifertear@gmail.com
############################################################

#!/bin/sh

# iptables 실행 파일의 경로를 정의 한다
IPTABLES="/sbin/iptables"

# 기존 설정되어 있는 룰을 모두 초기화 한다
$IPTABLES -F

# standalone 형태이므로 INPUT은 기본적으로 DROP한다
# FORWARD는 사용할 필요가 없으므로 역시 기본 정책으로 DROP한다
# 하지만 룰을 단순화 하기 위해 OUTPUT은 ACCEPT한다 어쨌든 INPUT에서는
# 기본적으로 DROP 하였으므로 OUTPUT에서 허용을 해도 관계없다

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

# 내부 트래픽인 루프백 트래픽은 허용한다

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# INPUT chain에서 필터링을 설정한다
# RFC 1918에 정의된 사설 IP 및 공인 네트워크에서 라우팅 될 수 없는 IP 대역을 소스로
# 한 패킷이 서버를 향하는 패킷을 차단한다 라우터가 있다면 라우터에서 차단하는 것도
# 좋은 방법이며 인터페이스로 eth0만 사용한다면 아래와 같이 인터페이스는 지정하지 않아도
# 된다

$IPTABLES -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i eth0 -s 255.255.255.255/32 -j DROP
$IPTABLES -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP
$IPTABLES -A INPUT -i eth0 -s 172.16.0.0/12 -j ACCEPT  -- infraware 무선IP 대역
$IPTABLES -A INPUT -i eth0 -s 192.168.0.0/16 -j ACCEPT  -- infraware 사설IP 대역
$IPTABLES -A INPUT -i eth0 -s 224.0.0.0/4 -j ACCEPT    -- mq 대역
$IPTABLES -A INPUT -i eth0 -s 240.0.0.0/5 -j ACCEPT    -- mq 대역
$IPTABLES -A INPUT -i eth0 -s 248.0.0.0/5 -j ACCEPT    -- mq 대역

# http://wirelessness.wordpress.com/2007/02/02/iptables-and-activemq/
$IPTABLES -A INPUT -i eth0 -s 239.255.2.3 -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -d 239.255.2.3 -j ACCEPT

# OUTPUT chain에서 필터링 설정한다
# RFC 1918에 정의된 사설IP 및 공인 네트워크에서 라우팅 될 수 없는 IP 대역을 목적지로 한
# 패킷이 서버에서 외부 네트워크로 나가는 것을 차단한다 FORWARD는 어떠한 트래픽도
# 허용하지 않았으므로 별도로 지정할 필요가 없다

#$IPTABLES -A OUTPUT -d 10.0.0.0/8 -j DROP
$IPTABLES -A OUTPUT -d 255.255.255.255/32 -j DROP
#$IPTABLES -A OUTPUT -d 0.0.0.0/8 -j DROP
#$IPTABLES -A OUTPUT -d 169.254.0.0/16 -j DROP
#$IPTABLES -A OUTPUT -d 172.16.0.0/12 -j DROP
#$IPTABLES -A OUTPUT -d 192.168.0.0/16 -j DROP
#$IPTABLES -A OUTPUT -d 224.0.0.0/4 -j DROP
#$IPTABLES -A OUTPUT -d 240.0.0.0/5 -j DROP
#$IPTABLES -A OUTPUT -d 248.0.0.0/5 -j DROP

# 이미 세션을 맺어 상태추적 테이블 목록에 있는 ESTABLISHED, RELATED 패킷은 허용한다
# 이 룰을 앞쪽에 설정하면 할수록 이미 허용된 트래픽에 대해 불필요하게 각 패킷마다 일일이
# 룰을 매칭하지 않으므로 방화벽의 성능을 높일 수 있다

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 서버를 향해 들어오는 패킷 중 포트 스캔이라 의심되는 패킷이 있을 경우 해당 정보를
# 1분에 1개꼴로 로그에 남기도록 한다 psd 사용 시 정상접속도 필터링 되어 느릴 수 있다

#$IPTABLES -A INPUT -m psd -m limit --limit 1/minute -j LOG

# 로그에 남긴 이후에는 포트 스캔 패킷을 차단한다

#$IPTABLES -A INPUT -m psd -j DROP

# 방화벽을 향해 들어오는 tcp 패킷 중 상태추적 테이블에는 NEW이면서 syn 비트를 달지
# 않고 들어오는 패킷은 차단한다 tcp 패킷 중 상태추적 테이블에 NEW라면 반드시 syn 비트가
# 설정된 패킷이어야 할것이며 이외의 패킷은 모두 위조된 패킷이므로 차단한다

$IPTABLES -A INPUT -i eth0 -p TCP ! --syn -m state --state NEW -j DROP

# 상태추적 테이블에서 INVALID인 패킷은 차단한다
# -p ALL로 설정하면 tcp, udp, icmp 등 모든 프로토콜에 해당한다

$IPTABLES -A INPUT -i eth0 -p ALL -m state --state INVALID -j DROP

# 이번에는 tcp-flag에 대한 설정으로 포트스캔 등에 민감하지 않다면 설정하지 않아도 된다
# NMAP등을 이용한 FIN/URG/PSH 스캔을 차단하기 위해 모든 비트를 살펴보아
# FIN,URG,PSH가 설정된 패킷은 1분에 5개 비율로 로그에 남긴 후 차단하도록 한다
# 로그를 남길 때는 로그 정보의 앞에 "NMAP-XMAS:"가 추가되도록 한다

$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-prefix "NMAP-XMAS:"
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

# tcp 패킷 중 SYN과 FIN 비트를 살펴보아 SYN과 FIN비트가 함께 설정된 패킷은
# 비정상이므로 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags SYN,FIN SYN,FIN -j DROP

# tcp 패킷 중 SYN과 RST 비트를 살펴보아 SYN과 RST비트가 함께 설정된 패킷은
# 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags SYN,RST SYN,RST -j DROP

# tcp 패킷 중 FIN과 RST 비트를 살펴보아 FIN과 RST비트가 함께 설정된 패킷은 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags FIN,RST FIN,RST -j DROP

# tcp 패킷 중 ACK와 FIN 비트를 살펴보아 ACK는 설정되지 않고 FIN 비트만 설정된
# 패킷은 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags ACK,FIN FIN -j DROP

# tcp 패킷 중 ACK와 PSH 비트를 살펴보아 ACK는 설정되지 않고 PSH 비트만 설정된
# 패킷은 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags ACK,PSH PSH -j DROP

# tcp 패킷 중 ACK와 URG 비트를 살펴보아 ACK는 설정되지 않고 URG 비트만 설정된
# 패킷은 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags ACK,URG URG -j DROP

# tcp 패킷 중 모든 비트를 살펴보아 다른 비트는 설정되지 않고 FIN 비트만 설정된
# 패킷은 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags ALL FIN -j DROP

# tcp 패킷 중 모든 비트를 살펴보아 아무런 비트도 설정되지 않은 패킷은 차단한다

#$IPTABLES -A INPUT -p TCP --tcp-flags ALL NONE -j DROP

# tcp 패킷 중 모든 비트를 살펴보아 다른 비트는 설정되지 않고 PSH와 FIN 비트만 설정
# 된 패킷은 차단한다

$IPTABLES -A INPUT -p TCP --tcp-flags ALL PSH,FIN -j DROP

# 웹 서비스를 제공하기 위해 80번으로 향하는 초기(NEW) 패킷은 허용한다
# 이후 OUTPUT은 모두 허용하였고 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로도 웹 서비스가 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP --sport 1024: --dport 80 -m state --state NEW -j ACCEPT

# 웹 서비스를 제공하기 위해 443번으로 향하는 초기(NEW) 패킷은 허용한다
# 이후 OUTPUT은 모두 허용하였고 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로도 웹 서비스가 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP --sport 1024: --dport 443 -m state --state NEW -j ACCEPT

# josso 웹 서비스를 제공하기 위해 8443번으로 향하는 초기(NEW) 패킷은 허용한다
# 이후 OUTPUT은 모두 허용하였고 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로도 웹 서비스가 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP --sport 1024: --dport 8443 -m state --state NEW -j ACCEPT

# josso 웹 서비스를 제공하기 위해 8080번으로 향하는 초기(NEW) 패킷은 허용한다
# 이후 OUTPUT은 모두 허용하였고 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로도 웹 서비스가 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP --sport 1024: --dport 8080 -m state --state NEW -j ACCEPT

# mq 웹 서비스를 제공하기 위해 61616번으로 향하는 초기(NEW) 패킷은 허용한다
# 이후 OUTPUT은 모두 허용하였고 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로도 웹 서비스가 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP --sport 1024: --dport 61616 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -i eth0 -p UDP --sport 1024: --dport 6155: -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -i eth0 -p UDP --sport 1024: --dport 6155: -j ACCEPT

# ntop을 제공하기 위해 3000번으로 향하는 초기(NEW) 패킷은 허용한다
# 이후 OUTPUT은 모두 허용하였고 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로도 ntop 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP --sport 1024: --dport 3000 -m state --state NEW -j ACCEPT

# 특정한 IP 대역에서만 SSH 서비스를 허용하기 위해 #.#.#.0/24 대역에서 22(#)으로
# 향하는 초기(NEW) 패킷은 허용한다 이후 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로 SSH 서비스가 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP -s #.#.#.0/24 --sport 1024: --dport # -m state --state NEW -j ACCEPT

# 특정한 IP 대역에서만 SSH 서비스를 허용하기 위해 #.#.#.0/24 대역에서 22(#)으로
# 향하는 초기(NEW) 패킷은 허용한다 이후 응답 패킷 등은 앞에서 ESTABLISHED로 허용하였으므로
# 이 한줄만으로 SSH 서비스가 허용된다

$IPTABLES -A INPUT -i eth0 -p TCP -s #.#.#.0/24 --sport 1024: --dport # -m state --state NEW -j ACCEPT

# 서버에서 snmpd를 설치하여 cacti등으로 모니터링 할 경우 cacti가 설치된
# 서버에서의 161/udp 트래픽을 허용하여야 한다

$IPTABLES -A INPUT -i eth0 -p UDP -s #.#.#.# --sport 1024: --dport 161 -m state --state NEW -j ACCEPT

# 서버에서 RSYNC를 설치하여 backup을 할 경우 backup 서버에서의 873/tcp 트래픽을 허용하여야 한다

$IPTABLES -A INPUT -i eth0 -p TCP -s #.#.#.# --sport 1024: --dport 873 -m state --state NEW -j ACCEPT

# 서버에서 로그 수집을 위하여 remotelog를 할 경우 log 서버에서의 514/udp 트래픽을 허용하여야 한다

$IPTABLES -A INPUT -i eth0 -p UDP -s #.#.#.# --sport 1024: --dport 514 -m state --state NEW -j ACCEPT

# openldap에서 인증을 처리하기 위해 #/tcp를 허용해야 한다
# openldap에서 패스워드를 바꿔야 하기 위해 #/tcp(usermin)를 허용해야 한다
# webmin을 관리하기 위해 #/tcp를 허용해야한다
# openldap에서 패스워드를 바꿔야 하기 위해 #/udp(usermin)를 허용해야 한다
# webmin을 관리하기 위해 #/udp를 허용해야한다
# josso를 관리하기 위해 8080/tcp를 허용해야 한다
# josso를 관리하기 위해 8443/tcp를 허용해야 한다
# mq를 관리하기 위해서 61616/tcp를 허용해야 한다
# mq를 관리하기 위해서 61613/tcp를 허용해야 한다

# 외부에서 서버로 traceroute를 허용해야 한다
# linux

$IPTABLES -A INPUT -m state --state NEW -p udp --dport 33434:38000 -j ACCEPT

# Windows

$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 33434:38000 -j ACCEPT

# icmp 패킷 중 특정 IP ping 요청에 대한 응답 즉, echo-reply를 허용한다

#$IPTABLES -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -p TCP --sport 1024: --dport 61616 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -s #.#.#.#/24 -j ACCEPT
$IPTABLES -A INPUT -i eth0 -p icmp --icmp-type echo-request -s #.#.#.#/24 -j ACCEPT

$IPTABLES -A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -s #.#.#.#/24 -j ACCEPT
$IPTABLES -A INPUT -i eth0 -p icmp --icmp-type echo-request -s #.#.#.#/24 -j ACCEPT

# icmp 패킷 중 network-unreachable을 허용한다 서비스거부로 악용될 수 있으므로
# limit를 지정하여 초당 1회씩만 허용한다

$IPTABLES -A INPUT -p ICMP --icmp-type network-unreachable -m limit --limit 1/s --limit-burst 5 -j ACCEPT

# icmp 패킷 중 host-unreachable을 허용한다 서비스거부로 악용될 수 있으므로
# limit를 지정하여 초당 1회씩만 허용한다

$IPTABLES -A INPUT -p ICMP --icmp-type host-unreachable -m limit --limit 1/s --limit-burst 5 -j ACCEPT

# icmp 패킷 중 port-unreachable을 허용한다 서비스거부로 악용될 수 있으므로
# limit를 지정하여 초당 1회씩만 허용한다

$IPTABLES -A INPUT -p ICMP --icmp-type port-unreachable -m limit --limit 1/s --limit-burst 5 -j ACCEPT

# icmp 패킷 중 fragmentation-needed을 허용한다 서비스거부로 악용될 수 있으므로
# limit를 지정하여 초당 1회씩만 허용한다

$IPTABLES -A INPUT -p ICMP --icmp-type fragmentation-needed -m limit --limit 1/s --limit-burst 5 -j ACCEPT

# icmp 패킷 중 time-exceeded을 허용한다 서비스거부로 악용될 수 있으므로
# limit를 지정하여 초당 1회씩만 허용한다

$IPTABLES -A INPUT -p ICMP --icmp-type time-exceeded -m limit --limit 1/s --limit-burst 5 -j ACCEPT

# tcp 패킷 중 identd (113/tcp) 서비스를 향하는 패킷은 거부하되 DROP 하지 말고
# RST 비트를 설정하여 REJECT로 응답하도록 한다

$IPTABLES -A INPUT -p TCP --syn --dport 113 -j REJECT --reject-with tcp-reset

# $IPTABLES -A INPUT -i eth0 -s #.#.#.# -j LOG

$IPTABLES -A INPUT -s 0/0 -j LOG
#$IPTABLES -A INPUT -s 0/0 -j DROP

$IPTABLES -A OUTPUT -s 0/0 -j LOG
#$IPTABLES -A OUTPUT -s 0/0 -j DROP

문성민님의 댓글의 댓글

  • 문성민
  • 작성일
감사합니다...참고해서 설정하는데 정말 유용할것 같습니다.

리온님의 댓글

  • 리온
  • 작성일
답변은 달려있으니 여담으로 많은 분들이 원격지
넷필터 사용시 잘못된 설정으로 네트웍 접근이 제한 되어 버리는 경우가
많은데 iptables 의 룰을 새로 적용시키기 전에
cron 에 적용한후 3~5분 간격으로 iptables 상태를 체크해서 stop
시키는 스크립트를 작성해두시면 그런 만약에 사태에 대비하실수
있을겁니다.

해당 필터가 이상이 없는 경우 cron 만 다시 꺼주면 되니
원격에서 작업하는 경우 (혼자만 그런지 모르겠으나 ) 많이 사용하곤 합니다.
잘못되더라도 cron 이 알아서 필터를 내려주니 3~5분뒤에 바로 다시 작업이
가능하므로 안심할 수 있습니다.

문성민님의 댓글의 댓글

  • 문성민
  • 작성일
감사합니다...
어떤식으로 스크립트를 짜셨는지 힌트를 좀 ?^^

리온님의 댓글의 댓글

  • 리온
  • 작성일
리눅스 배포판이나 버전마다 다 다르겠지만
start stop status init.d 스크립트가 없는 것들도 있더군요.
있는 것들도 있지만

있는 경우에는 iptables stop 를 시키고 만약의 사태에 대비해
network restart 까지 시켜주는 형식이 되겠구요.
example )
=================================
#!/bin/sh
....
/etc/init.d/iptables stop
/etc/init.d/network(ing) restart
....
=================================

없는 경우에는 iptables -F 와 같은 명령을 이용해서 직접
룰을 내려주는 스크립트와 network restart 해주는
스크립트를 넣어서 처리하면 됩니다.

위와 같은 스크립트가 없는 경우 넷상에 널려있는 스크립트들을
가져와서 쓰셔도 무방합니다. 다만 iptables stop 스크립트가
적용이 잘못되면 nat flush 할때 네트워크가 전혀 동작하지
않는 현상이 발생할 수 있으므로 network restart 를 수행합니다.

물론 사용은 iptables 룰을 적용하기 바로 직전에 크론 3~5분 단위 정도로
갭을 두고 3~5분 안에 해당 룰셋이 정확히 동작하는지 확인 해야합니다.
따라서 확인 작업이 좀더 긴 룰셋이라면 그만큼 크론 시간을 잡아주시면 됩니다.

넷 필터에서 ESTABLISH 상태인 커넥션에 대해서는 연결을 유지하는 등의
룰을 넣어두어도 그뒤에 어떤 룰이 오게 되는가에 따라서
어떤일이 벌어질지 알 수 없기 때문에 저런 방법을 쓰곤합니다.

물론 아주 짧은 시간도 다운되면 안되는 중요한서버인 경우에는 확실히
다른 시스템에서 룰셋을 다 테스트 해본 뒤 적용하는것이 정석입니다만
개인용 학습용 혹은 짧은 시간정도는 희생할 수 있는 서버인 경우
위와같은 방법으로 하실 수 있을겁니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,133 명
  • 현재 강좌수 :  36,170 개
  • 현재 접속자 :  302 명