뭘 이런걸..

Posted
Filed under Tech/안녕리눅스
Apache 2.4.33 에 experimental 로 mod_md 라는 새로운 모듈이 추가가 되었습니다. (실제로는 2.4.30 에 추가가 되었으나, 2.4.30 이 release 되지 않고 2.4.33으로 relelase 가 되었습니다.)

ACME protocol 을 이용하여 인증서 자동 관리를 해 주는 모듈이라고 보면 됩니다. 일단은 현재 ACME protocol을 지원하는 곳이 Let's encrypt 밖에 없으므로, Let's encrypt 인증서 전용이라고 할 수 있습니다.

mod_md 모듈을 이용하면 아주 쉽게 인증서 설정 및 관리를 할 수가 있습니다. (인증서 발급 같은 것도 신경쓸 필요가 없습니다.)

일단 간단하게 예를 들자면

<VirtaulHost *:80>
ServerName oops.org
ServerAlias www.oops.org
</VirtaulHost>


이런 가상 호스트를 SSL 서비스를 하기 위하여 다음의 설정으로 간단히 가능해 집니다.

<IfModule md_module>
MDomain oops.org
MDCertificateAgreement https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

<VirtaulHost *:443>
ServerName oops.org
ServerAlias www.oops.org
SSLEngine On
</VirtaulHost>
</IfModule>


이렇게 설정 한 후에 Apache 를 시작을 하면, oops.org 에 대한 인증서 발급을 시작 합니다. tail 명령으로 error_log 를 보고 있으면, 재시작 후 5~10초 정도가 지나면 다음과 같은 로그가 출력이 됩니다.

[root@host ~]# tail -f /var/log/httpd/error_log
[Tue Apr 10 23:53:51.043029 2018] [md:notice] [pid 88797] AH10059: The Managed Domain oops.org has been setup and changes will be activated on next (graceful) server restart.


이 로그가 출력이 되면 apache 를 다시 한번 재시작 해 주면 인증서가 자동 생성이 된 것을 확인할 수 있습니다. 더군다나, MDRenewWindow 를이용하면 자동 갱신도 가능하면, ServerAlias 의 도메인들은 SubjectAltName 으로 자동으로 등록이 됩니다. 즉, 도메인 발급 갱신에 대해서 신경을 꺼도 된다는 의미가 됩니다.

인증서는 SERVER_ROOT/md 에 저장이 되며, 이 위치는 MDStoreDir 지시자로 변경할 수 있습니다.

현재는 apache module 만 지원이 되는 듯 하며 조만간 nginx 도 지원을 하지 않을까 싶습니다.

mod_md에 대한 자세한 사항은 https://httpd.apache.org/docs/trunk/mod/mod_md.html 를 참조 하십시오.

안녕 리눅스 3에서는, httpd 2.4.33 부터 mod_md package 를 설치하여 사용이 가능 합니다.

빌드 시의 참고 사항으로는, 다음의 조건이 있습니다.

apr >= 1.5.2
libcurl > 7.50
brotli

안녕 리눅스에서는 apr 1.5.2 의 apr_escape call 을 back porting 하여 지원하였으며, brotli 는 설치 하지 않았음에도 잘 동작하는 것으로 보아 mod_md 와는 직접적인 연관이 없는 것으로 보입니다. 그리고, libcurl 도 mod_md 의 config2.m4 를 수정하여 CentOS 7의 libcurl 7.29 를 이용하여 빌드 하였으며, 아직까지는 문제점이 보이지는 않고 있습니다. 즉, apr 만 해결하면 CentOS 7에서 빌드는 그리 어려운 편은 아닙니다.

P.S.
mod_md는 mod_watchdog 모듈에 의존성이 있습니다. mod_watchdog 모듈을 mod_md 보다 먼저 load 해 주어야 합니다.
2018/04/11 00:07 2018/04/11 00:07
Posted
Filed under Tech/security
Intel Meltdown, Spectre 버그가 알려 진지도 한 5일 정도 지났고, 슬슬 패치들과 firmware들이 나오기 시작했습니다.

현재 알려진 바로는 3가지의 버그가 존재하고, 2가지는 Spectre, 1가지는 Meltdown 버그라 칭해지고 있습니다.


이 글은 Spectre bug와 Meltdown bug를 소개하는 것이 목적이 아닙니다. 이 버그에 대한 기술적인 글들은 많이 올라와 있으므로, 여기서는 RHEL/CentOS 환경에서 어떻게 적용할 것인가에 대하여 논하려 합니다.


일단, 버그가 알려진지 5일 정도 지난 시점에서, 벤더 별 OS kernel patch가 발표 되고, H/W 벤더들의 bios firmware 들이 발표가 되고 있는 상황에서 성능 저하 이슈와 패치 적용 이슈를 어떻게 해야 하는지에 대하여 논하려고 합니다.

현재, 나오고 있는 H/W bios patch는 CVE-2017-5715 (variant 2) 에 대해서만 해결을 하고 있으며, bios 만으로 해결은 안되고 software 적인 patch(즉 kernel patch)도 같이 필요한 상황입니다.

CVE-2017-5753 (variant 1)과 CVE-2017-5754 (variant 3)은 H/W 적으로 수정이 불가능 하고 software 적으로만 해결이 가능 합니다. 그리고 성능 저하의 문제는 CVE-2017-5754 (variant 3) meltdown patch에서 발생을 하게 됩니다.

meltdown patch의 경우 user 영역에서 kernel 영역의 memory 주소를 알지 못하게 하기 위하여 page table을 isolate 시켜 버리는데, 문제는 page table이 분리되다 보니 kernel syscall 이 호출 될 때 마다 분리된 kernel page table도 매번 호출이 되어야 하는 overhead가 발생하여 성능이 저하가 되는 것 입니다.

이 3가지 패치에 대하여 RHEL/Centos 의 커널은 3가지 옵션을 제공 합니다. (패치가 적용된 커널들은 /sys에 다음의 파일들이 생성되며, 파일 값은 1이 기본 입니다.)

[root@host ~]# cat /sys/kernel/debug/x86/pti_enabled
1
cat /sys/kernel/debug/x86/ibpb_enabled
1
cat /sys/kernel/debug/x86/ibrs_enabled
1


CentOS 6 의 경우에는 /sys/kernel/debug 를 아래와 같이 mount 해 주어야 합니다.

[root@host ~]# mount -t debugfs nodev /sys/kernel/debug



Intel CPU의 경우,

variant #1, #2, #3 을 모두 fix

[root@host ~]# echo "1" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibrs_enabled


microcode update가 필요 없는 아주 오래된 intel cpu의 경우

[root@host ~]# echo "1" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "0" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibrs_enabled


와 같이 해 주시면 됩니다.


AMD cpu의 경우에는 meltdown 은 적용이 필요 없으며,

H/W patch (bios upgrade)가 가능할 경우

[root@host ~]# echo "0" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "0" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "2" > /sys/kernel/debug/x86/ibrs_enabled


microcode 업데이트 없이 분기 예측을 사용할 수 없는 오래된 CPU의 경우

[root@host ~]# echo "0" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "2" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibrs_enabled


로 해 주시면 됩니다.

물론 이 설정들은 runtime 설정이 가능 하며, 대신 persist 하지 않으므로 booting 시 마다 처리를 해 주어야 합니다. 또한, rc.local 에서 처리를 할 경우 rc.local 보다 먼저 실행되는 process 의 경우에는 이 설정의 영향을 받지 않기 때문에 기본 설정은 booting 시의 kernel parameter로 반영 하는 것이 좋습니다. 각 옵션에 해당하는 kernel parameter는 다음과 같습니다. (설정 값을 0으로 하는 것과 같습니다.)

noibrs noibpb nopti

여기까지는 아주 원론적으로 bug를 fix 하는 방법에 대하여 알아 보았습니다.

이 정보를 토대로 하면, spectre bug와 meltdown bug에 대하여 각각 정책을 취할 수 있게 됩니다. 예를 들어, 보안 버그가 중요하지만 성능 저하가 더 큰 문제인 경우, 해당 서버가 isolate 가 되어 있다면 과감하게 meltdown bug patch를 포기하는 정책도 가능 하다는 의미입니다.

현재, 이 기능을 사용할 수 있는 커널은

CentOS 7 3.10.0-693.11.6.el7
CentOS 6 2.6.32-696.18.7.el6
부터 사용이 가능 합니다. 물론, 이전 커널들은 page table isolate 같은 것을 하지 않았으니 이 기능 자체가 필요 없는 것이고요.

이 정보를 토대로 spectre meltdown 버그에 대한 정책을 결정하는데 도움이 되기를 바랍니다.

이 문서는 https://access.redhat.com/articles/3311301 문서를 토대로 작성을 하였음을 밝힙니다.
2018/01/09 22:21 2018/01/09 22:21
김정균

https://access.redhat.com/articles/3311301 에 업데이트 된 내용이 있습니다.

retp_enabled 이 추가가 되었습니다.
영구적으로 적용하지 않는 옵션은 "spectre_v2=off nopti" 이렇게 kernel parameter에 넣어도 된다고 하는 군요. 링크 페이지 참조 하시기 바랍니다.

retp_enable 는 google이 발표한 성능 저하 없는 spectre retpoline 패치 기능을 의미하는데, gcc 도 같이 업데이트가 되어야 합니다. 단, skylake 에서는 retp 대신에 ibrs 를 사용한다고 되어 있습니다.

즉, CentOS 에서 retp_enable 을 사용하려면, gcc 와 libgcc 도 같이 최신 버전으로 업데이트 되어야 합니다.

hong

CentOS 6.9랑 7.4 만 패치가 보이는데요 6.6 이나 7.0 같은 이외버전은 커널 어떤거 받으면 될까요? ㅠㅠ

김정균

6.6 이나 7.0 의 경우에는 RHEL 의 정책에 의해 별도로 license 계약을 체결해야 합니다.

또는, 6.9 나 7.4 로 업데이트를 해 주시면 됩니다. 업데이트는 간단하게 yum update 명령으로 업데이트가 가능 합니다. 6.x 나 7.X 간의 업데이트는 최소한의 하위 호환성을 보장 하면서 update 되기 때문에 update가 힘든 편은 아닙니다. 특시 APM 위주의 서비스는 그냥 업데이트를 따라 가셔도 거의 무방 합니다.

김정균

2017.12.19 자로 나온 1.31 적용 해 놓았습니다.

- jsdelivr 50M 제한 정책 때문에 1.31 부터는 svg, ttf format을 serving 하지 않습니다.
- ligature 기능은 d2coding-legature 로 분리 되었습니다.

jsdelivr 의 새로운 backend 에서 파일이 추가 삭제될 때 더이상 pull request를 던지지 않아도 되도록 변경이 되었네요 :)

Posted
Filed under Tech/안녕리눅스
2017년 08월 01일에 RHEL 7.4가 release 가 되었습니다. RHEL 7.4에 대응하는 안녕 리눅스 버전은 3.2 Aang 입니다.

RHEL 7.4는 binary level의 package를 배포하지 않고, 또한 안녕 리눅스는 RHEL이 아니라 CentOS 를 기반으로 릴리즈를 하기 때문에, CentOS 7.4 가 release 되어야 안녕 리눅스도 이에 맞춰 3.2가 출시 되게 됩니다.

일단, CentOS 7.4 는 블로그상에 의하면 8/22 ~ 9/12 사이에 출시를 하게 될 것이라고 언급 하고 있습니다. 그래서 안녕 리눅스 역시 CentOS 7.4가 출시되면 바로 출시가 가능 하도록 준비를 하고 있습니다.

안녕 리눅스 3.2 릴리즈를 위해서는 대략 25개의 package가 준비가 되어야 하며, 현재 10개의 패키지가 준비가 되었으며, binary 의존성이 없는 6개의 패키지는 이미 선 배포가 되고 있습니다.

CentOS 7.4 릴리즈 전에 대부분의 패키지는 선반영이 될 예정이며, CentOS 7.4의 bianry package 버전 의존성이 있는 (systemd 등 일부 패키지) 패키지들과 annyung-release 패키지는 CentOS 7.4가 릴리즈 된 이후 바로 배포가 될 예정입니다. (packaging은 CentOS 7.4 release 이전에 완료될 예정입니다.)
2017/08/21 00:03 2017/08/21 00:03
김정균

안녕 3.2 출시 준비를 마쳤습니다.

일단, CentSO 7.4 업데이트에 해당되는 안녕의 package 들은 이미 repository에 선 반영이 되어 있으며, CentOS 7.4 가 출시되면, annyung-release pacakge가 배포 되면서 공식적으로 AnNyung 3.2 (Aang) 배너로 변경하게 됩니다.

annyung-release-3.2 는 CentOS 7.4가 정식으로 출시되고, 한국 mirror에 sync가 되는 시점에 배포할 예정입니다.

참고할 사항으로는,

안녕 리눅스의 openssl 1.0.1e package들이 deprecated 되어 repository에서 제거 되었습니다. 안녕의 openssl은 HTTP/2 protocol 지원을 위하여
1.0.2의 ALPN 기능을 back porting 하여 제공하였으나, CentOS 7.4 부터 1.0.2k를 지원하므로 더이상 유지할 이유가 없어져 안녕 repository에서
제거가 되었습니다.

또한, 안녕의 openssl package는 CentOS의 package로 업데이트 되는 것을 방지하기 위하여, CentOS의 package보다 상위 버전처럼 하기 위하여 높>은 값의 epoch 버전을 가지고 있습니다. 그러므로 아무런 조치를 하지 않는다면 안녕의 1.0.1e는 CentOS 7.4를 설치하더라도 1.0.2k로 업데이트 >되지 않습니다.

이 문제를 해결하기 위하여, annyung-release-3.2 package에서 이를 보정하도록 되어 있고, CentOS 7.4가 한국 mirror 서버들에 동기화가 되었을>때, annyung-release-3.2를 배포할 예정이므로, CentOS 7.4로 업데이트가 되었다고 해도 annyung-release 3.2가 설치 되어 있지 않으면 여전히 op
enssl 1.0.1e 버전이 유지되오니 참고 하시기 바랍니다.

annyung-release 3.2가 설치 되기 전에, 또는 annyung-release package를 설치하기를 원치 않는 경우에는 다음 명령으로 1.0.2k 로 현시점에 바로
업데이트 할 수 있습니다.

rpm -q openssl | grep "\.an3" >& /dev/null
[ $? -eq 0 ] && yum downgrade "openssl*"

김정균

오늘 7.4 CR(Continuous Release) 버전이 release 되었네요. 조만간 7.4 가 출시될 것 같습니다. :-)

Posted
Filed under Tech/프로그래밍
0.70 release  소식 입니다.

iPuTTY 업데이트 사항:
  • fixed #27 wrong translattion
  • fixed #28 Fixedsys 폰트의 사용 on windows 10
  • fixed #30 add Hanterm key map
  • pscp의 기본 문자셋을 cp949에서 utf-8로 변경 (1e68e28)
PuTTY 업데이트 사항:
  • Security fix: the Windows PuTTY binaries should no longer be vulnerable to hijacking by specially named DLLs in the same directory, even a name we missed when we thought we'd fixed this in 0.69. See vuln-indirect-dll-hijack-3.
  • Windows PuTTY should be able to print again, after our DLL hijacking defences broke that functionality.
  • Windows PuTTY should be able to accept keyboard input outside the current code page, after our DLL hijacking defences broke that too.

릴리즈 패키지는 https://github.com/iPuTTY/iPuTTY/releases/tag/l0.70i 에서 제공 합니다.
2017/07/25 00:12 2017/07/25 00:12
Posted
Filed under Tech/Tip & Trick
Windows 10 사용중에 마우스만 움직이고 다른 기능은 다 멈추는 문제가 종종 발생했는데 찾아보니 "DynamicTick" 기술의 충돌 때문이라고 하네요. 자세한 건 하단의 "출처" 참고 하시고, 관리자 권한으로 cmd 실행해서

bcdedit /set disabledynamictick yes

실행한 후, rebooting 하시면 된다고 합니다.

출처: http://foxcg.com/246
2017/07/19 14:36 2017/07/19 14:36
Posted
Filed under Tech/프로그래밍
LePuTTY의 ZMODEM 기능을 iPuTTY에 포팅을 했습니다.

일단, 동작은 잘 하는 것 같네요. 좀 더 사용해 보고 문제가 없으면 0.69.1 로 릴리즈 할 예정 입니다. 그전에 PuTTY 0.70이 나오면 0.70으로 릴리즈 될 것이고요 :-)

https://github.com/iPuTTY/iPuTTY/pull/25

참고 하세요.
2017/06/12 03:40 2017/06/12 03:40
Posted
Filed under Tech/프로그래밍
어쩌다 보니 iPuTTY maintaing을 하게 되었습니다. 기존 관리자였던 김준기님이 작년에 project를 더이상 하지 않겠다고 project site에 공지를 올렸고, 비공식적으로 PuTTY 업데이트를 반영해서 사용하다가 그냥 제가 맡아서 하기로 하였습니다.

어쩌다 보니, 뒷처리 담당자로서 우뚝선 느낌입니다. :-)

어쨌든 4/29에 릴리즈된 PuTTY 0.69의 대응 버전을 릴리즈 했으며, 추가적으로 기능을 좀 더 강화 했습니다. 솔직히 GUI programing이 처음이고 PuTTY 코드를 제대로 본 것도 아니라서 잘 유지할 수 있을지 모르겠지만, 나서는 사람이 없어 일단 제가 총대를 매게 되었습니다. (아쉬운 사람이 해야 하는 관계로 T.T)

project 사이트는 bitbucket에서 GitHub로 이전을 했으며, https://github.com/iPuTTY/iPuTTY/wiki 를 이용하면 되겠습니다.

0.69 에서 제공하는 기능은 다음과 같습니다.

  • 한글 UI 제공
    • 다시 한글 UI를 제공 하며, pagent, puttygen, pscp, psftp 등 모든 프로그램에서 한글 UI를 제공 합니다.
  • 이제 64bit binary를 제공 합니다.
  • psftp 와 pscp 에서 UTF-8을 사용할 수 있습니다.
  • 한글 입력 모드에서 Esc를 누르면 자동으로 영문 입력 모드로 변경이 됩니다.
  • 서버 호스트키 체크 여부 옵션이 추가 되었습니다.
  • Cygterm backend 가 추가 되었습니다.
  • psftp 에서 ls 명령으로 개별 file 목록을 볼 수 없는 버그를 수정했습니다.

자세한 사항은 https://github.com/iPuTTY/iPuTTY/wiki 를 참고 하세요.
2017/05/17 01:34 2017/05/17 01:34
Posted
Filed under Tech/Tip & Trick
방금전, openvpn-gui 의 한글 번역이 review 를 통과 했습니다. 대충 번역만 해서 pull request를 날렸더니 까다롭게 하나하나 짚어 내는 군요.

그래서 좀 신경써서 테스트도 해 보고 해서 다시 제출을 하니 방금 approve가 되었습니다.

아마 다음 버전 릴리즈시에는 openvpn-gui 에서 한글을 보실 수 있을 겁니다. (단, 번역 품질은 ㅎㅎ)

https://github.com/OpenVPN/openvpn-gui/pull/155

사용자 삽입 이미지
사용자 삽입 이미지
2017/04/26 00:30 2017/04/26 00:30