| |
--------------------------------------------------------------------------------------
- 작성자 : 김혁중(티니) [sky #at# tini4u.net]
- 작성일 : 2011-08-22
- 사이트 : http://linux.tini4u.net/
- 원제목 : pam_geoip를 활용한 sshd 설정
- 환 경 : CentOS 5.6
- 키워드 : pam_geoip, geoip, pam, sshd
--------------------------------------------------------------------------------------
이 문서에서는 MaxMind의 GeoIP 데이터와 pam 모듈의 연동 방법을 다루도록 하겠습니다.
이미 온라인상에 GeoIP DB를 활용하는 방법은 많이 존재합니다.
Apache, Nginx, PHP, iptables 기타 등등..
이런 방법중에 한가지로 PAM 모듈과 연동하여 활용하는 방법을 알아보도록 하겠습니다.
1. GeoIP C API 설치 [최신버전: http://www.maxmind.com/app/c]
c 언어로 제작된 모듈들을 빌드하기 위해서는 MaxMind에서 제공하는 GeoIP C API가 필요합니다.
2. GeoIP DataBase 다운로드 (도시코드)
GeoIP 연동시 사용할 DB를 다운로드 합니다.
MaxMind 에서 제공하는 Open DB는 2가지 종류가 있는데
국가코드만 제공하는 GeoIP.dat, 국가코드 및 도시코드까지 제공하는 GeoLiteCity.dat이 있습니다.
여기서는 GeoLiteCity.dat를 다운로드 받도록 하겠습니다.
3. pam_geoip 설치 [최신버전: http://ankh-morp.org/code/pam_geoip/]
이제 GeoIP와 연동을 도와줄 실제 PAM 모듈을 설치하도록 하겠습니다.
| | [root@localhost]# wget http://ankh-morp.org/code/pam_geoip/pam_geoip-0.9.tar.gz
[root@localhost]# tar xfz pam_geoip-0.9.tar.gz; cd pam_geoip-0.9
[root@localhost]# sed -i 's|CCFLAGS=|CCFLAGS=-I/usr/local/GeoIP/include |g' Makefile
[root@localhost]# sed -i 's|LDFLAGS=|LDFLAGS=-L/usr/local/GeoIP/lib |g' Makefile
[root@localhost]# make module
-- i386
[root@localhost]# cp -a pam_geoip.so /lib/security/pam_geoip.so
-- x86_64
[root@localhost]# cp -a pam_geoip.so /lib64/security/pam_geoip.so | |
4. geoip.conf 설정
※ 여기서는 SSHd와 연동하는 방법만 설명합니다. 나머지는 응용하시면 되겠습니다.
GeoIP PAM 모듈이 참조할 시큐리티 설정파일을 생성하도록 하겠습니다.
아래 설정은 한국과 미국, 그리고 영국을 제외한 모든 국가의 접속을 차단하겠다는 설정 입니다.
location 섹션에서 콤마를 기준으로 앞이 국가코드, 뒤가 도시코드 입니다.
여러개를 입력하시려면 세미콜론으로 입력하시면 됩니다.
| | [root@localhost]# vi /etc/security/geoip.conf
#
# /etc/security/geoip.conf - config for pam_geoip.so
#
#
#<domain> <service> <action> <location>
* sshd allow KR,Seoul
* sshd allow KR,*
* sshd allow US,*; GB,*
* sshd deny * | |
5. sshd와의 연동
이제 sshd에서 사용하는 pam 설정 파일에 geoip를 연동시키도록 하겠습니다.
기존 설정의 최상단에 pam_geoip.so 모듈을 연동하도록 아래와 같이 설정을 추가해 주시면 됩니다.
| | [root@localhost]# vi /etc/pam.d/sshd
#%PAM-1.0
#-- pam_geoip
account required pam_geoip.so system_file=/etc/security/geoip.conf \
geoip_db=/usr/local/geoip/GeoLiteCity.dat action=allow
#-- end
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so | |
6. 작동 테스트
※ 정상적으로 로그인 되었을 경우
| | Jan 01 00:00:00 localhost sshd[29200]: pam_geoip(sshd:account): location matched: KR,*
Jan 01 00:00:00 localhost sshd[29200]: Accepted password for root from 123.123.123.123 port 1743 ssh2
Jan 01 00:00:00 localhost sshd[29200]: pam_unix(sshd:session): session opened for user root by (uid=0)
Jan 01 00:00:00 localhost sshd[29200]: pam_unix(sshd:session): session closed for user root | |
※ 로그인이 거부 되었을 경우
| | Jan 01 00:00:00 localhost sshd[29231]: pam_geoip(sshd:account): location matched: *,*
Jan 01 00:00:00 localhost sshd[29231]: Failed password for root from 123.123.123.123 port 1744 ssh2
Jan 01 00:00:00 localhost sshd[29232]: fatal: Access denied for user root by PAM account configuration | |
|