브라우저에 캐쉬되는 파일의 압축을 통해서 성능을 향상시키는 방법.

개발중에는 필요없지만, 배포를 위해서라면 성능을 향상시킬 필요가 있을경우
야후에서 BSD라이센스로 제공하는 compress 를 사용할 수 있다.

홈페이지 링크 : http://developer.yahoo.com/yui/compressor/

다운로드 : http://yuilibrary.com/downloads/#yuicompressor


사용을 위해서 사용자 환경에 java가 설치되어있어야 한다.
java 설치가 되어있는 환경이라면 아래와 같이 사용가능하다.

java -jar yuicompressor-x.y.z.jar myfile.js -o myfile-min.js

Global Options
-h, --help Displays this information
--type <js|css> Specifies the type of the input file
--charset <charset> Read the input file using <charset>
--line-break <column> Insert a line break after the specified column number
-v, --verbose Display informational messages and warnings
-o <file> Place the output into <file>. Defaults to stdout.

JavaScript Options
--nomunge Minify only, do not obfuscate
--preserve-semi Preserve all semicolons
--disable-optimizations Disable all micro optimizations


css파일과 js파일이 많은 경우에 한번씩 실행시키기 위해서..
editplus에 약간의 수정을 가했다.

다운받은 yuicompressor-2.4.2.jar 파일을 임의의 곳에 옮긴 후
(나의 경우는 아래보는것처럼 C:\xampp\yuicompressor-2.4.2.jar에 있다)
editplus 메뉴 중 도구 > 사용자도구 구성을 추가해서 아래와 같이 설정해준다.

메뉴제목
YUI COMPRESSOR

명령
C:\Program Files\Java\jre6\bin\java.exe

인수
-jar C:\xampp\yuicompressor-2.4.2.jar --charset utf-8 --line-break 100 -v --preserve-semi $(FilePath) -o $(FileDir)/$(FileNameNoExt)-min.$(FileExt)

출력내용캡쳐에 체크.

인수의 내용은 파일을 연 디렉토리에 파일명-min 이라는 이름으로 압축된 파일을 생성하라는 뜻이다.
php 어플리케이션의 로깅을 위해서 사용 가능한 공개sW


http://logging.apache.org/log4php/

이름에서 느껴지는 것처럼 lo4j와 유사한 사용법이므로 직관적인 사용이 가능하다.

기본출력에 보이도록 설정하는 경우 - log4php.properties
#### 기본출력 stdout
log4php.appender.default = LoggerAppenderEcho
log4php.appender.default.layout = LoggerLayoutSimple

#DEBUG < INFO < WARN < ERROR < FATAL.
log4php.rootLogger = WARN, default

log4php.logger.mylogger = INFO, default
log4php.additivity.mylogger = "false"

파일에 남기도록 설정하는 경우 - log4php.properties
#### 파일에 남기는 경우

log4php.rootLogger=debug, stdout, R

log4php.appender.stdout=LoggerAppenderConsole
log4php.appender.stdout.layout=LoggerLayoutPattern

# Pattern to output the caller's file name and line number.
log4php.appender.stdout.layout.ConversionPattern=%5p %t %F:%L - %m%n

log4php.appender.R=LoggerAppenderRollingFile
log4php.appender.R.File=C:/xampp/htdocs/log4php/viralphp.log

log4php.appender.R.MaxFileSize=100KB
# Keep one backup file
log4php.appender.R.MaxBackupIndex=1

log4php.appender.R.layout=LoggerLayoutPattern
log4php.appender.R.layout.ConversionPattern=%p %d{Y-m-d H:i:s.u} %t [%c] [%F:%L] - %m%n



php 에러로 나타나도록 설정하는 경우 - log4php.properties
### Log events using the php function: trigger_error
log4php.appender.default = LoggerAppenderPhp
log4php.appender.default.layout = LoggerLayoutPattern
log4php.appender.default.layout.conversionPattern = "%d{Y-m-d H:i:s.u} %-5p [%t] %c: %m%n"
log4php.rootLogger = DEBUG, default


syslog를 사용하도록 설정하는 경우 - log4php.properties
### Syslog 사용
log4php.appender.default = LoggerAppenderSyslog
log4php.appender.default.layout = LoggerLayoutSimple
log4php.appender.default.ident = log4php-test
log4php.appender.default.facility = LOG_LOCAL0
log4php.rootLogger = DEBUG, default

그외 db에 저장하는 pdo 사용법, 네트워크로 전송하는 소켓사용법등이 있으니
상세한 내용은 매뉴얼을 참고하자.


사용법

/**
 * log4php setting
 *
 * 웹서버 루트의 log4php/viralphp.log 파일에 로그 남기기
 *
 * @package    ViralMarketing
 * @author     Kim Hyeong Chae <hckim@abydos.co.kr>
 * @filesource
 * @todo       pdo를 이용한 변경 테스트
 *
 */

require_once $_SERVER["DOCUMENT_ROOT"]."/log4php/src/main/php/Logger.php";
Logger::configure($_SERVER["DOCUMENT_ROOT"] . '/log4php/log4php.properties');
$logger = Logger::getLogger("main");

/**
 * 접속자 아이피 로그파일에 남기기
 */
$logger->debug("접속자 아이피: " . $_SERVER["REMOTE_ADDR"]);


로그파일 내용

DEBUG 2010-06-29 13:39:18.216 4064 [main] [C:\xampp\htdocs\index.html:28] - 접속자 아이피: 127.0.0.1



'오픈소스SW' 카테고리의 다른 글

firefox 확장기능 Wired-Marker  (0) 2010.06.30
yui-compressor  (0) 2010.06.29
phpDocument 를 이용한 문서생성  (0) 2010.06.25
php 속도 증가를 위한 eAccelerator 설치  (0) 2010.06.24
오픈소스는 무료인가  (0) 2010.06.24

문서생성을 위한 문법
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.starting

설치
pear install PhpDocumentor


사용

Windows
-------
You need the cli version of PHP (php-cli.exe or cli/php.exe in 4.3.0+).
Either run phpDocumentor from the directory that PHP resides in, or put
php.exe in your DOS PATH enviroment variable.  The simplest usage of phpDocumentor is:

C:\>php.exe "C:\Path\To\phpdoc" -t targetdir -o HTML:default:default -d parsedir


Unix
----
Make sure that the cgi/cli version of PHP is in your path.  The simplest usage
of phpDocumentor is:

phpdoc -t targetdir -o HTML:default:default -d parsedir


웹UI제공

phpDocumentor Tags
 * @abstract
 * @access       public or private
 * @author       author name <author@email>
 * @copyright    name date
 * @deprecated   description
 * @deprec       alias for deprecated
 * @example      /path/to/example
 * @exception    Javadoc-compatible, use as needed
 * @global       type $globalvarname or
 * @global       type description of global variable usage in a function
 * @ignore
 * @internal     private information for advanced developers only
 * @param        type [$varname] description
 * @return       type description
 * @link         URL
 * @name         procpagealias or
 * @name         $globalvaralias
 * @magic        phpdoc.de compatibility
 * @package      package name
 * @see          name of another element that can be documented,
 *                produces a link to it in the documentation
 * @since        a version or a date
 * @static
 * @staticvar    type description of static variable usage in a function
 * @subpackage    sub package name, groupings inside of a project
 * @throws       Javadoc-compatible, use as needed
 * @todo         phpdoc.de compatibility
 * @var        type    a data type for a class variable
 * @version    version


eAccelerator is a free open-source PHP accelerator & optimizer.

홈페이지 : http://www.eaccelerator.net/http://www.eaccelerator.net/

다운로드 : http://bart.eaccelerator.net/source/0.9.6.1/


checksum
c95e87229a6e674b4994d4fc13278e516ea314f9 eaccelerator-0.9.6.1.tar.bz2
0ef91fb7579c3bf5c0e94d5ec2521c389de91ba8 eaccelerator-0.9.6.1.zip 


설치

소스 압축풀고 디렉토리로 이동해서

phpize
./configure
make
make install


php.ini 설정 추가(eaccelerator.so 파일의 경로가 맞도록)

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

캐쉬 디렉토리 생성 및 권한부여

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

웹서버 재시작 후 확인

php -v 또는 페이지로 phpinfo 찍어본다.

확인

ab -n1000 http://mydomain.com/


다른 종류의 PHP Accelerator 소개 : http://www.ducea.com/2006/10/30/php-accelerators/

드루팔 환경의 속도비교 : http://2bits.com/articles/benchmarking-apc-vs-eaccelerator-using-drupal.html






어제 미팅이 있어서 이야기하던 중 이런 질문이 나왔습니다.

공개SW는 공짜다라는데 어떻게 이야기해야 하느냐?

정답부터 말하자면 오픈소스가 공짜인 기업도 있고, 그렇지 않은 기업도 있습니다.

이 문제는 비용의 관점을 어떻게 보느냐에 따라서 달라지는 것이 아닐까요

만일 오픈소스기반의 개발방법론이 정착된 환경의 기업이라면, 공짜입니다.
이런 경우라면 오픈소스라이선스에 대한 검토가 있을것이고,
참여과 기여를 통한 SW의 질적향상에 대한 경험, 오픈소스의 자유로운 배포정신 등을 이해하고 있을테니까.
좋은 SW를 무료로 사용하면서 비지니스를 창출할 수 있습니다.
자신이 좋은SW들을 패키징해서 제품으로 판매할 수도 있고(redhat, suse 등), IT서비스를 컨설팅할 수도 있으며(openlogic), 다른 IT서비스 카테고리를 선택할 수도 있고(blackduck), 하드웨어와 접목한 융합기기를 만들어 낼 수도 있습니다(embeded).

하지만, 오픈소스에 대한 이해와 학습이 없는 기업이라면 공짜가 아닙니다.
SW구매이후 발생될 여러가지 비용을 포함해야 하는 기업환경에서
소스코드의 자유로운 배포를 기본으로 하며(gpl,lgpl,mpl,bsd등), 적합한 라이센스를 검토해야 하고,
해당 SW에대한 기술지식, SW에 대한 유지보수 능력등이 필요한 오픈소스 SW를 공짜라고 판단하는것은  잘못된 생각입니다..

공개SW를 사용해야 할까요?

기업의  CTO가 오픈소스철학을 이해하고 있다는걸 전제한다면, 오픈소스는 기업의 EA에 많은 이익을 가져다 준다.
수 많은 SW의 리펙토링이 가능하고, 글로벌에 적용되는 SW개발방법론을 기업의 인적자원에게 숙련시킬수도 있으며
다양한 SW를 통해서 창의적인 아이디어를 획득할 기회도 증가합니다.

참여와 공유를 통해서 집단지성이 제공되는 최근의 흐름을 생각해볼때,
세상이 스마트해지면 해 질수록 오픈소스에 대한 이해는 더욱 필요합니다.







프로파일링이 왜 필요할까
[원문보기] [한글]

소프트웨어를 설계하고 코딩을 하다보면 프로그램을 최적화할 때가 있다.
대부분의 프로그램은 80:20 법칙을 따른다. 전체 코드의 20%가 전체 시간의 80%를 차지한다.

그래서 프로그래머가 해당 컴퓨터 아키텍쳐의 세세한 부분보다는 논리에 집중하여 프로그래밍 시간을 줄여주는
자바나 C#같은 언어가 인기를 얻었다.
프로그램의 실행시간은 길어지지만, 프로그래머의 시간은 절약된다.

그러나 프로그램을 더 빨리 실행하기위한 최적화가 필요하지 않다는 말은 아니다.
많은 컴파일러는 알아서 최적화를 한다.
예를 들어, GCC 컴파일러는 (대문자 주의) -O 옵션으로 최적화 수준을 지정한다.

프로파일링(profiling)은 프로그램의 성능을 높이기위해 최적화할 코드및 함수의 위치를 발견하도록 도와준다.
프로그램에서 10번만 호출하는 함수보다 1000번 호출하는 함수를 최적화하는게 당연하다고 생각하지 않는가.
프로그램을 프로파일링하면 코드의 어떤 부분을 자주 사용하고 어떤 함수가 CPU 시간을 많이 잡아먹는지 알 수 있다.
이 두 정보는 최적화할 대상을 정하는데 유용하다.
실제 프로그램을 실행하면서 정보를 모으기때문에 감춰진 버그를 찾는데도 유용하다.
실행중에 예기치않게 어떤 함수를 1000번 호출한다면 설계상 문제이거나 버그일 수 있다.
또, 크고 복잡한 프로젝트에서 코드를 살펴볼때도 유용하다.

프로파일링 정보에는 두가지 종류가 있다 :-

    * Flat Profile
      함수별로 사용하는 CPU 시간과 호출 횟수를 보여준다. 수집한 전체 프로파일링 정보의 간단한 요약이다. 성능을 높이기위해 어떤 함수를 다시 작성하거나 수정할지 알려준다.

    * Call Graph
      모든 함수에 대해 자신을 포함하여 다른 함수가 호출한 횟수를 보여준다. 그래서 어떤 함수 호출을 없애거나 다른 효율적인 함수로 대체할지 제안한다. 이 정보는 함수들간의 관계를 드러내고, 감춰진 버그를 알려주기도 한다. 호출그래프를 본 후에 특정 코드 경로를 최적화하고 싶을 것이다.



Xdebug 설치하기
http://www.xdebug.org/docs/install
- xampp 패키지로 개발환경을 구축했다면 xdebug가 포함되어 있으므로 별도로 디버거를 설치할 필요없이 php.ini의 설정만 변경해주면 된다.

Xdebug 프로파일링을 통해 얻어진 파일의포멧은 cachegrind 의 포멧을 따르고 있다.
Xdebug에서 프로파일링된 파일을 생성하도록 설정해 주었다면 아래의 도구들 중 하나를 골라서 분석 가능하다.

Xdebug 프로파일링을 위한 웹기반 분석도구 webgrind
http://code.google.com/p/webgrind/downloads/list

Xdebug 프로파일링을 위한 설치형 분석도구 WinCacheGrind
http://sourceforge.net/projects/wincachegrind/

리눅스용 분석도구
kcachegrind
http://kcachegrind.sourceforge.net/html/Home.html


Xdebug 설정 관련한 참고문서
http://www.ibm.com/developerworks/opensource/library/os-php-xdebug/


php.ini 설정
; xdebug
zend_extension = C:\xampp\php\ext\php_xdebug-2.1.0RC1-5.3-vc6.dll
xdebug.default_enable = On
xdebug.show_exception_trace = On
xdebug.show_local_vars = 1
xdebug.max_nesting_level = 50
xdebug.var_display_max_depth = 6

xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT,SCRIPT_NAME

xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

;모든 파일에 대하여 자동으로 프로파일링할때
;xdebug.profiler_enable = 1
; 특정파일만 프로파일링 하고 싶을때 XDEBUG_PROFILE 을 get으로 실행한다.
; ex : http://example.com/sample.php?XDEBUG_PROFILE
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir ="C:\xampp\tmp"
;cachegrind 포멧으로 설정
xdebug.profiler_output_name = cachegrind.out.%t.%p


http://localhost/test.php?XDEBUG_PROFILE 처럼 호출하면 프로파일링이 시작되고, 설정한 디렉토리에 파일이 생성된다.

분석결과를 webgrind 로 본 화면


분석결과를 WinCacheGrid로 본 화면




우선 테스트 자동화 도구는 테스트 수행의 어떤 단계를 자동화 하느냐에 따라 크게
테스트의 관리/실행(execution)/생성(generation)/측정(measurement) 자동화 도구로 분류할 수 있습니다.

- 첫번째로, 테스트의 관리(management)를 자동화하는 도구는 테스트 과정에서 산출되는 테스트 케이스/슈트/스크립트 및 각종 문서들을 통합관리하는 기능을 제공합니다.
- 두번째로, 테스트의 실행(execution)을 자동화하는 도구는 테스트 대상 프로그램의 수행 및 제어를 자동화하는 기능을 제공합니다.
- 세번째로, 테스트의 생성(generation)을 자동화하는 도구는 테스트 대상 프로그램에 입력으로 주어지는 테스트 케이스 및 테스트 스텁(stub) 등을 자동으로 생성하는 기능을 제공합니다.
- 네번째로, 테스트의 측정(measurement)을 자동화하는 도구는 테스트 수행에 따른 커버리지(coverage) 측정 등의 과정을 자동화합니다.

위의 네 가지 분류는 테스트 자동화 도구를 상호 배타적으로 분류하는 기준은 아닙니다. 다시말해 하나의 테스트 도구가 위의 네 가지 분류에 모두 속할 수도 있다는 것입니다. 예를 들어, 어떤 GUI Record/Playback 자동화 도구가 테스트 대상 GUI 응용프로그램을 수행하고 사용자로부터 주어지는 모든 이벤트를 기록한 후 저장하였다가 회귀(regression) 시험과정에서 저장된 데이터를 다시 활용하는 기능을 제공하고 테스트 수행결과에 대해 다양한 커버리지 측정결과를 제공한다면, 이 자동화 도구는 위의 네 가지 분류에 모두 속할 수 있는 것이죠.

또한, 위의 분류에서 테스트의 실행(execution) 자동화 도구와 생성(generation) 자동화 도구는 테스트 케이스 및 테스트 하니스(harness) 등의 테스트 수행에 필요한 입력 및 환경 등을 자동으로 생성하느냐에 따라 중요한 차이점을 갖습니다.

[출처] STEN - http://www.sten.or.kr/bbs/board.php?bo_table=test_story&wr_id=1659


테스트 자동화 도구들

Selenium



http://seleniumhq.org/download/
http://wiki.openqa.org/download/attachments/400/Selenium+IDE.swf

Selenium 사용에 대한  강규영님의 강좌 동영상 - http://barcamp.tistory.com/18

Selenium 사용 한글 설명 : http://kwon37xi.springnote.com/pages/804128.xhtml

Amazon의 E2C 클라우드를 이용해서 Selenium으로 대규모 부하 테스트를 할 수 있는 사이트

http://saucelabs.com/

Selenium 스크립트를 만든후에, 로드하면 Amazon 클라우드를 이용하여 부하테스트를 하고, 그 결과를 리포팅.
Load R*와 같은 툴을 사용할 수 없는 곳이나, 이미 Selenium으로 테스트 코드를 구현해 놓은 곳에서는 저비용으로
유용하게 사용가능.

Selenium과 Continuous Integration 통합
http://www.javajigi.net/pages/viewpage.action?pageId=267845637

Selenium 한글화
http://alankang.tistory.com/198

HtmlUnit

http://sourceforge.net/projects/htmlunit/

http://samie.sourceforge.net/

JUnit
http://github.com/KentBeck/junit/downloads

jsspec
http://code.google.com/p/jsspec/
매뉴얼 : http://jania.pe.kr/aw/moin.cgi/JSSpec/Manual
JSSpec용 EditPlus ACP,STX 파일 : http://hiphapis.net/entry/AcpStxForJSSpec

유닛테스트에서 시각과 시간
http://alankang.tistory.com/176





보안서버 구축 후, 일반 사용자에게 암호화 되고있는 효과를 보여주기 위해서는 http 패킷을 보여줘야 한다.
(http가 plain text로 통신되며 안전하지 않은 것을 눈으로 보여주기 위해서 이 문서를 작성.)

http로 통신되는 내용을 보기위한 방법은 여러가지 존재하는데
그 중 윈도우 사용자를위한 패킷분석도구를 사용해서 http를 살펴보자.
libpcap, ehtreal 기반의 훌륭한 패킷분석도구가 오픈소스로 제공되니 설치해보자.

Packetyzer - 패킷분석기

http://sourceforge.net/projects/packetyzer/


설치를 일반적인 윈도우 프로그램과 동일하게 진행하고 난 후
아래의 아이콘을 클릭하면 패킷을 분석하기 시작한다.



이 상태에서 브라우저를 열고 대상사이트를 방문하여, 로그인 같은 과정을 진행한다.
그리고 위의 버튼을 한번더 클릭하면 패킷분석이 중단된다.

여러가지 네트워크 관련 트래픽이 일어나는 pc의 경우라면 많은 내용이 빠르게 흘러가면서 캡처될것이다.
그 중 원하는 내용만 별도로 보기위해서 프로그램 하단의 filter를 이용하자.


설정한 주소만 보여달라는 필터를 설정을 한 후 apply버튼을 누르면 해당하는 ip의 내용만 나타난다.

아주 다양한 유형의 필터를 설정해서 볼수 있으므로,
필터의 상세한 내용은 프로그램 상단메뉴의 > Windows > Show FilterList 를 보자.

내용을 살펴보면 아래처럼 아이디와 비밀번호를 평문으로 전달하고 있는것을 볼 수 있다.




이번에는 브라우저의 주소를 보안서버가 적용된 https로 접속하여 패킷을 분석해보자.
그 결과 전달된 내용이 암호화 되고 있음을 볼 수 있다.


보안서버에 대해서 잘 모른다면 http://www.kisa.or.kr/jsp/notice/notice_detail.jsp?b_No=4&d_No=143 에서
보안서버구축가이드를 다운로드 받아서 읽어보시기 바랍니다.

보안서버를 구축하기 위해서는 신뢰할수있는 root CA가 발급한 인증서가 필요하죠.
무료로 보안서버를 구축하기 위해서는 인증서가 필요한데
startssl 사이트에서 인증서를 발급받아서 사용가능합니다.

startssl 사이트에 방문해서 몇가지 절차를 거치면 보안서버에 사용가능한 인증서가 발급 됩니다.
(발급과정은 http://www.lovelgw.com/Blog/194 참고)

이메일용 또는 도메인용으로 발급받아서 사용 가능한데 ,
우선 이메일용을 먼저 발급받아서 도메인까지 사용하도록 변경해야 합니다.

그리고, 도메인에 ssl 인증서로 사용할 목적인 경우에는 도메인소유자의 이메일주소가 필요하며,
인증을 모두 받아서 정상적으로 로그인하면 아래와같은 제어판을 사용가능 합니다.



발급과정에서 획득되는 key 와 crt 파일을 이용해서 웹서버에 SSL 인증을 위한 준비를 진행합니다.
(Apache 서버의 ssl 적용은 많은 글들이 있으니 다루지 않습니다.)


SSL 서버를 구축한 후 불여우, 오페라, IE7 으로 테스트 해보니
IE를 제외한 다른 브라우저는 추가 설치없이 무리없이 사용가능한데...ie사용자를 생각하면 우리나라에서 그냥 쓸수 없다는 말..
구글링을 해보니 ie의 경우 root CA를 업데이트 해주고 나서 정상적으로 사용가능한것을 알았습니다.
(http://www.istartedsomething.com/20091010/microsoft-free-root-certificate-authority-windows/)
- 최근의 운영체제들은 대부분 사용가능하지만, 제 개발환경의 경우 CA업데이트가 아직 적용안된상태네요.

제 경우처럼 IE에 StartSSL이 Root 인증기관으로 등록되어 있지 않아서 인증서를 사용할 수없는 사람은
오류메세지를 만나게 될것입니다.

IE의 root CA를 업데이트 하지 않아서 신뢰할수 없는 인증서라는 메세지를 만나는 경우라면
아래의 경로 IE의 root CA를 업데이트 하고 난 후 정상사용 가능합니다.(아래 링크를 참고하세요)
http://support.microsoft.com/kb/931125

업데이트파일 :
IE로 서비스중인 도메인에 https로 접속을 해서
보안되지 않은 내용을 포함하고 있다는 메세지를 만난다면, 브라우저의 보안설정을 아래와 같이 변경해주시기 바랍니다.



모든 설정을 완료했다면, 웹페이지 하단에 아래와 같은 스크립트를 삽입해서 SSL작동되고 있는 모습을 알려주면 좋겠죠

<script type="text/javascript" src="https://www.startssl.com/seal.js"></script>

접속 후 아래와 같은 로고를 볼수있습니다.
(제 경우는 IE에서 스크롤링 스크립트가 문제가 있네요.)

다른 모양의 로고를 삽립하기 위해서는 https://www.startssl.com/?app=24 를 방문해보면 여러가지 모양의 이미지가 있으니 사이트에 적용해 보세요.


IE에서 본 인증서


'오픈소스SW' 카테고리의 다른 글

웹어플리케이션 테스트  (0) 2010.06.16
http 패킷 보기  (1) 2010.06.13
iptable rule  (0) 2010.06.10
CentOS 5.2.x PHP UPDATE  (0) 2010.06.09
Apache 웹방화벽 ModSecurity 사용하기  (1) 2010.06.08

#!/bin/sh

#iptables Path
iptables=/sbin/iptables

# SERVER IP 받아오기.
HOST_IP="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
NETMASK="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $4}' | cut -d : -f 2`"

# rule delete
# 모두 지우고 다시 재설정합니다.
$iptables -F

######### 비정상적 패킷은 드롭시킨다. 로그에 남긴다. ###############
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "NMAP-XMAS:"
#iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "SYN/FIN:"
#iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "SYN/RST:"


#Drop RST/ACKs to limit OS detection through pinging
iptables -A FORWARD -p tcp --tcp-flags RST RST,ACK -j DROP
#iptables -A FORWARD -p tcp --tcp-flags RST RST,ACK -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "RST/ACK:"

# INPUT Rules 설정
$iptables -Z INPUT
$iptables -P INPUT ACCEPT

# local 과 자기자신의 IP 는 허용.
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A INPUT -s 도메인 -j ACCEPT

#  알 수 없는 패킷 즉,  NETWORK 상태가 INVALID 인 패킷들을 막아 버린다.
#  정상적인 접근에서는 나올 수 없는 상태.
$iptables -A INPUT -m state --state INVALID -j DROP

# ssh service
# ssh 접속 지역 지정.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 22 -j ACCEPT

# etc service
# 25(메일), 80(웹)은 모든 곳에서 ACCEPT 입니다. 반드시...
$iptables -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

# AUTH 는 서비스를 하지 않더라도 열어야 합니다. 클라이언트에서 요청합니다.
$iptables -A INPUT -p tcp --dport 113 -m state --state NEW,ESTABLISHED -j ACCEPT

# mysql
# 기본적으로 mysql 은 local에서만 접속하면 됩니다. DB 공유를 할 경우 대역 지정.
$iptables -A INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

# mysql DB공유 대역설정
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 3306 -j ACCEPT

# ICMP service
# ping은 별 의미가 없지만...
$iptables -A INPUT -s 아이피.0.0/16 -p icmp --icmp-type echo-request -j ACCEPT

# 서버로 들어오는 SYN packet 을 모두 거절한다.
$iptables -A INPUT -p tcp --syn -j REJECT

# Drop All packet
# 원활한 서비스를 위해 65535 포트까지만 DROP 을 합니다. 물론 다 막아도 상관 없습니다.
$iptables -A INPUT -p tcp --dport 0:65535 -j DROP
$iptables -A INPUT -p udp --dport 0:65535 -j DROP
$iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT

# 각종 서비스들에 대해 최대의 성능을 발휘할 수 있도록 TOS 설정을 한다.
$iptables -t mangle -A OUTPUT -p tcp -s 0/0 --sport 80 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 22 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 21 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 20 -j TOS --set-tos 0x08
$iptables -t mangle -A OUTPUT -p tcp -s 0/0 --sport 23 -j TOS --set-tos 0x10

# 외부 서비스를 위한 설정. / udp service
# dns 상호 쿼리를 위해서...
#$iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT

# TCP service
# ftp-data, 서버자체가 클라이언트가 될 경우...
$iptables -A INPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
$iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

# ftp service
# ftp 를 이용할 수 있는 대역을 지정하였습니다. 좀더 세밀해 질 수 있겠죠.
#$iptables -A INPUT -s 아이피.0.0.0/8 -p tcp --dport 21 -j ACCEPT
#$iptables -A INPUT -s 아이피.0.0/16-p tcp --dport 21 -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 21 -j ACCEPT

# telnet
# telnet은 현재 서비스 하지 않습니다.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 23 -j ACCEPT

# pop3s 를 이용하는 관계로 995번을 열고 있습니다.
#$iptables -A INPUT -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT

# ip 대역 예제.
# ip 대역뿐만 아니라 아래와 같이 상태접속을 지정할 수도 있습니다.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# UDP service
# udp 서비스는 하나뿐이죠?
#$iptables -A INPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

echo -e "\nDone.\n"

exit;

Inline Translator가 로드되지 못했습니다. 다시 시도하시려면 새로고침해주세요.

'오픈소스SW' 카테고리의 다른 글

http 패킷 보기  (1) 2010.06.13
보안서버 구축에 사용되는 무료인증서 StartSSL  (0) 2010.06.13
CentOS 5.2.x PHP UPDATE  (0) 2010.06.09
Apache 웹방화벽 ModSecurity 사용하기  (1) 2010.06.08
jquery datepicker 사용  (0) 2010.06.05

+ Recent posts