Nexus S 3G가 자주 끊어지는 경우
개인 2011/12/07 15:32
다이얼러를 실행시킨 상태에서
*#*#4636#*#*
휴대전화정보 -> 기본 네트워크 유형 설정 : (WCDMA only 로 변경)
PS 1. SMS가 잘 안가는 경우
07912801929190 (sk는 089128010099012925)를 입력하고 업데이트를 누르시면 됩니다.
PS 2. OTA가 있는지 확인하는 경우
다이얼러를 실행시킨 상태에서
*#*#2432546#*#*
*#*#4636#*#*
휴대전화정보 -> 기본 네트워크 유형 설정 : (WCDMA only 로 변경)
PS 1. SMS가 잘 안가는 경우
휴대전화정보(phone information) ->
smsc(short message service center)에 07912801929190 (sk는 089128010099012925)를 입력하고 업데이트를 누르시면 됩니다.
네트워크 서비스 제공자를 KT가 아닌 SKT로 잡았다가 다시 KT로 잡으면(혹은 반대)
SMSC 번호가 00으로 초기화되서 벌어지는 현상때문에 문자 전송 오류가 난다고 합니다.
출처. 뽐뿌 (http://www.ppomppu.co.kr/zboard/view.php?id=android&page=1&sn1=&divpage=13&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=63343)
SMSC 번호가 00으로 초기화되서 벌어지는 현상때문에 문자 전송 오류가 난다고 합니다.
출처. 뽐뿌 (http://www.ppomppu.co.kr/zboard/view.php?id=android&page=1&sn1=&divpage=13&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=63343)
PS 2. OTA가 있는지 확인하는 경우
다이얼러를 실행시킨 상태에서
*#*#2432546#*#*
대규모 웹하드 솔루션으로서의 eFolder 활용
작업 2011/04/13 15:13
저는 2006년부터 (주)Embian에 근무하면서 eFolder라는 솔루션에 대해 큰 관심을 가지고 있었습니다.
eFolder 솔루션은 대규모 웹하드 서비스를 위한 솔루션이기도 하지만, 중소규모에서도 사용할 수 있는 가벼운 솔루션입니다. 이러한 eFolder 솔루션이 외부에 알려지지 않은 상황을 안타깝게 생각하여 2010년 부터 eFolder 솔루션의 공개를 주장해 왔으며, 2011년 3월 드디어 오픈소스로 배포하게 되었습니다.
eFolder 솔루션은 지난 10년간 FolderPlus, 소리바다, DayFolder등의 서비스에서 사용되었으며, FolderPlus에서는 지난 8년간 서비스에 사용되었습니다.
이 경험을 바탕으로 '대규모 웹하드 솔루션'에서 eFolder의 활용 방법을 기록으로 남기기 위해 블로깅을 하기로 결정하였습니다.
먼저, FolderPlus가 어떻게 운영되었으며, 어느 정도 규모의 서비스 였는지를 알아보겠습니다. FolderPlus는 2003년 (주)아이서브에서 런칭한 웹하드 서비스 입니다. 2010년 서비스가 중단되었지만, 웹하드 업계 5위의 서비스였습니다.
OpenAFS : 대용량 서비스를 위한 FileSystem
- Uniform namespace 지원 (한 공간을 동시에 Read/Write 가능)
- Quota 및 NSS 지원
UAS : 600만 사용자 처리를 위한 인증 시스템
- 자체 개발한 인증 시스템
- NSS 모듈 제작 & MySQL을 사용하여 데이터 저장
Cache 시스템 : 트래픽 분산을 위한 시스템
- 웹하드 서비스 특성상 트래픽이 한 곳에 몰리는 현상이 발생
- 고성능 SSD 스토리지를 사용하여 고속 I/O를 처리하는 시스템 구성
- 요청 빈도가 높은 파일을 선택하는 알고리즘 구축
eFolder 솔루션 : 고속 파일 전송 및 고성능 Application Server
- Apache에 mod_perl2를 사용하여 작성
- I/O 처리에 특화된 CGI를 작성하여 웹하드 솔루션에 특화
- Server Side 데이터 처리를 바탕으로 높은 데이터 안정성 제공
(아쉽게도, 이미지 캡춰를 하면서 마우스 포인터가 들어갔네요;;)
위 이미지는 FolderPlus의 CS(Client-Server) 구조를 매우 간략화한 구조도 입니다. 각 구성요소에 대해서 하나씩 설명하면 다음과 같습니다. (Client는 생략)
위 이미지에서는 간략화되어 있지만, 실제 FolderPlus에서는 다음의 규모로 운영되었습니다.
OpenAFS에 대해서 더 알고 싶으신 분은 다음 링크를 참고하세요.
http://www.ibm.com/developerworks/kr/library/os-openafs/index.html
2. UAS (자체 개발한 인증 시스템)
http://www.embian.com/Embian_eAccount.phtml
UAS는 (주)엠비안에서 자체 제작한 인증 시스템입니다. 사용자 인증을 가장 빠르게 처리하기 위해서 개발되었으며, FolderPlus에서는 600만명의 사용자를 대상으로 사용되었던 경험이 있습니다. 위 링크는 UAS에 대한 설명은 아니지만, UAS의 전신인 Embian eAccount에 대한 설명이 있는 링크이니, 참고하시면 좋을 것이라 생각됩니다.
UAS의 가장 큰 장점은 NSS를 사용한다는 것입니다. 위 OpenAFS에서도 설명되었지만 NSS를 지원하면 적은 노력으로 여러 시스템에서 운영할 수 있습니다. 즉, 플랫폼 독립적인 서비스를 구축할 수 있다는 것입니다.
더불어 과거 (주)엠비안 기술연구소 소장으로 재직하였던, 전성진님의 기술이 녹아들어가서 상당히 빠른 응답을 동작속도가 보장됩니다.
== 작성중입니다. ==
== 문의사항 알려주시면 해당 부분에 대해서도 글에 포함하도록 하겠습니다. ==
eFolder 솔루션은 대규모 웹하드 서비스를 위한 솔루션이기도 하지만, 중소규모에서도 사용할 수 있는 가벼운 솔루션입니다. 이러한 eFolder 솔루션이 외부에 알려지지 않은 상황을 안타깝게 생각하여 2010년 부터 eFolder 솔루션의 공개를 주장해 왔으며, 2011년 3월 드디어 오픈소스로 배포하게 되었습니다.
eFolder 솔루션은 지난 10년간 FolderPlus, 소리바다, DayFolder등의 서비스에서 사용되었으며, FolderPlus에서는 지난 8년간 서비스에 사용되었습니다.
이 경험을 바탕으로 '대규모 웹하드 솔루션'에서 eFolder의 활용 방법을 기록으로 남기기 위해 블로깅을 하기로 결정하였습니다.
먼저, FolderPlus가 어떻게 운영되었으며, 어느 정도 규모의 서비스 였는지를 알아보겠습니다. FolderPlus는 2003년 (주)아이서브에서 런칭한 웹하드 서비스 입니다. 2010년 서비스가 중단되었지만, 웹하드 업계 5위의 서비스였습니다.
- eFolder 솔루션으로 운영
- 총 사용자 : 600 만명
- 총 저장공간 : 1.5 PB ( 1.5 PB = 1,500 TB = 1,500,000 GB )
- 총 네트워크 대역폭 : 60 Gb/s
- 총 사용서버 : 약 500 ea
- 총 사용자 : 600 만명
- 총 저장공간 : 1.5 PB ( 1.5 PB = 1,500 TB = 1,500,000 GB )
- 총 네트워크 대역폭 : 60 Gb/s
- 총 사용서버 : 약 500 ea
- 스토리지 서버 : 약 300 ea
- 웹 서버 : 약 200 ea
- 기타 서버 : 약 30 ea
- 웹 서버 : 약 200 ea
- 기타 서버 : 약 30 ea
위와 같은 대규모 서비스에서 eFolder 솔루션을 지속적으로 발전시켜 왔으며, 오픈소스로 배포된 eFolder 솔루션은 지난 10년간의 경험이 모두 담겨있습니다.
이 글은 FolderPlus에서 eFolder 솔루션이 어떠한 모습으로 사용되었는지, eFolder 솔루션외에 어떠한 기술들이 사용되었는지를 정리하는 차원에서 기술하도록 하겠습니다.
FolderPlus에서 사용된 주요 기술은 다음과 같습니다.
- Uniform namespace 지원 (한 공간을 동시에 Read/Write 가능)
- Quota 및 NSS 지원
- 자체 개발한 인증 시스템
- NSS 모듈 제작 & MySQL을 사용하여 데이터 저장
- 웹하드 서비스 특성상 트래픽이 한 곳에 몰리는 현상이 발생
- 고성능 SSD 스토리지를 사용하여 고속 I/O를 처리하는 시스템 구성
- 요청 빈도가 높은 파일을 선택하는 알고리즘 구축
- Apache에 mod_perl2를 사용하여 작성
- I/O 처리에 특화된 CGI를 작성하여 웹하드 솔루션에 특화
- Server Side 데이터 처리를 바탕으로 높은 데이터 안정성 제공
1. OpenAFS (대용량 지원을 위한 FileSystem)
http://www.openafs.org/
Carnegie Mellon 대학에서 개발된 AFS(Andrew File System) 에서 부터 시작되었으며, 분산 컴퓨팅 환경을 위한 FileSystem입니다.
기본적으로 CS(Client-Server) 구조로 구성되며, File Server 를 관장하는 DB Server가 존재합니다. 이 구조를 FolderPlus에서 사용한 방식으로 예를 들어 설명하겠습니다.
http://www.openafs.org/
Carnegie Mellon 대학에서 개발된 AFS(Andrew File System) 에서 부터 시작되었으며, 분산 컴퓨팅 환경을 위한 FileSystem입니다.
기본적으로 CS(Client-Server) 구조로 구성되며, File Server 를 관장하는 DB Server가 존재합니다. 이 구조를 FolderPlus에서 사용한 방식으로 예를 들어 설명하겠습니다.
위 이미지는 FolderPlus의 CS(Client-Server) 구조를 매우 간략화한 구조도 입니다. 각 구성요소에 대해서 하나씩 설명하면 다음과 같습니다. (Client는 생략)
1. Upload Server : 파일 업로드에 사용
2. Download Server : 파일 다운로드에 사용
3. Folder Server : 파일 업로드/다운로드 외의 모든 작업에 사용
4. File Server : 실제 파일이 저장
5. DB Server : File Server에 대한 정보가 저장
- Client는 Server 1,2,3으로만 연결되며, Server 4,5로는 연결되지 않습니다.
Upload/Download/Folder Server는 OpenAFS Client로 동작하며, File/DB Server는 OpenAFS Server로 동작합니다. 사용자가 연결하는 서버는 실제 파일이 존재하는 서버가 아니라 파일에 접근할 수 있는 OpenAFS Client인 것입니다.
위의 구조가 보기에는 약간 복잡해 보이는데, 이는 OpenAFS가 가진 문제점 때문입니다. OpenAFS Client는 kernel level의 driver이기 때문에 문제가 발생하면 OS가 Kernel panic을 일으키며 정지하게 됩니다. 이는 전체 서비스에 영향을 줄 수 있기때문에, 하나의 서버에 장애가 발생하여도 서비스에 영향을 주지 않도록 하기 위해서 약간 복잡하기는 하지만 위와 같은 구성을 하게 되었습니다.
OpenAFS가 위와 같은 문제점을 가지고 있긴 하지만, 이는 장점에 비하면 아주 간단한 문제입니다. 위에도 설명했지만 Uniform namespace를 사용한다는 것, 그리고 Quota 및 NSS(Name Service Switch)를 지원한다는 점입니다. 대용량 웹하드 서비스를 구성하기 위해서 가장 필요한 요소입니다.
위의 구조가 보기에는 약간 복잡해 보이는데, 이는 OpenAFS가 가진 문제점 때문입니다. OpenAFS Client는 kernel level의 driver이기 때문에 문제가 발생하면 OS가 Kernel panic을 일으키며 정지하게 됩니다. 이는 전체 서비스에 영향을 줄 수 있기때문에, 하나의 서버에 장애가 발생하여도 서비스에 영향을 주지 않도록 하기 위해서 약간 복잡하기는 하지만 위와 같은 구성을 하게 되었습니다.
OpenAFS가 위와 같은 문제점을 가지고 있긴 하지만, 이는 장점에 비하면 아주 간단한 문제입니다. 위에도 설명했지만 Uniform namespace를 사용한다는 것, 그리고 Quota 및 NSS(Name Service Switch)를 지원한다는 점입니다. 대용량 웹하드 서비스를 구성하기 위해서 가장 필요한 요소입니다.
1. Uniform namespace : 간단하게 설명하면, 모든 OpenAFS Client가 하나의 공간을 공유한다고 생각하면 됩니다. 동일한 공간을 보고있기 때문에 어느 서버에 요청을 하더라도 동일한 자원에 접근할 수 있다는 장점이 있습니다.
2. Quota 및 NSS 지원 : Quota는 간단하게 최대 디스크 사용량을 제한하는 기능입니다. POSIX 표준에도 있는 기능이니, 이 기능이 지원되면 사용자별 디스크 사용량 관리가 쉬워집니다. NSS는 사용자 인증, 즉 사용자별 Home Directory, ID, Password등의 인증 및 사용자 정보를 확인하고 받아올 수 있는 기능입니다. 이 역시 대부분의 UNIX 시스템에서 사용되고 있기 때문에, NSS가 지원되면 적은 노력으로 여러 시스템에서 운영할 수 서비스를 구축할 수 있습니다.
2. Quota 및 NSS 지원 : Quota는 간단하게 최대 디스크 사용량을 제한하는 기능입니다. POSIX 표준에도 있는 기능이니, 이 기능이 지원되면 사용자별 디스크 사용량 관리가 쉬워집니다. NSS는 사용자 인증, 즉 사용자별 Home Directory, ID, Password등의 인증 및 사용자 정보를 확인하고 받아올 수 있는 기능입니다. 이 역시 대부분의 UNIX 시스템에서 사용되고 있기 때문에, NSS가 지원되면 적은 노력으로 여러 시스템에서 운영할 수 서비스를 구축할 수 있습니다.
위 이미지에서는 간략화되어 있지만, 실제 FolderPlus에서는 다음의 규모로 운영되었습니다.
- Upload Server : 약 20 ea
- Download Server : 약 100 ea
- Folder Server : 약 50 ea
- File Server : 약 300 ea
- DB Server : 약 10 ea
하나의 C Class 대역에서 사용할 수 있는 서버의 대수를 넘어서기 때문에, 3개의 C Class 대역을 사용하였으며, 각 C Class 대역에 각 Server들이 고루 분배되어서 운영되었습니다.
OpenAFS에 대해서 더 알고 싶으신 분은 다음 링크를 참고하세요.
http://www.ibm.com/developerworks/kr/library/os-openafs/index.html
2. UAS (자체 개발한 인증 시스템)
http://www.embian.com/Embian_eAccount.phtml
UAS는 (주)엠비안에서 자체 제작한 인증 시스템입니다. 사용자 인증을 가장 빠르게 처리하기 위해서 개발되었으며, FolderPlus에서는 600만명의 사용자를 대상으로 사용되었던 경험이 있습니다. 위 링크는 UAS에 대한 설명은 아니지만, UAS의 전신인 Embian eAccount에 대한 설명이 있는 링크이니, 참고하시면 좋을 것이라 생각됩니다.
UAS의 가장 큰 장점은 NSS를 사용한다는 것입니다. 위 OpenAFS에서도 설명되었지만 NSS를 지원하면 적은 노력으로 여러 시스템에서 운영할 수 있습니다. 즉, 플랫폼 독립적인 서비스를 구축할 수 있다는 것입니다.
더불어 과거 (주)엠비안 기술연구소 소장으로 재직하였던, 전성진님의 기술이 녹아들어가서 상당히 빠른 응답을 동작속도가 보장됩니다.
== 작성중입니다. ==
== 문의사항 알려주시면 해당 부분에 대해서도 글에 포함하도록 하겠습니다. ==
Ubuntu에 ffmpeg 및 x264 설치하기
개인 2011/01/20 11:57
참조글 : http://ubuntuforums.org/showthread.php?t=786095
1. x264 installation
2. ffmpeg installation
0. prepare
# sudo apt-get update
# sudo apt-get install sudo apt-get install build-essential git-core checkinstall yasm texi2html libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev
# sudo apt-get install sudo apt-get install build-essential git-core checkinstall yasm texi2html libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev
1. x264 installation
# cd
# git clone git://git.videolan.org/x264.git
# cd x264
# ./configure
# make
# sudo checkinstall --pkgname=x264 --pkgversion="2:0.$(grep X264_BUILD x264.h -m1 | \
cut -d' ' -f3).$(git rev-list HEAD | wc -l)+git$(git rev-list HEAD -n 1 | \
head -c 7)" --backup=no --deldoc=yes --fstrans=no --default
# git clone git://git.videolan.org/x264.git
# cd x264
# ./configure
# make
# sudo checkinstall --pkgname=x264 --pkgversion="2:0.$(grep X264_BUILD x264.h -m1 | \
cut -d' ' -f3).$(git rev-list HEAD | wc -l)+git$(git rev-list HEAD -n 1 | \
head -c 7)" --backup=no --deldoc=yes --fstrans=no --default
2. ffmpeg installation
# cd
# git clone git://git.ffmpeg.org/ffmpeg.git
# cd ffmpeg
# ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc \
--enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb \
--enable-libopencore-amrwb --enable-libtheora --enable-libvorbis \
--enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
# make
# sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(./version.sh)" --backup=no \
--deldoc=yes --fstrans=no --default
# hash x264 ffmpeg ffplay ffprobe
# git clone git://git.ffmpeg.org/ffmpeg.git
# cd ffmpeg
# ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc \
--enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb \
--enable-libopencore-amrwb --enable-libtheora --enable-libvorbis \
--enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
# make
# sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(./version.sh)" --backup=no \
--deldoc=yes --fstrans=no --default
# hash x264 ffmpeg ffplay ffprobe
Ubuntu 10.10 Maverick Meerkat에서 Intel GMA 945를 사용해서 듀얼모니터 사용하기
Linux 2010/10/11 16:46
IBM Thinkpad X60에서 Ubuntu 10.04에서 10.10으로 업그레이드를 완료하고 리부팅을 한후에 사용하려고 보니, 화면이 이상하게 나오고 있었다.
10.04에서도 intel driver 관련하여 문제가 있었는데 또 발생했다. ㅠ.ㅜ
이번에는 지난번에 발생한 문제와 상황이 좀 다른듯하여 구글님의 도움을 받아보기로 하였다.
관련 페이지는 아래 참조 링크.
결론은 xorg-edgers PPA를 추가하고 패키지를 업데이트하면 된다는 것이다.
다음의 명령 몇개 입력해주고 재부팅하면 끝.
만약 위의 방법으로 패키지를 업데이트 했는데도 문제가 해결이 안되었을 경우, 일단 업데이트한 패키지를 제거하기 위해서 다음의 명령을 입력해준다.
참조 : https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/619663
10.04에서도 intel driver 관련하여 문제가 있었는데 또 발생했다. ㅠ.ㅜ
이번에는 지난번에 발생한 문제와 상황이 좀 다른듯하여 구글님의 도움을 받아보기로 하였다.
관련 페이지는 아래 참조 링크.
결론은 xorg-edgers PPA를 추가하고 패키지를 업데이트하면 된다는 것이다.
다음의 명령 몇개 입력해주고 재부팅하면 끝.
$ sudo apt-add-repository ppa:xorg-edgers/ppa
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get update
$ sudo apt-get upgrade
만약 위의 방법으로 패키지를 업데이트 했는데도 문제가 해결이 안되었을 경우, 일단 업데이트한 패키지를 제거하기 위해서 다음의 명령을 입력해준다.
$ sudo ppa-purge xorg-edgers
참조 : https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/619663
세금 및 공과금 카드로 납부하기
개인 2010/09/29 19:00
한국전력 전기요금 수납
http://cyber.kepco.co.kr/cyber/common/popup/pop_card_pay.jsp?gubun=C
지방세 및 수도요금 수납
http://etax.seoul.go.kr/
http://cyber.kepco.co.kr/cyber/common/popup/pop_card_pay.jsp?gubun=C
지방세 및 수도요금 수납
http://etax.seoul.go.kr/
iptables와 swatch로 ssh brute force attack 막기
Linux 2010/05/19 23:27
/etc/init.d/iptables를 다음과 같이 만든다. (permission은 775)
/etc/init.d/swatch 파일이 없다면 다음의 내용으로 생성한다. (permission은 775)
swatch.conf에는 다음을 추가한다.
swatch에서 실행할 스크립트를 만든다.
/root/swatch-ssh 파일의 내용은 다음처럼 구성한다. (역시 permission은 775)
(다른 기능도 같이 하는 스크립트에서 일부만 발췌함)
이제 모든 준비는 완료되었습니다.
iptables 스크립트를 실행시키고 swatch를 restart하면 끝.
위에서 설정한 내용은 다음과 같습니다.
1. iptables를 설정하여 ssh 연결이 1분에 6번 이상 연결되면 kernel에 log를 남기게 됩니다.
2. swatch에서는 iptables가 남긴 kernel log를 발견하게 되면 /root/swatch-ssh 스크립트를 실행시킵니다.
3. /root/swatch-ssh 스크립트에서는 해당 IP Address를 /tmp/ssh_evil 파일에 남기는 동시에 /etc/init.d/iptables 스크립트를 실행시켜서 발견된 IP Addreess를 통해서 들어오는 연결을 차단합니다.
위의 1,2,3 과정을 반복하면서 ssh brute force attack이 발견되면 해당 IP Address를 지속적으로 차단합니다.
작성자 : 저입니다. ^^
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: networking ifupdown $local_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
IPTABLES=/sbin/iptables
EXT_ETH=eth0
${IPTABLES} -F
${IPTABLES} -t nat -F
${IPTABLES} -X BLACKLISTCHECK
${IPTABLES} -P INPUT ACCEPT
${IPTABLES} -P OUTPUT ACCEPT
${IPTABLES} -P FORWARD ACCEPT
${IPTABLES} -A INPUT -j ACCEPT -i lo
${IPTABLES} -A INPUT -j ACCEPT -p icmp --icmp-type any
${IPTABLES} -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
${IPTABLES} -N BLACKLISTCHECK
${IPTABLES} -A INPUT -j BLACKLISTCHECK -i ${EXT_ETH} -m state --state NEW -p tcp --dport 22
for x in `cat /tmp/ssh_evil`; do
${IPTABLES} -I BLACKLISTCHECK -s $x -j DROP
done
# 80, 22번 포트만 오픈
${IPTABLES} -A INPUT -j ACCEPT -i ${EXT_ETH} -m state --state NEW -p tcp --dport 22
${IPTABLES} -A INPUT -j ACCEPT -i ${EXT_ETH} -m state --state NEW -p tcp --dport 80
${IPTABLES} -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
${IPTABLES} -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 6 -j LOG --log-prefix "SSH_brute_force "
${IPTABLES} -A INPUT -j REJECT --reject-with icmp-host-prohibited
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: networking ifupdown $local_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
IPTABLES=/sbin/iptables
EXT_ETH=eth0
${IPTABLES} -F
${IPTABLES} -t nat -F
${IPTABLES} -X BLACKLISTCHECK
${IPTABLES} -P INPUT ACCEPT
${IPTABLES} -P OUTPUT ACCEPT
${IPTABLES} -P FORWARD ACCEPT
${IPTABLES} -A INPUT -j ACCEPT -i lo
${IPTABLES} -A INPUT -j ACCEPT -p icmp --icmp-type any
${IPTABLES} -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
${IPTABLES} -N BLACKLISTCHECK
${IPTABLES} -A INPUT -j BLACKLISTCHECK -i ${EXT_ETH} -m state --state NEW -p tcp --dport 22
for x in `cat /tmp/ssh_evil`; do
${IPTABLES} -I BLACKLISTCHECK -s $x -j DROP
done
# 80, 22번 포트만 오픈
${IPTABLES} -A INPUT -j ACCEPT -i ${EXT_ETH} -m state --state NEW -p tcp --dport 22
${IPTABLES} -A INPUT -j ACCEPT -i ${EXT_ETH} -m state --state NEW -p tcp --dport 80
${IPTABLES} -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
${IPTABLES} -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 6 -j LOG --log-prefix "SSH_brute_force "
${IPTABLES} -A INPUT -j REJECT --reject-with icmp-host-prohibited
/etc/init.d/swatch 파일이 없다면 다음의 내용으로 생성한다. (permission은 775)
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: swatch
# Required-Start: networking ifupdown $local_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME="swatch"
DAEMON="/usr/bin/swatch"
DESC="simple watcher"
CONFFILE="/etc/swatch.conf"
#LOGFILE="/var/log/secure"
LOGFILE="/var/log/syslog"
PIDFILE="/var/run/swatch.pid"
OPTS="--config-file=$CONFFILE --tail-file=$LOGFILE --pid-file=$PIDFILE --awk-field-syntax --tail-args='-F' --daemon"
test -x $DAEMON || exit 0
start() {
if [ ! -f "$CONFFILE" ]; then
echo "Error: $CONFFILE does not exist."
exit 1
fi
if [ ! -f "$LOGFILE" ]; then
echo "Error: $LOGFILE does not exist."
exit 1
fi
if [ -f "$PIDFILE" ]
then
echo "Error: $NAME is already running."
else
$DAEMON $OPTS >/dev/null 2>&1
fi
}
stop() {
if [ -f "$PIDFILE" ]
then
PID=`cat $PIDFILE`
if ps h $PID > /dev/null
then
pkill -P $PID
kill $PID
else
echo "Error: $NAME is not running, but PID file exists. Deleting it."
fi
rm -f $PIDFILE
else
echo "Error: $NAME is not running."
fi
}
case "$1" in
start)
echo "Starting $DESC: $NAME"
start
;;
stop)
echo "Stopping $DESC: $NAME"
stop
;;
restart)
echo "Restarting $DESC: $NAME"
stop
sleep 1
start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
exit 0
### BEGIN INIT INFO
# Provides: swatch
# Required-Start: networking ifupdown $local_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME="swatch"
DAEMON="/usr/bin/swatch"
DESC="simple watcher"
CONFFILE="/etc/swatch.conf"
#LOGFILE="/var/log/secure"
LOGFILE="/var/log/syslog"
PIDFILE="/var/run/swatch.pid"
OPTS="--config-file=$CONFFILE --tail-file=$LOGFILE --pid-file=$PIDFILE --awk-field-syntax --tail-args='-F' --daemon"
test -x $DAEMON || exit 0
start() {
if [ ! -f "$CONFFILE" ]; then
echo "Error: $CONFFILE does not exist."
exit 1
fi
if [ ! -f "$LOGFILE" ]; then
echo "Error: $LOGFILE does not exist."
exit 1
fi
if [ -f "$PIDFILE" ]
then
echo "Error: $NAME is already running."
else
$DAEMON $OPTS >/dev/null 2>&1
fi
}
stop() {
if [ -f "$PIDFILE" ]
then
PID=`cat $PIDFILE`
if ps h $PID > /dev/null
then
pkill -P $PID
kill $PID
else
echo "Error: $NAME is not running, but PID file exists. Deleting it."
fi
rm -f $PIDFILE
else
echo "Error: $NAME is not running."
fi
}
case "$1" in
start)
echo "Starting $DESC: $NAME"
start
;;
stop)
echo "Stopping $DESC: $NAME"
stop
;;
restart)
echo "Restarting $DESC: $NAME"
stop
sleep 1
start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
exit 0
swatch.conf에는 다음을 추가한다.
perlcode my $sshscript = '/root/swatch-ssh';
watchfor /([a-zA-Z]{3})\s+([0-9]{1,2}) ([0-9]{2}:[0-9]{2}:[0-9]{2}) ([a-zA-Z0-9_-]+) kernel: \[.*\] SSH_brute_force .*SRC=(.*) DST=/
exec "$sshscript '$*' >> /var/log/swatch.log"
throttle 00:00:30
watchfor /([a-zA-Z]{3})\s+([0-9]{1,2}) ([0-9]{2}:[0-9]{2}:[0-9]{2}) ([a-zA-Z0-9_-]+) kernel: \[.*\] SSH_brute_force .*SRC=(.*) DST=/
exec "$sshscript '$*' >> /var/log/swatch.log"
throttle 00:00:30
swatch에서 실행할 스크립트를 만든다.
/root/swatch-ssh 파일의 내용은 다음처럼 구성한다. (역시 permission은 775)
(다른 기능도 같이 하는 스크립트에서 일부만 발췌함)
#!/usr/bin/ruby1.8
if ARGV.length==0 && ARGV.length < 2
puts "Error!! Argument must more than 1 words!!"
puts "ex) swatch-ssh message"
exit 1
else
begin
message = ""
argv_msg = ARGV[0].split
host = argv_msg[3]
beginflag = false
for qs in argv_msg do
message = message + (message!=""?" ":"") + qs if beginflag == true
beginflag = true if qs == host
end
# for 3ware modules message
message.sub!(/kernel: \[[0-9\s]+\.[0-9]+\] /, '')
message.sub!(/\(.*\)/, '')
smsmessage = sprintf("[%s]%s\n", host, message)
# smsmessage.gsub!(' ', '_')
smsmessage.sub!(/\[mgm\]/, '')
smsmessage.sub!(/SSH_brute_force .* SRC=/, '')
smsmessage.sub!(/ DST=.*/, '')
File.open("/tmp/ssh_deny", 'a') {|f| f.write(smsmessage) }
command = sprintf("cat /tmp/ssh_evil /tmp/ssh_deny | sort -u > /tmp/ssh_uniq_evil ; rm /tmp/ssh_deny ; cp /tmp/ssh_uniq_evil /tmp/ssh_evil ; /etc/init.d/iptables")
# printf("%s\n", command)
system(command)
end
end
exit 0
if ARGV.length==0 && ARGV.length < 2
puts "Error!! Argument must more than 1 words!!"
puts "ex) swatch-ssh message"
exit 1
else
begin
message = ""
argv_msg = ARGV[0].split
host = argv_msg[3]
beginflag = false
for qs in argv_msg do
message = message + (message!=""?" ":"") + qs if beginflag == true
beginflag = true if qs == host
end
# for 3ware modules message
message.sub!(/kernel: \[[0-9\s]+\.[0-9]+\] /, '')
message.sub!(/\(.*\)/, '')
smsmessage = sprintf("[%s]%s\n", host, message)
# smsmessage.gsub!(' ', '_')
smsmessage.sub!(/\[mgm\]/, '')
smsmessage.sub!(/SSH_brute_force .* SRC=/, '')
smsmessage.sub!(/ DST=.*/, '')
File.open("/tmp/ssh_deny", 'a') {|f| f.write(smsmessage) }
command = sprintf("cat /tmp/ssh_evil /tmp/ssh_deny | sort -u > /tmp/ssh_uniq_evil ; rm /tmp/ssh_deny ; cp /tmp/ssh_uniq_evil /tmp/ssh_evil ; /etc/init.d/iptables")
# printf("%s\n", command)
system(command)
end
end
exit 0
이제 모든 준비는 완료되었습니다.
iptables 스크립트를 실행시키고 swatch를 restart하면 끝.
iptables -N BLACKLISTCHECK
touch /tmp/ssh_evil
update-rc.d iptables defaults 20
update-rc.d swatch defaults 20
/etc/init.d/iptables
/etc/init.d/swatch restart
touch /tmp/ssh_evil
update-rc.d iptables defaults 20
update-rc.d swatch defaults 20
/etc/init.d/iptables
/etc/init.d/swatch restart
위에서 설정한 내용은 다음과 같습니다.
1. iptables를 설정하여 ssh 연결이 1분에 6번 이상 연결되면 kernel에 log를 남기게 됩니다.
2. swatch에서는 iptables가 남긴 kernel log를 발견하게 되면 /root/swatch-ssh 스크립트를 실행시킵니다.
3. /root/swatch-ssh 스크립트에서는 해당 IP Address를 /tmp/ssh_evil 파일에 남기는 동시에 /etc/init.d/iptables 스크립트를 실행시켜서 발견된 IP Addreess를 통해서 들어오는 연결을 차단합니다.
위의 1,2,3 과정을 반복하면서 ssh brute force attack이 발견되면 해당 IP Address를 지속적으로 차단합니다.
작성자 : 저입니다. ^^
OpenLDAP에 계정 추가하기
작업 2010/04/19 15:59
- OpenLDAP에 계정추가하기
먼저 ldif 파일을 다음과 같이 만든다.
다음 명령으로 위의 파일에 있는 계정을 추가한다.
- 이제 비밀번호를 변경할 차례
GQ를 설치하고 실행한다.
crypt 패스워드를 얻기 위해서는 다음과 같이 입력한다.
GQ에서 위에 추가한 계정으로 이동한 후에 패스워드를 위에서 얻은 패스워드로 변경해준다.
이렇게하면 계정 추가 끝
** 위에 ldapadd 명령에 -x가 붙어있다. -x는 sasl을 사용하지 않게 해준다.
위에 계정이 제대로 추가되었는지 확인하려면
먼저 ldif 파일을 다음과 같이 만든다.
dn: uid=ldapaddtest,ou=people,dc=domain,dc=com
uid: ldapaddtest
cn: ldapaddtest
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: e2NyeXB0fSQxJG4wOXM0N3FFJE9JUlI4R1pJNjduZ2Q3UXJ5VThPZDE=
loginShell: /bin/bash
uidNumber: 10067
gidNumber: 100
homeDirectory: /home/ldapaddtest
uid: ldapaddtest
cn: ldapaddtest
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: e2NyeXB0fSQxJG4wOXM0N3FFJE9JUlI4R1pJNjduZ2Q3UXJ5VThPZDE=
loginShell: /bin/bash
uidNumber: 10067
gidNumber: 100
homeDirectory: /home/ldapaddtest
다음 명령으로 위의 파일에 있는 계정을 추가한다.
ldapadd -x -D "cn=admin,dc=domain,dc=com" -W -h localhost -f useradd.ldif
위 명령을 실행시키면 비밀번호를 물어본다. /etc/ldap.secret 파일에 있는 비밀번호를 입력한다.- 이제 비밀번호를 변경할 차례
GQ를 설치하고 실행한다.
sudo aptitude install gq
crypt 패스워드를 얻기 위해서는 다음과 같이 입력한다.
openssl passwd -crypt 1234
GQ에서 위에 추가한 계정으로 이동한 후에 패스워드를 위에서 얻은 패스워드로 변경해준다.
이렇게하면 계정 추가 끝
** 위에 ldapadd 명령에 -x가 붙어있다. -x는 sasl을 사용하지 않게 해준다.
위에 계정이 제대로 추가되었는지 확인하려면
ldapsearch -x -D "cn=admin,dc=domain,dc=com" -W -L "uid=ldapaddtest"
MySQL Proxy
작업 2010/03/29 14:15
MySQL Proxy is a simple program that sits between your client and MySQL
server(s) that can monitor, analyze or transform their communication.
https://launchpad.net/mysql-proxy
http://forge.mysql.com/wiki/MySQL_Proxy
MySQL에 fail-over와 load balancing(round-robin)을 하기 위한 가장 쉬운 도구.
https://launchpad.net/mysql-proxy
http://forge.mysql.com/wiki/MySQL_Proxy
MySQL에 fail-over와 load balancing(round-robin)을 하기 위한 가장 쉬운 도구.
키보드 보안 ActiveX들 최소버전 또는 바이패스로 설치하기
개인 2010/02/05 09:50
ClientKeeper KeyPro 최소버전
http://keypro.clientkeeper.co.kr/support/newsafe/
또는
http://keypro.clientkeeper.co.kr:8080/faq/safe.jsp
SoftCamp Secure KeyStroke 바이패스
http://www.softcamp.co.kr/scsk/bypass/install.asp
또는
http://www.softcamp.co.kr/scsk/bypass/
http://keypro.clientkeeper.co.kr/support/newsafe/
또는
http://keypro.clientkeeper.co.kr:8080/faq/safe.jsp
SoftCamp Secure KeyStroke 바이패스
http://www.softcamp.co.kr/scsk/bypass/install.asp
또는
http://www.softcamp.co.kr/scsk/bypass/
MySQL에서 특정 Thread가 "Sending data" 상태에서 오랜시간 머무른다면..
작업 2009/11/26 00:55
MySQL에 MyISAM으로 DB를 운영중에 간혹 "Sending data" 상태에서 1분이상 시간이 소요되는 경우가 있다.
이 때문에 Table에 Lock이 걸려 다른 Query들이 다 대기상태가 된다.
MySQL의 Query Caching 시스템에 문제가 있을 수 있으니 query cache를 off해 보란다.
http://bugs.mysql.com/bug.php?id=45544
뭐.. 나아지기만 바란다 ㅠㅠ
PS. 그러나 제일 중요한건 Slow Query가 발생하는 원인이 되는 Query를 수정하는 것이지 않을까. ㅎㅎ
이 때문에 Table에 Lock이 걸려 다른 Query들이 다 대기상태가 된다.
MySQL의 Query Caching 시스템에 문제가 있을 수 있으니 query cache를 off해 보란다.
http://bugs.mysql.com/bug.php?id=45544
뭐.. 나아지기만 바란다 ㅠㅠ
PS. 그러나 제일 중요한건 Slow Query가 발생하는 원인이 되는 Query를 수정하는 것이지 않을까. ㅎㅎ



