nmap 사용법

리눅스/Network|2015. 1. 26. 17:42
반응형

NMAP 사용법

형식 
 $ nmap [스캔유형] [옵션] < 호스트 또는 네트워크>

1. 주요 스캔 유형

-sT : TCP 연결을 사용한 포트를 스캔 한다.
-sS : TCP 헤더의 SYN 비트를 이용한 스텔스포트 스캔 기법에 사용한다 루트 권한으로 실행되야됨
-sF : FIN을 이용한 스텔스 기법에 이용한다
-sP : ping을 이용한 스캔으로 ping명령을 사용하여 해당 호스트가 살아 있는지 만 확인한다
-sU : UDP포트를 스캔한다 루트권한으로 실행되어야 한다
-b : ftp바운스 공격을 위한 포트스캔이다

2. 주요 옵션 설명(옵션은 여러개를 결합해서 사용한다)

-f      :패킷을 조그마하게 나누어서(fragment)사용한다
-PT     :TCP ping을 사용하여 호스트가 살아 있는지 확인한다
          -PT21 21번 포트로 호스트가 살아있는지 확인한다
-PI     :ICMP를 사용하여 호스트가 살아있는지 확인한다
-D      :스캔을 당하는 호스트가 어디에서 진짜 스캔을 했는지 판단하기 힘들게 만드는 옵션으로
         -D다음에 다른 호스트 이름을 나열할 수 있으며 중간에 me를 표시하면 된다 이때 다른 
         호스트는 정상적인 호스트이여야 된다
-p n1-n2:  포트 지정범위(예:-p 20-30 포트 20번부터 30번까지)포트 스캔한다
 n1-  :포트 지정범위부터 포트 마지막까지 포트스캔한다(예:-p 30- )포트번호 30번부터
         마지막 65535까지 스캔한다
-O      :운영체제 스캔 옵션이다
-F      :빠른 스캔 기법을 사용하라는 의미로 /etc/services에 있는 포트만 스캔한다

-n      :DNS 이름 풀기를하지 않는다
-o<logfile>  :스캔 결괄르 로그파일에 저장하라
-i<입력파일> :스캔할 호스트가 많을 경우 파일에 리스트를 저장하여 스캔한다
-g<portnum>: 소스포트번호 지정 20과 53을 추천
-S<IP주소> :SYN,FYN스캔시 소스어드레스 지정한다
-e<장치이름> :패킷을바로 장치이름으로 보낸다 예: eth0,ppp0
-V      :이 옵션은 verbose모드로 여러가지 정보를 얻을수있다.
-h      :도움말

  • 사용예>

# nmap -sP xxx.xxx.xxx.xxx 
 => -sP 옵션으로 대상호스트가 살아 있음을 알수 있다.

# nmap -sP -PT80 xxx.xxx.xxx.xxx
 => 특정 포트(80)를 검색

# nmap -sT xxx.xxx.xxx.xxx 
 => 지정된 포트가 아니라 대상호스트의 열린 포트를 모두 검색 
 대상 호스트의 열린 포트를 알수는 있지만 로그가 남으므로 위험.

# nmap -sS xxx.xxx.xxx.xxx 
 => 스텔스 스캔으로 감시를 피함

# nmap -sU localhost 
 => UDP port 스캔입니다. 시간이 많이 걸릴 수도 있다.

# nmap -sS -O xxx.xxx.xxx.xxx 
 => -O 옵션으로 운영체제를 알아볼수있다.

# nmap -v 203.247.xxx.xxx
       => 좀 더 자세하게 정보를 보여준다.

# nmap 203.xxx.50.0/24
       => 203.xxx.50.0 네트워크 전체를 스캔한다.

# nmap 192.168.1.100-150
       => 연속되어 있는 여러개의 호스트를 검색할 때는 대쉬(-)를 사용하면 된다. 즉 192.168.1.1
         00부터 192.168.1.150까지 스캔한다.

# nmap 192.168.0.5, 192.168.3.7
       => 연속되어 있는 않은 여러 개의 호스트를 검색할 때는 콤마(,)를 사용하면 된다.

# nmap  -p 1-30,110,62000- 203.xxx.xxx.11
       => 203.xxx.xxx.11 호스트의 1-30번 포트, 110번포트, 62000번 이상의 포트를 스캔한다.

# nmap -O 203.247.xxx.xxx
       => 해당 호스트의 포트스캔과 운영체제를 보여준다.

# nmap -sR -p 1-40000 192.168.10.100
       => 해당 호스트의 1~40000 포트에서 RPC포트를 찾아 보여준다.

# nmap -sU -PT 192.168.10.0/24
       => 192.168.10.0 네트워크의 호스트들을 TCP ACK패킷을 보내어 응답을 기다리고 열려진 UDP
         포트를 보여준다.


[출처]
 NMAP 사용법|작성자 남잔직진


반응형

댓글()

특정 ip에 대해 모든 port 오픈

리눅스/Network|2015. 1. 26. 17:42
반응형

iptables에 항목 추가

-A RH-Firewall-1-INPUT -s 192.168.10.2 -j ACCEPT

반응형

댓글()

mms 포트 및 RTSP 포트 개방

리눅스/Network|2015. 1. 26. 17:41
반응형

미디어 서버는 두 가지의 프로토콜을 사용합니다. 

RTSP,MMS
RTSP는 쉽게 설명드린다면 인터넷상에서 플레이 버튼을 누르고, 앞으로 감고, 뒤로 감고 등의 실시간 전송방식을 말합니다.

Microsoft Media Server, with TCP-based transport (MMST) 를 사용하신다면 
-> TCP port 1755 열어 줘야 합니다. 

Microsoft Media Server, with UDP-based transport (MMSU) 를 사용하신다면 
-> UDP port 1755 and TCP port 1755 열어 줘야 합니다. 

RTSPT 를 사용하신다면 
-> TCP port 554 열어 줘야 합니다. 

RTSPU 를 사용하신다면 
-> UDP port 5005, UDP port 5004, and TCP port 554 열어 줘야 합니다. 

Hypertext Transport Protocol (HTTP) 를 사용하신다면 
-> TCP port 80 

Hypertext Transport Secure Protocol (HTTPS) 를 사용하신다면 
->TCP port 443 열어 줘야 합니다.

인터넷 서비스 용도라면 554 포트 열어주셨야죠...


[출처] 유지현 http://www.wssplex.net/QnA/Server.aspx?No=990

반응형

댓글()

mrtg 설치 (트래픽 정보)

리눅스/Network|2015. 1. 26. 17:41
반응형

mrtg 설치

1. 설치

1) mrtg 를 설치, 사용하기 위하여 아래의 두가지 패키지를 설치해야 합니다.

(1) net-snmp
(2) mrtg

※ 여기서는 아래의 버전을 사용했습니다.
net-snmp-libs-5.1.2-11.el4_6.11.3
net-snmp-5.1.2-11.el4_6.11.3
mrtg-2.10.15-2a


2) rpm 으로 확인하여 설치가 되지 않은 상태이면 yum 을 이용하여 쉽게 설치를 할 수 있습니다.

# yum -y install net-snmp
# yum -y install mrtg


2. 설정

1) mrtg.conf (꼭 파일명이 지정된것은 아닙니다.) 파일이 존재할 디렉토리를 만들어 줍니다.

# mkdir -p /home/sysdocu/public_html/mrtg/cfg


2) mrtg.conf 생성

# cfgmaker --global 'WorkDir: /home/sysdocu/public_html/mrtg' --global 'Options[_]: bits,growright' --output /home/sysdocu/public_html/mrtg/cfg/mrtg.cfg public@192.168.10.2


3) snmp 설정

# vi /etc/snmp/snmpd.conf
파일을 열고 아래 부분을 삽입, 주석처리합니다.
view    systemview    included   .1    // (55번째줄 삽입, 이하 같은 형식의 두줄 주석처리)


4) mrtg index 파일 생성

# indexmaker --title "SYSDOCU MRTG" --output /home/sysdocu/public_html/mrtg/index.html /home/sysdocu/public_html/mrtg/cfg/mrtg.cfg


5) mrtg 설정파일 수정

# vi /home/sysdocu/public_html/mrtg/cfg/mrtg.cfg
파일을 열고 아래 부분을 추가합니다.
language:korean    // (아무 행에나 본 행을 추가 - 그래프 설명을 한글로 보기 위함)


6) crontab 에 등록하여 그래프를 수시로(5분마다) 갱신 할수 있도록 합니다.

# crontab -e

*/5 * * * * /usr/bin/mrtg /home/sysdocu/public_html/mrtg/cfg/mrtg.cfg --logging /var/log/mrtg.log


7) snmp 를 실행합니다.

# /etc/init.d/snmpd start


3. 확인

1) 웹브라우저에서 http://sysdocu.com/mrtg 를 입력후, 트래픽 정보를 확인합니다.


만약 트래픽 그래프나 하단의 png 이미지 파일들이 표시되지 않는다면 (엑박) 이미지 파일은 별도로 복사해줍니다.

# cp -arp /var/www/mrtg/* /home/sysdocu/public_html/mrtg/


※ virtualhost 를 이용하여 http://mrtg.sysdocu.com 등으로 주소를 변경할 수 있습니다.

반응형

댓글()

보안을 위한 /etc/sysctl.conf 파일 수정 (syn공격 차단 외)

리눅스/Network|2015. 1. 26. 17:41
반응형

 1. 리눅스 커널/네트워크 매개변수 설정

 

 1) /etc/sysctl.conf 파일 수정

 

vi /etc/sysctl.conf  -> 마지막줄부터 아래 내용 추가

 

 

################### 복사 시작 ####################

 

# icmp redirects를 보내지 않는다.

 

net.ipv4.conf.eth0.accept_redirects=0

 

net.ipv4.conf.lo.accept_redirects=0

 

net.ipv4.conf.default.accept_redirects=0

 

net.ipv4.conf.all.accept_redirects=0

 

net.ipv4.conf.eth0.send_redirects = 0

 

net.ipv4.conf.lo.send_redirects = 0

 

net.ipv4.conf.default.send_redirects = 0

 

net.ipv4.conf.all.send_redirects = 0

 

# proxy arp를 설정하지 않는다.

 

net.ipv4.conf.eth0.proxy_arp=0

 

net.ipv4.conf.lo.proxy_arp=0

 

net.ipv4.conf.default.proxy_arp=0

 

net.ipv4.conf.all.proxy_arp=0

 

# 게이트웨이로부터의 redirect를 허용하지 않음으로써 스푸핑을 막기 위해 설정한다.

 

net.ipv4.conf.eth0.secure_redirects=0

 

net.ipv4.conf.lo.secure_redirects=0

 

net.ipv4.conf.default.secure_redirects=0

 

net.ipv4.conf.all.secure_redirects=0

 

# 스푸핑을 막기 위해 source route 패킷을 허용하지 않는다.

# 소스 라우팅을 허용할 경우 악의적인 공격자가 IP 소스 라우팅을 사용해서 목적지의

# 경로를 지정할 수도 있고, 원래 위치로 돌아오는 경로도 지정할 수 있다. 이러한 소스 라우팅이 가능한 것을 이용해 공격자가 마치 신뢰받는 호스트나 클라이언트인 것처럼 위장할 수 있는 것이다.

 

net.ipv4.conf.eth0.accept_source_route=0

 

net.ipv4.conf.lo.accept_source_route=0

 

net.ipv4.conf.default.accept_source_route=0

 

net.ipv4.conf.all.accept_source_route=0

 

# Broadcast로부터 오는 핑을 차단함(Smurt 공격을 차단함).

 

net.ipv4.icmp_echo_ignore_broadcasts=1

 

# IP  TCP 헤더가 깨진 bad icmp packet을 무시한다.

 

net.ipv4.icmp_ignore_bogus_error_responses = 1

 

# 자신의 네트워크가 스푸핑된 공격지의 소스로 쓰이는 것을 차단한다.

 

# 모든 인터페이스에서 들어오는 패킷에 대해 reply를 하여 들어오는 인터페이스로 나가지 못하는 패킷을 거부한다.

 

net.ipv4.conf.eth0.rp_filter=2

 

net.ipv4.conf.lo.rp_filter=2

 

net.ipv4.conf.default.rp_filter=2

 

net.ipv4.conf.all.rp_filter=2

 

# bootp 패킷을 허용하지 않는다.

 

net.ipv4.conf.eth0.bootp_relay=0

 

net.ipv4.conf.lo.bootp_relay=0

 

net.ipv4.conf.default.bootp_relay=0

 

net.ipv4.conf.all.bootp_relay=0

 

# 스푸핑된 패킷이나 소스라우팅, Redirect 패킷에 대해 로그파일에 정보를 남긴다.

 

net.ipv4.conf.eth0.log_martians=1

 

net.ipv4.conf.lo.log_martians=1

 

net.ipv4.conf.default.log_martians=1

 

net.ipv4.conf.all.log_martians=1

 

# 1/100초에 받아들이는 igmp "memberships"의 수

 

net.ipv4.igmp_max_memberships=1

 

# 매우 복잡한 사이트에서는 이 값을 늘리는 것도 가능하지만 64로 두는 것이 적당하며

 

# 더 늘렸을 경우에는 큰 문제가 발생할 수도 있다.

 

net.ipv4.ip_default_ttl=64

 

# 게이트웨이 서버가 아닌 이상 패킷을 포워딩 할 필요는 없다.

 

net.ipv4.ip_forward=0

 

# fragmented packet이 메모리에 존재하는 시간을 15초로 설정한다.

 

net.ipv4.ipfrag_time=15

 

# SYN_Flooding 공격에 대한 대비로 백로그큐(Backlog Queue)가 가득차면 다른 접속 요구를 받아들이지 못한다.

 

net.ipv4.tcp_max_syn_backlog = 1024

 

# TCP 연결에서 Three-way Handshake가 성공적으로 이루어지지 않으면 더 이상 소스 경로를 거슬러 올라가지 않도록한다.

# 따라서 적절한 연결 요청에 대해서만 연결을 맺는다.

# syncookies가 작동할 때 SYN Flooding 공격이 있으면 messages 파일에 아래와 같은 내용이 출력된다.

# possible SYN flooding on port 80. Sending cookies.

 

net.ipv4.tcp_syncookies = 1

 

# 일정한 시간과 IP별로 보내고 받는 SYN 재시도 횟수를 3회로 제한한다.

# 이 옵션은 스푸핑된(위조된) 주소로 오는 SYN 연결의 양을 줄여준다.

# 기본 값은 5(180 초에 대응)이며 255를 넘지 않아야 한다.

 

net.ipv4.tcp_syn_retries = 3

 

# passive TCP 접속시도가 재접속을 하기 위한 SYNACKs의 값을 정한다. 255 보다 높

# 게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 된다.

 

net.ipv4.tcp_synack_retries = 3

 

# 무언가 문제가 있을 때 연결을 위해 재시도 할 횟수, 최소 값과 기본 값은 3이다.

 

net.ipv4.tcp_retries1=3

 

# TCP 연결을 끊기 전에 재시도할 횟수.

 

net.ipv4.tcp_retries2=7

 

# 연결을 종료시 소요되는 시간을 줄여준다(기본 설정값: 60).

 

net.ipv4.tcp_fin_timeout=20

 

# 동시에 유지 가능한 timewait 소켓의 수이다.

# 만약 지정된 숫자를 초과하였을 경우에는 timewait 소켓이 없어지며 경고 메시지가 출력된다.

# 이 제한은 단순한 DoS 공격을 차단하기 위해 존재하는데, 임의로 이 값을 줄여서는 안되며

# 메모리가 충분하다면 적절하게 늘려주는 것이 좋은데, 64M 마다 180000으로 설정하면 된다.

# 따라서 256M일 경우에는 256/4=4 4*180000=720000

 

# 64M -> 180000

 

# 128M -> 360000

 

# 256M -> 720000

 

# 512M -> 1440000

 

# 1G -> 2880000

 

# 2G -> 5760000

 

#net.ipv4.tcp_max_tw_buckets = 180000

 

# 연결이 끊어졌다고 판단할 때까지, 얼마나 keepalive probe 를 보낼지 결정. 기본값 9

 

# 간단한 DoS 공격을 막아준다.

 

net.ipv4.tcp_keepalive_probes=2

 

# keepalive 가 활성되 되어 있을 경우, 얼마나 자주 TCP  keepalive 메세지를 보

 

# 내게 할 것인지를 설정.

 

net.ipv4.tcp_keepalive_time=30

 

# keepalive_probes 를 보낼 간격을 정함. probe 를 보낸 후, probes * intvl 의 시

 

# 간이 지나도록 응답이 없으면 연결이 해제된 것으로 간주하게 됨. 기본 값의 사용

 

#  11 15초 동안 재시도를 하고 연결을 취소함. 값은 초단위

 

net.ipv4.tcp_keepalive_intvl = 10

 

# 서버 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정한다. 기본 값은 7 

 

# RTO 50 초에서 16 분 사이에 해당한다. 웹 서버가 운영 중 이라면 이 값을 줄여서

 

# 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있다.

 

net.ipv4.tcp_orphan_retries = 2

 

# SYN 패킷을 전송한 후에 로스가 발생을 하여 ACK 를 일부 받지 못했을 경우, 선택

 

# 적으로 (selected) 받지못한 ACK 만 받도록 요청하는 것을 허락한다. 로스가 많은

 

# 네트워크에서는 상당히 중요한 역할을 한다.

 

net.ipv4.tcp_sack = 1


반응형

댓글()

iptables 로그 로그파일 제어 범위 설정

리눅스/Network|2015. 1. 26. 17:40
반응형

iptables -A [chain] -d 111.111.111.111 -j LOG --log-prefix "log title:"

처럼 명령해 주면.. [chain] 에서 정해준 출은 목적지 111.111.111.111 가는 패킷은 /var/log/syslogd 파일에
log title: 라고 시작하면서 로그를 생성해 준다.

주의할점은.. 위 LOG 명령전에 DROP 규칙이 있으면.. 먼저 DROP되므로 로그가 생성될수 없다.

그리고..

--dport 1:1024               1~1024 포트 제어
--dport ~ 1:1024            1~1024 포트 이외의것

-d 222.111.100.0/24  식으로 222.11.199.1 ~ 255까지 차단된다.
A.B.C.0/24 클래스별 제어
A.B.0.0/16 그 이상
A.0.0.0/8 그 이상 범위 IP제어


[출처] ㅎㅓ준 http://cafe.naver.com/worldbest/98

반응형

댓글()

특정 아이피만 ssh, ftp 접근 허용하게 하려면

리눅스/Network|2015. 1. 26. 17:40
반응형

외부에서 특정 데몬으로 접근을 제한하는 설정 방법은 여러가지가 있습니다.

 1. iptables
 2. 각 데몬의 설정파일
 3. pam (access.conf)
 4. hosts.deny 

이중 hosts.deny 로 특정 아이피에서만 ssh, vsftp 접근을 허용하려 한다면 아래와 같이 설정합니다.
설정 후 저장과 동시에 적용되니 주의하셔야 합니다.
telnet 등 원격 접속 가능한 또 다른 데몬을 띄운 후 작업하시기 바랍니다. 

# vi /etc/hosts.deny
sshd : All     EXCEPT 192.168.100.100
vsftpd : All     EXCEPT 192.168.100.100

반응형

댓글()

iptables 특정 IP 차단과 해제

리눅스/Network|2015. 1. 26. 17:40
반응형

[차단]
 iptables -A INPUT -s 11.22.33.44 -j DROP


[해제]
 iptables -D INPUT -s 11.22.33.44 -j DROP

반응형

댓글()

특정 IP접근 거부 (초간단 테크닉)

리눅스/Network|2015. 1. 26. 17:39
반응형

어디선가 자신의 서버를 공격하고 있습니다. 그쪽 IP가 접근 못하게 막아야겠죠? 일반적으로 firewall이나 그밖의 다른 보안정책을 사용중이라면 쉽게막을수 있을 것입니다. 아니면 tcp_wrapper에 의한 hosts.allow, hosts.deny를 이용해도 쉽게 막히겠죠.
하지만 제가 여기서 설명하고자 하는것은 그런 것 보다 더욱 쉽고 간단하게막을 수 있는 방법입니다. 너무 간단하기 때문에 임시방편으로 사용하기 좋습니다.

# route add -host 192.168.1.35 reject 

자 이건 어떻습니까? 192.168.1.35에서는 이제 서버에 얼씬도 못하게 됩니다.
앗! IP가 다른 그 옆의 컴퓨터에서 불법접속을 재시도 한다구요?

그렇다면 아래와 같이
# route add -net 192.168.1.0 netmask 255.255.255.0 reject 하시던지

아니면 더 화끈하게
# route add -net 192.0.0.0 netmask 255.0.0.0 reject 해주시면 됩니다.

이것을 해제하고자 할때에는 'add' 부분만 'del'로 바꿔서 똑같이 명령을 내리면 원래대로 해제됩니다.

반응형

댓글()

netstat 를 이용하여 현재 포트를 감시

리눅스/Network|2015. 1. 26. 17:38
반응형

netstat 를 이용하여 간단하게 현재 포트를 감시할수 있습니다. 
(포트 스캐닝은 잘 알려져있듯이 크래커들이 쓰는 첫번째 방법입니다.) 


시스템에서 현재 열려져 있는 포트 보여주기 
#netstat -nlt 
n : numeric - 주소를 보여줍니다. 
l : listen - 열려진 포트 
t : tcp - tcp 연결 상태 

[user@mymachine /home/user]# netstat -ntl 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 

위와 같은 경우 
즉, 80번(웹) -> 3306 (mysql) -> 22(ssh) 포트가 열려져있다는 것을 보여줍니다. 

시스템에서 실제 활동중인 포트 보여주기 
#netstat -nat 
n : numeric - 주소를 보여줍니다. 
a : active - 활동중인 포트 
t : tcp - tcp 연결 상태 

[user@mymachine /user]# netstat -nat 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 206.112.62.102:80 204.210.35.27:3467 ESTABLISHED 
tcp 0 0 206.112.62.102:80 208.229.189.4:2582 FIN_WAIT2 
tcp 0 7605 206.112.62.102:80 208.243.30.195:36957 CLOSING 
tcp 0 0 206.112.62.102:22 10.60.1.18:3150 ESTABLISHED 
tcp 0 0 206.112.62.102:22 10.60.1.18:3149 ESTABLISHED 
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 

3개의 웹 연결과 2개의 ssh 연결을 보여주고 있습니다. 

FIN_WAIT2와 CLOSING 및 netstat 의 또 다른 기능은 man netstat을 참조하세요.

반응형

댓글()

DDNS 구축하기 (PDNS 사용자)

리눅스/DNS|2015. 1. 26. 17:36
반응형

PDNS 에 DDNS 기능이 있는것 같은데, 아직 개발 단계에 있다는 말도 있고..

SSH 키를 이용해 인증하는것 같아 제 나름의 방법대로 구축 방법을 기술하였습니다.



1. Client 설정


Client 서버에서 네임서버로 IP 정보를 전송해야 하므로, Client 서버에 아래와 같은 명령을 이용하여 주기적으로 IP를 체크업데이트 할 수 있도록 해야합니다.

아래 인증 방법 두 가지 중 하나를 이용하면 됩니다.



인증 방법1

# lynx -source -auth=아이디:패스워드 'http://ns1.sysdocu.com/update.php?도메인'


인증 방법2

# wget -O - --http-user=아이디 --http-passwd=패스워드 'http://ns1.sysdocu.com/update.php?도메인'



위 스크립트가 5분마다 자동 실행될 수 있도록 자동 스케쥴러에 등록해 놓습니다.

아래 예에서는 아이디 및 패스워드갱신할 도메인 sysdocu.com 을 실제로 입력하였습니다.


# crontab -e


*/5 * * * * wget -O - --http-user=sysdocu --http-passwd=PassW0rD 'http://ns1.sysdocu.com/update.php?sysdocu.com'



2. Server 설정


네임서버에서는 Client 서버의 IP 정보를 수시로(1분 마다체크 하고 있다가 변경되어질 때업데이트 합니다.


그래서 Client 서버에서 보내오는 신호를 체크하고 DB에 저장된 IP값과 비교, IP 값이 다를 경우 업데이트 하는 스크립트를 만들어야 합니다.


우선 pdns DB에 users 테이블을 추가합니다. 아이디로 검색해 본인이 사용하는 도메인이 맞는지 확인하기 위해 사용됩니다.


# vi users.sql


CREATE TABLE users (

no INT PRIMARY KEY AUTO_INCREMENT,

id varchar(255),

domain varchar(255)

) Engine=InnoDB;


# mysql -p pdns < users.sql

Enter password:  (패스워드 입력)


추후에 사용할때는 users 테이블에 실제 사용하는 아이디랑 도메인이 들어가 있어야 작동을 합니다.

예) user1    sysdocu.com

      user1    www.sysdocu.com

      user2    system.sysdocu.com


# touch /usr/local/apache/htdocs/update.php    // ns1.sysdocu.com 의 기본 디렉토리 안에 빈페이지를 생성합니다.


# vi /root/ipcheck.sh


#!/bin/bash


cat /usr/local/apache/logs/ns1.sysdocu.com-access_log |grep 'update.php' |grep '200 -' |awk {'print $1" "$3" "$7'} |sed -e 's/\/update.php?//' > temp.txt

cat /dev/null > /usr/local/apache/logs/ns1.sysdocu.com-access_log


while read newIP USER Host trash

do


접속계정과 호스트를 이용해 DB의 저장값을 불러옵니다.

authuser=`mysql -updns -p12345678 pdns -e "SELECT COUNT(*) FROM users WHERE id='$USER' AND domain='$Host'" |tail -n 1`


저장값이 있으면 아이피값이 같은지 비교다를경우 업데이트합니다.

if [ "$authuser" = "1" ]; then

oldIP=`mysql -updns -p12345678 pdns -e "select content from records where name='$Host' and type='A'" |tail -n 1`


if [ "$oldIP" != "$newIP" ]; then

mysql -mysql -updns -p12345678 pdns -e "UPDATE records SET content='$newIP' where name='$Host' and type='A'"

fi


else

echo ""

fi


done < temp.txt


rm -f temp.txt



이제 위 스크립트가 1분마다 자동으로 실행될 수 있도록 자동 스케쥴러에 등록해 놓습니다.


# crontab -e


* * * * * sh /root/ipcheck.sh



또한 인증 받은 사람만(아이디패스워드로 확인업데이트가 가능하도록 아파치 웹인증 암호를 걸어 놓습니다.


# cd /usr/local/apache/htdocs    // ns1.sysdocu.com 의 기본 디렉토리


# vi .htaccess


AuthName "User Authorization"

AuthType Basic

AuthUserFile /usr/local/apache/htdocs/.htpasswd

AuthGroupFile /dev/null

<Limit GET>

require valid-user

</Limit>



# /usr/local/apache/bin/htpasswd -c .htpasswd sysdocu

New password : ********

Re-type new password : ********


위와 같이 아이디 sysdocu 와 그에 해당하는 패스워드를 설정했습니다이제 생성한 아이디패스워드 사용자만 update.php 파일에 접근이 가능합니다.


여기에 아이디패스워드를 추가 할때는 -c 옵션을 빼고 동일하게 명령을 수행하면 됩니다.

그리고 .htpasswd 파일의 위치를 잘 입력해주어야 합니다현재 디렉토리에서는 파일명만 적되다른 디렉토리에 위치한 상태에서 명령을 내릴 때는 절대경로또는 상대경로를 이용하여 위치를 정확히 입력합니다.


# /usr/local/apache/bin/htpasswd .htpasswd UserID


-c 옵션은 초기 사용자를 생성 할때만 사용됩니다여러개의 아이디를 만든 후 -c 옵션을 잘못 주었다면 기존의 아이디가 모두 사라져버리므로 주의를 해야 합니다. (주기적으로 인증 파일 백업 권장)


참고 이용자 삭제

# /usr/local/apache/bin/htpasswd -D .htpassd UserID


반응형

댓글()