독까의 이야기

이전 글에서는 Custom 설정으로 진행했고, 이번에는 Default 로 진행하려고 한다. 

우선 Modsecurity 설치 후 프로그램 삭제해도, applicationHost.config 에는 Modesecurity 모듈이 남아 있다.

따라서, 해당 항목을 찾아서 직접 삭제해줘야 깨끗하게 테스트 가능하다.

            <add name="ModSecurity IIS" image="C:\Windows\System32\inetsrv\ModSecurityIIS.dll"/>

                <add name="ModSecurity IIS"/>

 

1. ModSecurity 설치

처음부터 끝까지 Default 로 진행하면 된다. 이전 글에서 체크 해제 했던 부분도 기본으로 한다.

 

2. IIS 설정 파일 확인 및 수정

C:\Windows\System32\inetsrv\config\applicationHost.config

설치형으로 진행하면, 모듈 및 전역 설정이 포함되어 있다. 

일부 값을 수정 및 전역 설정 삭제 한다. 

        <section name="ModSecurity" overrideModeDefault="Deny" allowDefinition="Everywhere" /></sectionGroup>

            <add name="ModSecurity IIS (32bits)" image="%SystemRoot%\SysWOW64\inetsrv\ModSecurityIIS.dll" preCondition="bitness32" />
            <add name="ModSecurity IIS (64bits)" image="%SystemRoot%\System32\inetsrv\ModSecurityIIS.dll" preCondition="bitness64" />

        <ModSecurity enabled="true" configFile="C:\Program Files\ModSecurity IIS\modsecurity_iis.conf" />


                <add name="ModSecurity IIS (32bits)" preCondition="bitness32" />
                <add name="ModSecurity IIS (64bits)" preCondition="bitness64" />


수정 : Deny 일 경우, 차단 정책이 적용되지 않음
<section name="modsecurity" overridemodedefault="Allow" allowdefinition="everywhere" >

삭제 : Web 전역 설정이 적용되어 정상 호출값도 차단 됨 
        <modsecurity enabled="true" configfile="c:\program files\modsecurity iis\modsecurity_iis.conf" >

 

3. modsecurity.conf 수정

C:\Program Files\ModSecurity IIS\modsecurity.conf

SecRuleEngine DetectionOnly 주석 처리 

SecRuleEngine On : 구문 추가

차단 테스트 항목 추가
SecRule ARGS:param "@contains test" "id:1,deny,status:401"
SecRule ARGS:param "@contains cmd" "id:2,deny,status:402"
SecRule ARGS:param "@contains gunnm" "id:3,deny,status:403"

 

4. 웹사이트 web.config 수정

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <ModSecurity enabled="true" configFile="C:\Program Files\ModSecurity IIS\modsecurity.conf" />
    </system.webServer>
</configuration>

 

5. 테스트

이전 글과 동일하게 입력 및 확인

개별 conf 파일 적용 확인

IIS 웹서버에 ModSecurity 모듈을 추가하려고 한다.

IIS 전용 웹방화벽 Webkinght 가 있지만, 추가 모듈 적용 여부도 테스트해야 한다. 

 

1. ModSecurity 설치 (ModSecurityIIS_2.9.1-64b.msi)

 

ModSecurityIIS_2.9.1-64b.msi
6.45MB

 

체크 박스 선택이 "Default" 인데, custom 설정 예정이라 체크 해제.

 

2. IIS 설정 파일 확인 및 수정

C:\Windows\System32\inetsrv\config\applicationHost.config

    <configSections>

        <section name="ModSecurity" overrideModeDefault="Deny" allowDefinition="Everywhere"/></sectionGroup>
    </configSections>


수정
        
<section name="modsecurity" overridemodedefault="Allow" allowdefinition="everywhere">

 

 

3. IIS 에 ModSecurity 모듈 추가하기

appcmd.exe install module /name:"ModSecurity IIS" /image:"C:\Windows\System32\inetsrv\ModSecurityIIS.dll"

 

 

4. IIS 설정 파일 재확인

C:\Windows\System32\inetsrv\config\applicationHost.config 추가 등록 내역 확인

        <globalModules>
            <add name="ModSecurity IIS" image="C:\Windows\System32\inetsrv\ModSecurityIIS.dll" />
        </globalModules>
....
        <modules>
                <add name="ModSecurity IIS" />
        </modules>

 

5. IIS 재시작

iisreset

 

6. modsecurity.conf 수정

C:\Program Files\ModSecurity IIS\modsecurity.conf

SecRuleEngine DetectionOnly 주석 처리 

SecRuleEngine On : 구문 추가

차단 테스트 항목 추가
SecRule ARGS:param "@contains test" "id:1,deny,status:401"
SecRule ARGS:param "@contains cmd" "id:2,deny,status:402"
SecRule ARGS:param "@contains gunnm" "id:3,deny,status:403"

 

7. 웹사이트 web.config 수정

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <ModSecurity enabled="true" configFile="C:\Program Files\ModSecurity IIS\modsecurity.conf" />
    </system.webServer>
</configuration>

 

8. 서버 로컬에서 테스트

차단룰 : SecRule ARGS:param "@contains test" "id:1,deny,status:401"
차단룰 : SecRule ARGS:param "@contains cmd" "id:2,deny,status:402"
차단룰 : SecRule ARGS:param "@contains gunnm" "id:3,deny,status:403"

 

모듈 적용이 잘 됨. 

 

이제는 테스트의 주 목적인 개별 ModSecurity.conf 를 적용하는 테스트를 한다.

일반적으로 웹서버에서 한 개의 사이트만 구동하는 것이 아니므로, 사이트별 정책 적용을 목적으로 한다.

 

9. C:\Program Files\ModSecurity IIS\TESTmodsecurity.conf 생성 및 수정

기존 modsecurity.conf 파일 복사 후 수정

SecRule ARGS:param "@contains Mod" "id:1,deny,status:404"
SecRule ARGS:param "@contains Sec" "id:2,deny,status:405"
SecRule ARGS:param "@contains Test" "id:3,deny,status:406"

 

10. C:\Program Files\ModSecurity IIS\modsecurity_iis.conf 수정

Include modsecurity.conf
Include modsecurity_crs_10_setup.conf
Include owasp_crs\activated_rules\*.conf
Include owasp_crs\base_rules\*.conf

추가
Include TESTmodsecurity.conf

 

11. web.config 수정

 

        <ModSecurity enabled="true" configFile="C:\Program Files\ModSecurity IIS\modsecurity.conf" />        

수정
        <ModSecurity enabled="true" configFile="C:\Program Files\ModSecurity IIS\TESTmodsecurity.conf" />        

 

12. 서버 로컬에서 테스트

 

로깅 설정이나 추가 차단 정책 설정은 차후에 테스트 한다. 

고객사에서 윈도우용 PHP v7.2 와 CakePHP 3.7.9 설치를 요청하여 테스트 한다.

CakePHP 가 뭔지 몰라서 검색을 좀 했다. PHP 로 만들어진 프레임워크라고 한다. (https://ko.wikipedia.org/wiki/CakePHP)



1. PHP v7.2 다운로드 및 설치

IIS 에 등록 된 웹 플랫폼 설치 관리자 실행해서 PHP v7.2 입력한다. 


만약 웹 플랫폼이 설치가 안되어 있으면, 아래 첨부파일 실행해서 설치한다. 

WebPlatformInstaller_x64_en-US.msi


phpmanager도 설치하면 관리가 용이하다. (https://www.iis.net/downloads/community/2018/05/php-manager-150-for-iis-10

PHPManagerForIIS_V1.5.0.msi


호출되는 리스트에서 원하는 버전 추가 후 설치 진행한다.


IIS 에 등록 된PHP Manager 들어가서, PHP Extensions 설정을 변경한다. 

 



아래의 확장 모듈이 Enabled 로 선택되어 있어야 CakePHP 설치가 정상 진행된다.

mbstring PHP extension

intl PHP extension

simplexml PHP extension (simplexml 은 PHP 5.4 이후부터 코어에 기본 포함되어 목록에 없다.)

PDO PHP extension 


php_intl.dll 은 기본이 Disabled 니깐 Enabled 로 변경한다.


PHP 설정은 이 정도면 끝이다. 



2. CakePHP 다운로드 및 설치


설치 안내 페이지로 이동한다. 

https://book.cakephp.org/4/en/installation.html


윈도우 버전은 아래의 경로에 가서 Composer 다운로드 및 설치하라고 한다.

 


https://github.com/composer/windows-setup/releases/

Composer-Setup.5.1.0.exe



PHP 가 설치 된 경로는 알아서 잡으니깐 그냥 Next 만 계속 누르면 끝난다. 


파워쉘이나 cmd 열어서 아래 명령어 입력한다. 


composer create-project --prefer-dist cakephp/app:4.* my_app_name


ex) composer create-project --prefer-dist cakephp/app:^3.7 D:\cakephp_gunnm 



지정한 경로에 설치가 진행된다. 


종료되기 직전에 Y, n 선택하라고 나오는데 그냥 엔터치면 된다. 


cmd 를 이용해서 지정 경로인 D:\cakephp_gunnm\bin 폴더로 이동한다.

cake --help 명령으로 옵션값 확인한다. 


D:\cakephp_gunnm\bin>cake --help


config 폴더 내부 설정 파일들을 본인의 환경에 맞게 수정해야 한다. DB 접속 설정은 app.php 파일을 수정한다.

 


더 자세한 설명 및 방법은 구글하고 유튜브에 있으니깐 잘 검색하면 될 것 같다.