맛집 여행 캠핑 일상 생활

특정 DDNS 도메인주소 sshd 접근허용하기 본문

LAMP

특정 DDNS 도메인주소 sshd 접근허용하기

영은파더♥ 2016. 3. 3. 14:52

사용할 일이 잘 없겠지만 DDNS를 이용하는 특정도메인만 리눅스 sshd 접근을 허용하는데 사용한다면 유용하게 사용될 수 있는 쉘스크립트이다.

/etc/hosts.deny 파일에

ALL:ALL 라인 위쪽에 sshd:ALL:spawn /usr/local/bin/ddns-check %a & 을 넣어주면 된다.


우선 DDNS 도메인주소로 IP를 먼저 알아내는게 우선이다.

유용한 명령어 nslookup, grep, awk 로 IP를 뽑아낼 수 있다.

# nslookup DDNS도메인주소 | grep "Address: " | awk -F ': ' '{print $2}'

DDNS도메인주소에 자신의 DDNS도메인주소를 넣고 리눅스 명령어를 실행해보자.

올바른 IP를 가져온다면 성공이다.


1. /usr/local/bin/ddns-check 작성

#!/bin/sh


ALLOW_FILE="/etc/hosts.allow"

ALLOW_DOMAINS="

        사용자이름.iptime.org

        사용자이름.gonetis.com

        "

CUR_IP="$1"


for ALLOW_N in $ALLOW_DOMAINS

do

        ALL_IP=`nslookup $ALLOW_N | grep "Address: " | awk -F ': ' '{print $2}'`

        if [ "$ALL_IP" = "$CUR_IP" ] ; then

                if [ `cat $ALLOW_FILE | grep "$ALL_IP" | wc -l` = 0 ] ; then

                        sed -i -e "/#${ALLOW_N}/d" $ALLOW_FILE

                        echo "sshd:${ALL_IP} #${ALLOW_N}" >> $ALLOW_FILE

                fi

                break

        fi

done

위에 ALLOW_DOMAINS 배열엔 IPTIME과 네티스 공유기에서 제공하는 ddns 도메인만 있는데 다른 dyndns 라던지 다른 ddns 서비스를 이용하고 있다면 거기에 맞는 도메인주소를 나열해주면 된다. 허용할 ddns 도메인주소가 하나라면 하나만 적어주면 된다.


2. 퍼미션 변경

# chmod 711 /usr/local/bin/ddns-check


3. /etc/hosts.deny 파일에 아래 내용 추가

sshd:ALL:spawn /usr/local/bin/ddns-check %a &

ALL:ALL

hosts.allow 에서 접근권한이 없으면 위의 부분이 실행되는 원리이다.

%a 의 의미가 현재접속IP를 의미한다.

ALL:ALL 위쪽에 위치해 있어야 한다.


hosts.allow 에서 접근권한이 있는지 체크하고 없다면 hosts.deny에 추가된 ddns-check.sh 쉘스크립트가 실행된다.

여기서 첫번째 sshd 접근은 무조건 접근실패로 접속이 불가할 것이다. 그 다음 부터는 ddns-check.sh 쉘스크립트에서 IP를 체크해서 ddns 도메인주소와 접근ip가 동일하면 hosts.allow 파일에 접근할 수 있게 변경해주기 때문에 두번째 접속부터는 sshd 접근이 가능하게 된다.


※ 주의사항

항상 접속할수 있는 IP 하나쯤은 hosts.allow 에 넣어주도록 하자.

그래야 위에 과정이 실패를 하더라도 서버에 접근이 가능하니까 말이다.


Trackback : | Comments :