Ubuntu 14.04 Server에 OpenSSH를 깔아 사용하고 있는데, 몇시간 정도 쓰다 보면 끊어지고, 한동안 연결이 안되고 뭔가 불안정한 모습을 보였다. 그래서 SSH 관련 로그를 좀 찾아보았는데, 여러 로그들을 검토해 보다 생각지도 못한 접속 시도들이 다수 일어나고 있음을 확인할 수 있었다.
검토 대상 로그 파일 : /var/log/auth.log
[알수 없는 IP로 부터 root 권한 접속 시도]
[알수 없는 IP로 부터 존재하지 않는 계정(orego)으로 접속 시도]
한군데서가 아니라 여러 군데에서 초 단위로 접속 시도를 계속 하고 있었다. 사실 Ubuntu sshd의 기존 Logging 은 AUTH(인증)에 대해서만 남기고 있기 때문에 내가 겪은 끊김이나 한동안 접속 안됨 문제들이 이런 수많은 무단 접속들에 의해 발생하는 것인지는 명확한 확인이 불가능하였다.
현재 남겨진 인증 로그만으로는 자세한 분석이 어렵고, Logging을 좀 더 자세히 할 수 있도록 설정을 바꾸어서 문제 발생시점의 로그를 검토해 보아야 한다.
현재 남겨진 AUTH Log만으로 이런 허락되지 않은 무단 접속 시도들을 확인한 이상 이를 차단해야만 했다. 초단위로 지속적으로 시도하는 것을 보면 사람이 하나하나 접속 시도를 하는 것 같지는 않고, Code를 통해 맞을 때 까지 지속적으로 접속을 시도하는 것으로 보인다. 이렇게 시도를 하다가 뚫리게 되면 추후 서버의 안정성은 보장할 수 없게 된다.
이런 시도들을 막는 방법은 다음과 같다.
Ubuntu 의 경우 기본적으로 TCP wrapper라는 기능을 제공하고 있는데, 이 기능을 이용하면 /etc 밑에 존재하는 hosts.allow, hosts.deny 설정 파일을 통해 접속을 허용하는 주소, 접속을 차단하는 주소를 관리할 수 있다.
로그를 확인하면서 ssh에 무단 접속하려하는 IP 주소를 골라내 하나하나 골라내 등록하려고 하니 생각보다 IP 주소가 다양했고, 추가로 어떤 IP 주소에서 접근할지 알 수 없었다. 이에 따라 기본적으로 모든 IP 주소의 접근을 막고, 개인적으로 접속을 위해 사용하고 있는 IP 주소를 Allow 목록에 추가함으로써 나만 ssh 에 접속이 가능하게 만들었다.
[/etc/hosts.allow]
sshd: [IP Address]
[/etc/hosts.deny]
sshd: ALL
위와 같이 설정해 주고, 혹시나해서 sshd 를 재구동해주었다.
# service ssh restart
이후 /var/log/auth.log를 확인해 보니 아래와 같이 접속들이 refused(거절) 되는 것을 확인할 수 있었다.
다량의 접속 시도가 발생하는 것으로 보아 바이러스나 Scanner를 통한 접근이어서 크게 걱정하지 않아도 될지 모른다. 하지만 어떤 목적을 가지고 접근하는지 알수 없기 때문에 이런 접속은 차단해 서버의 안정성을 높여야 겠다.
IP Address 의 범위 설정 방법
ALL: 192.168.
192.168.x.x 를 의미한다.
ALL: 192.168.0.0/255.255.255.0
192.168.0.1 ~ 192.168.0.255 를 의미 한다.
TCP Wrapper 사용 여부 확인 방법 (libwrap.so)
처음 TCP Wrapper 개념을 접했을 때는 외부에서 접근하는 모든 TCP 관련 connection 들을 제어하는 것으로 오해하였다.
TCP Wrapper 는 libwrap.so 을 사용하여 구현된 service 에서만 적용되는 사항이다.
TCP Wrapper 를 지원하는지 여부는 다음과 같이 확인이 가능하다.
sshd 를 예를 들면 먼저 which를 통해 sshd의 위치를 확인하고 ldd를 통해 libwrap.so 사용 여부를 확인하면 된다.
$ which sshd /usr/sbin/sshd $ ldd /usr/sbin/sshd linux-vdso.so.1 => (0x00007fff0a153000) libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007ff9af732000) libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007ff9af50b000) libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007ff9af2fd000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ff9af0db000) libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007ff9afd9c000) libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007ff9aec96000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007ff9aea93000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff9ae879000) libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007ff9ae641000) libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007ff9ae3f7000) libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007ff9ae125000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ff9adf21000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff9adb57000) libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007ff9ad93e000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff9ad73a000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff9ad4ca000) /lib64/ld-linux-x86-64.so.2 (0x00007ff9afc06000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff9ad2c2000) liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007ff9ad0a0000) libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007ff9acdbf000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff9acba2000) libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007ff9ac973000) libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007ff9ac768000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ff9ac564000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff9ac349000) libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007ff9ac135000) |
아래 예를 참조하면 libwrap.so 를 사용하는 명령어 리스트 확인도 가능하다.
$ for file in /usr/sbin/*; do ldd $file 2>/dev/null | grep -q libwrap.so && echo $file; done /usr/sbin/mysqld /usr/sbin/pptpd /usr/sbin/sshd /usr/sbin/tcpd /usr/sbin/tcpdchk /usr/sbin/tcpdmatch /usr/sbin/try-from |
Reference)
https://serverfault.com/questions/910708/how-to-list-all-services-linked-to-libwrap-a-tcp-wrappers
'OS > Linux' 카테고리의 다른 글
Linux - iconv - 파일(File) 인코딩(Encoding) 변경 (0) | 2017.01.07 |
---|---|
Ubuntu, wpa_supplicant 빌드/컴파일 하기 (0) | 2016.12.29 |
Linux/Ubuntu, Samba 설정하기. (0) | 2016.08.04 |
자기 자신 IP Address C 코드로 확인하기.(SIOCGIFADDR) (0) | 2016.07.27 |
Linux/Ubuntu, 용량 큰 파일/디렉토리 찾아내기. (0) | 2016.07.13 |
Linux/Ubuntu, CD/DVD 를 ISO로 만들기 (0) | 2016.07.13 |
terminator, Linux 다중 분할 터미널 (0) | 2016.07.12 |
Ubuntu package 검색하기/상세정보보기/설치하기 (apt-cache, apt-get) (0) | 2016.07.12 |