리눅스(우분투) 웹캠을 이용한 감시 시스템(zoneminder)

분류없음 2014.02.15 16:49


오래된 윈도우용 웹캠이 있다. 윈도우XP 까지만 지원된다.(3개정도 있던가.)
더군다나 제조회사는 이미 망해버린 상태이다.(웹캠 회사는 온전한 곳이 별로 없다)
대기업표 웹캠도 오래된 것들은 윈XP 이상의 드라이버는 제공하지 않는다.
윈도우 비스타, 윈도우7 을 사용하고 있는 상황에서 쓸모없는 물건이 되버렸다.
아직 윈XP 가 많이 쓰이지만, 왠지 시한부 인생을 사는 것 같이 씁쓸하다.

혹시나 하는 마음에 리눅스(우분투)에 연결했다.
3개중 2개는 그냥 인식되네, 나머지 하나도 테스트해봐야 겠다.
치즈(cheese)를 실행시켜보니 잘 되는구나.

웹캠 감시 시스템을 적용해 볼까?
몇가지 찾아보니, motion 과 zoneminder 라는 것이 있다.

우선 zoneminder 를 해보기로 한다.
참조 : http://www.linuxscrew.com/2007/11/05/howto-home-video-security-with-zoneminder-and-ubuntu/


설치하기
설치는 우분투 패키지를 제공하기 때문에 쉽다.

apt-get install zoneminder apache2 php5-mysql libapache2-mod-php5 mysql-server ffmpeg
카메라 영상을 웹에서 보기위해 apache2 가 필요하다.
mysql-server 는  zoneminder 의 설정등을 저장하기 위해 mysql 을 사용하기 때문에 필요하다.
웹기반으로 카메라 영상 감시를 하기위한 어플이 php 로 제작되어 있다.(php5, mod-php5 필요)
ffmpeg 는 카메라 영상을 동영상으로 저장하기 위해 필요한 패키지 이다.

http://localhost/zm 으로 접속하기 위해 apache 설정을 한다.
ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
아파치를 재시작한다.


옵셥설정하기
http://localhost/zm   으로 접속해서 기본 옵션을 설정한다.(오른쪽 윗 부분에 있다.)
옵션중에 다른 부분은 바꿀 것은 없고. image 부분에서
두번째 항목  ZM_STREAM_METHOD  를  mpeg 에서  jpeg 로 바꾼다.(save 를 꼭 해준다)

그리고 zoneminder 를 재시작해준다.
/etc/init.d/zoneminder restart
여기까지 한후, 감시설정을 해준다.(웹캠이 여러개가 있다면, 여러개의 감시설정을 할 수 있다.)

감시설정하기
"Add New Monitor" 를 눌러 설정을 한다.

아무 이름이나 쓰고, Local 로 해준다. Function 은  원하는 것으로 선택한다.
잘못 이해했는지 모르겠지만, Modect 로 설정하면 Event 가 발생할 듯 싶은데, 잘 안된다.
그래서 Mocord 를 하니 제대로 Event 를 잡아내는 듯 하다.(Record 를 해야 하나?)
그리고 저장한다.

소스(Source) 부분에서  웹캠 디바이스를 지정한다.(보통 /dev/video0)
여러개 있다면,  video1 , video2  등의 디바이스가 생겼을 것이다.
capture width , height 는 320x240 이 적당할 듯 하다.
640x480 등은  커널 공유메모리를 늘려줘야 하나보다.(shmall , shmmax 관련)

감시화면보기
모니터 설정후에  설정한 이름을 클릭하면

다음처럼 웹캠 화면이 나온다.(지금은 어두워서, 밝은 것은 프라이버시 문제로...)

이벤트도 기록되는 것을 볼 수 있다.(어떤 상황에 이벤트가 생성되는지 정확한 기준은 아직 모르겠다)

주의사항 : /var/cache/zoneminder 에 영상이 저장된다. 충분한 공간을 확보해야 한다.


영상이 잘 안보인다면
감시화면을 띄웠을때 카메라 영상이 제대로 나오지 않는다면,
/var/log/messages 를 확인해본다.  퍼미션 에러가 나온다면.
아래처럼 권한을 조정해 본다.(zoneminder 재시작)
chmod 4755 /usr/bin/zmfix
그래도 안된다면, 아래처럼 video0 의 other 권한을 rwx 로 바꿔준다. (또는 666 ,777 )
chmod o+rwx /dev/video0


ps. 테스트에 사용된 웹캠이  Z-Star Microelectronics Corp. ZC0301 WebCam 이다.(lsusb)
저게  LED 조명이 있는데 꺼져있다. 켜는 방법을 아직 못찾겠다.(없나?)
그러고보니 윈도우에서도 조절을 못했던 것 같다.

출처: http://blog.1day1.org/319



저작자 표시
신고

설정

트랙백

댓글

Nginx와 php연동

분류없음 2014.01.22 00:03

Nginx와 php연동 Nginx

2013/08/30 08:17

복사 http://blog.naver.com/roggue2/40196175888

전용뷰어 보기

nginxphp를 연동하기 위해서는 php-fpm이 필요하다.

php-fpmphp 5.2.x 버전 이상부터 사용 가능 가능한데 5.2 버전에서 php-fpm을 사용하려면 php core를 따로 컴파일 해야 해서 불편하다.

php 5.3.6 버전부터 php-fpmcore에 통합되어 따로 컴파일하지 않아도 되므로 php 5.3.6 이상으로 업데이트 한다.

php 업데이트가 끝나면 본격적으로 php-fpmmysql, php를 설치한다. (참조 : http://opentutorials.org/module/384/4332)

1. yum을 이용하여 phpmysql,php-fpm을 설치 합니다.

# yum –enablerepo=remi install php php-fpm php-mysql mysql-server

 

2. Nginx 설정 변경  

# vi /etc/nginx/nginx.conf 또는 #vi /etc/nginx/sites-available/default 

필자의 경우 소스컴파일을 해서 경로명이 # vi /usr/local/nginx/conf/nginx.conf 임. 

nginx.conf 의 다음 내용을 변경 (or 주석 제거
#
pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.
php$ {

  root           /usr/share/nginx/html;

  fastcgi_pass   127.0.0.1:9000;

  fastcgi_index  index.php;

  fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;

  include fastcgi_params;

}

 

 

3. FestCGInginx 시작

# /etc/init.d/phpfcgi start

# /etc/init.d/nginx star


저작자 표시
신고

설정

트랙백

댓글

Nginx - PHP 연동

분류없음 2014.01.21 23:51

Nginx와 PHP를 연동해 보자 ^^

1. PHP5-FPM 설치

prompt> sudo apt-get install php5-fpm

Nginx에서 PHP5는 PHP-FPM (php fastcgi process manager) 를 통해 동작한다.

PHP-FPM은 데몬 프로세스로 동작하며 기본적으로 9000번 포트에서 FastCGI 서버를 작동시킨다.
9000포트 사용은 file stream으로 변경하여 속도를 더 높일 수 있다 (다음 설정 부분 참고)

2. PHP5-FPM 설정 변경

prompt> sudo vim /etc/php5/fpm/pool.d/www.conf

아래 내용 찾아서 내용 변경

; Note: This value is mandatory.
;listen = 127.0.0.1:9000
listen = /dev/shm/php5-fpm.sock

/dev/shm/ 은 ubuntu의 공유메모리 영역이다.
이 부분에 stream을 사용하여, PHP5-FPM의 처리속도를 높일 수 있다

prompt> sudo /etc/init.d/php5-fpm restart
php5-fpm 다시 시작


3. Nginx 설정 변경

출처: http://devxpert.egloos.com/viewer/1012163


prompt> sudo vim /etc/nginx/sites-available/default

다음 부분을 추가 (or 주석 제거) 
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                # fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/dev/shm/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

prompt> sudo nginx -t
nginx configuration 설정 확인

prompt> sudo nginx -s reload
nginx 설정 적용


이제 index.php 파일을 간단히 만들어서 동작 확인만 해보면 되겠네요^^

아래 샘플 파일로 웹브라우저에 접속 시, (http://localhost/index.php)
php 정보화면이 나오면 정상적으로 적용된 겁니다 ^^


sample index.php
===============================================================================
 <html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?>
 <?php phpinfo(); ?>
 </body>
</html>
===============================================================================


저작자 표시
신고

설정

트랙백

댓글

아파치 최적화 튜닝하기

분류없음 2014.01.21 16:07







출처: http://openlife.tistory.com/340


이전에 워드프레스 성능 개선팁이라는 게시물을 포스팅했습니다. 비단 워드프레스 블로그에 국한되는 이야기는 아니며 가장 널리 쓰이는 웹서버인 아파치에서 동시접속자를 튜닝하는 방법을 설명하고자 합니다. 여기서 설명하는 것이 절대적인 진리는 아니며 시스템을 꾸준히 모니터링하면서 알맞은 값을 직접 찾으셔야 합니다.

웹 서버를 며칠간 재시작하지 않고 놔둬서 현재 서비스 상태를 파악하는 게 가장 좋을 것 같습니다. 간단히 아파치 서버와 클라이언트 사이의 동시 소켓 연결 개수를 확인하기 위해 아래와 같이 명령합니다.

$ netstat -nta | grep :80.*ESTABLISHED | wc -l

이 연결 개수는 아파치 서버가 현재 처리 중인 소켓 연결 개수이며 앞으로 설명할 MaxClients 수를 넘지 않도록 유의해야 합니다.

그런데 아직 서비스를 시작하기 전이라 웹 서버의 부하를 확인하기가 어렵다면 아파치 벤치마킹 도구(ab)를 이용해볼 수도 있습니다.

$ ab -n 3000 -c 200 http://example.com/

위 명령어는  http://example.com 사이트에 200명의 사용자가 15번씩 총 3000번 요청하는 것입니다. 사이트 주소의 끝에 / (슬래시)를 붙이는 것을 잊지 마세요. 여러 페이지를 계속 접속 시도해 동시접속 부하를 주세요. 그리고 여러 가지 시스템 상황을 모니터링해봅시다.

이렇게 부하를 줘가면서 시스템의 메모리 현황을 측정하겠습니다. 아래 예제에서는 물리 메모리가 2000MB로 확인되었습니다.

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2000        664       1335          0         15         86
-/+ buffers/cache:        562       1437
Swap:          875        344        531
이제 MySQL 메모리 사용량을 측정합니다.
$ ps aux | grep mysql | awk '{print $6}' | awk '{total = total + $1} END {print total/1024}'
9.11328

그리고 아파치의 메모리 사용량도 측정합니다.

$ ps aux | grep apache2 | awk '{print $6}' | awk '{total = total + $1} END {print total/1024}'
1848.07

아파치 프로세스의 개수도 계산합니다.

$ ps aux | grep apache2 | wc -l
183

그럼 아파치 전체 메모리 사용량을 아파치 프로세스 개수로 나누어 계산해서 아파치 프로세스 평균 메모리 사용량은 약 10.09MB라는 것을 알았습니다. 따라서 이론적인 최대동시연결수는 아래와 같이 계산할 수 있습니다.

(전체 메모리 – MySQL 메모리 사용량) / 아파치 프로세스 평균 메모리 사용량

= (2000 – 9.11) / 10.09

= 197.31

램이 2G인 서버에서 동시연결소켓수가 197.31이면 이미 최대라는 이야기입니다. 실제 서버에는 bind, ssh, postfix, dovecot 다른 데몬 등이 돌아가고 있을 수 있으므로 이 값은 더 줄어듭니다.

아파치에서 동시접속을 처리하는 방법을 이해해야 합니다. 동시접속 처리방법에는 프로세스를 이용하는 법(prefork 방식)과 스레드를 이용하는 법(worker 방식)이 있습니다. 아파치 서버의 기본 동작은 prefork 방식입니다.

 

 

 

 

 

prefork 방식은 위 그림처럼 하나의 연결은 스레드가 하나인 자식 프로세스가 처리합니다. 프로세스를 만드는 비용은 스레드를 만드는 비용보다 더 크고 메모리를 더 많이 차지합니다. 하지만 프로세스간 메모리를 공유하지 않아 서로 독립적이기 때문에 문제가 있는 연결이 다른 연결을 간섭하지 않습니다.

반면에 worker 방식은 위 그림처럼 자식 프로세스 안에 여러 스레드가 있고 이 스레드는 하나의 연결을 처리합니다. 스레드를 만드는 것이 프로세스를 만드는 것보다 속도가 더 빠르고 메모리를 덜 차지하지만 문제가 생긴 스레드는 자식 프로세스 안의 다른 스레드까지 망가뜨릴 위험이 있습니다. 또한 경쟁상태(race condition)도 조심해야합니다.

여기서는 가장 널리 쓰이는 prefork 방식이며 이제 본론으로 들어가 최대동시접속자수를 어떻게 튜닝할지 이야기하겠습니다.

앞서 계산해서 얻은 값을 토대로 튜닝한다면 아파치의 prefork 지시어 설정은 아래와 같이 할 수 있습니다.


여기서 기억해둘 사항은 캐싱을 적극적으로 활용하면 아파치 프로세스가 10MB 정도 차지하지만 캐싱하지 않으면 프로세스당 메모리가 30MB까지도 잡힙니다. 즉, PHP 코딩이 아파치 프로세스의 메모리 사용량에 영향을 주고 최대동시접속연결수도 영향을 줍니다. 그리고 MaxClients 값을 비롯해 StartServers 등의 값을 너무 크게 잡으면 오히려 아파치 프로세스의 점유 메모리가 더 커지는 현상이 있으므로 적당한 값을 지정해야 합니다.

ServerLimit 값은 최대 자식 프로세스의 수인데 MaxClients 값보다 높게 설정하지 않아야 합니다. 구글링하다보면 MaxClients 값을 256 이상 지정하기 위해서 아파치 소스를 다시 컴파일해야 한다는 게시물들이 있는데 그럴 필요가 없습니다. 최대값이 2000이라 이미 충분히 큽니다. MaxClients 값이 2000을 넘길 필요가 없다면 여러분은 ServerLimit와 MaxClients 값을 동일한 값으로 지정해주면 됩니다.

StartServer 값은 아파치 데몬을 처음 시작할 때 프로세스 개수이며 이 값은 MinSpareServer 또는 MaxSpareServer의 값과 일치시켜주면 됩니다.

MinSpareServers와 MaxSpareServers 값은 요청을 기다리는 몇 개의 자식 프로세스를 여분으로 둘 지 범위를 지정합니다. 아파치 데몬이 프로세스의 개수를 이 범위 안으로 두기 위해 노력하지만 이를 보장하지는 않습니다. 초당 4개 이상의 자식 프로세스를 생성(spawn)하지 않도록 설정해야 합니다. 보통은 MinSpareServers 값은 MaxClients의 10~25% 정도 크기의 값으로 MaxSpareServers 값은 25~50% 크기의 값으로 지정합니다. 그러나 이 값이 커지면 아파치 프로세스의 점유 메모리도 함께 커지는 현상이 있으니 크다고 능사는 아니므로 유념하세요.

아파치 웹 서버는 오픈소스로서 끊임 없이 패치하고 있지만 C로 작성되어 있어 메모리 누수(leak)나 무한루프 등의 서버 부하(load) 발생할 수도 있습니다. 그래서 일정 횟수 동안 클라이언트 요청을 처리하고 프로세스가 죽도록 되어 있습니다. 아파치 매뉴얼에서는 디폴트로 클라이언트 요청을 10,000번 처리하고 죽는다고 합니다. 이 클라이언트 요청을 몇 번 처리하고 프로세스가 죽을지는 MaxRequestPerChild 값의 변경해 지정할 수 있으며 시스템 사양이 좋다면 이 값을 넉넉히 할 수 있으며 프로세스가 절대 죽지 않도록 하려면 0으로 합니다. 3000에서 4000 정도 주면 적당하지 싶습니다.

이외에도 Timeout, KeepAlive, MaxKeepAliveRequests, MaxKeepAliveTimeout 같은 옵션도 성능에 영향을 미칩니다.

Timeout 10

기본적으로 소켓 연결 유지 시간입니다. 클라이언트가 요청하여 아파치와 연결된 이후로 이 시간 동안 아무런 메시지가 없으면 오류로 처리됩니다. 네트워크 회선 상태가 좋지 않으면 이 값을 크게 할 수 있습니다. 국내 사용자만 고려한다면 10초 정도 국외 사용자까지 고려하면 20초가 좋습니다.

KeepAlive를 On 해으면 첫 요청시에 열어 놓은 연결을 KeepAliveTimeout에서 지정한 시간 동안 끊지 않습니다. 그래서  img src=”http://~” 태그로 이미지를 많이 링크하고 있으면 매번 소켓을 열지 않기 때문에 접속 속도가 향상됩니다. 하지만 동시접속자수는 줄어들 수 있습니다.이 블로그의 경우에는 동시 접속자가 많지 않으므로 빠른 접속 속도를 위해 켰습니다.

KeepAliveTimeout 2

국내 접속자가 많으면 3초 이하 국외 접속자가 많으면 10초까지 지정할 수 있다고 합니다. 10초 이상은 메모리 점유로 동시접속자가 크게 감소할 수 있다고 판단됩니다.

MaxKeepAliveRequests 100

KeepAlive 상태에서 처리할 최대 요청 수로 보통 웹 사이트에서는 100 정도 지정하면 충분합니다.

참고로 개인 블로그가 아닌 정말 접속자가 많은 사이트를 운영할 경우에는 관리상 웹 어플리케이션 서버와 이미지 서버를 분리해 운영하는 것이 맞습니다. 특히, 웹 어플리케이션 서버의 경우에는 KeepAlive Off로 하고 이미지 서버는 연결 유지를 위해 KeepAlive On으로 설정해두기도 합니다.

워드프레스뿐만 아니라 아파치를 쓰는 어떤 웹서비스나 적용 가능한 팁입니다. 이제 쌩쌩 달리는 아파치를 경험하세요.

저작자 표시
신고

설정

트랙백

댓글

pogo nginx와 php

분류없음 2014.01.21 14:10

출처: http://dione6.blogspot.kr/2013/03/nginx-php-pogoplug-series-4.html


1. 시작하기 전에...

 http://www.nextlab.co.kr:8080/nw/에서 100% 참고하였습니다. 이 문서는 포고플러그 시리즈 4에 Archlinux가 설치되었을 때를 기준으로 설명합니다.

NGINX는 가벼워서 저성능의 서버에서도 실행되며, 각종 보완되지 않은 취약점에 해킹당할 수 있는 서버의 앞에 둠으로써  보안이슈를 보완할 수 있는 서버입니다.(원본링크) 그리고 참고 사이트에서는 프로세스 실행 시 rc.d가 먹히는데, series 4에서는 먹히지 않아서 systemctl로 대체합니다.


2. NGINX설치

pacman -Sy nginx
systemctl start nginx

nginx가 실행되는지 테스트하는 방법은 웹브라우저를 열어서 http://pogoplug_IP를 입력하여 엽니다. 그럼 'welcome to nginx'라는 문구가 나옵니다.

기본 홈 위치는 /usr/share/nginx/html 입니다.
3. PHP 설치 및 연동

static한 html, image나 간단한 파일을 올릴 목적이면 이 정도로 끝낼 수 있지만, 우리는 그누보드까지 설치가 가능한 제대로 된 웹서버이기 때문에 php 설치 및 연동 설정 작업이 필요합니다.

pacman -Sy php-fpm
pacman -Sy php-gd
systemctl start php-fpm



4. PHP 설정

nano /etc/php/php.ini

(samba를 무사히 설치했다면 nano 대신 윈도우 탐색기에서 열어도 무방합니다. 단 ultra edit같이 UNIX 파일을 지원하는 에디터를 이용해야 합니다.)

아래와 같이 수정하거나 주석(;)을 지워주어야 합니다. (새로 추가하는 것이 아니라 찾아보면 해당 항목이 존재합니다.)

검색으로 보면 ;주석으로 묶인 첫번째 'short_open_tag'부분을 수정하지 말고 밑에 나오는 두번째 short_open_tag=Off를 수정합니다.

 ...쭈~욱 내려가다 보면 나옴.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
short_open_tag=Off를 다음과 같이 수정합니다.

short_open_tag=On      (php에서 <? 로 짧은 시작태그 쓸 수 있도록 설정)

...또 쭈~욱 내려가다 보면 ;주석으로 묶인 아래와 같은 부분이 나오는데, ;주석을 지웁니다.
 extension=mysql.so    (mysql 연동)
 extension=gd.so         (gd module or php 연동)


5. nginx 설정 (가장 중요한 부분입니다.)

nano /etc/nginx/nginx.conf
아래 내용은 다음을 기준으로 설정합니다. (전체를 추가하는 것이 아니라 부분적으로 추가 또는 수정하거나 ;주석을 지워주면 됩니다.)
...

http {
    ...

    access_log   off;
    gzip   on;

    server {
        listen       80;
        server_name   localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
            root    /srv/http;
            index  index.html index.htm index.php;

        }

    ...앞에 ;주석을 지웁니다.
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
            try_files $uri =404;
            root                /srv/http;
            fastcgi_pass    unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index   index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include            fastcgi_params;

        }
       
        location = /favicon.ico {
            return 204;
            access_log     off;
            log_not_found  off;

        }

ctrl+o, 엔터로 저장하고 ctrl+x로 나옵니다.

cd /srv/http
(디렉터리가 존재하지 않는다는 에러가 발생하면 # mkdir /srv/http 로 디렉터리를 생성하면 됩니다.)

systemctl restart php-fpm
systemctl restart nginx



6. php 연동 테스트

wget http://pogo.nextlab.co.kr:8080/phpinfo.php.bak
mv phpinfo.php.bak phpinfo.php

라고 각각 입력하고 엔터를 칩니다.
그리고 브라우저에서 '자신의 포고_IP/phpinfo.php' 를 열었을 때 php 설치 정보 페이지가 제대로 나온다면 php 연동 작업까지 성공한 것입니다.


저작자 표시
신고

설정

트랙백

댓글

mysql 제약조건 추가

분류없음 2014.01.20 14:43

ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] PRIMARY KEY(컬럼명);


EX) ALTER TABLE product ADD CONSTRAINT product_pdcode_pk PRIMARY KEY(pdcode);

product 라는 테이블에 product_pdcode_pk 라는 이름을 가진 PK 제약조건을 추가한다.


※ 이미 생성된 테이블에 FK 제약조건 추가하기


ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] FOREIGN KEY(컬럼명)

REFERENCES [부모테이블명](PK컬럼명) [ON DELETE CASCADE];


EX)
ALTER TABLE category ADD CONSTRAINT category_pcode_fk FOREIGN KEY(pcode)
REFERENCES product(pdcode) ON DELETE CASCADE;


※ 제약조건의 삭제


ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건이름];


EX) ALTER TABLE product DROP CONSTRAINT product_pcode_fk;

제약조건을 삭제할 경우에는 FK 제약조건부터 먼저 삭제해준다.


※ NOT NULL 제약조건의 추가


ALTER TABLE [테이블명] MODIFY [컬럼명] [데이터타입] CONSTRAINT [제약조건이름]

NOT NULL;


EX) ALTER TABLE product MODIFY pname varchar2(20) CONSTRAINT product_pname_nn

EX) NOT NULL;


출처: http://lucael.blogspot.kr/2009/05/mysql-%EC%9D%B4%EB%AF%B8-%EC%83%9D%EC%84%B1%EB%90%9C-%ED%85%8C%EC%9D%B4%EB%B8%94%EC%97%90-pk-%EB%B0%8F-fk-%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0.html

저작자 표시
신고

설정

트랙백

댓글

파일 이름을 euc-kr에서 utf-8로 일괄적으로 변환하기

리눅스 2014.01.20 14:03
#!/bin/sh
  
for X in `find .`;do
    filename=`echo $X | iconv -f euc-kr -t utf-8`
    mv "$X" "$filename"
done


출처: http://b4you.net/blog/194


저작자 표시
신고

설정

트랙백

댓글

포고플러그 보안

분류없음 2014.01.19 22:10
참초: http://cafe.naver.com/pogolinux/31


본글은 클리앙의 Ethica 님께서 클리앙 팁과강좌 게시판에 작성하신 글입니다.

http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=149147


Ethica님 허락하에 본 카페에 스크랩 된 게시물임을 알려드리며, 많은 참고 바랍니다.

fail2ban은 특정 서비스로 로그인시 몇회 이상 실패할 경우 일정기간 동안 차단하는 툴입니다. 


---------------------------------------------------------------------------------------------------------


포 고플러그를 ftp, samba, torrent등 많이 사용하시죠? 시스템 관리자라면 보안 정책을 세워서 관리를 하시겠지만 미디어서버나 토렌트 머신으로 사용하시는 분들이 많아서 신경을 덜 쓰실겁니다. 저도 /var/log/auth.log가 많이 쌓여서 보다가 중국, 미국, 호주, 국내를 비롯하여 ssh 무작위 로그인이 보이더군요. 자, 막아봅시다. ^^

 

fail2ban은 특정 서비스로 로그인시 몇회 이상 실패할 경우 일정기간 동안 차단하는 툴입니다. 

 

참고: http://www.fail2ban.org/

        https://wiki.archlinux.org/index.php/Fail2ban

 

[root@alarm ~]# pacman -S python2-pyinotify

 

[root@alarm ~]# pacman -S fail2ban

 

[root@alarm ~]# pacman -S whois

 

[root@alarm ~]# pacman -S gamin

 

[root@alarm ~]# systemctl enable fail2ban

 
[root@alarm ~]# cat /etc/systemd/system/multi-user.target.wants/fail2ban.service
[Unit]
Description=Ban IPs that make too many password failures
After=syslog.target network.target
 
[Service]
Type=forking
ExecStart=/usr/bin/fail2ban-client start
ExecReload=/usr/bin/fail2ban-client reload
ExecStop=/usr/bin/fail2ban-client stop
PIDFile=/var/run/fail2ban/fail2ban.pid
CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW
 
[Install]
WantedBy=multi-user.target
 
vi나 nano로 [Service] 섹션에 CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW 추가
 
[root@alarm ~]# cat /etc/fail2ban/filter.d/fail2ban.conf
# Fail2Ban configuration file
#
# Author: Tom Hendrikx
#
# $Revision$
#
 
[Definition]
 
# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>\S+)
# Values:  TEXT
#
 
# Count all bans in the logfile
failregex = fail2ban.actions: WARNING \[(.*)\] Ban <HOST>
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
 
# Ignore our own bans, to keep our counts exact.
# In your config, name your jail 'fail2ban', or change this line!
ignoreregex = fail2ban.actions: WARNING \[fail2ban\] Ban <HOST>
 
긁어서 /etc/fail2ban/filter.d/fail2ban.conf로 저장합니다.
 
[root@alarm ~]# cat /etc/fail2ban/jail.conf
# Fail2Ban jail specifications file
#
# Comments: use '#' for comment lines and ';' for inline comments
#
# Changes:  in most of the cases you should not modify this
#           file, but provide customizations in jail.local file, e.g.:
#
# [DEFAULT]
# bantime = 3600
#
# [ssh-iptables]
# enabled = true
#
 
# The DEFAULT allows a global definition of the options. They can be overridden
# in each jail afterwards.
 
[DEFAULT]
 
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8
ignoreip = 172.30.1.2/24
 
# "bantime" is the number of seconds that a host is banned.
# bantime : 1 day
bantime  = 86400
 
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600
 
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
 
# "backend" specifies the backend used to get files modification.
# Available options are "pyinotify", "gamin", "polling" and "auto".
# This option can be overridden in each jail as well.
#
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
#              If pyinotify is not installed, Fail2ban will use auto.
# gamin:     requires Gamin (a file alteration monitor) to be installed.
#              If Gamin is not installed, Fail2ban will use auto.
# polling:   uses a polling algorithm which does not require external libraries.
# auto:      will try to use the following backends, in order:
#              pyinotify, gamin, polling.
backend = gamin
 
# "usedns" specifies if jails should trust hostnames in logs,
#   warn when reverse DNS lookups are performed, or ignore all hostnames in logs
#
# yes:   if a hostname is encountered, a reverse DNS lookup will be performed.
# warn:  if a hostname is encountered, a reverse DNS lookup will be performed,
#        but it will be logged as a warning.
# no:    if a hostname is encountered, will not be used for banning,
#        but it will be logged as info.
usedns = warn
 
 
# This jail corresponds to the standard configuration in Fail2ban 0.6.
# The mail-whois action send a notification e-mail with a whois request
# in the body.
 
[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
#          sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com]
logpath  = /var/log/auth.log
maxretry = 3
 
[fail2ban]
enabled  = true
filter   = fail2ban
action   = iptables-allports[name=fail2ban]
#       sendmail-whois[name=fail2ban]
logpath  = /var/log/fail2ban.log
# findtime: 1 week
findtime = 604800
# bantime: 1 week
bantime  = 604800
 
긁어서 /etc/fail2ban/jail.conf로 저장합니다.
(저 의 설정입니다. 자신에게 맞게 수정하세요. ssh만 설정했는데 vsftpd나 운영하시는 서비스에 맞춰서 설정하시면 됩니다. ignoreip에 자신의 공유기 ip대역대를 설정하시고, 외부에서 접근시 외부 ip도 적어두시면 됩니다.)
 
-----

[DEFAULT] 섹션 : 아래의 설정사항들에 대한 기본값을 설정한다. 이 섹션에서 설정한 기본값은 각각의 필터항목에서 개별적으로도 설정이 가능하다.

 

ignoreip : 무시할 IP주소 (여기에 입력한 IP는 차단 하지 않음) CIDR Mask, DNS, IP를 입력가능

              공백을 이용하여 여러개 입력 가능

bantime : 해킹시도가 감지되었을 때 해당 IP를 차단할 차단기간 (기본값 : 600, 단위 : 초)

findtime : 로그에서 검색할 시간 (기본값 : 600, 단위 : 초)

maxretry : 일정시간동안 해킹시도 횟수

backend : 로그 파일 변경을 감지할 방법 (gamin, polling, auto)

               gamin : Gamin(file alteration monitor)설치된 경우 사용가능

               polling : 주기적으로 점검

               auto : Gamin이 설치된 경우 gamin사용, 아니면 polling 사용

 

* ignoreip에 있는 주소를 제외한 다른 곳에서 findtime 동안 maxretry 횟수 만큼 인증실패가 일어 난 경우 bantime 시간 만큼 해당 IP를 차단한다.

 
-----
 
[root@alarm ~]# mkdir /var/run/fail2ban
 
[root@alarm ~]# systemctl start fail2ban
 
[root@alarm ~]# systemctl status fail2ban
fail2ban.service - Ban IPs that make too many password failures
          Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled)
          Active: active (running) since 화 2013-03-05 15:43:47 KST; 1h 7min ago
         Process: 219 ExecStart=/usr/bin/fail2ban-client start (code=exited, status=0/SUCCESS)
        Main PID: 271 (fail2ban-server)
          CGroup: name=systemd:/system/fail2ban.service
                  ├─271 /usr/bin/python2 /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
                  └─273 /usr/lib/gamin/gam_server
 
 3월 05 15:43:41 alarm fail2ban-client[219]: 2013-03-05 15:43:41,038 fail2ban.server : INFO   Starting Fail2ban v0.8.8
 3월 05 15:43:41 alarm fail2ban-client[219]: 2013-03-05 15:43:41,053 fail2ban.server : INFO   Starting in daemon mode
 3월 05 15:43:47 alarm systemd[1]: Started Ban IPs that make too many password failures.
 
부팅시 iptables 실행
[root@alarm ~]# systemctl enable iptables
 
[root@alarm ~]# iptables -nvL
Chain INPUT (policy ACCEPT 658 packets, 54986 bytes)
 pkts bytes target     prot opt in     out     source               destination
  352 24636 fail2ban-fail2ban  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
  273 20844 fail2ban-SSH  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
  361 25896 fail2ban-fail2ban  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
  273 20844 fail2ban-SSH  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain OUTPUT (policy ACCEPT 646 packets, 181K bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain fail2ban-SSH (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       198.7.63.79          0.0.0.0/0
    0     0 DROP       all  --  *      *       60.23.248.21         0.0.0.0/0
    0     0 DROP       all  --  *      *       81.57.244.146        0.0.0.0/0
    0     0 DROP       all  --  *      *       61.147.109.195       0.0.0.0/0
  546 41688 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
 
Chain fail2ban-fail2ban (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       60.23.248.21         0.0.0.0/0
  713 50532 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
 
iptables 보시면 추가된 ip들이 보입니다.
 
재부팅시에도 적용해야 겠죠?
[root@alarm ~]# iptables-save >/etc/iptables/iptables.rules
 
[root@alarm ~]# fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
입력해보시면 로그인 실패한 ip들이 보입니다. 많아서 생략했습니다.
 
[root@alarm ~]# pacman -S geoip
 
[root@alarm ~]# cat Fail2BanGeo.py
#!/usr/bin/env python2
# Fail2BanGeo.py
import os
import re
f = open('/var/log/fail2ban.log', 'r')
pattern = r".*?Ban\s*?((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$"
p = re.compile(pattern)
for i in f:
        m = p.match(i)
        if m:
                ip = m.group(1)
                file = os.popen('geoiplookup %s' % ip)
                print file.read()
 
[root@alarm ~]# ./Fail2BanGeo.py
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: US, United States
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: KR, Korea, Republic of
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: CA, Canada
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: FR, France
 
GeoIP Country Edition: CN, China
 
GeoIP Country Edition: US, United States
 
해킹 시도하는 놈들 중국, 미국, 한국, 프랑스도 있네요. 
 
이제 신경을 덜 쓰셔도 되겠습니다. ^.^;


저작자 표시
신고

설정

트랙백

댓글

centos transmission 설치

분류없음 2014.01.19 17:20

출처: http://shapeace.tistory.com/160


Seedbox는 디지털 파일의 업/다운로드를 위해 사용되는 개인 전용 서버를 말합니다. 


토렌트, HTTP, FTP, SFTP, RSYNC 등의 프로토콜로 접근이 가능합니다. 


즉, 하나의 파일을 여러가지 클라이언트로 다운로드 가능합니다.

 

CentOS 5.6 64bit 에서 셋팅 방법입니다.

 

[참고]

1. http://www.diyseedbox.com/tutorial-dedicated-torrent-seedbox-server/

2. http://geekery.blog.com/2011/02/17/transmission-2-2-1-daemon-cli/



1. 필요 패키지 설치

yum -y install gcc gcc-c++ make openssl-devel pkgconfig curl-devel perl-XML-Parser perl-libwww-perl gettext

yum -y upgrade

 

2. intltool 설치

cd /usr/local/src

wget -q http://ftp.gnome.org/pub/gnome/sources/intltool/0.40/intltool-0.40.6.tar.gz

tar zxf intltool-*.tar.gz

cd intltool-*

./configure --prefix=/usr

make -s

make -s install

3. libevent 설치
cd /usr/local/src

wget -q http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz

tar zxf libevent-*.tar.gz

cd libevent-*

./configure --prefix=/usr

make -s

make -s install
 
4. Transmission 설치
cd /usr/local/src

wget -q http://download.m0k.org/transmission/files/transmission-2.22.tar.bz2

tar xjf transmission-*.tar.bz2

cd transmission-*

./configure --prefix=/usr --disable-gtk --disable-libappindicator --disable-libcanberra --disable-gconf2 LIBEVENT_CFLAGS=-I/usr/include LIBEVENT_LIBS="-L/usr/lib -levent"

make -s

make -s install
 
5. 사용자 계정 생성
useradd -m transmission

passwd transmission
 
6. init 스크립트 생성
wget -O /etc/init.d/transmissiond http://pastie.org/pastes/962731/download

chmod 755 /etc/init.d/transmissiond
 
7. Transmission daemon 부팅시 자동실행 설정
chkconfig --add transmissiond

chkconfig --level 345 transmissiond on
 
8. Transmission daemon 시작/종료
service transmissiond start

service transmissiond stop

 
이때 에러가 발생했다. 아래 URL에서 RPM 다운받고 설치해서 해결됨
http://geekery.blog.com/2011/02/17/transmission-2-2-1-daemon-cli/
 
9. Transmission 설정
cd /home/transmission/.config/transmission/

sed -i 's/^.*rpc-whitelist-enabled.*/"rpc-whitelist-enabled": false,/' settings.json

sed -i 's/^.*rpc-authentication-required.*/"rpc-authentication-required": true,/' settings.json

sed -i 's/^.*rpc-username.*/"rpc-username": "username",/' settings.json

sed -i 's/^.*rpc-password.*/"rpc-password": "password",/' settings.json
 
10. 디렉토리 생성

mkdir -p /home/transmission/Downloads/


chown -R transmission.transmission /home/transmission/Downloads/

chmod g+w /home/transmission/Downloads/

11. Transmission 시작
service transmissiond start
 
12. ConfigServer Security & Firewall application 설치
cd /usr/local/src

wget http://www.configserver.com/free/csf.tgz

tar zxf csf.tgz

rm -f csf.tgz

cd csf

./install.generic.sh
 
cd /etc/csf

sed -i 's/^TESTING =.*/TESTING = "0"/' csf.conf

sed -i 's/^TCP_IN =.*/TCP_IN = "21,22,9091,51413,30000:35000"/' csf.conf

sed -i 's/^TCP_OUT =.*/TCP_OUT = "1:65535"/' csf.conf

sed -i 's/^UDP_IN =.*/UDP_IN = "20,21,51413"/' csf.conf

sed -i 's/^UDP_OUT =.*/UDP_OUT = "1:65535"/' csf.conf

service csf restart
 
13. 확인
 
http://[YOUR_SERVER_IP]:9091/transmission/web/


저작자 표시
신고

설정

트랙백

댓글

포고플러그 E02 아치리눅스에 FTP서버, Apache 서버, MySQL 설치하기

포고플러그 2014.01.16 22:16
포고플러그 E02 아치리눅스에 FTP서버, Apache 서버, MySQL 설치하기

#1 FTP서버

vsftp를 설치하기에 기존 리눅스 서버와 설정은 동일합니다.

다만 개인용 리눅스 머신이기에 보안 설정 chroot(상위폴더 이동을 위한 제한 설정)는 하지 않았습니다.

pacman -Sy vsftpd

FTP 서버인 vsftp 설치는 한줄로 끝났습니다. 참. 쉽죠.~

이제 설정만 하면 되겠죠.

vi /etc/vsftpd.conf

#anonymous_enable=YES # 주석처리 했습니다.

local_enable=YES # 주석 제거 합니다.

write_enable=YES # 주석 제거 합니다.

local_umask=022 # 주석 제거 합니다.

:wq 저장하고 나옵니다.

vsftpd 데몬 시작,중지 명령어

시스템 재구동시 서비스 자동 시작 할려면

systemctl enable vsftpd.service

포고플러그 서비스와 연동해서 사용할려면

useradd 명령어로 새로운 계정 만들고 root 그룹에 등록해 둡니다.

그리고 ln -s /media/usb1 usb1

ln -s /media/Lexar usb2

이처럼 FTP 로그인시 해당 포고플러그 서비스와 연동된 폴더를 심블록 링크로 걸어 두면

바로 FTP 로그인시 편하게 파일을 업로드 할 수 있습니다.

알FTP는 사용하지 않습니다. 왜냐고 물으신다면 그냥 웃지요.

#2

Apache, MySQL 설치는 보통 웹서버로 이용하기 위함인데 한방에 설치를 합니다.

pacman -Sy apache,php,php-apache,mysql

설정 방법 또한 기존 리눅스 서버에서 사용했던 방법과 동일합니다.

APM 세팅 방법과 동일하니 어려운점 하나도 없겠죠.

기존 MySQL이 MariaDB로 변경 되었습니다만 동일합니다.

(오라클 > 썬 > MySQL : 악마의 기업 사냥법으로 MySQL을 인수 했었죠.)

mysql => mariadb 변경으로 설치시에는 mariadb로 하셔도 됩니다.

pacman -Syu mariadb

mysql 설치를 했다면 데몬을 올리고 설정을 합니다.

systemctl start mysqld

/usr/bin/mysql_secure_installation

(mysql 서비스 데몬)

mysql 시작하기 : systemctl start mysqld

mysql 정지하기 : systemctl start mysqld

mysql 상태확인 : systemctl status mysqld

mariadb 접속을 해 봅니다.

[root@pogo bin]# mysql -uroot -p




출처: http://onlyu.blog.me/60206074314

저작자 표시
신고

설정

트랙백

댓글