서버(리눅스,XMPP 등)

apache 에서 모든 URL을 강제로 https 로 변경하는 방법

페이지 정보

profile_image
작성자 최고관리자 작성일 17-03-08 14:29 조회 394 댓글 0

본문

크게는 mod_redirect와 mod_rewrite

두가지를 이용해서 할 수 있습니다.

– mod_redirect

<VirtualHost *:80>
   DocumentRoot /home/www
   ServerName gabia.com
   ServerAlias www.gabia.com
   <Location />
        RedirectMatch /(.*)$ https://www.gabia.com/$1
   </Location>
</VirtualHost>

gabia.com 으로 들어왔을때 Location이 / (root) 일 경우
match 되는 모든것들을 $1 변수를 이용하여 redirect 시키는 방법 입니다.

– mod_rewrite

<VirtualHost *:80>
   DocumentRoot /home/www
   ServerName gabia.com
   ServerAlias www.gabia.com
   <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
   </IfModule>
</VirtualHost>

gabia.com 으로 들어왔을때 mod_rewrite 가 모듈에 올라가 있고 HTTPS로 요청한것이 아니라면 강제로 redirect 시키는 방법입니다.
[R,L] 에서 R은 강제로 redirect 시킨다는 뜻 입니다. http status code에 의해 분기할 수 있습니다.
L은 마지막 RewriteRule 이라는 뜻 입니다. 이후의 RewriteRule은 모두 무시됩니다.
만약 해당 설정 아래에 또다른 RewriteRule이 필요하다면 L를 빼면 됩니다.

Tags: apache, https, mod_redirect, mod_rewrite, ssl 

댓글목록

등록된 댓글이 없습니다.

게시물 검색
전체 21건 1 페이지
  • Udoo 리눅스 설치 후 한글 설정하기
    1.$ sudo apt-get install language-pack-ko  2. scim  설정 :https://eastasiastudent.net/study/input-cjk-ubuntu/   3. 한글 폰트를 다운받는다.Udoo  메뉴 - 시스템도구 - Lubuntu software Center - Fonts  ==>> Korean  검색해당   font Basket에 넣고 설치하면 됨.  4. 입력기 설정  sudo apt install uim uim-byeoru …
    작성자최고관리자 시간 12-05 조회 83
  • 윈도우10 사용자 폴더 위치 변경 방법

    (adsbygoogle = window.adsbygoogle || []).push({});
    윈도우10에서 설치한 프로그램의 기본 저장 경로나 게임 설정 파일들이 저장되어 있는 내문서는 사용하다보면 파일이 점점 쌓이기 마련입니다. 이처럼 사용자 스타일에 따라 다르지만 내문서 폴더에서 파일을 저장하고 관리하는 사용자 또한 있을텐데요.기본적으로 윈도우의 내문서 폴더는 C드라이브의 사용자 폴더에 위치해 있는데 자주 포맷을 하는 사용자 같은 경우 일일히 내문서를 백업하기 번거롭기 때문에 내문서를 다른 드라이브의 폴더나 같은 C드라이브의 다른 폴더로 변경하고 싶은 경우가 있습니다.이렇게 내문서 위치를 변경하고 싶은 경우에는 다음과 같이 설정할 수 있습니다.윈도우10 내문서 위치 변경①윈도우 탐색기의 오른쪽 내 PC 하위 항목의 문서를 마우스 오른쪽 버튼으로 선택한 다음 ②나오는 컨텍스트 메뉴의 속성을 클릭합니다.
    (adsbygoogle = window.adsbygoogle || []).push({});
    ①문서 속성 상단의 위치 탭을 클릭한 다음 문서 폴더 경로 아래의 ②이동 버튼을 클릭합니다.이동할 문서 폴더 경로를 선택합니다.경로 설정이 끝나면 확인 버튼을 클릭해 변경된 내문서 경로를 저장하면 설정 끝입니다.위와 같은 방법으로 내문서 뿐만 아니라 바탕화면, 사진, 음악, 동영상, 3D 개체, 즐겨찾기, 연락처, 다운로드등의 사용자 폴더를 원하는 위치로 변경할 수 있어 C드라이브 이외의 다른 드라이브를 지정할 경우 추후 포맷시 별다른 백업 없이도 파일을 안전하게 유지할 수 있습니다.
    (adsbygoogle = window.adsbygoogle || []).push({});
    작성자최고관리자 시간 06-07 조회 181
  • Windows 7, 사용자 폴더 위치를 변경하는 방법
    2개 이상의 하드디스크(또는 파티션)가 장착된 PC의 사용자라면, 중요한 자료는 윈도우가 설치되지 않은 파티션에 보관하는 경우가 있다. 무언가 잘못되어 윈도우가 부팅되지 않아 C드라이브를 지우고 새로 설치해도, 다른 파티션의 파일들은 유지되는 장점이 있기 때문이다. 윈도우의 기본 폴더인 문서, 음악, 비디오 및 바탕화면에 들어있는 파일도 다른파티션에 보관할 수 있다. 사용자 폴더(탐색기의 바탕화면에 있는 사용자 계정명의 폴더) 안에 있는 각각의 폴더들을 우클릭하면 '위치' 탭을 볼 수 있는데, 이곳에서 경로를 변경하게 된다. 하지만, 이경우 일일이 각 폴더에 대해 변경을 해주어야 하는데, 사용자 폴더에 직접 접근하는 어플리케이션들은 여전히 C드라이브의 경로를 찾게 되는 문제가 생긴다. 대표적인 예로 이클립스가 있는데, 사용자 문서 폴더를 모두 옮겨 놓으면 '문서' 폴더 안에 무언가를 만들어 놓고 C드라이브의 사용자 폴더에서 만들어 놓은 파일을 읽으려고 시도하는 경우가 있다. 결국, 사용자 문서 폴더를 모두 옮겨도 '다 옮겨지지 않는다'는 것이다. 이제, '사용자 폴더' 자체를 한 번 옮기는 것으로 번거로운 작업을 마쳐보자.  1. Administrator 계정으로 로그인 컴퓨터를 우클릭한 다음 '관리'를 선택하여 컴퓨터 관리를 실행한다.왼쪽 트리에서 '컴퓨터 관리(로컬) → 시스템 도구 → 로컬 사용자 및 그룹 → 사용자'를 선택하고, 오른쪽 목록에서 'Administrator' 항목을 우클릭한 후 '속성'을 누른다.'계정 사용 안 함'의 체크를 해재한 후 '확인'을 누른다.윈도우가 종료될 것이므로 작업중인 문서가 있는지 확인하고 저장한다.'Ctrl+Alt+Del' 키를 누르고, '로그오프'를 눌러 로그오프 한다.로그인 화면에서 'Administrator'를 선택하여 로그인 한다. 2. 사용자 폴더 복사 및 레지스트리 변경 'C:\사용자' 안에 있는 폴더 중에서 이동할 사용자 명과 같은 폴더를 원한는 위치로 복사한다.시작을 눌러 'regedit'를 입력한 다음 엔터를 쳐서 'regedit.exe'를 실행한다. (사용자 계정 컨트롤 창에서 '예'를 누름)레지스트리 편집기의 왼쪽 트리에서 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'를 찾아 펼친 후, 하위 노드를 하나씩 눌러 오른쪽 창의 'ProfileImagePath' 값이 'C:\Users\사용자명'인 것을 찾는다. (사용자 계정명이 'PrettyBoy'라면 'C:\Users\PrettyBoy'를 찾음)오른쪽 창에서 발견된 'ProfileImagePath' 항목을 더블클릭한 후, 값 데이터 란에 전체 경로를 적어 넣고 '확인'을 누른다. (예: 'D:\my\important\files\PrettyBoy', 탐색기에서 복사한 사용자 폴더를 열고, 상단에 표시된 경로의 오른쪽 여백을 클릭하면 전체 경로를 복사할 수 있다.) 3. 변경 확인 및 기존 사용자 폴더 삭제 'Ctrl+Alt+Del' 키를 누르고 '로그오프'를 선택하여 로그오프 한다.로그인 화면에서 변경한 사용자 계정을 선택하여 로그인 한다.탐색기를 실행하여 변경된 사용자 폴더안에 있는 '바탕 화면' 폴더를 연 후, 파일을 만들거나 복사해 넣었을 때 바탕 화면에 파일이 보이는지 확인한다.'C:\Users'의 경로 안에서 원래의 사용자 폴더를 삭제한다. 4. 마무리 컴퓨터를 우클릭한 다음 '관리'를 선택하여 컴퓨터 관리를 실행한다.왼쪽 트리에서 '컴퓨터 관리(로컬) → 시스템 도구 → 로컬 사용자 및 그룹 → 사용자'를 선택하고, 오른쪽 목록에서 'Administrator' 항목을 우클릭한 후 '속성'을 누른다.'계정 사용 안 함'의 체크한 후 '확인'을 누른다.컴퓨터 관리를 종료한다.  이 글은 이곳(영문)에서 정보를 얻어 작성하였습니다…
    작성자최고관리자 시간 06-07 조회 118
  • [트러블슈팅] 아파치 웹 서버 장애 해결하기
    이번 호에는 현재 웹 서버로 가장 많이 사용되고 있는 아파치 웹 서버의 장애 극복 방법에 대해 알아볼 것이다. 흔히 문제가 발생되는 장애의 원인을 살펴봄으로써 보다 안정적인 시스템 운영에 도움이 되도록 구성하였다.시스템 관리자는 시스템에 대해 보수적이어야 한다는 말이 있다. “보수적”이 라는 말은 특정한 정치적 성향을 뜻하는 것이 아니라 시스템에 대해 단 1%라 도 문제가 될 수 있는 여지를 제거하고, 각 유저에게는 불편함을 주지 않는 한 도 내에서 가급적 사용 권한을 제한하여 혹시나 있을지 모를 시스템의 침해나 크래킹 등에 대비해야 한다는 것을 뜻한다. 아울러 시스템 관리자는 새로운 룰 을 적용 또는 변경하거나 프로그램을 새로이 도입할 때에도 이 프로그램으로 인하여 다른 문제가 발생할 수 있는 여지는 없는지 여부를 신중히 검토 후 도입해야 한다.이번 호에서는 아파치 웹 서버를 운영시 접할 수 있는 여러 가지 장애와 이에 따르는 원인과 해결 방법을 찾아보도록 하겠다.접속이 느려지거나 접속이 안 될 때가끔 접속자가 많은 서버를 운영하다 보면 갑자기 웹 접속이 되지 않거나 접속 이 너무 느려 아파치 데몬 개수를 확인해 보면 httpd가 256개나 떠 있는 경우 가 있다. 기본적으로 아파치 웹 서버의 경우 Max Clients가 256으로 설정되어 있어 동시에 256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기 존의 프로세스가 죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.따라서 동시 접속이 많은 경우에는 이전의 웹 접속이 끊길 때까지 대기해야 하 므로 접속 속도가 느린 것처럼 느끼게 되는 것이다. 일반적으로 정상적인 접속 의 경우에 256개의 프로세스가 모두 뜨는 경우는 그리 많지 않기에 현재의 상 태가 비정상적인 접속인지 여부를 판단해야 한다. 이를 판단할 수 있는 방법 은 netstat -na | grep ES로 ESTA BLISHED된 연결 상태를 확인하여 클라이언트 의 IP가 정상적인 연결인지 여부를 확인하면 된다. 또는 netstat -na|grep ES|awk '{print $5}'|sort로 클라이언트의 IP만 따로 소트하여 확인해 봐도 된다. 통상적으로 HTTP 1.1 규약에서부터 적용되기 시작 한 KeepAlive 기능을 지정하였을 경우 한 클라이언트 IP에서 동시에 3~5개 정 도의 http 프로세스를 생성하므로 한 IP에서 3~5개 정도의 프로세스를 생성하는 것은 정상적인 현상이다. 비정상적인 접속의 경우에는 다음과 같은 이유가 있을 수 있다.서비스 거부 공격(DoS)이 가해졌을 때DoS는 동시에 서비스할 수 있는 프로세스의 한계가 있다는 점을 악용한 공격이 다. 한번의 실행으로 100개나 200개 등 원하는 만큼의 동시 접속을 맺은 후 이 접속을 끊지 않고 유지할 수 있는 공격 코드가 인터넷 상에 공개되어 있 다. 그러나 이러한 공격의 경우 공격지의 IP를 속이기가 매우 어려우므로 netstat으로 확인 후 비정상적인 접속으로 확인 될 경우 해당 IP를 차단하면 된다.특정 IP의 라우팅을 차단하는 방법은 다음과 같이 route를 이용한 방법과 iptables(커널 2.4 이상)를 이용한 방법 두 가지가 있다.include를 잘못하여 무한 루프가 돌 경우요즘에는 php와 mysql을 연동하여 많이 사용하고 있는데, 프로그래밍 과정에서 의 실수로 php 파일에서 같은 php 파일을 include하는 경우가 있다. 또는 a.php 파일에서 b.php 파일을 include하고 b.php 파일에서 다시 a.php 파일을 include하는 경우도 그러한 경우일 것이다. 이러한 경우에는 무한 루프가 돌 게 되어 결국은 아파치 데몬이 금새 Maxclients에서 지정한 개수로 차 버리게 되는데, 어떤 파일에서 무한 루프가 돌고 있는지 찾기가 힘들다. 따라서 임시로 다음과 같이 include를 하지 못하도록 차단을 하는 방법이 있다.# iptables -A INPUT -p tcp -i lo -s xxx.xxx.xxx.xxx --sport 1024:65535 -j DROP이는 같이 서버 내에서 include 시에는 lo(Lookback Interface)를 통해 sport 가 1024 이후의 하이 포트를 이용하여 통신한다는 특성을 이용한 것이다. 그러 나 이 설정을 하였을 경우 로컬 서버에서 클라이언트 포트를 전혀 사용할 수 없게 되므로 다른 서비스에도 장애가 되기 때문에 임시로만 사용하기 바란다. 또는 ps aux | grep http로 보이는 프로세스에서 ls -la/proc /pid/로 각각의 http 프로세스가 어떤 파일을 참조하고 있는지 일일이 추적하는 방법도 있다.(예:cwd -> /home/user1/public_html/infinite_loop/)프로세스가 과도한 메모리를 사용할 경우특별히 이상한 프로세스는 없는데, 시스템의 부하가 갑자기 올라가는 경우가 있다. 심할 경우에는 콘솔에서 키 작동이 되지 않아 제어 자체가 불가능한 경 우도 있는데, 이러한 경우는 어쩔 수 없이 시스템을 재 시작하는 수밖에 없다. 이는 의도적이든 아니든 유저가 cgi나 php 등의 프로그램을 잘못 짜서 과도한 메모리를 소모하는 프로세스를 실행하기 때문인 경우인데, 실제로 시스템의 메 모리를 많이 소모하는 프로그램을 짜는 것은 단 몇 줄의 코드로도 가능하다. 다음과 같이 메모리를 소모하는 간단한 C 코드를 작성해 보자(참고로 스크립트 키드의 악용을 막기 위해 코드 중 일부를 변경하였다)./* memory.c */ #include #include void html_content(void); int main() { char *some_memory; int size_to_allocate = ONE_K; int megs_obtained = 0; int ks_obtained = 0; html_content(); printf("Program Executed !!!"); while (1) { for (ks_obtained = 0; ks_obtained < 1024; ks_obtained++) { some_memory = (char *)malloc(size_to_allocate); if (some_memory == NULL) exit(EXIT_FAILURE); sprintf(some_memory, "Hello World"); } printf("Now allocated %d Megabytes\n", megs_obtained); } exit(0); } void html_content(void) { printf("Content-type: text/html\n\n"); }작성 후 gcc -o memory.cgi memory.c로 컴파일 한 후 이 파일을 http://domain.com/memory.cgi와 같이 웹에서 실행해 보도록 하자. 아무리 메 모리와 CPU의 여유가 있는 시스템이라 하더라도 이 프로그램을 실행하자마자 거의 통제 불능 상태로 되어 결국 시스템 재부팅하게 될 것이다. 이렇듯이 메 모리를 무한정 소모하는 것을 차단하기 위해서는 아파치의 설정 인자 (Directive) 중에서 RLimitMEM을 사용하여 차단할 수 있다. 이 인자는 아파치 웹 서버에서 생성된 특정 프로세스가 작동시 소요 가능한 최대 메모리의 양을 제한하는 것으로 메모리를 많이 소모하는 CGI가 작동할 때 이 인자에서 지정 된 메모리까지만 실행이 되고 그 이상 소요시에는 더 이상 작동하지 않도록 해 준다. 예를 들어 httpd.conf에 다음과 같이 설정하였다면 모든 디렉토리에서는 메모 리를 20MB나 최대 21MB까지만 사용이 가능하고 /home /special/public_html/* 디렉토리 이하에 접근 시에는 특별히 50MB까지 메모리 이용이 가능하게 된다.RLimitMEM 20480000 21504000 RLimitMEM 51200000 52224000실제로 위와 같이 설정 후 memory.cgi를 웹에서 호출하면 아래와 같이 일정량 의 메모리만 사용되고 중단하는 것을 확인할 수 있다. 이와 비슷한 인자로 CPU 점유율을 제한하는 RLimitCPU와 사용자당 프로세스의 개수를 제한할 수 있는 RLimitNPROC이 있다. 이에 대해서는 http://httpd.apache.org/docs-2.0/mod/core.html를 참고하기 바란다.용량 큰 파일의 업/다운로드시 부하가 유발될 경우누구나 업/다운로드가 가능한 자료실을 운영하고 있을 경우 사이즈가 너무 큰 파일을 업/다운로드 할 경우 부하가 많이 걸리게 되어 결국 시스템의 성능 저 하를 유발하게 된다. 최근 배포되는 게시판/자료실 프로그램에서는 대부분 업로드할 수 있는 용량 등을 제한할 수 있는 기능이 있지만 그렇지 않은 프로그램도 상당수 있어 웹 서버 차원에서 이 제한을 적절히 설정할 필요가 있다. 아파치에서는 이와 관련하여 웹 서버에서 업/다운로드 할 수 있는 파일의 사이즈를 제한하는 Limit RequestBody 기능을 이용할 수 있다.LimitRequestBody는 클라이언트가 요청시 http 프로토콜을 통해 서버가 제공 할 수 있는 메시지의 크기를 바이트 단위로 정의하는 것으로 무한대를 의미하는 0부터 2,147,483,647(2Giga)까지 설정 가능하며 이 설정으로 대용량의 파일 을 업/다운로드 하는 형태의 서비스 거부 공격을 차단할 수 있다. 이를 설정하는 방법은 httpd.conf를 열어 다음과 같은 라인을 추가하면 된다.LimitRequestBody 7168000 LimitRequestBody 10240000위와 같이 LimitRequestBody 인자를 설정하면 아파치 웹 서버를 이용하여 업/ 다운로드 하는 모든 파일의 사이즈를 7MB로 제한하고 /home/special/ 이하에 대해서는 10MB로 제한하게 된다. 위와 같이 설정시 지정된 사이즈를 초과하는 파일을 업/다운로드 시에는 다음 그림과 같은 에러 메시지가 뜨며 업/다운 로드가 되지 않는다.특정한 이름의 파일을 실행을 제한하려면최근에는 대부분의 사이트들이 대화방(채팅)을 위해 자바로 프로그래밍된 자바 대화방을 사용하는 추세이지만 얼마 전까지만 하더라도 C나 펄로 된 CGI 대 화방을 설치하여 사용하는 것이 유행이었다. 그런데 이 대화방의 경우 대화방 에 참여하는 유저 중 한 명이 글을 입력할 경우 모든 유저에게 이 내용이 실시 간으로 나타나야 하는 특성상 시스템의 메모리를 매우 많이 소모하는 대표적 인 프로그램 중 하나였다.따라서 채팅 CGI 프로그램을 원천적으로 사용할 수 없도록 하는 방법을 고민하게 되었는데, 해결 방법은 대부분의 채팅 프로그램이 xxxchat.cgi 또는 chatxxx.cgi라는 파일을 실행 파일 이름으로 한다는 특징을 이용하면 된다. 즉, httpd.conf를 열어 다음과 같이 설정하면 파일명에 ‘chat’이라는 단어 가 포함된 CGI 파일은 작동하지 않게 되는 것이다.Order allow,deny Deny from all이러한 방식으로 특정한 파일에 대해 웹에서의 접근을 차단할 수 있다. 따라 서 CGI 파일에 아무리 소유권과 실행 권한을 주었다 하더라도 웹 서버 자체에 서 접근을 거부하였으므로 웹에서 접근하면 Forbidden’에러가 나게 된다. 이러한 식으로 특정 파일 이름을 가진 파일의 실행이나 접근을 차단할 수 있다.검색 로봇의 접근 차단하기갑자기 특정한 IP 주소에서 짧은 시간에 많은 접속을 하여 시스템의 부하가 올라가 웹 접속 로그를 살펴보니 다음과 같이 이해할 수 없는 내용이 남는 경우 가 있다.211.51.63.4 - - [26/Sep/2001:22:19:42 +0900] "GET /robots.txt HTTP/1.0" 404 285 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.asp HTTP/1.0" 404 284 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.php HTTP/1.0" 404 284 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.php3 HTTP/1.0" 404 285 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.htm HTTP/1.0" 404 286 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.html HTTP/1.0" 404 287 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.asp HTTP/1.0" 404 286 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.php HTTP/1.0" 404 286 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.php3 HTTP/1.0" 404 287 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.htm HTTP/1.0" 404 283 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.html HTTP/1.0" 404 284 211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.asp HTTP/1.0" 404 283 211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /main.php HTTP/1.0" 404 283 211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /main.php3 HTTP/1.0" 404 284무작위로 index.php, index.asp, index.php3, default.html, default.asp 등 의 파일을 순서대로 요청하는 것으로 보아 검색 엔진일 가능성이 높다고 가정 할 수 있다. 특히 robots.txt 파일을 요청하는 것으로 검색 엔진이라고 장담 할 수 있을 것이다.httpd.conf에서 Logformat를 common 대신 {User-agent} 변수를 추가하여 정의 하면 서버에 접근하는 에이전트 정보도 알 수 있는데, UA(User Agent)는 일반 적인 웹브라우저 뿐만 아니라 검색 로봇이나 방랑 로봇 등 웹 서버에 접속하여 웹페이지를 가져오거나 해석하는 모든 종류의 프로그램을 뜻한다. 이는 흔히 사용하는 익스플로러나 넷스케이프 등의 브라우저 외에도 라이코스의 스파이더(spider)나 알타비스타의 스쿠터(Scooter)와 같은 검색 로봇과 텔리포트(Teleport)나 WebZIP, GetRight 등 오프라인 브라우저 모두 UA의 범위에 속한다. 검색 로봇이 어떤 사이트를 방문하여 문서를 인덱싱하거나 오프라 인 브라우저가 페이지를 한꺼번에 요청하여 긁어 가는 것은 일반 사용자가 웹 브라우저로 서버에 접속하여 원하는 페이지를 보는 일반적인 경우와 그 성격 이 다르다. 여러 페이지를 동시에 요청하는 정도를 벗어나 아예 한 웹사이트 의 모든 페이지를 짧은 시간에 통째로 긁어가기도 하기 때문에 이러한 경우에 는 서버에 매우 많은 프로세스를 생성하면서 웹 서버의 로드가 크게 올라가게 되는 것이다. 특히 DB와 연동하는 사이트의 경우에는 심할 경우 정상적인 서비스를 하지 못 할 정도이다.모든 사이트가 검색 엔진에 등록될 필요는 없거나 또는 허용된 일부 유저만 접근이 가능한 페이지의 경우 로봇의 접근을 차단할 필요가 있으므로 이러한 경 우에는 다음과 같이 설정된 robots.txt 파일을 웹 서버의 최상위 / 디렉토리 에 두면 모든 검색 로봇이 /secure 디렉토리를 인덱싱하지 않는다.User-agent: * Disallow: /secureUser-agent: *”는 모든 로봇를 대상으로 한다는 것을 뜻하며 예를 들어 알타비스타 스쿠터 등 특정한 UA에 대해서만 설정하고 싶다면 다음과 같이 하면 된다.User-agent: scooter검색 로봇과 관련된 더 자세한 정보를 얻기 원한다면 다음의 사이트를 참고하 기 바란다.http://info.webcrawler.com/mak/projects/robots/robots.html http://info.webcrawler.com/mak/projects/robots/norobots.html아울러 웹 서버에서 특정한 유저 에이전트의 접근을 차단하려면 httpd.conf에 다음과 같이 BrowserMatch를 사용하여 설정해도 된다.BrowserMatch "WebZIP" go_out BrowserMatch "Teleport" go_out BrowserMatch "GetRight" go_out BrowserMatch "WebCopier" go_out BrowserMatch "NetZip Downloader 1.0" go_out BrowserMatch "NetZip-Downloader/1.0.62" go_out BrowserMatch "Teleport Pro/1.29" go_out BrowserMatch "Teleport Pro/1.24" go_out BrowserMatch "Teleport Pro/1.26" go_out Options Includes ExecCGI AllowOverride None Order allow,deny Allow from all Deny from env=go_out위와 같이 설정 시에는 /home/no-ua/ 디렉토리 이하에 대해서는 go_out이라는 변수에 지정한 WebZip이나 Teleport 등 UA 프로그램의 접근을 차단하게 된다. 다른 UA도 차단하고 싶으면 위와 같이 웹 서버의 로그를 살펴보아 에이전트 정 보에 남는 UA를 go_out으로 추가해 주면 된다. 같은 방식으로 만약 특정 디렉토리 이하에 대해서 MSIE 브라우저로 접근하지 못하도록 설정하려면 다음과 같 이 BrowserMacth를 이용한다. 이렇게 하면 에이전트 정보에 MSIE라 설정되는 UA는 차단될 것이다.BrowserMatch "MSIE" msie Options Includes ExecCGI AllowOverride None Order allow,deny Allow from all Deny from env=msie최근에는 각종 로봇이 버전을 새롭게 하며 계속적으로 나오고 있으므로 지속적으로 로그를 살펴보아 접근 통제를 하고자 하는 UA를 설정하는 것이 좋다.외부의 데이터 무단 링크로 인한 부하 없애기최근에 와레즈 사이트를 통해 게임이나 오락, 동영상 등 각종 데이터들이 공유 되면서 와레즈 사이트에서 관련 없는 임의의 서버에 데이터를 업로드한 후 무 단 링크하여 서비스하는 경우가 많다. 이러한 경우 데이터 전송량이 갑자기 늘 어 서버의 부하가 급격히 올라감은 물론 한정된 회선의 대역폭도 소모하게 되 어 서버를 관리하는 관리자들에게는 이러한 무단링크가 큰 골치 거리 중에 하 나다.대부분의 무단 링크가 대용량이기 때문에 이를 차단하기 위해 위와 같이 LimitRequestBody를 이용하여 임의의 용량 이상의 데이터에 대한 업/다운로드 용량을 제한하는 방법도 있지만 다음과 같이 BrowserMatch 대신 SetEnvIFNoCase Referer를 이용하는 방법도 있다.SetEnvIFNoCase Referer "warez" link_deny SetEnvIFNoCase Referer "free" link_deny SetEnvIFNoCase Referer "home" link_deny Order allow,deny allow from all deny from env=link_deny위와 같이 설정 시에는 Referer이 warez 또는 free나 home이 포함되었을 경우 이 사이트를 link_deny라는 변수에 할당하고, 환경변수가 link_deny일 때는 확 장자가 avi나 mprg, zip, asf 등인 파일에 대한 엑세스를 제한하고 있다. 따라서 홈페이지 주소에 warez나 free 또는 home이 포함된 주소에서 위의 데이터를 무단 링크하였을 경우에는 이를 차단할 수 있다. Nocase를 추가로 설정하였을 경우에는 대소문자를 가리지 않아 링크하는 사이트가 대소문자에 관계없이 http://my.warez.org/, http://My.Warez.Org/, http://MY. WAREZ.ORG/ 모두 적용된다.다른 확장자를 추가하고나 설정을 변경하고자 할 경우에는 정규식(Regular Expression)을 이용하여 설정하면 된다. 또는 이와는 반대로 아예 httpd.conf 에서 다음과 같이 설정할 수도 있다.ServerAdmin webmaster@tt.co.kr DocumentRoot /home/tt/public_html ServerName tt.co.kr ServerAlias www.tt.co.kr SetEnvIf Referer tt\.co\.kr link_allow SetEnvIf Referer www\.tt\.co\.kr link_allow SetEnvIf Referer ^$ link_allow…
    작성자최고관리자 시간 10-30 조회 1469
  • 아파치(웹서버)가 느려지거나 다운되는 원
    가끔 접속자가 많은 서버를 운영하다 보면 갑자기 웹 접속이 되지 않거나 접속이 너무 느려 아파치 데몬 개수를 확인해 보면 httpd가 256개나 떠 있는 경우가 있다.  그럼 먼저 웹서버가 갑자기 느려질 경우를 보자. 기본적으로 아파치 웹 서버의 경우 Max Clients가 256으로 설정되어 있어 동시에 256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기존의 프로세스가 죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.  따라서 동시 접속이 많은 경우에는 이전의 웹 접속이 끊길 때까지 대기해야 하므로 접속 속도가 느린 것처럼 느끼게 되는 것이다. 아래의 명령으로 동시접속을 체크 해보자  # netstat -anp | grep :80 | grep ESTAB | wc -l  또, 일반적으로 정상적인 접속의 경우에 256개의 프로세스가 모두 뜨는 경우는 그리 많지 않기에 현재의 상태가 비정상적인 접속인지 여부를 판단해야 한다. 이를 판단할 수 있는 방법은  # netstat -na | grep ES  ESTABLISHED된 연결 상태를 확인하여 클라이언트의 IP가 정상적인 연결인지 여부를 확인하면 된다. 또는  # netstat -na | grep ES | awk '{print $5}' | sort  클라이언트의 IP만 따로 확인해 봐도 된다.  통상적으로 HTTP 1.1 규약에서부터 적용되기 시작한 KeepAlive 기능을 지정하였을 경우 한 클라이언트 IP에서 동시에 3~5개 정도의 ttp 프로세스를 생성하므로 한 IP에서 3~5개 정도의 프로세스를 생성하는 것은 정상적인 현상이다. 그렇지 않고 여러개의 프로세스가 떠 있다면 비정상적인 접속 또는 부하를 일으키는 원인을 찾아봐야 할 것이다.  일단 top 명령을 이용하여 CPU 점유를 많이 하고 있는 프로세스들을 찾아야 할 것이다  # top -d 2  또는 잘못 짜여진 cgi 프로그램으로 인하여 시스템의 메모리를 몽땅 소비하는 프로그램이 실행 되고 있는지 살펴봐야 한다.  그리고 웹집이나 텔레포드 등의 로봇들이 접근하면 시스템은 현저하게 느려질 것 이다. 이러한 점들도 대비하여야 한다. 또한 스트리밍 서비스로 인한 부하도 점검해봐야 할 것 이다.  이번에는 웹서버가 정지되는 경우를 살펴보자. MaxClient 에 걸려 서버가 정지되는 경우가 발생 할 수 있다. 참고로 엊그제 새벽에 한참 맛있게(?) 자고 잇는데 이런 경우를 당했다 ㅡㅡ;  MaxClient 수치는 아파치 소스코드에서 초기 설정값이 설정되어 있기 때문에 아무리 수치를 올려 설정을 하여도 아파치 웹서버는 동시에 httpd 데몬은 256개 이상 생성할 수 없다. 동시에 256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기존의 프로세스가 죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.  그럼 어떻게 해야 할 것인가?  일단은 아파치 세팅 시 Max Client 수치를 올리도록 소스코드를 수정하면 된다. 아파치 소스를 보면 src/include 안에 httpd.h 라는 헤더파일이 있는데 HARD_SERVER_LIMIT 값이 256으로 정의되어 있다.  #ifndef HARD_SERVER_LIMIT #ifdef WIN32 #define HARD_SERVER_LIMIT 1024 #elif defined(NETWARE) #define HARD_SERVER_LIMIT 2048 #else #define HARD_SERVER_LIMIT 256 #endif #endif  윈도우는 1024 넷웨어는 2048 기타는 256으로 설정이 되어있는것을 볼 수 있다. 리눅스는 기타에 속한다..ㅋㅋㅋ 그럼 256의 수치를 변경한 다음 컴파일 하면 된다. 이것은 수치는 시스템 사양에 따른 적절한 조절이 필요하다. 되도록 4의 배수로 수치를 조정하길 바란다.  일단 셋팅을 이렇게 하였다면 적어도 Max Clients 에 걸려 웹서버가 정지당하는 일은 없을것이다. 하지만 그냥 귀차니즘으로 인하거나 서버사양이 좋지 않아 디폴트로 셋팅하였다면 아파치 설정파일에서 소한의 설정을 하여야 한다.  이는 웹서버가 느려지는 것과 다운되는 것에 대한 최소한의 노력이라고 생각하면 된다.  일단 Timeout 값의 수치를 변경하자. 이 값은 클라이언트에서 서버에 연결하엿을때 클라이언트와 서버간에 아무런 메세지가 발생하지 않았을 때 오류로 처리할 시간을 설정한 값이다. 보통 300으로 설정되어있다. 만약 네트워크 속도가 느리다면 수치를 조금 올려서 설정하는 것이 좋다.  다음은 MaxKeepAliveRequests 의 값을 수정하여야 한다. 이 값의 의미는 연결을 유지한체로 허용할 수 있는 최대 요구수를 나타낸다. 이 값이 0 이라면 제한하지 않는다는 의미가 되고 일반적으로 이 수치는 높게 설정하는 것이 좋다.  다음 KeepAliveTimeout 의 수치를 변경하자. 이 값은 동일한 방문자가 동일한 연결을 유지한 채로 다음 요청을 할 때 까지 연결을 유지한 채로 기다리는 시간을 허용하는 시간을 의미한다. 따라서 접속자가 많다면 클라이언트에서 설정시간내에 요청을 하지 않으면 연결을 끊음으로서 요청시 생성되었던 데몬을 Kill 할 수 있다.  이정도로 웹서버의 성능을 튜닝하엿다. 나머지 무한한 추가적인 기능은 각자 상황에 맞게 설정 할 수 있을것이다. …
    작성자최고관리자 시간 10-30 조회 935
  • TCP SYN_Flooding 공격의 원인과 해결책
     TCP  SYN_Flooding 공격의 원인과 해결책                          오늘과 내일 넷센터 홍석범(antihong@tt.co.kr)최근 자신이 운영하는 서버에 특별히 부하가 걸리거나 이상이 있는 것도 아니고 또 데몬도 정상적으로 떠 있는데, 정작 서비스가 작동하지 않는 경우가 종종 있다.이러한 경우에는 해당 데몬을 완전히 멈추었다가 살리면 다시 작동하는데, 잠시 후에 확인해 보면 똑같은 현상이 다시 나타나곤 한다.혹시 프로그램을 잘못 설치했나 싶어 지우고 다시 설치해도 마찬가지이다.만약 최근 들어 이러한 경험이 있다면 이는 최근 유행하는 DoS(서비스 거부 공격)의 일종인 TCP SYN Flooding 공격을 당했을 가능성이 크다.SYN Flooding 공격의 개념이 소개된지는 꽤 되었지만 최근 들어 리눅스가 확산되고, 간단하게 실행할 수 있는 공격 소스가 광범위하게 배포되면서 이 공격이 자주 확인되고 있고, 이로 인해 그 피해가 급속히 확산되고 있다. 실제로 현재 가장 많이 사용되고 있는 배포판인  레드햇 6.X 계열에 이 공격을 실행하기만 하면 단 몇 초만에 서비스가 정지해 버리게 된다.따라서 피해가 확산되고 있는 이 공격의 원리와 대처방법에 대해 알아보도록 하자.  “TCP 의 약점을 이용한 공격원리”SYN Flooding 공격은 TCP 의 취약점을 이용한 공격의 형태이므로 먼저 TCP 에 대해 알아야 한다.   TCP 는 Transmition Control Protocol 의 약자로 UDP와는 달리 신뢰성 있는 연결을 담당한다.  따라서 서버와 클라이언트간에 본격적인 통신이 이루어지기 전에는 다음 그림과 같이 소위 "3 Way handshaking" 이라는 정해진 규칙이 사전에 선행되어야 한다.1단계.  A 클라이언트는 B 서버에 접속을 요청하는 SYN 패킷을 보낸다.2단계.  B 서버는 요청을 받고 A 클라이언트에게 요청을 수락한다는  SYN 패킷과 ACK 패킷을 발송한다. 3단계.  A 클라이언트는 B 서버에게 ACK 를 보내고 이후로부터 연결이 이루어지고         본격적으로 데이터가 교환된다.이것이 TCP 의 기본적인 Flow 이다.그런데, 이 그림에서 악의적인 공격자가 1단계만 요청(SYN)하고 B서버로부터 응답을 받은 후(SYN+ACK) 3단계, 즉 클라이언트에게 ACK를 보내지 않는다면 어떻게 될까?SYN+ACK 패킷을 받은 B 호스트는 A 로부터 응답이 올 것을 기대하고 반쯤 열린 이른바 “Half Open” 상태가 되어 대기 상태에 머무른 후 일정 시간(75초) 후에 다음 요청이 오지 않으면 해당 연결을 초기화 하게 되는데, 초기화하기 전까지 이 연결은 메모리 공간인 백로그큐(Backlog  Queue)에 계속 쌓이게 된다.그런데, 이 위조된 연결 시도를 초기화하기 전에 위조된 새로운 요구가 계속 들어오게 된다면 또한 위조된 새로운 요구가 연결을 초기화하는 속도보다 더 빨리 이루어진다면 어떻게  될까?  이러한 경우  SYN 패킷이 어느 정도 백로그큐에 저장이 되다 결국 꽉차게 되어 더 이상의 연결을 받아들일 수 없는 상태, 즉 서비스 거부 상태로 들어가게 되는 것이다.  이처럼 백로그큐가 가득 찼을 경우에 공격을 당한 해당 포트로만 접속이 이루어지지 않을 뿐 다른 포트에는 영향을 주지 않고, 또한 서버에 별다른 부하도 유발하지 않으므로 관리자가 잘 모르는 경우가 많다.  또한 다른 DoS 공격과는 달리 많은 트래픽을 유발하는 공격이 아니므로 쉽게 파악이 되지 않는 공격 형태이다.그렇다면 이 공격을 당하고 있는지 여부는 어떻게 알 수 있을까?시스템에 로긴후 "netstat" 이라는 명령으로 확인 가능하다.“그럼, 어떻게 파악하는가?”netstat 은 시스템의 각종 네트워크 정보를 알려주는 명령어로 네트워크 연결, 라우팅 현황, 인터페이스 통계등의 정보를 확인할 수 있게 해 준다.  여기서 잠깐 netstat 으로 나오는 연결 상태에 대해 알아보자.netstat -na 로 확인해 보면 Local Address,  Foreign Address,  State 등의 정보가 출력되는데,이 중 State 부분에 보이는 메시지를 주목하면 된다.### 참고 : State 부분에 가능한 연결상태 ###################################LISTEN   : 서버의 데몬이 떠서 접속 요청을 기다리는 상태SYS-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게    응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태ESTABLISHED : 3 Way-Handshaking 이 완료된 후 서로 연결된 상태FIN-WAIT1 ,  CLOSE-WAIT , FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태CLOSING  : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해             당분간 소켓을 열어놓은 상태CLOSED : 완전히 종료 ################################################################################  각각의 연결 상태는 통신 상황에 따라 매우 복잡하게 순간적으로 변화하는데, 이 중 주로 주목하여야 할 상태는 SYN_RECEIVED 이다. 설명에 나온 대로 이 상태는 클라이언트의 확인 메시지를 기다리는 상태이지만 특별히 전용 회선에 장애가 없는 한 이 과정은 순간적으로 일어나므로 실제 netstat 으로 확인되는 경우는 거의 없다.따라서 netstat -na|grep SYN_RECV 로 확인해 보아 많은 메시지가 보인다면 Syn Flooding 공격을 당하고 있는 것으로 판단하면 된다.“실제 테스트 공격으로 직접 확인해 보자!!”실제 자신의 시스템이 얼마나 취약한지 자신의 시스템에 테스트해 보도록 하자.노파심에 이야기하는 것이지만 이 공격은 반드시 자신의 시스템에서만 테스트 용도로 실행해 보기 바란다.  이 공격 소스는 인터넷상에서 쉽게 찾을 수 있다.http://packetstorm.securify.com/ 나 http://rootshell.com/ 에 접속후 syn 으로 검색해 보면 많은 소스와 문서가 있는데, 이중 관련 파일을 다운로드받아 설치해 보면 된다.소스에 따라 실행 방법이 다르지만  다운로드 받은 소스파일이 syn_floodinbg_dos.c 라면   gcc –o syn_flooding_dos syn_flooding_dos.c 로 컴파일을 한다. 이후 "./syn_flooding_dos 소IP 공격지IP 공격할하위포트번호 상위포트번호" 와 같이 실행하면 되는데,  필자는 ./syn_flodding_dos  0  localhost  80  80 과 같이 테스트해 보았다.위 명령어의 의미는 공격지 주소를 랜덤하게 무작위 IP주소로 설정(0) 하여  localhost 서버의 80 번 포트에 Syn_Flooding 공격을 한다는 내용이다.실제 본인이 테스트한 레드햇 6.2 서버에서는 공격후 2-3초만에 웹서비스가 중지되었다.테스트 공격 후 telnet localhost 80 으로 접속해 보기 바란다.분명히 httpd 데몬은 떠 있는데, 접속이 되지 않을 것이다.아래는 공격을 당한 서버에서 netstat -na|grep SYN 으로 SYN 패킷을 잡은 부분이다.분명히 localhost 에서 공격을 했음에도 위 그림에서처럼 80번 포트로 SYN 패킷을 요청한 IP주소는 랜덤하게 보이고 있어 도무지 어떤 IP 에서 공격하고 있는 것인지 알 수 없다. 실제로 공격지 IP 를 확인해 보면 대부분이 현재 인터넷상에 연결되지 않은 존재하지 않는 위조된 IP들이다.실제 공격 소스 코드중 소스 IP를 생성하는 부분을 보면 아래와 같이 0부터 255까지 임의의 값을 뽑아 IP 주소로 설정하는 것을 확인할 수 있다.                   {                       a = getrandom(0, 255);                       b = getrandom(0, 255);                       c = getrandom(0, 255);                       d = getrandom(0, 255);                       sprintf(junk, "%i.%i.%i.%i", a, b, c, d);                       me_fake = getaddr(junk);                    }SYN_Flooding 공격에 대한 대비 및 해결책그렇다면 이 공격에 대해 어떻게 대비하여야 할까?1. 백로그 큐를 늘려준다.직관적으로 보았을 때 서비스 거부에 돌입하게 되는 것은 백로그큐(Backlog Queue)가 가득 차서 다른 접속 요구를 받아들이지 못하기 때문이므로 백로그 큐의 크기를 늘려주면 될 것이다. 실제로 리눅스를 포함해서 많은 운영체제들의 백로그큐값을 조사해 보면 이 값이 필요 이상으로 작게 설정되어 있어 적절히 늘려주는 것이 좋다.현재 시스템에 설정된 백로그큐의 크기는[root@net /root]# sysctl -a|grep syn_backlognet.ipv4.tcp_max_syn_backlog = 128또는 [root@net /root]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog128 로 확인가능하며  128kb 인 것을 확인할 수 있다.일반적으로 시스템의 RAM 이 128M 일 경우에는 128 을 설정하고 그 이상일 경우에는 1024 정도로 설정해 주는 것이 좋다. 이 때 주의할 점은 이 값을 무작정 크게 설정한다고 좋은 것은 아니며 1024 이상으로 설정할 경우는 /usr/src/linux/include/net/tcp.h 소스에서 TCP_SYNQ_SIZE 변수를 수정 후 커널을 재컴파일하여야 한다.  이 변수를 설정시 TCP_SYNQ_HSIZE에 16을 곱한 값이 tcp_max_syn_backlog 보다는 작거나 같아야 하는데,  그렇지 않을 경우에는 시스템에 문제가 발생할 수 있으니 1024 보다 높은 값으로 설정하지 말기 바란다.  그리고 이 값을 너무 크게 설정하였을 경우에는 경험적으로 아래 설명할 syncook-ies 기능이  잘 적용되지 않는 현상이 가끔 확인되었다.  이와는 별개로 시스템의 부하가 많이 걸릴 경우에도 백로그큐를 늘려주면 일정 정도의 효과를 볼 수  있는 것으로 알려져 있다.백로그큐의 값을 설정하는 방법은 다음과 같다.[root@net /root]# sysctl -w net.ipv4.tcp_max_syn_backlog=1024또는 [root@net /root]# echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog로 해도 된다.그러나 이 방법은 임시적인 대책일 뿐, 지속적으로 많은 TCP SYN Flooding 공격을 당할 때는 결국 백로크큐가 가득 차게 되므로 근본적인 해결 방안은 아니다.2.  syncook-ies 기능을 켠다.Syncook-ies(“신쿠키” 라고 발음한다.) 는  "Three-way handshake" 진행 과정을 다소 변경하는 것으로  Alex Yuriev 와 Avi Freedman 에 의해 제안되었는데, TCP header 의 특정한 부분을 뽑아내어 암호화 알고리즘을 이용하는 방식으로 Three-way Handshake 가 성공적으로 이루어지지 않으면 더 이상 소스 경로를 거슬러 올라가지 않는다.  따라서 적절한 연결 요청에 대해서만 연결을 맺기 위해 리소스를 소비하게 되는 것이다.syncook-ies 기능은 TCP_Syn_Flooding 공격을 차단하기 위한 가장 확실한 방법으로 이 기능을 이용하려면 일단 커널 컴파일 옵션에서 CONFIG_SYN_nullS이 Y 로 선택되어 있어야 한다.자신의 커널 옵션에 이 기능이 설정되어 있는지 확인하려면 /usr/src/linux 디렉토리로 이동후 make menuconfig 후 Networking options  ---> [*]   IP: TCP syncook-ie support (disabled per default)  와 같이 확인하면 된다.만약 설정이 되어 있지 않다면 선택 후 커널 컴파일을 다시 하여야 하지만 대부분 배포판은 기본적으로 이 옵션이 선택되어 있으므로 걱정할 필요는 없다.그러나 위와 같이 커널 옵션에 설정되어 있다 하더라도 실제 syncook-ies 적용은 꺼져 있으므로 이 값을 다음과 같은 방법으로 활성화해야 한다.[root@control src]# sysctl -a|grep syncook-ienet.ipv4.tcp_syncook-ies = 00 으로 설정되어 있으므로  현재 syncook-ies는 적용되지 않는다. 따라서 아래와 같이 1을 설정하여 syncook-ies 기능을 활성화하도록 한다.[root@control src]# sysctl -w net.ipv4.tcp_syncook-ies=1syncook-ies는 백로그큐가 가득 찼을 경우에도 정상적인 접속 요구를 계속 받아들일 수 있도록 해 주므로  SYN_Flooding 공격에 대비한 가장 효과적인 방법중 하나이다.만약 공격을 당해 syncook-ies 가 작동할 때에는  /var/log/messages 파일에 아래와 같이 SynFlooding 공격이 진행중이라는 메시지가 출력된다.Jun 11 18:54:08 net kernel: possible SYN flooding on port 80. Sending cook-ies.SYN_Flooding 공격이 지속적으로 매우 심하게 진행중일 때에는 syncook-ies 기능이 작동한다 하더라도 네트워크가 다운되는 현상이 가끔 확인되었다. 따라서 syncook-ies 기능 외에 몇 가지 설정도 함께 적용하는 것이 시스템의 안정성을 위해 권장하는 방법이다. 아울러 네트워크가 다운되었을 경우에는 /etc/rc.d/init.d/network restart 로 network 를 재설정해 보거나 reboot 를 하여야 한다.3. 기타 시스템의 네트워크 설정을 최적화한다.아래 설정은 비단 TCP Syn_Flooding 공격뿐만이 아니라 다른 여타 DoS 공격에도 효과적이으로 방어하므로 적절히 설정할 것을 권장한다.sysctl -w net.ipv4.icmp_destunreach_rate=1# 1/100초 동안 받아들일 수 있는 "dest unreach (type 3) icmp" 의 개수sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 # Broadcast 로부터 오는 ping 을 차단함. (Smurf 공격을 차단함)sysctl -w net.ipv4.icmp_echoreply_rate=1 # 1/100초에 반응하는 ping 의 최대 숫자sysctl -w net.ipv4.icmp_echo_ignore_all=1 #모든 ping 을 차단함sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1 # IP 나 TCP 헤더가 깨진 bad icmp packet을 무시한다.sysctl -w net.ipv4.icmp_paramprob_rate=1 # 1/100 초에 받아들이는 param probe packets의 수sysctl -w net.ipv4.icmp_timeexceed_rate=1 # 1/100 초에 받아들이는 timeexceed 패킷의 수(traceroute 와 관련)sysctl -w net.ipv4.igmp_max_memberships=1 # 1/100 초에 받아들이는 igmp "memberships" 의 수sysctl -w net.ipv4.ip_always_defrag=0 # 항상 패킷 조각 모음을 하지 않는다.sysctl -w net.ipv4.ip_default_ttl=64 # 매우 복잡한 사이트에서는 이 값을 늘리는 것도 가능하지만 # 64로 두는 것이 적당하며 더 늘렸을 경우에는 큰 문제가 발생할 수도 있다.sysctl -w net.ipv4.ip_forward=0 # 게이트웨이 서버가 아닌 이상 패킷을 포워딩 할 필요는 없다.sysctl -w net.ipv4.ipfrag_time=15 # fragmented packet이 메모리에 존재하는 시간을 15초로 설정한다.sysctl -w net.ipv4.tcp_syn_retries=3  # 일정한 시간과 IP 별로 보내고 받는 SYN 재시도 횟수를 3회로 제한한다.# 이 옵션은 스푸핑된(위조된) 주소로 오는 SYN 연결의 양을 줄여준다. # 기본값은 5이며 255를 넘지 않아야 한다.sysctl -w net.ipv4.tcp_retries1=3 # 무언가 문제가 있을 때 연결을 위해 재시도 할 횟수. 최소값과 기본값은 3이다.sysctl -w net.ipv4.tcp_retries2=7 # TCP 연결을 끊기 전에 재시도할 횟수.sysctl -w net.ipv4.conf.eth0.rp_filter=2sysctl -w net.ipv4.conf.lo.rp_filter=2susctl -w net.ipv4.conf.default.rp_filter=2sysctl -w net.ipv4.conf.all.rp_filter=2# 이 설정은 자신의 네트워크가 스푸핑된 공격지의 소스로 쓰이는 것을 차단한다.# 모든 인터페이스에서 들어오는 패킷에 대해 reply를 하여 들어오는 인터페이스로 나가지 # 못하는 패킷을 거부한다.  sysctl -w net.ipv4.conf.eth0.accept_redirects=0sysctl -w net.ipv4.conf.lo.accept_redirects=0sysctl -w net.ipv4.conf.default.accept_redirects=0sysctl -w net.ipv4.conf.all.accept_redirects=0#  icmp redirects 를 허용하지 않는다.# 만약 ICMP Redirect 를 허용할 경우에는 공격자가 임의의 라우팅 테이블을 변경할 수# 있게 되어 자신이 의도하지 않는 경로, 즉 공격자가 의도한 경로로 트래픽이 전달될 수 # 있는 위험이 있다.sysctl -w net.ipv4.conf.eth0.accept_source_route=0sysctl -w net.ipv4.conf.lo.accept_source_route=0sysctl -w net.ipv4.conf.default.accept_source_route=0sysctl -w net.ipv4.conf.all.accept_source_route=0# 스푸핑을 막기 위해 source route 패킷을 허용하지 않는다.# 소스 라우팅을 허용할 경우 악의적인 공격자가 IP 소스 라우팅을 사용해서 목적지의 경로# 를 지정할 수도 있고, 원래 위치로 돌아오는 경로도 지정할 수 있다. # 이러한 소스 라우팅이 가능한 것을 이용해  공격자가 마치 신뢰받는 호스트나# 클라이언트인것 처럼 위장할 수 있는 것이다.sysctl -w net.ipv4.conf.eth0.bootp_relay=0sysctl -w net.ipv4.conf.lo.bootp_relay=0sysctl -w net.ipv4.conf.default.bootp_relay=0sysctl -w net.ipv4.conf.all.bootp_relay=0# bootp 패킷을 허용하지 않는다.sysctl -w net.ipv4.conf.eth0.log_martians=1sysctl -w net.ipv4.conf.lo.log_martians=1sysctl -w net.ipv4.conf.default.log_martians=1sysctl -w net.ipv4.conf.all.log_martians=1# 스푸핑된 패킷이나 소스라우팅,  Redirect 패킷에 대해 로그파일에 정보를 남긴다.sysctl -w net.ipv4.conf.eth0.secure_redirects=0sysctl -w net.ipv4.conf.lo.secure_redirects=0sysctl -w net.ipv4.conf.default.secure_redirects=0sysctl -w net.ipv4.conf.all.secure_redirects=0# 게이트웨이로부터의 redirect 를 허용하지 않음으로써 스푸핑을 막기 위해 설정한다.sysctl -w net.ipv4.conf.eth0.send_redirects=0sysctl -w net.ipv4.conf.lo.send_redirects=0sysctl -w net.ipv4.conf.default.send_redirects=0sysctl -w net.ipv4.conf.all.send_redirects=0# icmp redirects 를 보내지 않는다.sysctl -w net.ipv4.conf.eth0.proxy_arp=0sysctl -w net.ipv4.conf.lo.proxy_arp=0sysctl -w net.ipv4.conf.default.proxy_arp=0sysctl -w net.ipv4.conf.all.proxy_arp=0# proxy arp 를 설정하지 않는다. 이 값이 1로 설정되었을 경우 proxy_arp 가 설정된 인터페# 이스에 대해 arp 질의가 들어왔을 때 모든 인터페이스가 반응하게 된다.sysctl -w net.ipv4.tcp_keepalive_time=30# 이미 프로세스가 종료되어 불필요하게 남아 있는 연결을 끊는 시간을 줄이도록 한다.sysctl -w net.ipv4.tcp_fin_timeout=30# 연결을 종료시 소요되는 시간을 줄여준다. (기본 설정값 : 60)sysctl -w net.ipv4.tcp_tw_buckets=720000 # 동시에 유지 가능한 timewait 소켓의 수이다. 만약 지정된 숫자를 초과하였을 경우에는# timewait 소켓이 없어지며 경고 메시지가 출력된다. 이 제한은 단순한 DoS 공격을 차단하# 기 위해 존재하는데, 임의로 이 값을 줄여서는 안 되며 메모리가 충분하다면 적절하게 늘# 려주는 것이 좋은데,  64M 마다 180000 으로 설정하면 된다. 따라서 256M 일 경우에는 # 256/4=4 4*180000=720000 을 적용하면 된다.sysctl -w net.ipv4.tcp_keepalive_probes=2sysctl -w net.ipv4.tcp_max_ka_probes=100# 간단한 DoS 공격을 막아준다.위의 모든 설정은 재부팅 후에 원래의 값으로 다시 초기화되므로  /etc/rc.d/rc.local 에 두어 부팅시마다 실행하도록 하여야 한다.  그리고 리눅스의 버전이 낮아 sysctl 명령어가 없는 경우에는 echo 0 or 1 > /proc/sys/net/* 와 같이 직접 /proc 이하의 값을 직접 설정해 주어도 된다.echo 명령어 역시 재부팅되면 초기화되므로 /etc/rc.d/rc.local 에 설정해 두어야 재부팅후에도 적용이 된다.  아울러 레드햇 6.2 이상일 경우에는 /etc/sysctl.conf 파일에 net.ipv4.tcp_syncook-ies=1 와 같이 설정한 후 network 를 restart 하는 방법도 있다.  4. 그외 SYN_Flooding 에 대한 보충 설명 몇 가지(1)  위에서 설명한 방법 외에 추가적으로 설정할 만한 몇 가지 방법이 있다.RFC 1918 에 의해 내부(Private) IP를 소스로 들어오는 트래픽을 차단한다.127.0.0.0, 10.0.0.0, 172.16.0.0, 192.168.0.0 등은 Private IP 로서 내부의 가상 IP 를 사용할 때  쓰이는 주소이며 일반적으로 이러한 IP를 소스 주소로 라우팅이 될 수 없다. 따라서 아래와 같이 비정상적인 IP 주소를 소스로 해서 들어오는 트래픽을 차단한다.iptables -A INPUT -s 10.0.0.0/8 -j DROPiptables -A INPUT -s 172.16.0.0/12 -j DROPiptables -A INPUT -s 192.168.0.0/16 -j DROP # 사설 IP 를 차단한다.# /8, /16 등은 CIDR 라 하며 /8 은 A Class, /16 은 B Class 를 뜻한다.iptables -A INPUT -s 255.255.255.255/32 -j DROPiptables -A INPUT -s 127.0.0.0/8 -j DROP# 일반적으로 라우팅이 되지 않는 IP 대역을 차단한다.iptables -A INPUT  -s 240.0.0.0/5 -j DROP# IANA 에 예약된 주소를 차단한다.iptables -A INPUT  -s 211.2.3.4 -j DROP# 아울러 자기 자신의 IP 를 소스로 하는 패킷도 필터링한다.(211.2.3.4 대신 자신의 IP입력)# 자신의 IP 를 소스로 해서 패킷이 들어올 수는 없다.자신의 시스템이 Kernel 2.4 이전 버전의 경우에는 iptables 대신 ipchains 를 사용하므로 ipchains -A input -s 10.0.0./8 -j DENY 와 같은 방법으로 사용하면 된다.만약 iptables 가 설치되어 있지 않으면 http://netfilter.kernelnotes.org/ 에 접속 후 최신 버전의 iptables.tar 를 다운로드 받아 압축해제 후 make; make install 로 설치하면 된다. 현재 리눅스 시스템의 Kernel 버전은 uname –r 을 입력하면 확인할 수 있다.아울러 아래는 네트워크를 통해 라우팅 될 수 없는 IP 대역이므로  필터링 하여야 할 IP 이다.0.0.0.0/8           - Historical Broadcast10.0.0.0/8          - RFC 1918 에 의한 내부 네트워크 127.0.0.0/8         - Loopback169.254.0.0/16      - Link Local Networks172.16.0.0/12       - RFC 1918 에 의한 내부 네트워크192.0.2.0/24        - TEST-NET192.168.0.0/16      - RFC 1918에 의한 내부 네트워크 224.0.0.0/4         - Multicast D Class 240.0.0.0/5         - 예약된 E Class 248.0.0.0/5         - 미할당 255.255.255.255/32  - 브로드캐스트(2) 임의의 IP 가 아닌 특정한 IP를 소스 주소로 계속적으로 SYN 공격이 이루어 질 경우에는 해당 IP 를 차단하는 것도 좋은 방법이다. 만약 211.2.3.4 에서 지속적으로 공격이 들어올 때는 아래와 같이 차단할 수 있다.iptables -A INPUT -s 211.2.3.4 -j DROP (Kernel 2.4.x 버전)ipchains -A input  -s 211.2.3.4 -j DENY (Kernel 2.4 이전 버전)또는 route add -host 211.2.3.4 reject 로 한다.만약 211.2.3.X 대역 전체를 차단하려면 211.2.3.0/24 와 같이 하면 된다.(/24 는 C Class 를 뜻한다.)그러나 위와 같이 route 보다는 iptables 나 ipchains 로 차단하는 것이 더 효과적이다.만약 임의의 IP로 공격지를 생성한다면 SYN_RECEIVED 로 보이는 IP 중에는 실제 네트워크에 연결되어 있는 IP 도 있을 것이고 그렇지 않은 IP 도 있을 것이다. 그러나 실제 공격을 당할 때 공격지 IP 를 검출해 보면 모두 ping 이 되지 않는 실제 네트워크에 연결되지 않은 IP 주소이다. 어째서 이런 현상이 일어날까? 이는 앞에서 설명한 TCP 의 3 Way-Handshake 원리를 잘 생각해보면 이해가 될 것이다.즉, 무작위로 생성된 IP 를 소스로 한 SYN 패킷을 받은 서버는, 요청을 받은 모든 IP 로 SYN+ACK 패킷을 보낸다. 그런데, 정작 실제로 해당 IP 를 사용중인 호스트는 SYN 패킷을 보내지도 않았는데, 공격을 받은 서버로부터 영문도 모르는 SYN+ACK 를 받았으므로 이 패킷을 비정상적인 패킷으로 간주하고 해당 패킷을 리셋(RST)하여 초기화 시킨다. 그리고 실제 존재하지 않는 IP 에 대해서 알아보자. 공격을 당한 서버가 해당 IP로부터  SYN 패킷을 받았다고 판단(실제로는 위조된 패킷이지만) 하여 SYN+ACK 패킷을 발송 후 ACK 패킷을 계속 기다리지만 해당 IP 는 인터넷에 연결되어 있지 않으므로 SYN+ACK 패킷을 받을 수도 없을 뿐더러 이에 대한 응답으로 ACK 패킷을 발송하지 않을 것임은 불을 보듯 뻔한 것이고, 결국 공격을 받는 서버는 존재하지도 않는 IP 로부터 ACK 패킷을 받을 것만을 기다리며 백로그큐는 가득 차게 되는 것이다.  이것이 백로그큐가 가득 차게 되는 이유이며 백로그큐를 가득 채우는 IP가  모두 실제로는 존재하지 않는 IP 들인 것이다. 따라서 공격자의 입장에서는 인터넷상에서 라우팅이 되지 않는 IP 를 소스 IP 로 하여 공격하는 것이 가장 효과적일 것이다. 즉 인터넷에 연결되어 있는 IP 를 소스 주소로 하여 SYN Flooding 공격하는 것은 의미가 없다.(3) 실제 공격지 IP를 추적하는 것은 거의 불가능하다.대부분의 DoS 공격이 그러하듯이 SYN_Flooding 공격도 소스IP를 속여서 들어오기 때문에 netstat 으로 보이는 IP를 실제 공격지 IP 라고 판단해서 해당 IP로 역공격을 해서는 안 된다.  공격을 당하는 리눅스 서버에서 공격지를 아는 방법은 없으며 상위 라우터와 해당 라우터가 연결되어 있는 ISP 업체와 긴밀하게 협조가 되었을 때라야  그나마 추척이 가능하다.그러나 사실상 협조가 이루어져도 추척하기란 매우 어려운데, 만약 라우팅 경로가 20개이상 되는 곳에서 공격한다면 20개 라우터를 관리하는 모든 관리자와 동시에 협조가 이루어져야하고 공격이 실제 이루어지고 있는 당시에  추척이 되어야 하므로 매우 어렵다고 할 수 있다.    결론적으로 공격지 IP 를 추척하는 것은 불가능하다고 할 수 있다. 그리고, 참고적으로 시스템에서 위조된 패킷을 생성하는 것은 오직 root 만이 가능하므로 공격자는 공격지 시스템의 root 소유로 SYN Flooding 공격을 하는 것이라는 사실을 참고하기 바란다.(4) Virtul-Sever 커널 패치를 하는 방법도 있다.이 커널 패치를 하였을 경우에는 몇 가지 DoS 공격을 차단할 수 있다. VirtualServer란 말 그대로 로드 밸랜싱등의 클러스터링 시스템을 구성할 때 필요한 커널 패치로서 패치를 한 후  sysctl -a|grep .vs. 로 확인해 보면 몇 가지 설정이 추가된 것을 확인할 수 있다. 이 방법에 대한 보다 자세한 안내는 http://www.linuxvirtualserver.org/defense.html 를 참고하기  바란다.(5) 라우터나 방화벽에서 차단 가능하다.라우터등 네트워크 장비로 유명한 CISCO 에서는 TCP SYN_Flooding 공격을 차단하기 위해 TCP Intercept 라는 솔루션을 제안했다.  TCP Intercept 는 두 가지 방식으로 구현가능한데 , 첫번째 방식은 “인터셉트 모드” 라 하여 말 그대로 라우터로 들어오는 SYN 패킷 요청을 그대로 서버에 넘겨주지 않고 라우터에서 일단 가로채어(Intercept 하여) 서버를 대신하여 SYN 패킷을 요청한 클라이언트와 연결을 맺고, 연결이 정상적으로 이루어지면 이번에는 클라이언트를 대신하여 서버와 연결을 맺은 다음 두 연결을 투명하게 포워딩하여 연결시켜주는 방식이다.  따라서 존재하지 않는 IP 로부터 오는 SYN 요청은 서버에 도달하지 못하게 되는 것이다. 두번째 방식은 “와치(watch) 모드” 라 하여 “인터셉트 모드”와는 달리 라우터를 통과하는 SYN패킷을 그대로 통과시키고 일정 시간동안 연결이 이루어지지 않으면 라우터가 중간에서 SYN 패킷을 차단하는 방식이다.  몇몇 방화벽에서도 위의 두 가지 방식으로 SYN Flooding 을 차단하고 있다.   실제로 tcp intercept 를 설정하여 테스트 결과 서버 레벨에는 전혀 스푸핑된 SYN 패킷이 보내지지 않아 SYN_Flooding 공격을 차단하기 위한 가장 확실한 방법이기는 했지만 아쉽게도 라우터의 CPU, Memory 부하가 너무 높아지는 단점이 있었다. 이 설정에 대해 궁금하신 분은CiscoCisco (NASDAQ: CSCO) is the worldwide leader in IT that helps companies seize the opportunities of tomorrow by proving that amazing things can happen when you connect the previously unconnected.www.cisco.com접속후 "tcp intercept" 로 검색해 보기 바란다. 이 설정을 했을 경우에는 모든 패킷에 대해 인터셉트를 하므로 트래픽이 많을 경우에는 라우터가 다운되는 경우도 있으니 설정시 각별히 주의하기 바란다.(6)  Windows NT/2000 계열에서는 Registry값을 수정함으로써 튜닝이 가능하다.이 값에 대한 튜닝은 Microsoft 의 technical page 나 http://packetstorm.securify.com/groups/rhino9/synflood.doc 를 다운로드 받아 참고하기 바란다.AIX나 Solaris등 다른 UNIX 계열에 대한 튜닝은 UNIX IP Stack Tuning Guide v2.7www.cymru.com를 참고하기 바란다.(7) CRON 을 이용해 SYN_Flooding 공격을 감지한다.아무리 튜닝을 잘 했다 하더라도 집중적으로 SYN Flooding 공격을 받을 때는 네트워크나 서비스 데몬이 이상 작동할  수도  있다. 그래서 이상 현상이 나타나기 전에 일정 시간마다 시스템에 로그인하여 netstat 으로  확인할 수 있겠지만 언제 공격이 들어올 줄 알고 지켜보고 있겠는가?    그래서 필자는 SYN Flooding 을 감지하기 위해 다음과 같이 간단한 스크립트를 짜서 공격이 확인되면 메일로 통보되도록 하여 사용중이다.#!/usr/bin/perl$TASK = `netstat -na|grep SYN_RECV`;$HOSTNAME = `/bin/hostname`;$TO_MAIL      = 'antihong@tt.co.kr';       $SUBJECT      = "$HOSTNAME SYN_FLOODING 공격 감지";$MAIL_PROGRAM  = "/usr/sbin/sendmail";if ($TASK){  $TASK_CONFIRM = `netstat -na|grep SYN_RECV|wc -l`;if($TASK_CONFIRM > 20){`/etc/rc.d/init.d/httpd stop`;`/etc/rc.d/init.d/httpd start`;$HTTP_DONE ="httpd was Refreshed!!n";}open(MAIL, "|$MAIL_PROGRAM -t");    print MAIL "To: $TO_MAIL n";    print MAIL "Subject: $SUBJECT nn";    print MAIL "$HOSTNAME Server is Attacked by SYN_Flooding!!!n";print MAIL "SYN_Flooding Process Number :$TASK_CONFIRM n";    print MAIL "$HTTP_DONEn";    print MAIL "$TASK n";close(MAIL);}위 파일의 내용중 $TO_MAIL 은 공격 감지시 통보될 메일 주소이므로 자신의 e-mail 주소로 변경하고, 불완전한 SYN 패킷이 20개 이상일 경우 ($TASK_CONFIRM > 20)`/etc/rc.d/init.d/httpd stop`; 과  `/etc/rc.d/init.d/httpd start`; 으로  웹데몬을 멈추었다가 시작하도록 설정하였는데, 이는 자신의 설정에 맞게 적절히 수정하도록 한다.물론 SYN Flooding 공격이 특정 포트에 대해서만 가능한 것은 아니지만 거의 80번 포트에 대해 집중적으로 이루어지고 있으므로 웹데몬을 예로 설정한 것 뿐이다.위 파일의 내용을 /etc/cron.5min/ 이라는 디렉토리에 두고 실행할 수 있도록 700 으로 설정해 둔다. 그리고 /etc/crontab 파일을 열어 아래 내용을 추가하면 5분마다 SYN_Flooding 여부를 체크하여 공격이 확인시 지정된 메일 주소로 통보해 준다..59/5 * * * * root run-parts /etc/cron.5min/ …
    작성자최고관리자 시간 07-24 조회 238
  • NGINX 소개
    NGINX는 차세대 웹서버로 불린다. 위의 그래프를 통해서 알 수 있듯이 Apache의 독주에 제동을 걸고 있다. NGINX의 특징은 한마디로 정의하면 아래와 같다.더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있다.…
    작성자최고관리자 시간 03-22 조회 222
  • tigase-xmpp-server
    Tigase XMPP Server는 XMPP 서비스 또는 인스턴스 통신 (IC) 서비스를 제공하는 당사의 대표적인 서버 측 소프트웨어입니다. 가장 기본적인 설명은 Tigase가 채팅 서버이지만 Tigase는 단순한 채팅 서버 이상의 것입니다. 채팅은 가능한 응용 프로그램 중 하나이지만 모든 종류의 인스턴트 통신 서비스 (사람 또는 기계 일 수 있음)는 Tigase XMPP 서버에서 수행 할 수 있습니다.EJabberd ,  Openfire ,  Jabberd2 ,  Prosody  또는 독점권 :  Isode ,  Jabber XCP  와 같은 오픈 소스와 같은 훌륭한 XMPP 서버가 현재 많이  있습니다. 이것들은 XMPP 소프트웨어의 훌륭한 예이며 우리가 결정하기 전에 모두 확인하는 것이 좋습니다. xmpp.org 웹 사이트 에서 더 자세한 목록을  볼 수 있습니다 . 그러나 Tigase XMPP 서버 는 여러면에서 고유합니다. 모든 다른 사람들과 마찬가지로, 그것은 완전히 최신 사양을 지원  XMPP CORE - RFC 6120  및  XMPP IM - RFC 6121을   과 함께 확장 호스트 . 그러나 Tigase는 그것을 뛰어 넘습니다. 끊임없이 소프트웨어를 개선하는 헌신적이고 경험있는 지원 직원과 함께 Tigase는 다음과 같은 기능을 통해 "즉시 사용할 수있는"기능을 제공합니다.고도로 최적화 됨.  메인 바이너리 파일은 디버깅 데이터없이 1MB 미만입니다. 예, 우리의 devs는 어셈블러에서 자랐으며 마지막 비트까지 코드를 최적화하는 방법을 배웠습니다. Tigase는 10MB의 메모리 로 성공적으로 실행할 수 있습니다  .매우 모듈 식.  고정 된 한 줄의 코드는 없습니다. 모든 요소, 구성 요소, 플러그인 및 기능은 예외적으로 풍부한 API가있는 구성을 통해 대체 될 수 있습니다.매우 유연합니다.  시스템과 완벽하게 통합되도록 조정 및 사용자 정의가 용이합니다. Tigase는 사용자의 요구 나 환경에 맞게 맞춤식으로 구성 할 수 있습니다.상자 밖으로 클러스터링을 지원합니다.  추가 소프트웨어 또는 추가 라이브러리를 찾아 설치할 필요가 없습니다. 구성 파일에 단지 2 줄 밖에 추가하지 않아 이제 클러스터 할 준비가되었습니다.실행하도록 설계되었습니다. 아주 작은 기계 부터 표준 서버  및  정말로 크고 심각한 하드웨어  에 이르기까지 모든 것을 망라  합니다 . 라즈베리 파이부터 아마존 EC2 구름까지 Tigase는 집과 똑같습니다.테스트를 거쳐 준비되었습니다.  당사는 자동화 된  테스트를 실행하기 위한  전용 툴 을 보유하고 있으며 필요에 맞게 구성 할 수 있습니다. 또한 모든 테스트 결과가 공개 되어 수동 호환성 테스트 및  부하 테스트를 실행  합니다. 우리가 사용하는 모든 도구와 구성 세부 정보를 사용할 수 있습니다. 우리는이 데이터를 공개해야 할뿐만 아니라 그 결과를 스스로 반복 할 수 있어야한다고 믿습니다. 예, 우리는 테스트에 정말로 열중합니다.스크립팅 지원 빌드 인.  확장 프로그램에 대한 아이디어가 있으십니까? Tigase를 특정 작업으로 확장해야합니까? 모듈화되고 소스 코드와 독립적으로 만들고 싶습니까? Tigase는 그루비 (Groovy), 파이썬 (Python), 루비 (Ruby), 스칼라 (Scala) 등의 스크립팅 언어를 지원하므로 사용자가 원하는 바를 사용하여 소프트웨어를 확장 할 수 있습니다. 스크립트는 다시 시작하지 않고도 라이브 환경에서 테스트하고 실행할 수 있습니다.모니터링하기 쉽습니다 . HTTP, SNMP, JMX, XMPP를 통해 그리고 연결된 데이터베이스를 통해서도 다양한 방법으로 서버 메트릭에 액세스 할 수 있습니다. 서버가 딸꾹질에 직면했을 때 사람들이 전자 메일로 보내지도록 트리거를 설정할 수도 있습니다. 무슨 일이 일어나고 있는지 결코 알 수 없습니다.보안 . Tigase는 TLS, SASL, SSL 등과 같이 현대적인 모든 보안 표준을 지원합니다. 사용자의 개인 정보를 보호하기 위해 처음부터 안전하도록 설계되었습니다. API는 다른 사용자를 위해 작동하는 코드에서 사용자의 데이터에 액세스하는 것을 허용하지 않습니다. 서버 내부에는 강력한 분리가 있습니다. 이것은 프로그래머의 실수 나 게으름으로부터 사용자를 보호하기위한 것입니다. 잘못 작성된 코드는 제대로 작동하지 않습니다.OSGi 준비.  런타임에 핫 스왑 및 시스템 업그레이드를 지원하므로 재시작 할 필요가 없습니다.오픈 소스.  단 하나의 마음 만이 명작을 창작 할 수 있다면, 조직 된 마음의 공동체는 진정으로 고무적인 것을 만들어 낼 수 있습니다. 독점적 인 또는 폐쇄 소스 제공 소프트웨어보다 오픈 소스 소프트웨어가 뛰어난 이유는 무엇입니까? 인터넷의 얼굴과 사람들이 그것을 사용하는 방식은 항상 매우 빠르게 변화합니다. 모든 경쟁 업체는 오늘날 요구 사항을 매우 잘 충족시킬 수있는 우수한 제품을 제공합니다. 그러나 내일에는 경쟁사와 차별화되는 새로운 기능이 필요합니다. 독점 제품 공급 업체가이 새로운 요소를 자신의 제안에 추가 할 때까지 기다릴 수는 있지만 모든 고객이이 기능을 사용하기 때문에 이점이 없습니다. 이 특정 기능을 독점적으로 추가하도록 공급 업체에 요청할 수 있으며, 아니요, 또는 이것에 대한 엄청난 돈을 청구 할 수 있습니다. 모든 오픈 소스 프로젝트 내에서 프로젝트 팀에게 특정 기능을 요청하거나 경쟁 업체에서 사용할 수 없도록 직접 기능을 추가 할 수 있습니다. 오픈 소스 프로젝트의이면에있는 회사 나 팀이 사라지더라도 소프트웨어는 그대로 있으며 소스 코드를 사용하고 확장 할 수 있습니다.모든 소스 코드가있는 서버는 AGPLv3 - GNU Affero 일반 공중 사용 허가서 에서 무료로 사용할 수  있으며  필요한 경우 상용 라이센스를 제공 할 수도 있습니다 (선택 사항).Tigase XMPP 서버에 대해 가장 좋아하는 것은 무엇이든 상관없이 작동합니다.고객의 설치 데이터베이스 중 하나가 사망했습니다. Tigase가 계속 작동하기 때문에 2 주 동안 아무도이 사실을 알지 못했지만 사용자는 평소대로 통신 할 수있었습니다. 로그인 문제에 대해 불평하는 사람들 만이 설치를주의 깊게 관찰했습니다. 데이터베이스 문제가 수정되어 Tigase가 재 연결되어 다시 시작하지 않고 중단없이 계속 작업했습니다.다른 경우 Tigase는 하드 드라이브 손상에도 불구하고 잘 작동한다고보고되었습니다. Tigase는 아무런 문제없이 계속 작업했기 때문에 데이터베이스가 다른 컴퓨터에서 실행되고 있었기 때문에 고객은 한 달 동안 수리를 연기 할 수있었습니다.Tigase XMPP Server는 모든 사양과 모든 확장 기능을 지원하기 위해 개발되었습니다. 우리 팀은 그것을 사용하는 방법 을 사용하고자하는 사람들에게 정말 도움이되도록 노력 합니다. 따라서 우리는 그것을 사용자 정의하고 유연하게 만들었습니다. 매우 간단한 구성 옵션을 통해 많은 조정이 가능합니다. 광범위한 API와 모듈성을 통해 고급 통합이 가능합니다.Tigase는 소규모 설치에서도 훌륭하게 작동하지만 트래픽이 많은 초대형 시스템에서만 최대 잠재력을 발휘할 수 있습니다. Tigase는 수백만 명의 온라인 사용자 또는 장치와 인스턴트 메시징 시스템을 정기적으로 실행합니다.…
    작성자최고관리자 시간 03-22 조회 298
  • 열람중
    apache 에서 모든 URL을 강제로 https 로 변경하는 방법
    크게는 mod_redirect와 mod_rewrite두가지를 이용해서 할 수 있습니다.– mod_redirectSource code   <VirtualHost *:80>
    DocumentRoot /home/www
    ServerName gabia.com
    ServerAlias www.gabia.com
    <Location />
    RedirectMatch /(.*)$ https://www.gabia.com/$1
    </Location>
    </VirtualHost>gabia.com 으로 들어왔을때 Location이 / (root) 일 경우match 되는 모든것들을 $1 변수를 이용하여 redirect 시키는 방법 입니다.– mod_rewriteSource code   <VirtualHost *:80>
    DocumentRoot /home/www
    ServerName gabia.com
    ServerAlias www.gabia.com
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
    </IfModule>
    </VirtualHost>gabia.com 으로 들어왔을때 mod_rewrite 가 모듈에 올라가 있고 HTTPS로 요청한것이 아니라면 강제로 redirect 시키는 방법입니다.[R,L] 에서 R은 강제로 redirect 시킨다는 뜻 입니다. http status code에 의해 분기할 수 있습니다.L은 마지막 RewriteRule 이라는 뜻 입니다. 이후의 RewriteRule은 모두 무시됩니다.만약 해당 설정 아래에 또다른 RewriteRule이 필요하다면 L를 빼면 됩니다.Tags: apache, https, mod_redirect, mod_rewrite, ssl …
    작성자최고관리자 시간 03-08 조회 395
  • [CentOS 7] SELinux 활성화 시 XE 설치가 안 될 때
    [CentOS 7] SELinux 활성화 시 XE 설치가 안 될 때   [CentOS 7] SELinux 활성화 시 ciboard 설치가 안 될 때  cache directory : application/cache 디렉토리의 퍼미션이 올바르지 않습니다​logs directory : application/logs 디렉토리의 퍼미션이 올바르지 않습니다​…
    작성자최고관리자 시간 12-22 조회 286
  • Centos 7 설치
    Centos 7 설치   $_GET , $_POST  값설정되지 않은 에러 처리  :  & ~E_NOTICE 추가error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE  아파치 사용을 위한   ex: mate1이라는 사용자:그룹 chown -R mate1:mate1 /home/mate1권한 부여  maria DB 계정설정후 반드시 반영 처리 해야 사용가능하다. grant all privileges on mate1.* to mate1@'%'; -- 권한설정을 새로 반영합니다. MariaDB [(none)]> flush privileges;  ==================http://pyonji.tistory.com/14…
    작성자최고관리자 시간 12-06 조회 266
  • Udoo 유두 - 아!! 멋진놈들
    http://www.it.co.kr/news/mediaitNewsView.php?nSeq=2370934…
    작성자최고관리자 시간 07-12 조회 1063
  • 라즈베리파이 OS 설치
    http://www.raspberrypi.org/downloads
    다운로드…
    작성자최고관리자 시간 06-14 조회 937
  • 라즈베리파이 (Raspberry Pi)
    무료는 아니지만 .. 정신은.. 99%를 위한 거다.



    라즈베리 파이(영어: Raspberry Pi)는 영국의 라즈베리 파이 재단이 학교에서 기초 컴퓨터 과학 교육을 증진시키기 위해 만든 싱글 보드 컴퓨터이다.[4][5][6][7][8] 라즈베리 파이는 그래픽 성능이 뛰어나면서도 저렴한 가격(세금을 포함하지 않은 모델 A의 경우 25달러, 모델 B의 경우 35달러)라는 특징을 갖고 있다.

    라즈베리 파이는 브로드컴의 BCM2835 단일 칩 시스템을 사용하며,[3] 이 칩에는 ARM1176JZF-S 700 MHz 프로세서, 비디오코어 IV GPU[9]와 256 메가바이트 RAM이 들어 있다. 라즈베리 파이는 하드 디스크 드라이브나 솔리드 스테이트 드라이브를 내장하고 있지않으며, SD 카드를 외부 기억장치로 사용한다.[10] 라즈베리 재단은 컴퓨터 교육 증진을 위해 2가지 모델을 내놨으며, 각각 25달러와 35달러로 책정되었다. 2012년 2월 29일 재단은 35달러짜리 모델의 주문을 받기 시작하였다.[11]

    또한 라즈베리 파이 재단측에서는 라즈베리 파이에 포팅한 데비안과 아치 리눅스, QtonPi등의 리눅스 배포판을 제공하고 있다.[12] 또한 재단측에서는 라즈베리 파이의 주 프로그래밍 언어인 파이썬[13][14]에 BBC 베이직[15][16], C[13], 펄등을 지원[13]할수 있는 툴들을 계획중이다.…
    작성자최고관리자 시간 06-14 조회 795
  • 웹캠을 이용해서 스트리밍 서비스 하기... VAIO P MOTION EYE
    VAIO P에 우분투를 설치하고 제대로 테스트도 안 해보고 웹캠(MOTION EYE)이 동작하지 않는다고 생각했는데, 혹시나 하는 생각에 테스트를 해보니 아무런 설정 없이 video4linux2(/dev/video0)로 인식이 되었다. 그래서 이 웹캠을 가지고 테스트 겸 뭔가 할 수 없을까 하다가, 웹캠에 찍히는 화면을 실시간으로 인터넷으로 볼 수 있으면 좋겠다는 생각이 들었다. 그래서 찾아보니 ffmpeg와 ffserver를 이용하면 비교적 간단하게 스트리밍 서비스가 가능해 보여서 시도해 보았다.① 우선 ffmpeg를 설치한다.$ sudo apt-get install ffmpeg② ffserver.conf 파일을 만든다. /etc/ffserver.conf 파일 대신에 아래의 파일을 쓴다. 첨부파일 : ffserver.confPort 8090# bind to all IPs aliased or notBindAddress 0.0.0.0# max number of simultaneous clientsMaxClients 1000# max bandwidth per-client (kb/s)MaxBandwidth 10000# Suppress that if you want to launch ffserver as a daemon.NoDaemonFile /tmp/feed1.ffmFileMaxSize 100MFeed feed1.ffmFormat swfVideoCodec flvVideoFrameRate 15VideoBufferSize 80000VideoBitRate 100VideoQMin 1VideoQMax 5VideoSize 640x480PreRoll 0Noaudio※ 위의 파일은 flv Codec의 swf 파일만을 서비스하는 설정파일이다.③ ffserver를 실행한다. 설정파일은 현재 디렉토리에 있다고 가정한다.$ ffserver -f ./ffserver.conf④ ffmpeg를 실행하면, 웹캠이 동작한다.$ ffmpeg -r 15 -s 640x480 -f video4linux2 -i /dev/video0 http://localhost:8090/feed1.ffm※ -r 15 : 초당 15프레임, -s 640x480 : 640x480 해상도, -f video4linux2 : v4l2 포멧, -i /dev/video0 : 웹캠의 주소 http://localhost:8090/feed1.ffm : 영상을 저장할 주소⑤ 다른 컴퓨터의 웹브라우저에서 스트리밍 서버의 주소를 치면 플래시(swf)로 실시간 영상을 볼 수 있다.http://스트리밍서버(VAIO P)주소:8090/test.swf아래 스크린샷은 VAIO P에 접속한 다른 컴퓨터에서 찍은 스크린샷이다. 좌측 웹 브라우저에 보이는 화면이 실시간으로 VAIO P의 웹캠(MOTION EYE)이 찍고 있는 영상이다.…
    작성자최고관리자 시간 06-13 조회 1588

회원로그인

Copyright © 2001-2016 ITNANUM. All Rights Reserved..