Media Log

php 버전 4.0 이상부터 지원된다.
쌍따옴표나 홑따옴표를 사용하지 않고 문자를 통째로 묶어서 변수에 저장 할때 사용한다.
사용법은 <<< EOD를 선언해주고 EOD;로 닫아준다.
이 안에서는 쌍따옴표든 뭐든 그냥 써주면 된다. php 변수도 적용된다.


EOD는 EndOfDocument라는 의미의 축약형 심볼.

 

<?php $str =
<<<EOD Example of string spanning multiple lines using heredoc syntax. EOD; /* 변수도 사용된 좀더 복잡한 예제. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MyName'; echo <<<EOT My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; ?>

*** 주의할점 ***
<<<EOD or EOT 뒤에 절대로 아무 글자도 와서는 안된다. 스페이스바도안된다.
끝날때 EOD or EOT뒤에도 절대오 어떤 글자도 와서는 안된다.

뛰어쓰기라도 들어가면 바로 에러구문이 뜬다. 
회원 인증 로그인 시스템 보안 


php.ini 에서 register_globals=off 하시면 , 일단 보안이 되구요. 
세션을 사용시 $_SESSION 이나 $HTTP_SESSION_VARS[] 형태로 사용하여야 합니다. 

왼쪽에 PHP4.1.1 아래 관련 게시물 주욱 보시면 됩니당 

글구 회원 비번은 md5() 로 암호화 하시구요. 쿠키는 사용하지 마세요. 
회원이 비번을 잊어 버렸을 경우는 회원 email 주소로 새로운 비번을 쏴주시구요. 

세션의 경우 회원id 세션과 회원 비번 md5 암호화 한 세션 , 2개 로 비교 하세요. 
회원 레벨..준회원..정회원..관리자 등이 있을 경우는 3개 로 비교 하시구요. 
1개 로만 절대로 비교 하시지 말구요 ! 

회원 정보 수정 시 form 에서 맨아래 무조건 회원 비번을 1번더 묻게 하시구요. ^^ 

register_globals=off  하셨나요? 
$_SESSION 은 PHP4.1.0 이상 입니다. 

세션의 경우는 /tmp 폴더에 저장 하시지 마세요. php.ini 에서 세션저장 장소를 바꾸세요.
session지시자 아래 있슴다. 
/tmp 는 너무 알려 져서 좋지 않습니다. ! 

register_globals=off 를 하지 않더라도..여러가지로 보안을 취할 수 있습니다. 
$REQUEST_METHOD 를 체크 하는 방법 하구요. 
$HTTP_REFERER 를 체크 하는 방법 하구요. 
PHP강좌 게시판에서 http 나 request 로 검색 하시구요. 왼쪽에 PHP 보안 메뉴 아래 쪽에 보세용 ^^ 

세션 생성시 $userid 를 생성 하고, $userpass=md5($userpass); 로 생성 해서, 
2개 값이 있는지 비교 하구요.. isset() 등으로 비교 하시는 것이 좋구요. 

$userpass 값은 32 자 인지 확인 하시면 됩니다. md5() 로 해슁 하면 32자가 됩니당. 

if((session_is_registered(username)) && (session_is_registered(user_id))) 
session_is_registered() 를 사용하시구요.. 

$pw 도 암호화 하세용..!!! 
비교는 

if($pw==md5($pw넘어온값) && isset($pw넘어온값)) 
이런식으로 체크 하시구용...^^ 

좀더 고심해 보시고 응용해보세요 ^^ 


$tpass=md5("pw008"); 
if(($id == "id007") && (md5($pw) == $tpass) && isset($pw) && isset($id)){ 

이런 식으로 ^^ 







★ zend encode 를 사용하지 않고 PHP 소스 안보이게 하는 방법 ?


PHP는 인터프리터 언어 입니다. 컴파일하지 않기 때문에 소스가보일 수 가 있습니다. 
물론 어렵겟죠...일반적으로 보안이 되어 있기 때문에 보이지는 않습니다. 

그렇다면 ,PHP 소스를 안보이게 하거나 보안을 하게 하는 방법은 ? 
컴파일 하지 않고 , PHP 소스 보안을 유지 하는 방법은 ? 

들여 쓰기 를 사용하지 않고, 변수명도 어렵게 하는 것 입니다. 
남들이 소스를 보기에 짜증나게 하는 것이죠....ㅋㅋㅋ 

머..이딴 소스를 만들었나 ? 싶을 정도로 짜증나게 만들면 보지 않을 검당...ㅋㅋㅋ 

PHPBuilder.com 읽다가 약간 번역 한 것임당...ㅌㅌㅌ 

http://www.phpbuilder.com/forum/read.php3?num=2&id=139250&thread=139219 


또는 http://pobs.mywalhalla.net 
를 사용하세요. 소스를 아래 처럼 만들어 버립니다. 우왕...어지러버요....해킹 불가 !!!  ㅋㅋㅋ 
읽어 보니...인간이 읽기에 힘든 편집으로 만든다 라고 적었네요... 

<?php 

include("pobs-ini.inc"); 
echo 
"<HTML><HEAD><TITLE>POBS - A PHP Obfuscator</TITLE><STYLE TYPE='text/css'>";echo "td { 
font- 
family: 
Verdana, sans serif;font-size:"
.$V24b02965."pt;  vertical-align: 
top; }"
;echo "</STYLE></HEAD><BODY>"
define("C00529ab2""<TD VALIGN=TOP>");define("C4d89b09c""<TD BGCOLOR=#6699CC 
VALIGN=TOP>"
);define 
("C5481f31d""<TD BGCOLOR=#E6E6E6 VALIGN=TOP>");define("C9c3b8e37""<TR>");define 
("Cd742068d""</TR>");define("Cdabce349""</TD>");define("C6faee0d5""</TABLE>"); 
if (
$PAF85580fcb(); 
$V9429cf94=time(); 
$Vf797b56c=0;$V048f0047=0
$Vbc961c59=array();$Vb787292f=array();$V4cb73b6b=array();$Vae809e1a=array(); 
$V4a949e17=array();$Va7254761=array();$Vd74f666d=array(); 
if (
$PAF23da1c4c();else Fb72cca71(); 

?> 




★ 파일 업로드 보안 문제 - 7 가지 모두 체크 !!!


1.php,inc,html,htm,phtml,php3 등의 확장자는 절대로 올릴 수 없게 한다 ! 
.txt 도 못올리게 합니다. .txt 를 사용해서 쿠키를 훔칠수도 있슴다. 


2.업로드 디렉토리는 무조건 htdocs 아래 말고 다른 디렉토리 에 올린다 !! 
/updir 이나 c:\updir 등 htdocs 와 관련이 없는 디렉토리에 올리게 한다. !! 

3.CP명령을 사용시에 exec(cp $file , 처럼 exec() 를 절대로 사용하지 말아야 한다. 
기냥 cp()만을 사용하라 !!! 
www.php.net/cp 

4.REQUEST_METHOD!="POST" 로 체크 해서 올리기 
POST 가 아닐 경우 올리지 못하게 !!! 
form 에서 method=get 으로 절대 절대 하지 마세요 !!! 
php.ini 에서 register_globals=off 라면 
$HTTP_SERVER_VARS['REQUEST_METHOD'] 로 출력 해야 합니당..ㅋㅋㅋ 


<?php 

if ($submit) { 
    if (
$REQUEST_METHOD == 'POST') { 
        
// 정상 실행 
    

    else { 
         echo 
'get 값은 받지 않아요 !!'
    } 
else { 
    echo 
'훔....잘못된 입력 !!!'


?> 

5.파일명이 pass 나 shadow 나 리눅스 시스템 파일일 경우는 올리지 못하게 하기 위해 
파일명 중에 pass 나 shadow 등이 있을 경우 올리지 못하게 !!! 
그러니까 koreapass.zip 파일 같은 것도 올라가지 않겟죠 ^^ 
그래도 보안을 위해서라면 ^^ /etc/passwd 파일(리눅스 파일)의 업로딩을 방지 합니다.

그러니까 upload.php 파일을 이용하여 주소표시줄에서 
upload.php?file_name=/etc/passwd&file_type=text&file_size=30 
등으로 해서 해킹할 시스템의 passwd 파일을 자료실에 올리고 다운 받을 수 있다고 합니다. 
그래서 취한 조치 입니다. 

6.또는 file_exists($file_name) 를 사용하여 체크 합니다. 로컬시스템에 파일이 있으면 절대 못올리게 
합니다 ^^ /etc/passwd 파일의 업로딩을 방지 합니다. 




7. PHP 4.1.2 최신 버전 말고는 모두 파일 업로드 버그가 존재 한다고 합니다.

PHP4.1.2 버젼 설치 하세용 !!!





★ HTML 태그를 막기  



htmlspecialchars() 를 사용하시지 말고, str_replace 로 직접 변환하세요 !!! 

<?php 

function cleanup($copy

    
$copy=trim($copy); 
    
$copy=htmlspecialchars($copyENT_QUOTES); 
    
$copy=eregi_replace ("%""&#37;"$copy); 
    
$copy=eregi_replace ("<""&lt;"$copy); 
    
$copy=eregi_replace (">""&gt;"$copy); 
    
$copy=eregi_replace ("&amp;""&"$copy); 
    
$copy=nl2br($copy); 
    
$copy=StripSlashes($copy); 
    return(
$copy); 

?> 

<scripts> 도 당근 막아야 하구요 
<table> 도 당근 막아야 합니다. 






★ HTML태그와 자바스크립트 사용 못하게 한다면?


HTML과 자바스크립은 뚫립니다. 쿠키 까지 알아 낼 수 도 있습니다. 
콤포넌트를 사용한 방식이 라도 안됩니다. 
hotmail.com 에서 장난 쳐서 보낼 수 도 있습니다. 

무조건 태그는 막는것이 좋습니다. 
그러나 대부분의 사용자는 모르고 있죠. 글서 보통 허용하는 것이 일반적 입니다. 
그러나 허용을 하더라도 <script> 등의 소스나 <a> 태그 외에 <a onmouse~> 등의 태그는 안됩니다. 
무자게 생각할 것이 많고 적용할 소스가 많습니다. 

아싸리 막아 버리세요. 

일단 막고 등으로 사용하게 하는 것이 좋습니당. !!! 






★ 반드시 회원의 비밀번호는 md5() 나 mhash 유틸리티의 암호화 알고리즘을 사용하여 저장 하세요 ^^


그리고 회원 정보 수정이나 중요사항 변경시, 쇼핑몰 결재시에는 반드시 
회원의 비밀번호를 한번더 물어 보고, 디비와 비교해서 통과 시키 세요 !! 

◆◇ 회원 정보 수정시 , 수정할 것들 맨아래 에 비밀번호 입력란을 만들면 됩니다 ^^ 

회원 비밀번호 찾기의 경우 , md5() 를 사용하면 바로 웹에서 찾을 수 없습니다. 
회원이 비밀번호를 분식했을 경우, 사용자 메일로 새로운 비번을 만들어서 보내는 알고리즘을 
사용하세요 !! 

주민등록 번호의 경우 수정시 라도 보여 주지 않는 것이 좋습니다. 
input text 박스만 보여 주고 옆에  731111-******* 이런식으로 명시 하시는 것이 좋습니다. 










★ *.inc 파일로 저장 하지 마십시오.


바로 브라우져에서 보일 수 있으며 간단한작동 만으로 데이터베이스 패스를 
볼 수 있습니다. 

파일명을 저장 하시려거든 , *.inc.php 로 하세요. 

물론 Apache 에서 Addtype 에서 .inc 를 추가 하면 됩니당..^^ 






★phpinfo() 를 숨겨라...      

   
phpinfo() 의 경우 시스템의 구성 상황을 비교적 쉽게 해커에게 알린다고 합니다. 
물론 phpinfo() 때문에 해킹 당하지는 않겟지만.. 해킹에 도움이 된다는 것이죵... ^^ 

되도록 이면 

test.php 에서 

<?php 
     phpinfo
(); 
?> 

를 사용하시고 바로 지워 주세요... 
검색엔진에서 검색하면 많은 phpinfo() 를 볼 수 있거든요... 


http://www.google.com/search?q=phpinfo 

다 설치 하고 test 를 했다면 지우세용 ^^ 




★PHP오류를 적에게 알리지 말라!      

   
PHP오류가 날 경우 역쉬 경로가 적(크래커) 에게 발견이 됩니다. 
오류를 아싸리 안보여 지게 설정 하는 것도 좋은 방법 입니다. 

php.ini 에서 설정 이 있는뎅...php.ini 찾아 봐야 함당.. 
지금 날밤 새서리...담에 찾죠 
찾아 보셍 ^^ 

  



★ 쿠키 보다는 세션을 사용하세요 !!!


★★ 세션 보다는 Auth 인증을 사용하세요 !!! 

쿠키는 해킹이 무자게 쉽다고 합니다. 
세션을 되도록이면 사용하세요 !!! 
세션을 사용하시되, session_set_save_handler() 를 사용하여 세션을 md5() 로 암호화 하고 
저장 하세요 ^^ 

세션을 사용할때 /tmp 폴더에 저장 하지 말라고 합니다 !!! 
반드쉬 mysql 에 저장 하세요 !!! 


Auth 인증  << 세션 <<<<<< 쿠키 
Auth 인증 이 가장 강력한 보안 체계 입니다. !!! 
http://www.zend.com/zend/tut/authentication.php 
http://download.php.net/manual/en/features.http-auth.php 

auth 강좌는 PHP강좌 게시판에서 auth 로 검색하세용 !! 






★ 세션 쿠키값 - 보안 로그인 시스템 ◆◆


$userid 
형태로 사용하시지 말고 

세션일 경우 _SESSION 이나 (PHP4.1.0) , HTTP_SESSION_VARS[] 를 사용하세요. 
쿠키도 마찬가지 , PHP4.1.0 에서 약간 바뀌었으니 PHP강좌 게시판 검색하세용.!! php 로 !! 


if((session_is_registered(username)) && (session_is_registered(user_id))) 

if (!isset($memberid) && !isset($PHPSESSID)){ 
     
session_is_registered() 나 isset() 는 반드쉬 사용해야 합니다. 
<?php 
function check_session() { 
    
session_start(); 

    if (
session_is_registered(user_id)) { 
        return 
TRUE
    } else { 
        
header("Location: login.php"); 
        exit; 
    } 

?> 

그리고 if 문에서 비교는 반드쉬 1개 이상으로 비교 하세용 !!! 

session_start(); 

if(!isset($sid) || empty($sid)) // $sid 는 세션 값.. 

<?php 
// 반드시 register global=off 로 설정 하시고 아래 처럼 하세요. !! 
// PHP4.1.0 이상 부터는 $_SESSION[type] 입니다. 
// ◆◇◆◇◆◇ 세션변수를 $session_name 등으로 절대루 사용하지 마세용 !!!◆◇◆◇◆◇ 
session_start(); 

if(!isset(
$HTTP_SESSION_VARS[type])) 

  
header("Location: log-in.php"); 

?> 









★쇼핑몰이나 e-커머스 사이트는 반드시 SSL 를 사용하라.


apache 리눅스나 유닉스 경우는 openSSL 를 사용할 수 있습니다. 
윈도우는 잘 모르겠습니다. 
openSSL 를 반드시 사용하세요 ^^ 
http://www.openssl.org 

웹에서 https// 로 시작 하는 것들이 SSL 입니다. 
인증 사이트 가시면 보실 수 있을 것 입니다.  msn 만 해도..메일 확인 하려 하면.. 
보안을 해제 하려고 합니다..그러면서 https 로 가죠..^^ 






★ PHP에서 mysql 연결시 계정을 만들어 사용하라 !!!


config.inc.php 

<?php 
  $db_user 
"root"
  
$db_pass "xxxx";  // root 비밀번호 
?> 


PHP파일에서 config 파일에서 종종 root 로 mysql 에 연결 하는 경우가 있다. 
되도록이면 root 는 사용하지 말아야 한다. 

root 로 사용할 경우 , PHP 소스가 보일 경우 데이터베이스는 모두 지워진 것이나 다름이 없기 때문이당.. 
root 가 아닌 특정 사용자 계정을 만들고 권한을 부여 해라 !! 

root 의 비번은 어느곳이든 지 간에 쓰지 않는 것이 최상이다 !!! 
소스 자료실에 mysql 계정 설정 권한 설정 하기 파일이 존재 한다. doc 파일임.. 
그것을 보고 반드쉬 임의 계정을 만들어서 사용하라 !!  디비가 지워지고 싶지 않으면 !!! 


현명한 config.inc.php 

<?php 
  $db_user 
"tood"
  
$db_pass "xxxx";  // tood 비밀번호 - 임의 사용자 비번 
?> 

또는 

<?php 
  $db_user 
"toodtood"
  
$db_pass decode_passwd("sddsdsds21912012dslsdl");  // tood 비밀번호 - 임의 사용자 비번 
?> 

decode_passwd() 란 함수를 만들어 PHP모듈에 탑재하는 것임당.. 
그러면 좀더 낫지 않을 까요 ? ㅋㅋㅋ 
PHP 모듈에 탑재하는 방법은 www.php.net 을 보세용..저두 해보지 않아서 ^^ 









★반드쉬 알아야 할 PHP보안 함수 - 쓰기전에 반드쉬 보안을 생각해야 할 함수 12 가지 !


www.php.net/md5 
www.php.net/crypt 
www.php.net/base64_encode 
www.php.net/base64_decode 
www.php.net/session_is_registered 
www.php.net/isset 

system() 
exec() 
"backticks" 
passhru() 
opendir() 
escapeshellcmd() 

반드쉬 숙지 하세용 !! 






★ safe mode 를 사용하라


php.ini 에 보면 safe mode 설정이 있습니다. 

safe_mode 를 On 하고 ,소유자가 nobody 인지 다른 사용자가 되는지 테스트 해보세요 ^^ 
계정이 여러개 일때 좋습니다. 

php.ini 중에서 일부 

; Safe Mode 

safe_mode = Off 

safe_mode_exec_dir = 







PHP소스 안보이게 


(1) avoid using .inc files; use .php files like for normal script 
.inc 보다는 .inc.php 로 저장 하기 ! 
httpd.conf 
<Files ~ "\.inc$"> 
    Order allow,deny 
    Deny from all 
</Files> 


(2) turn Indexes directive to off by default per website 
httpd.conf 에서 Indexes 지우기 -> index.html 파일이 없을 경우 디렉토리 아래 죄다 보임 ! 

(3) make directories 711 instead of 755 
(4) develop an organized php scripts structure outside DocumentRoot and 
place the files that you will eventually include in an "include" 
sudirectory within that structure 
(5) review changes all the time, check your weblogs and be vigillent :-) 






PHP 에러 출력 안하기  [combel 님 제공] 


간단합니다. 
그렇지만 보안을 위해서는 필수겠죠. 
php.ini의 Error_Handling 부분에서 display_errors = Off 로 설정해 주시면 됩니다. 
에러가 나더라도 빈 화면만 뿌려주죠 ^^; 
php 4.1.x 버전에서는 보안을 위해서 off 시키는 것을 추천하고 있습니다. 

투덜이 comment -> 오류가 보여지면, apache 디렉토리 위치 나 htdocs 디렉토리 위치가 보이게 됩니다. 




HTML 일부만 허용 하기와 보안


Example 1. strip_tags() example 
$string = strip_tags($string, '<a><b><i><img>'); 

$string 에서 <a><b><i><img> 태그만 허용 하고 나머지는 막는 것입니다. 
htmlspecialchars() 보다 유용하네요. 

그런데 문제가 존재 합니다.<b> 태그를 허용 할 경우... 
<b onmouseover="for(i=0;i<50;i++)window.open('www.porn.com');">tood.net 미오!</b> 

이런 문장을 쓸 경우 문제가 됩니다..ㅋㅋㅋ 
만약  i 를 5000000 까지 한다면... 헐.... 

<b onmouseover="for(i=0;i<500000000;i++)window.open('www.porn.com');">tood.net미오!</b> 
글구 <a> 태그를 허용해도 <a href="" target=""> target 는 허용이 되지 않습니다..ㅋㅋㅋ 짭.. 




location.replace 인증 부분 - 초짜 님 제공(jcorn***@hanmail.net) 


음 넘 초보적인 방법이지만 그래두 함 적어보겠습니다. 
만약 게시판에 관리자 모드가 있다면...그 곳많은 보안이 상당히 많이 필요하겠지염. 

보안을 위해서 이런 저런 방법을 많이 사용하실테구염. 
사용하시는 방법에 아주 간단한 자바스크립트를 추가 하신다면 좋을 듯 합니다. 

function goto_page($url) { 
    echo "<script> location.replace(".$url."); </script>"; 


보안이 조금이나마 필요한 부분에선 이 함수를 사용해서 이동했던 페이지들을 히스토리에서 삭제를 하는 것이지 
요... 

가끔 어떤 곳에서 로그아웃을 했더라구 뒤로가기 버튼을 클릭하면 이전 페이지가 나오는 것을 많이 목격하고 위 
에 함수를 많이 사용하게 되었습니다. 

위 처럼 하시면 로그 아웃 후에 뒤로가기 버튼을 눌러두 이전 페이지가 아닌 잴 처음 화면으로 가게 되지염. 
모두 아시는 것을 올려서 죄송하구염...ㅡㅡ; 그래두 모르는 분들이 계실것 같아서...좋은 뜻으로 올렸씁니 
다..^^ 
그럼 모든 분들 좋은 하루 되시길....빌며 이만.... 






스팸 봇이 여러분의 email주소를 


스팸 봇이란 넘이 있어서 여러분들의 email 주소를 긁어 갑니다. 
그러니까 게시판에서 <a href=mailto: ~ > mailto 부분의 email 주소를 긁어 갑니다. 

거기에 사용되는 email 주소는 base64 나 md5() 로 암호화 하세요 ^^ 

◈보안◈ 스팸메일 추출기 or 게시판 자동 로봇       
http://www.tood.net/tood/toodboard/toodread.php?board=tootech&tcode=1005 





PHP 확장자 숨기기 


PHP 확장자는 마음대로 변경 하여 사용하 실 수 있습니다. 

아래는 윈도우에서 httpd.conf 파일 입니다. 물론 리눅스도 AddType 부분은 동일 합니다. 
LoadModule php4_module c:/php/sapi/php4apache.dll 
AddType application/x-httpd-php .tood .tgp .cal .html .htm .include 

위에 처럼 설정 하면 
.tood .tgp .cal .html .htm .include 파일에서 PHP 를 사용할 수 있습니다. 
확장자만 가지고는 이 사이트가 PHP 기반인지 알 수 없습니다. 
물론 알 수 있는 방법은 많죠..그러나 단지 접속 해 보고는 알 수 없습니다. 

index.tgp 파일...이상하게 생각 할것 입니다..이게 먼 확장자 이지?  ^^ 





세션 보안 최적화  !trans_id  


PHP counfigure 시에 세션 보안 방법 입니다. trans_id 옵션 보시면 됩니다. 
재설치 하셔야 합니다. 

http://www.tood.net/tood/toodboard/toodread.php?board=tootech&tcode=1070 
세가지 함수 모두 ASCII문자로 변화 해주는데 차이점은 변환해 주는 문자의 양이다.

escape는 
[ 알파벳 + 숫자 + @*-_+./ ]  이것을 뺀 나머지 글자는 모두 변환 해준다.

1바이트(뛰워쓰기포함)는 %XX 이런 형태로
2바이트(한글은모두변환된다)는 %uXXXX 형태로 변환된다.

encodeURI는
인터넷 URL에 사용되는 [ 알파벳 + 숫자 + @*-_+./ : ; / = ? ]는 변환을 하지 않습니다.

encodeURIComponent는
인터넷 URL에 사용되는 [ 알파벳 + 숫자 + @*-_+. ]는 변환을 하지 않습니다.
주로 인터넷 url을 변수로 통째로 넘길때 사용한다.

인코딩함수  <-> 디코딩 함수
escape <-> unescape
encodeURI <-> decodeURI
encodeURIComponent <-> decodeURIComponent

블로그를 사용하다 보면 프로그래밍 코드를 보기 좋게 올려 놓은 글들을 볼 수 있다.
티스토리에 syntaxhighlight라는 플러그인을 적용한 것이다.
function _js(){
   document.~
}
설치법
이런식으로 코드를 올릴 수 있다.

1. 요기 가서 다운을 받는다. http://alexgorbatchev.com/SyntaxHighlighter/. 받은 파일 압축을 푼다.

2. 티스토리관리메뉴에서 스킨->HTML/CSS 편집->파일업로드탭 클릭

3. 압축푼 곳에서 scripts폴더와 styles폴더안의 파일을 전부 업로드 한다.

4. 티스토리관리메뉴에서 스킨->HTML/CSS 편집 에서 skin.html 안의 내용에 아래 문장을 추가한다.



















사용법
글 작성시 html모트 체크 한 후 아래와 같이 사용 하면 된다.
<pre class="brush:해당브러쉬이름">
요 태그 안에 코딩 내용
</pre>

브러쉬 이름을 제대로 써야 각 언어에 따른 highlight가 제대로 표현된다.

출처 : http://learder.tistory.com/827021

L2 스위치, L3 스위치, L4 스위치에 대해 알아 보기로 합시다.
이 스위치에 대해서 알고 싶다면 우선 OSI 7 Layer 부터 알고 있어야 합니다.

아래 그림은 전산과 학생들이 학부과정에서 열심히 배우는 네트워크의 7개의 계층적
모델을 나타낸 것입니다.

사용자 삽입 이미지


Layer1 은 Physical Layer이며, 물리적인 접속에 대한 정의가 내려져 있습니다.
그리고 우리가 통상적으로 사용하는 Ethernet이란 기술이 Layer1에 해당하는 기술이라고
생각하시면 됩니다.

Layer2 는 Data link Layer이며, 데이터를 전달하는 방법에 대한 정의가 내려져 있습니다.
그리고 위와 같이 Ethernet이 Layer2에도 해당하는 기술이며, 실제로 우리가 접근할 수
있는 내용은 MAC어드레스라는 것이 있습니다. Ethernet에서 데이터를 전달하기 위해서
사용되는 것인데, Ethernet에서는 데이터 전달을 위해서 Frame이란 단위로 전송하며,
Frame 헤더에 출발지 MAC어드레스와 도착지MAC어드레스가 포합됩니다.
Ethernet은 기본적으로 브로드케스팅 방식으로 데이터를 전송하며,
어느 Host가 Frame을 발생시키면, 그것은 네트워크의 모든 호스트에 전달되며,
자신의 MAC어드레스가 들어있을 경우에만 받습니다.

Layer3 는 Network레이어입니다.
TCP/IP 프로토콜에서는 IP프로토콜에 해당하며,
모든 호스트들이 MAC어드레스와는 별도로 IP어드레스를 가지고, 통신을 할 수 있습니다.
IP에서는 네트워크 구성이 가능하게 됩니다.
(Layer2에서는 네트워크가 아닌 하나의 모임(?)만이 가능하죠..)

Layer4 는 Transport레이어입니다.
TCP/IP 프로토콜에서 TCP프로토콜에 해당합니다.
Transport레이어에서 드디어 정상적인 데이터 전송이 가능하게 됩니다.
그래서 IP레이어에서 전달 받은 데이터를 정확하게 받았는지 검증하고,
응답을 할 수 있게 됩니다.
(IP레이어는 일방적인(?) 전송만 가능하죠..)

Layer5 이후에는 Session, Presentation, Application이 존재하는데.
TCP/IP에서는 우선 뭉쳐서 Application레이어라고 보시면 됩니다.

다시 원점을 돌아가서, 이제 스위치에 대한 설명을 바로 이해 하실 수 있으실 것입니다.

우선 L2 Switch 라고 하면 OSI 7 Layer 의 "Layer 2" 를 이해하고 처리 할 수 있는 녀석
이라고 생각하시면 됩니다. 간단히 말해 L2 Switch 는 MAC 어드레스를 읽고 처리한다는
뜻입니다.

위에서 Ethernet은 기본적으로 Broadcasting을 사용한다고 했는데, 이것을 개선한 것이 L2 Swtich 입니다. 백날 Broadcasting하던 것을 MAC어드레스를 읽어서 해당 호스트에만 전달할 수 있게 해주게 되어 호스트간의 Dedicated 대역폭을 제공하게 됩니다. 물론, Broadcasting을 할 경우 10/100/1000Mbps를 모두 공유하므로, 하나의 허브에 N개의
호스트를 넣으면, 1/N의 속도로 각각 통신을 할 수 있게 됩니다.

다음으로 L3 Swtich 는 위의 OSI 7 Layer 의 "Layer 3" 를 이해하고 처리 할 수 있는 녀석이
라고 생각하시면 됩니다. 간단히 말해 IP(네트워크 주소)를 읽고 처리 한다는 뜻입니다.
IP는 네트워크를 구분하는데 사용되니 L3스위치는 네트워크간의 전송을 할 수 있다는 말이 됩니다. 이것은 실제로 라우터 에서 하던 라우팅에 해당하며, 라우터를 대신하는 기능으로
사용됩니다.

다음으로 잘 알고 계신 L4 Swtich 도 간단히 설명 드리겠습니다.
L4 는 OSI 7 Layer 의 Layer 4 를 이해 하고 처리 한다는걸 말씀 안드려고 아실수 있으시겠
지요.

Layer 4 의 TCP를 읽고 처리한다는 뜻이며 TCP의 정보를 읽고 처리(제어)를 할 수 있다는 뜻입니다. 주로 활용되는 분야는 Load Balancing 과 같은 기능이며, 웹서버의 포트로 많이 사용되는 TCP 80번 포트의 트래픽과 같은 것을 인지할 수 있으며 그 트래픽을 연결된 서버팜의 서버들에게 균등하게 할당할 수 있게 됩니다.

L4 Swtich 다음으로 L5~7 Switch 가 있는데 이는 앞서 설명드린 L4 Switch의 영역을 를 좀더 세분화하여 처리하거나 서버단의 Application 에서 처리 하던것을 Switch 에서 처리해보자~ 라는 개념으로 만들어진 것입니다.

 

 

http://kldp.org/node/35803

스위치라는 것은 어떤 기준에 의하여 패킷의 흐름을 결정해 주는 장치인데요
L2스위치라는 것은 layer2즉 이더넷부분만 보고 패킷흐름을 결정해주고요
L3는 IP에 따라서 - 즉 라우팅까지 되겠죠?
L4는 그 이상, 세션에 따라서 패킷의 흐름을 결정해주는 장치입니다.

예를 들어 /이런 경우는 사실 말도 안되지만/
ftp서버를 총 4대를 클러스터링을 하고 있는
이떄 L4스위치를 쓰빈다.
1번 서버에서 자료를 받던 넘이 갑자기 2번 서버로 패킷을 요청하면?
없는 세션에서 머가 날라오니 꼬이겠죠?
L4는 한번 자신을 거친 세션을 기억하고 있다가 그 방향으로 패킷을 항상 보내줍니다.

이제 더 나아가 L7은 패킷 내용까지 보고 패킷을 보낼것인지, 보낸다면 어디로 보내는지 볼 수 있습니다.

제가 알기론 L4는 서버 클러스터링 같은 경우에 쓴다고 알고 있는데
그 이외의 용도는? 잘 ^^ 알테온 메뉴얼을 잠깐 본적이 있는데
메뉴얼에서도 다루는 내용이 거의 그런 내용입니다.

방화벽은 말 그대로 원치 않는 네트워크의 접근을 일차적으로 걸러 줍니다.
방화벽도 L3~L7개념???이 있는 것 같습니다.
저위의 개념은 제가 임의로 만든 것이고
일차적으로 NAT로 방화벽 만드는 것은 L3죠.
더 나아가 L4 - Stateful packet inspection
그 이상 deep packet inspectio이라는 기술로 많이 알려졌죠

전혀 다른 개념이죠?

외부망 - L4스위치 - 방화벽 - L4 스위치 - IDS - .....

위의 구성도를 보니 아마 방화벽 클러스터링을 하시는 군요!

말씀드렸지만 방화벽은 in 과 out이 단 하나입니다.

요넘이 하는 일은 그저 이 데이터가 옳은 녀석인지 옳지 않은 녀석이지
룰에 의해 판단만 하는 것입니다.

스위치는 이 데이터가 룰에 의해서 어떻게 가야할지 판단해 주는 것입니다.

위에서 한번 예를 들어봅죠.

우선 stateful packet inspection의 예로 ack공격을 이야기 합니다.
보통 syn패킷을 겁나게 보내는 dos공격은 방화벽에서 아주 수월하게
syn개수를 세서 막을 수 있습니다. 그러나 ack의 경우는 좀 다릅니다.
무조건 ack필드만 on해서 플루딩을 시도하면 멍청한 방화벽의 경우
그저 보냅니다.
그런데 spi의 기능을 가지고 있는 방화벽이라면 이 패킷이 우선
내가 가지고 있는 세션테이블에서 무엇에 해당하는 지 보고
말도 안되는 넘이면 바로 버립니다. 이것이 방화벽이 하는 일이죠

그럼 비싼 L4를 쓰는 이유는?
자 저기서 방화벽이 한 3개쯤 된다고 한다면
멍청한 L3로는 패킷을 어디로 보내야 할지 모릅니다.
1번 방화벽에 syn을 보내 세션을 저장해 두었는데
2번 방화벽에 (스위치가) ack를 보낸다면 2번 방화벽은 당연히
이넘은 잘못된 녀석이라고 보고 막습니다.
그럼 멍청한 L3가 라운드 로빙으로 하나씩 패킷을 골고루 준다면
절대로 tcp는 불가능 하겠죠?

그래서 L4스위치가 나와서
아 이 패킷은 전에 1번으로 간 세션으로갈 패킷이로구나! 저쪽으로 줘야지~
하는 것입니다.

물론 L4스위치도 필터링을 함으로 방화벽의 기능을 약간 포함할 수 있으나
가장 간단한 syn flooding조차 가진 L4스위치를 못 봤습니다 ^^
L4의 필터링과 비싼 방화벽의 필터링 기능을 함부로 비교하면 안되죠
방화벽의 경우 ip, port만을 헤아리는게 아니라 각 서비스별로 특화된 기능들이
많답니다.

 

 

 

http://iksu.egloos.com/391861



서버 로드 발랜싱 기능은 여러 대의 서버를 마치 하나의 서버처럼 동작시킴으로써 성능을 쉽게 확장하게 하고, 서버의 장애 발생시에도 타 서버로 운영이 가능하게 함으로써 신뢰성을 향상시키기 위한 방법입니다.
여러 대의 서버들을 리얼서버(real server)라고 부르고, 리얼서버들의 집합을 클러스터 (cluster) 혹은 가상 서버(virtual server)라고 부릅니다.
서버 로드 발랜싱의 예를 아래의 그림으로 설명하여 봅시다.

위의 구성에서는 웹 서비스 (HTTP, TCP port = 80)와 이메일 서비스 (SMTP, TCP port=25)의 두 가지 종류에 대하여 서버 로드 발랜싱을 제공합니다. SLB 구성방법은 설치의 관점에 따라 여러 가지로 분류할 수 있습니다. 우선 네트워크 설정을 기준으로 브릿지 (bridge mode)방식과 라우팅(routing mode) 방식으로 나눌 수 있는 반면에, 물리적인 포트 연결 차원에서 외팔 (one-armed) 방식과 양팔(two-armed ) 방식이 있습니다.

기준
세부 방식

네트워크 설정
브릿지 (bridge mode) 방식
라우팅 (routing mode) 방식

포트 연결
외팔 (one-armed) 방식
양팔 (two-armed ) 방식

브릿지 방식은 가상서버와 리얼서버의 네트워크 대역이 동일한 경우를 말하며, 라우팅 방식는 두 네트워크 대역이 다른 경우를 의미합니다. 예를 들어 위의 그림에서 가상서버의 IP (VIP)는 192.168.10.1/24 이고, 각각의 리얼서버는 동일한 192.168.10.x/24 (x=2,3,4) 입니다. 따라서, 위 그림 < SLB의 기본구성 >은 브릿지 방식의 SLB 입니다.
브릿지 방식인 경우에는 외부의 고객이나 관리자가 가상서버 및 리얼서버로 직접적인 접속이 가능합니다. 또한, 리얼서버에서도 인터넷과 같은 외부망으로 접속이 가능합니다. 브릿지 방식은 관리의 편리성이 높인 반면에, 외부의 보안에 취약하다는 것이 단점입니다.
라우팅 방식에서는 가상서버와 리얼서버의 네트워크 대역이 다릅니다. 따라서, L4/L7 스위치는 양변의 네트워크 대역에 대한 게이트웨이 역할을 수행합니다. 라우팅 방식에서는 리얼 서버들의 기본 게이트웨이 주소는 L4/L7 스위치 자신이 됩니다. 이러한 구성에서는 리얼서버로 직접적인 접속을 막기 위하여 사설 IP 대역을 많이 사용하고 있습니다. 외부에서 접속하기 위해서는 각 리얼서버에 NAT를 수행합니다. 라우팅 방식은 관리의 편리성이 낮은 반면에, 외부의 보안에 강하다는 장점이 있습니다.

포트연결을 기준으로 하는 분류에서 외팔방식이란 SLB를 위하여 L4에 연결되는 포트 구성이 한 개의 포트를 사용하는 경우를 말합니다. 위 그림 < SLB의 기본구성 >에서는 두개의 포트를 사용하므로 양팔방식으로 분류됩니다. 반면, 외팔방식의 구성에서는 1개의 포트만 사용하여 SLB를 수행합니다. 일반적으로 외팔방식과 양팔방식의 데이터의 흐름은 차이가 없으며 몇 개의 포트를 사용하느냐가 관건입니다. 한 개의 포트를 사용하더라도 내부적으로 가상적인 두개의 포트를 사용하는 것과 동일합니다.

 

캐싱 리다이렉션 기능은 내부 망에서 외부 인터넷으로 향하는 웹(WWW) 트래픽을 가로채어 캐싱 서버에게 전달하는 기능을 말합니다. 내부의 호스트 컴퓨터는 캐싱서버를 프락시로 등록할 필요가 없이 투명한(trapsparent) 방식으로 캐싱 서비스를 할 수 있습니다. 또한, 캐싱 리다이렉션을 통하여 웹 트래픽 (TCP=80 port)만을 처리하기 때문에 캐싱 서버에서 불필요한 패킷 처리를 막아주어 응답속도를 빠르게 해 줄 수 있습니다.

투명 케싱 서버의 동작은 아래와 같습니다. 사용자의 웹 트래픽 (Url 페이지) 요구는 L4스위치에 의하여 우선적으로 캐싱 서버에 보내집니다. 해당 트래픽의 URL이 캐싱 서버에 저장되어 있으면(hit), 캐싱 서버가 즉시 응답하여준다. 만약 캐싱 서버에 저장된 내용이 아니라면(missed) 캐싱 서버가 프락시로 동작하여 해당 URL에서 페이지를 요청하여 다시 사용자에게 전달하고, 캐싱 서버 자체에 저장합니다.
경우에 따라, RTSP (Real time streaming protocol:TCP,UDP=554), NNTP (Net news transfer protocol: TCP=119) 트래픽에 대하여 그룹을 등록하여 서비스 할 수 있습니다. 인터넷 트래픽 뿐아니라 임의의 응용프로그램에 대하여 포트(port) 설정을 통하여 리다이렉션 서비스를 구현할 수 있습니다.
L4 스위치는 패킷 재전송 (Packet Redirection) 기술에 기반하고 있습니다. 이 패킷 재전송기술을 이용해 투명한 캐싱 서버동작이 가능하며 또한, 로드 발랜싱 기능을 통하여 캐싱 서버들의 집합(서버군)을 관리하는 것이 가능합니다. 이런 방법으로 하나의 L4 스위치에 캐싱 서버를 여러 대로 확장 할 수 있습니다.

인터넷의 보안을 생각할 때 방화벽은 필수 사항입니다. 그러나, 방화벽 한 대로 서비스를 제공할 경우, single point of failure가 발생할 수 있습니다. 또한, 애플리케이션 수준의 프록시를 이용하여 높은 보안 수준을 제공하기 위해서 많은 부하가 방화벽에 걸리게 되어 응답시간의 지연을 초래합니다. 이러한 문제점들은 최근의 전자상거래 환경에서는 사업을 수행하는데 치명적인 걸림돌이 될 수 있습니다.
FWLB의 목적은 크게 아래의 3가지로 요약할 수 있습니다.
- 하나 이상의 방화벽을 추가하여 가용성 및 성능을 향상시킵니다.
- 동적인 로드 분산을 통해 응답속도를 향상시킵니다.
- 시스템 변경 없이 방화벽 확장 및 관리가 쉽도록 합니다.
FWLB를 구성하기 위하여, 공인망(Public network)과 사설망(Private network) 사이에 2대의 L4 스위치(상위 L4 스위치, 하위 L4 스위치)를 배치합니다. 상위 L4 스위치는 외부망에서 내부망으로 들어오는 패킷에 대한 부하 분산을 담당하며, 하위 L4 스위치는 내부망에서 외부망으로 나가는 패킷에 대한 부하 분산을 담당합니다.
FWLB의 중요한 특징 중 하나는 동일한 세션에 속하는 패킷들은 모두 동일한 방화벽으로 전송되어야 한다는 점입니다. 각 방화벽은 세션의 상태정보를 통하여 패킷 필터링을 수행하기 때문에, 현재 상태에 맞지않은 패킷이 들어올 경우 부적합한 패킷(illegal packet)으로 간주하여 삭제하게 됩니다. 즉, L4 스위치에 의해 들어오고 나가는 패킷이 서로 다른 방화벽으로 전송되면 세션을 유지할 수 없게 됩니다. 따라서, 상위 L4 스위치와 하위 L4 스위치는 입출력되는 패킷의 경로를 기억하여 경로를 지속적으로 유지할 수 있도록 합니다.
또한 DMZ 구간이 있는 경우에도 경로를 지속적으로 유지하기 위해여 DMZ 구간에 별도의 L4 스위치가 배치됩니다.


VPN 게이트웨이는 네트워크상의 배치와 패킷흐름이 방화벽과 유사한 점이 많지만, 부하분산 입장에서는 매우 다른점이 존재합니다. VPN 게이트웨이는 일반적으로 server/client 개념으로 본점-본점간 혹은 본점-지점간의 배치되는데, 특히 본점-지점간의 구성이 일반적입니다. 본점-지점 구성에서 본점으로의 터널링 접속은 지점단의 VPN게이트웨이에서 접속하는 방법과 원격 엑세스 사용자 (remote access users)에서 접속하는 방법이 있습니다. 어떤 경우이든, 본점에 접속하기 위하여 사용하는 터널링 프로토콜은 IPSEC, L2TP, PP2P 등이 있습니다. 아래의 그림은 본점에 VPN 게이트웨이들에 대하여 VPNLB를 구성한 예입니다.

L4 스위치의 네트워크 부하 분산기능 (NLB)는 다수의 인터넷 접속 라인을 사용하여 네트워크의 속도와 안정성을 개선하기 위한 기능입니다. NLB기능은 기존에 L4 스위치에서 제공하는 기능은 아니었으나, 사용자의 요구에 의하여 점차로 확산되는 추세라고 할 수 있습니다.

하나의 ISP(Internet Service Provider)의 인터넷 접속라인을 사용할 경우, 실제 기업이나 학교의 인터넷 접속 환경에서는 아래와 같은 문제점들이 발생합니다.
- 네트워크의 속도가 느려 업무에 지장이 많습니다.
- 네트워크의 다운으로 인한 인터넷 사용의 곤란 발생합니다.
- 네트워크 속도 업그레이드에 대한 경제적 부담이 가중합니다.
- 불필요한 트래픽으로 업무상 중요한 인터넷 사용에 지장이 발생합니다.

NLB는 L4 스위치를 이용하여 여러 개 ISP들의 전용선들과 ADSL, Cable Modem 등의 초고속 인터넷 회선을 결합시켜 단일한 전용선처럼 사용하게 합니다. 또한 인터넷 트래픽을 효율적으로 관리하여 불필요한 특정 회선에 대한 트래픽 집중현상을 완화하여, 트래픽 처리 효율을 최적화합니다.

위 그림은 내부망에서 인터넷을 사용하기 위해서 ISP1의 전용선 A, ISP2의 전용선 B 및 케이블 라인, ISP3의 ADSL 라인을 사용한 경우입니다.
내부망의 IP 대역은 전용선 A의 IP대역과 전용선 B의 IP 대역을 동시에 사용하거나, 사설 IP대역을
설정하여 PAT (Port Address Translation) 구성을 설정하여 사용할 수 있습니다. 특히, 케이블 인터넷 라인이나 ADSL/VDSL 라인에서 할당된 IP가 적은 경우에 내부망이 PAT를 사용하여 IP를 공유하도록 처리합니다. NLB에서 사용되는 부하 분산 방식에는 기존의 round-robin, hashing, least connection, maximum response time, maximum bandwidth 방식을 사용할 수 있습니다.
아래의 표는 E1 라인 하나만을 사용하는 회사에서 8Mbps ADSL 3개의 라인을 추가하여 NLB구성을 하였을 때 대역폭의 증가율을 보여주고 있습니다.

또한, NLB의 장점은 인터넷 회선의 고장율을 획기적으로 개선할 수 있다는 것입니다. 위의 예에서
E1 라인과 서로 다른 ISP의 ADSL 라인 3개를 동시에 사용하는 경우에 `전용선은 한 달에 한번 고장이 발생하고, ADSL 초고속 인터넷은 10일에 한번 고장이 발생한다`고 가정할 때 고장율은 다음과 같습니다.

NLB를 이용한 회선 고장율의 개선

구분
고장율
비고

NLB 적용전 (E1 only)
1/30
한달에 한번 고장발생

NLB 적용후 (E1 + 1*ADSL)
1/300
1년에 한번 고장발생

NLB 적용후 (E1 + 3*ADSL)
1/30000
82년에 한번 고장발생