블로그 이미지
OSSW(Open Source System SoftWare

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Notice

1. 에러 메시지:

kernel: NOHZ: local_softirq_pending 100

 

2. 원인:

- 시스템이 어떤 소프트웨어 interrupt 를 처리하는 대신 CPU sleep 상태로 만드는 것

- 메시지 마지막의 숫자는 hexadecimal 로 표현되며, ‘100’ HRTIMER_SOFTIRQ 를 의미

- HRTIMER_SOFTIRQ High Resolution Timer(HRT) 에 대한 소프트웨어 interrupt(HRT에 대한 상세정보는 아래 참조 URL 참고)

- 커널 버전 2.6.22 이후부터 add debug 메시지

 

3. 조치 방안:

- /etc/grub.conf 파일에 nohz=off 옵션을 설정하여 disable 가능(, 커널 버전 2.6.32-431.el6 보다 상위 버전에서만 가능)

- 단순 정보성 메시지이므로 조치 필요 없음

 

4. 참조 URL:

http://kb.sp.parallels.com/en/119599

https://access.redhat.com/solutions/62637

http://studyfoss.egloos.com/viewer/5268468

 

posted by 박현명

JBoss만 사용하는 시스템인데, http로 들어온 요청을 모두 https로 변경하는 방법은 다음과 같습니다.

여러가지 방법이 있는데 앞단에 웹서버가 없는 경우 다음과 같이 설정하시면 됩니다.


1. deploy/jboss-web.deployer/conf/web.xml 에 다음의 설정 security-constraint설정 추가.


<security-constraint>

    <web-resource-collection>

        <web-resource-name>App_nmae</web-resource-name>

        <url-pattern>/*</url-pattern>

        <http-method>GET</http-method>

        <http-method>POST</http-method>

    </web-resource-collection>

    <user-data-constraint>

        <transport-guarantee>CONFIDENTIAL</transport-guarantee>

    </user-data-constraint>

</security-constraint>



2. deploy/jboss-web.deployer/server.xml에 80 포트에 대해서 https로 redirect 하도록 설정

- 기본적으로 redirectPort=8443과 같이 설정이 되어 있습니다. 별도로 수정을 안하셔도 됩니다.


<Connector port="80" address="${jboss.bind.address}"    

         maxThreads="150" maxHttpHeaderSize="8192"

         emptySessionPath="true" protocol="HTTP/1.1"

         enableLookups="false" redirectPort="443" acceptCount="100"

         connectionTimeout="20000" disableUploadTimeout="true" compression="on" />


<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"

          maxThreads="150" scheme="https" secure="true"

          clientAuth="false" sslProtocol="TLS" 

          keystoreFile="/opt/apache-tomcat-6.0.13/.keystore"

          keystorePass="changeit"/> 



by hyeons (12월)

posted by lovelywas

약한 SSL 암호 스위트 지원 조치하는 방법은 다음과 같습니다.


1. 설정 파일 위치

    Tomcat: <Tomcat dir>\conf\server.xml
    JBOSS: <JBoss dir>\server\all\deploy\jbossweb.sar\server.xml

   SSL connector에 다음의 설정을 추가합니다.


ciphers="SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" 




2. 설정된 예는 다음과 같습니다.


<Connector protocol="HTTP/1.1" SSLEnabled="true"

           port="443" address="${jboss.bind.address}"

           scheme="https" secure="true" clientAuth="false"

           keystoreFile="${jboss.server.home.dir}/conf/test.keystore"

           keystorePass="PaSsWoRd"

           sslProtocol = "TLS" ciphers="SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"/>



설정을 한 후 JBoss 또는 Tomcat 서버를 재기동을 해야 합니다.

참고URL : http://blog.awestin.net/2012/08/disable-weak-ssl-cipher-suites-in.html


by hyeons(12월)

posted by lovelywas

1. 에러 메시지:

JBD: barrier-based sync failed on xvda1-8 - disabling barriers

 

2. 원인:

- RedHat 이나 CentOS 등의 Linux 계열에서는 journaling 파일시스템을 사용하는데, journaling 파일시스템 중 ext4 파일시스템에는 기본적으로 Write Barrier 라는 커널 매커니즘이 enable 되어 있음(barrier=1)

- ext3 파일시스템은 Write Barrier 기능을 사용 가능하나, 기본 disable 되어 있어 위와 같은 메시지가 발생하지 않음

- Write Barrier 는 파일시스템의 메타데이터가 올바르게 기록되고 디스크에 제대로(심지어 디스크 전원이 나갈 지라도) 반영되게 하기 위한 커널 매커니즘

- 스토리지 드라이버나 스토리지 디바이스가 transaction barrier 를 지원하지 않을 때 위와 같은 메시지 발생

- 메시지의 의미: 커널이 barrier disable 하고 barrier=0 인 상태처럼 write 를 실행

 

3. 조치 방안:

- 단순 경고성 메시지이므로 조치 필요 없음

- RHEL 6 에서는 barrier 기능 disable 을 추천하지 않음. Write Barrier 기능으로 인한 성능 저하는 약 3% 정도이며, 그 기능을 disable 하는 것보다 enable 했을 때의 성능 benefit 이 더 큼

- nobarrier 옵션은 VM(Virtual Machine) 에서 구성된 스토리지에서는 사용되지 않음

 

4. 참조 URL:

http://www.novell.com/support/kb/doc.php?id=3907838

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/writebarrieronoff.html

http://lunatine.tistory.com/8

http://community.arm.com/groups/processors/blog/2011/04/11/memory-access-ordering-part-2--barriers-and-the-linux-kernel

http://se.uzoogom.com/m/post/204

posted by 박현명

사이트상에 있는 정적인 파일들에 대해서 어느 특정 사용자가 대역폭을 차지하고 있을 수 있는데,

다음과 같은 방법을 사용하여 네트워크 대역폭의 제한을 설정 할 수 있습니다.



server {

    server_name www.example1.com;

    location /download/ {

        //  모든 사용자에 대해 /download 디렉토리의 파일 다운로드 속도를 10k 로 제한 

        limit_rate 10k;    

        root /var/www.www.example1.com/download/;

    }

    ...

}

 



by hyenas (11월)

'1. 미들웨어이야기 > 04. Nginx' 카테고리의 다른 글

Nginx 대역폭(전송속도) 제한  (0) 2014.11.26
Nginx IP 접근제어 설정  (0) 2014.11.26
Nginx 로그 로테이션 설정  (0) 2014.11.26
Nginx 가상 호스트별 로그 설정  (0) 2014.11.26
Nginx 다중 로그 설정  (0) 2014.11.26
Nginx 로그 설정  (0) 2014.11.26
posted by lovelywas

이번 강의에서는 Nginx IP접근제어에 대해서 알아보겠습니다.



server {

    listen 80;

    server_name www.example1.com;

    location / {

        deny 192.168.56.101

        allow 192.168.56.0/24;

        deny all;

    }

...

}



위에서 부터 차례대로 192.168.56.101의 IP에 대해서 접근을 거부한 다음 192.168.1.0/24 의 접근을 허용하는 설정이며, 마지막에 있는 deny all 지시어는 그 외의 모든 IP주소에 대해 접근거부하는 설정입니다.


접근이 거부된 사용자가 접속시 "403 Forbiden" 페이지로 전환이 됩니다.



by hyenas(11월)

'1. 미들웨어이야기 > 04. Nginx' 카테고리의 다른 글

Nginx 대역폭(전송속도) 제한  (0) 2014.11.26
Nginx IP 접근제어 설정  (0) 2014.11.26
Nginx 로그 로테이션 설정  (0) 2014.11.26
Nginx 가상 호스트별 로그 설정  (0) 2014.11.26
Nginx 다중 로그 설정  (0) 2014.11.26
Nginx 로그 설정  (0) 2014.11.26
posted by lovelywas

이번 강의에서는 로그 rotate 설정에 대해서 알아보도록 하겠습니다.


logrotate.conf 파일에 다음 환경설정을 추가합니다.


 /var/log/nginx/*.log {

    daily

    missingok

    rotate 52

    compress    // 로그 파일에 대한 압축

    delaycompress

    notifempty

    create 640 root adm    // 보관이 되는 파일의 권한 설정

    sharedscripts

    postrotate

    [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

    endscript

}


기존의 로그파일을 새로운 파일명으로 바꾸고 압축을 합니다.

방금 이름을 바꾼 로그 파일을 닫고 새로운 로그 파일에 기록을 하도록

엔진엑스 마스터 프로세스에 USR1 시그널을 보냅니다.



테스트 방법  :  logrotate -d /nginx/logrotate.conf

응용 : crontab에 설정하여 매일 정시에 로그를 로테이트하여 사용이 가능합니다.



by hyeons(10월)

'1. 미들웨어이야기 > 04. Nginx' 카테고리의 다른 글

Nginx 대역폭(전송속도) 제한  (0) 2014.11.26
Nginx IP 접근제어 설정  (0) 2014.11.26
Nginx 로그 로테이션 설정  (0) 2014.11.26
Nginx 가상 호스트별 로그 설정  (0) 2014.11.26
Nginx 다중 로그 설정  (0) 2014.11.26
Nginx 로그 설정  (0) 2014.11.26
posted by lovelywas

가상 호스트에 각각 로그를 설정하는 예제 입니다.


 

 http {

    ...

    server {

        listen 80;

        server_name www.example1.com ;

        access_log /var/log/nginx/example1.access.log;

        error_log /var/log/nginx/example1.error.log;

        ...

    }

    server {

        listen 80;

        server_name www.example2.com ;

        access_log /var/log/nginx/example2.access.log;

        error_log /var/log/nginx/example2.error.log;

        ...

    }

    server {

        listen 80;

        server_name www.exampl3.com;

        access_log /var/log/nginx/example3.access.log main;

        error_log /var/log/nginx/example3.error.log error_main;

        ...

    }




by hyeons(10월)

'1. 미들웨어이야기 > 04. Nginx' 카테고리의 다른 글

Nginx IP 접근제어 설정  (0) 2014.11.26
Nginx 로그 로테이션 설정  (0) 2014.11.26
Nginx 가상 호스트별 로그 설정  (0) 2014.11.26
Nginx 다중 로그 설정  (0) 2014.11.26
Nginx 로그 설정  (0) 2014.11.26
Nginx와 OpenSSL 보완 취약점  (0) 2014.07.31
posted by lovelywas

동적인 요청에 대한 로그는 main로그 포멧을 사용하고, 정적인 요청은 static_main 로그 포멧을 사용,

에러로그는 error_main 로그포멧을 사용하는 예로 다음과 같이 설정이 가능합니다.


 

http {

    log_format main '$remote_addr - $remote_user [$time_local] ' 

                        '"$request" $status $body_bytes_sent "$http_referer" '

                        '"$http_user_agent" "$http_x_forwarded_for"';


    #정적(static) 파일에 대해서는 다음과 같은 로그 포멧 사용

    log_format static_main '$remote_addr [$time_local] '

                               '"$request" $status $body_bytes_sent

                               '"$http_user_agent";


    #에러 로그에 대해서는 다음과 같은 로그 포멧 사용

    log_format error_main '$remote_addr - $remote_user [$time_local] '

                              '"$request" $status "$http_user_agent";

 ...


 server {

    listen 80;

    server_name example1.com;

    error_log var/log/nginx/example1_error.log error_main;

    location / {

        ...

        access_log /var/log/nginx/example1_main.log main;

    }

    location /static/ {

        ...

        access_log /var/log/nginx/example1_static.log static_main;

    }

}




by hyeons(9월)

'1. 미들웨어이야기 > 04. Nginx' 카테고리의 다른 글

Nginx 로그 로테이션 설정  (0) 2014.11.26
Nginx 가상 호스트별 로그 설정  (0) 2014.11.26
Nginx 다중 로그 설정  (0) 2014.11.26
Nginx 로그 설정  (0) 2014.11.26
Nginx와 OpenSSL 보완 취약점  (0) 2014.07.31
Nginx 실시간 모니터링 (ngxtop)  (0) 2014.07.30
posted by lovelywas

1. Nginx의 로그 포멧은 다음과 같이 설정할 수 있습니다.

 

http {

    log_format combiled '$remote_addr - $remote_user [$time_local] ' 

        '"$request" $status $body_byte_sent ' '"$http_referer" "$http_user_agent"';

    access_log /var/log/nginx/access.log combined;     //combine 형태의 로그

    error_log /var/log/nginx/error.log crit;              //crit 형태의 로그

...




Nginx 로그 레벨 설정

에러 레벨 

의미 

 Alert

 긴급 상황

 Crit

 위험한 상황

 Error

 오류 상황

 Warn

 경고 상황

 Notice

 정상이지만 중요한 상황

 Info

 정보 메시지

 Debug

 디버그레벨 메시지



2. Apache 포맷으로 로그 기록하기

대부분의 웹 로그 분석기는 Apache 로그 포멧을 기준으로 작동을 합니다. 필요에 따라서 NginX의 로그를 다음과 같은 방법을 통하여 Apache 로그 포멧으로 기록을 할 수 있습니다.



log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded+for"';

access_log /var/log/nginx/access.log main; 



Apache와 Nginx 로그 설정 비교.

 Apache 설정

 Nginx 설정

 의미

 %h

 $remote_addr

 이 사이트에 접근하고 있는 클라이언트들의 IP 주소

 %l

 $remote_user

 사용자가 HTTP 인증으로 로그인했을 때 사용자명

 %t

 $time_local

 요청이 발생한 때 서버의 지역 타임스탬프

 %r

 $request

 서버에 제출된 요청

 %s

 $status

 HTTP 응답 코드 (200, 404, 500 등)

 %b

 $body_bytes_sent

 서버가 클라이언트로 전송한 응답의 크기

 %U

 $http_referer

 클라이언트를 이 서버로 오게 만든 이전 페이지의 URL

 "%{User-agent}i"

 $http_user_agent

 HTTP 요청에 사용된 브라우저 타입


참고 : http://httpd.apache.org/docs/2.2/ko/mod/mod_log_config.html



by hyeons(9월)



posted by lovelywas

1. 에러 메시지:

daemon[PID]: warning: can't get client address: Connection reset by peer


2. 원인:

- C/S 구조에서의 TCP 통신은 기본적으로 3-way handshake 방식을 통해 서로 세션을 연결하게 되는데, SYN/ACK 시퀀스가 Connection 이 완료되기 전에 torn down(해체) 되어 daemon source system 을 확인할 수 없을 때 발생


- unauthorized user  daemon 을 통해 해당 시스템에 접근하려 했다가 정상적인 절차로 Connection 이 맺어지기 전에 세션이 terminate 되면 발생

- 서버에서 취약점 확인을 위한 스캔 시 발생


3. 조치 방안:

- 단순 경고성 메시지이므로 조치 필요 없음


4. 참조 URL:

http://www.linuxvoodoo.com/resources/security/enemy2

http://h30499.www3.hp.com/t5/System-Administration/warning-can-t-get-client-address-Connection-reset-by-peer/td-p/4397085#.VFq0_fmDDNA

posted by 박현명

1. segfault 의미

- segmentation fault

- the application is trying to access a memory area that belongs to the OS or some other program. The memory management unit in the CPU stops the operation and triggers an exception. The standard segfault exception handler in the kernel kills the program.

- the program probably tried to use an uninitialized pointer, which has a value NULL


2. segfault 예

- scagent[1569]: segfault at 7f2ecca29fc8 ip 00000039ff64432a sp 00007f2ecca29fd0 error 6 in libc-2.12.so[39ff600000+18a000]

- epi_alert_svr[26620]: segfault at 0 ip 00000000004142db sp 00002af6e33efd20 error 4 in epi_alert_svr[400000+1c000]


3. segfault 원인

- 잘못된 메모리 공간에 쓰기 시도(허용되지 않은 메모리 영역에 접근을 시도, 허용되지 않은 방법으로 메모리 영역에 접근을 시도). 예를 들어, 읽기 전용 영역에 어떤 내용을 쓰려고 시도하거나, 운영 체제에서 사용하는 영역에 다른 내용을 덮어쓰려 하는 경우

- 메모리 문제

- 하드디스크에 배드 섹터가 있어도 발생

- 개발 소스 아키텍처 관련 문제


4. segfault 항목의 의미

- ip(rip): instruction pointer. ie. where the code which is trying to do this lives

- sp(rsp): stack pointer

- at: address. (it's likely that 10 and 11 are offsets from a pointer we expect to be set to a valid value but which is instead pointing to 0)

- error: value of page fault error code, ie. last error code which was reported by a syscall

- [39ff600000+18a000]: starting address and size of virtual memory area where offending object was mapped at the time of crash


5. segfault error 넘버의 의미

- 4: The cause was a user-mode read resulting in no page being found.(also known as a null pointer dereference)

     4 is EINTR (interrupted system call)

- 6: The cause was a user-mode write resulting in no page being found.


6. segfault 조치 방법

If possible, have your application developer produce a version of the application that includes debug information. If the application is compiled using gcc, this is as simple as adding the "-g" option to the compilation commands. 


Before starting the application, run "ulimit -c unlimited". This allows the segfault handler to produce a core dump file when the segfault handler is triggered. This file contains all the memory used by the application, so it might be very big.


Then your application developer needs to run a debugger program on the application and the core file. If the application was compiled with debug information, the debugger can identify exactly on what line of the source code the error happened. The developer can also use the debugger to examine the values of any variables at the time of the error. The debugger has many other features which might be useful too. If your developer does not know how to use a debugger, he/she should definitely learn it.


For Linux, the most common debugger program is named "gdb" and it is available in most Linux distributions. It is usually in the "development tools" category of the distribution's package collection.


7. 참조 URL

- http://rgeissert.blogspot.kr/2013/07/explaining-segmentation-fault-errors.html

- http://rgeissert.blogspot.kr/p/segmentation-fault-error.html

- http://stackoverflow.com/questions/2549214/interpreting-segfault-messages

- http://adnoctum.tistory.com/387

posted by 박현명