::: 3P1C's Undertech :::

ZNC 인스톨 튜토리얼 1부 : 다운로드 및 설치

iRC/ZNC



 BNC가 무엇인가?


ZNC에 들어가기 전에 먼저 BNC에 대해 먼저 알아보고 가자. BNC (short for bouncer)는 클라이언트와 서버 사이에 중간 다리 역활을 수행하여 실제 트래픽을 숨기기 위해 사용하는 일종의 프록시와 같은 개념의 소프트웨어이다. IRC뿐만 아니라 FTP에서도 많이 사용하고 있다.


일반적으로 사용자 클라이언트와 IRC 서버와 직접 통신을 주고 받으나 ZNC가 중간자로 개입 하여 역활을 수행하게 되는데 ,사용자는 ZNC서버로 접속하고 제어 해서 IRC 서버와 통신을 수행 하게된다. 이를 통해 사용자는 직접 연결 하지 않고도 IRC 서버와 통신 할 수 있으므로 뛰어난 익명성을 보장 한다.


사용자가 ZNC와 연결을 종료하여도 BNC는 IRC 서버와 항상 연결 되어 있기 때문에(BNC 서버가 계속 돌아가는한) 24시간 채널에 상주 할 수도 있다.


FTP에서 사용하는 BN도 이와 원리는 같다. 마치 첩보 영화의 한 장면처럼 해커가 시스템을 해킹 하기 위해 여러 나라나 서버을  거치게 해서 자신의 추적을 피하기 위한 수법과도 유사하다.


BNC 작동 원리


실제로 IRC의 BNC을 사용하는 근본적인 이유는 인터넷에서 개인 프라이버시의 중요성이 크게 부각 되어 있기 때문이다. ISP 업체에서 고객들의 패킷을 감청하는 행위는 공공연한 사실이고 언론 통제가 극히 심한 일부 국가에서는 자국민의 모든 네트워크을 감청하거나 식별을 하고 제재한다.

 

이러한 사실과 근거을 이유로 개인이 직접 서버를 호스팅해서 BNC 서버을 설치해서 사용하거나  BNC을 서비스를 무료로 제공하는 비상업적인 단체가 있는가 하면, 유료로 제공하는 업체를 찾아서 직접 돈을 지불하고 사용하기도 한다. (나도 직접 차려서 해볼까?)


필자도 직접 서버 호스팅을 해서 BNC을 설치해서 사용하다가, 현재는 지인을 통해서 BNC을 사용하고 있다. 윈도우 사용자에게는 아쉽지만 BNC 는 리눅스 기반의 소프트웨어이며 설치부터 사용하기 까지 어렵지 않으니 리눅스 초보자라도 쉽게 따라 할 수 있으니 직접 해보길 바란다. 


BNC 소프트웨어는 종류가 여러 있지만 그 중 가장 많이 사용하는 대표적인 두 가지로 psyBNC와 ZNC가 있다. 하지만 psyBNC의 경우는 더 이상 업데이트가 되지 않고 있기 때문에 많이 사용하지 않는다. 현재 가장 많이 사용하는 ZNC는 최근에도 새 기능이 추가 되거나 지소적으로 관리 개선되고 있으므로 본 튜토리얼은 이 ZNC을 대상으로 진행을 하려고 한다.


시작 하기전에 ZNC의 공식 홈페이지를 방문 해보길 권한다. http://wiki.znc.in/ZNC  (미디어위키 기반)



 설치 방법


리눅스 배포판이 많지만 가장 보편적인 우분투의 서버 버전(Ubuntu 14.04)으로 진행한다.


[root@3p1c] # sudo apt-get install python-software-properties software-properties-common


 PPA (Personal Package Archive)을 사용해서 설치를 해보겠다. 이 PPA을 사용하면 최신 버전의 패키지를 정말 편리하게 설치를 할 수가 있다.


필자는 가끔 어떤 패키지를 설치 하고자 했는데, 최신화가 되어 있지 않거나 찾고자 하는 패키지가 없는 일이 자주 있다보니 여간 짜증나고 불편한 일이 아닐 수 없다. (지금 우분투 저장소로 ZNC을 설치 하면 1.4 버전대의 패키지가 설치 될 것이다)


그 이유는 우분투 저장소에 있는 패키지가 최신화 되기 위해서는 최소 6개월간의 시간이 필요하다. 그러기에는 소프트웨어에서는 상당히 오랜 시간 소요 되기 마련이다. 직접 공식 사이트를 방문 하여 wget을 통해 패키지를 수동으로 내려 받는 방법이 있지만 사용자의 니즈를 반영해서 PPA라는 별도의 저장소가 나온 것이다. 


※ 이 튜토리얼을 작성 하는 시점에서 데비안 환경에서 절대로 PPA을 사용하여 설치를 해서는 안된다고 경고를 하고 있다. 시스템에 심각한 문제가 생길 수 있다고 하니, 데비안 저장소를 이용하거나 수동으로 패키지를 내려 받아 설치를 권장하는 바이다.



[root@3p1c] # sudo add-apt-repository ppa:teward/znc

[root@3p1c] # sudo apt-get update


PPA의 ZNC 저장소 소스를 추가하고 APT 정보를 최신화 하자.


[root@3p1c] # sudo apt-get install znc znc-dbg znc-dev znc-perl znc-python znc-tcl


 ZNC 패키지를 설치 하자.


[root@3p1c] # znc --makeconf


첫 설치시에는 반드시 conf 파일을 생성해주어야 한다.


What port would you like ZNC to listen on? (1025 to 65535): <포트 번호 입력>


Would you like ZNC to listen using SSL? (yes/no) [no]: YES


Would you like to create a new pem file now? (yes/no) [yes]: YES


Would you like ZNC to listen using ipv6? (yes/no) [yes]: YES


Load global module <partyline>? (yes/no) [no]: YES


Load global module <webadmin>? (yes/no) [no]: YES


Now we need to set up a user...

ZNC needs one user per IRC networks.


Username : 닉네임 입력

Enter Password: 비밀번호 입력

Confirm Password: 비밀번호 재확인

Would you like to this user to be an admin? (yes/no) [yes]:  이 사용자 계정을 관리자로 등록 할 것인가?

Nick [3P1C] : 닉네임 입력

Alt Nick [3P1C_] : 서브 닉네임 입력

Ident [3P1C] : 식별자 입력

Real Name [Got ZNC?] : 이름 입력

Bind Name [optional] : 선택 옵션

Number of lines to buffer per channel [50] : 버퍼를 얼마나 저장할 것인가? (라인수)

Would you like to keep buffer after replay? (yes/no) [no] : 저장된 버퍼를 채널 입장시 자동으로 출력 할 것인가?



어려운 영문도 아니다 알아들을 것이라 생각한다. 이후 다양한 모듈을 사용하겠냐고 일일히 물어보는데 모두 다 YES 눌러주자


IRC Server (host only) : irc.link-net.org

(irc.link-net.org) Port (1 to 65335) [6667] : 7000

(irc.link-net.org) Password (probably empty) : 

Does this server use SSL? (yes/no) [no] : YES


Would you like to add another server for this IRC network? (yes/no) [no] : 


접속할 IRC 서버를 설정하는 단계다.


Would you like to add a channel for ZNC to automatically join? (yes/no) [yes] : 추가한 채널을 ZNC가 자동으로 접속하게끔 설정 할 것인가?

Channel name : 접속할 채널명 설정 (e.g #3P1C)

Would you like to add another  channel? (yes/no) [no] : 또 추가할 채널이 있는가?

Would you like to set up another user? (yes/no) [no] : 또 추가할 사용자가 있는가?


접속할 채널에 대하여 설정을 하는 단계다.


Launch ZNC now? (yes/no) [yes] : YES


지금 ZNC을 실행하겠냐고 묻는다. 그리고 ZNC가 실행된다.

'iRC > ZNC' 카테고리의 다른 글

ZNC 인스톨 튜토리얼 1부 : 다운로드 및 설치  (0) 2015.10.31

더 안전하게 대화하는 방법은 없을까?

iRC/mIRC

여러분은 IRC 프로토콜이 FTP처럼 평문 전송을 한다는 것을 알고 있는가? 패킷이 전송 될때 아무런 보호 없이 뚜렷하고 여과 없이 (?) 통신이 된다는 뜻이다. 악의적인 사용자가나 제3자가 볼 수도 있다는 우려로 자연스럽게 흘러가게 된다.


하지만 현실적으로 보자면 ISP나 국가 정보기관 정도의 공권력과 기술을 가져야 실질적으로 패킷을 들여 볼 수 있다는 이야기고, 에이 설마 했던 미국의 무분별하고 광범위한 정보 수집과 감청의 대한 추측과 우려는 에드워드 스노든의 NSA 폭로로 통해 충격적인 사실과 현실이었음을 잘 보여주었다. 충공깽


물론 이에 대한 방책은 가지고 있다. 대표적인 mIRC을 필두로 대부분의 IRC 클라이언트들은 OpenSSL 라이브러리을 통해 SSL 프로토콜 연결을 지원 하고 있다. 여러분이 사용하는 서버가 이 SSL을 지원 한다면, 열중 아홉은 6697~7000 대역의 SSL 포트를 사용해 접속 할 수 있다는 사실을 알 수 있다. 


하지만, 그전에 먼저 두 가지를 확인 해야 한다. OpenSSL 라이브러리가 설치가 되어 있아 연결에 실패 할 것이고, 설치는 되어 있지만 버전이 매우 낮아 상대적으로 보안에 취약 할 수 있다.





mIRC의 https://www.mirc.com/ssl.html 페이지로 접속하면 SSL의 대한 안내를 받을 수 있다.

지금 이 글을 포스팅 하는 현 시점에서는 가장 최신 버전은 OpenSSL 버전이 1.0.2d을 알 수 있으나 mIRC는 1.0.1p이다 한 박자 늦게 올라오는 편이다. 여기서 윈도우즈로 포팅된 OpenSSL 라이브러리를 받도록 하자. 경로는 알아서 잡혀 있으니 그냥 설치만 하면 된다. 다운로드에서 설치까지 모두 30초도 안 걸린다.


https://www.openssl.org


잠시, OpenSSL 업데이트의 최근 경향을 살펴보고 가자면 보안 문제점이 가장 두드러지게 나타나고 있다. 취약해진 시스템은 DoS 공격이나 대표적으로 큰 보안 이슈가 되었하트블리드(HeartBleed)을 통해 중요한 정보가 유출 될 수 있다. 이를 해결하기 위해 부단하게 업데이트 되고 있으니 한달에 한번은 꼭 확인해서 업데이트를 받도록 하자.


이제 한번 SSL으로 접속 해보도록 하자! 필자는 Link-NET의 SSL 포트는 +7000이라는 것을 확인 했다.




간단하게 한줄 명령어로 접속을 하겠다.




처음 접속시 SSL 인증서을 볼 수 있다. 매번 이 인증서 화면을 볼 수 있으나 불편하니 

앞으로는 자동으로 수락 하기로 하고자 Automatically accept this cert certificate in future 에 체크 하자.




명령어 /whois <자신의 닉네임>을 입력 해서 다시 한번 확인 하



이제 이 보안 연결을 통해서 제3자 입장에서 악의적인 목적으로 대화를 도청하는 위협은 어느 정도 피할 수 있겠다. (단, MIMA 라 불리우는 중간자 공격에 취약 할 수 있다.) 


다만 이 글에서 정말 필자가 여러분에게 말하고 싶은 것은 SSL 연결은 OSI 7계층 참조 모델에 해당 하는 5계층 '세션 계층' 속하고 서버와 클라이언트나 사용자와 사용자간의 연결의 대하여 패킷을 보안 해주는 것이지, 어디까지나 IRC 오퍼들이나 관리자가 채널의 대화 내용을 못 본다는 이야기가 아니란 것이다.


지금 당장 채널에서 어떠한 누구와 어떤 대화를 나누고 있는지 관리자는 실시간으로 볼 수 있거나, 저장된 로그을 찾아 확인 할 수 있다. 여러분이 프라이버시를 매우 중요하게 생각한다면, 이마저도 훔쳐보기 원하지 않다면 FiSH 플러그인으로 보다 안전하게 대화를 할 수 있을지 않을까 싶다. 


FiSH는 대칭형 블록 암호의 일종인 BlowFish 알고리즘을 사용한다. 물론 요즘 나오는 AES 알고리즘에 미치지 못하겠지만, SSL 보안 연결과 함께 이용하면 충분하다고 생각이 된다. 그리고 1:1 개인 메시지는 별도로 디피-헬만 키 교환(Diffie–Hellman key exchange)을 사용한다. FiSH을 사용하기 위해서는 당연한 이야기지만 자신뿐만 아니라 상대방도 FiSH을 쓰고 있어야 하는 전제조건이 필요하다.


이번 튜토리얼에서는 지금 포스팅 하고 있는 시점에서 가장 최신 버전인 v7.43을 통해 실습을 먼저 하겠다. 

(본인처럼 v6.35 버전에 맞는 FiSH을 찾는 누군가을 위해 함께 첨부를 하겠으니 참고 하자)


현재 FiSH 프로젝트 홈페이지는 더 이상 운영되지 않고 있으나,  최근 개인 사용자가 mIRC 7.x 을 지원하는 스크립트을 꾸준히 업데이트 하고 있다. mIRC 7.x을 사용한다면 여기서 내려 받으면 되겠다.


 FiSH 스크립트 설치하기



mIRC 설치된 디렉토리를 찾아서 설치를 진행한다. 



포스팅을 위해 mIRC 7.x을 설치했다. mIRC을 설치 후 한번 이상은 실행 해줘야 한단다.



인스톨러가 알아서 mIRC 설치 경로와 OpenSSL 라이브러리를 확인한다.


 FiSH 스크립트 살펴보기





mIRC을 다시 실행하면, 위와 같이 FiSH 관련 DLL 파일을 성공적으로 불러 것을 확인 할 수 있다.

mIRC 실행 후 채널에 접속 후 오른쪽 마우스를 누르면, FiSH 옵션들이 보인다.


Show Key 

설정한 Key을 확인한다.

Set new Key (UTF-8)

UTF-8 문자셋으로 설정한 Key을 확인한다.

Remove Key 

키를 제거한다.

Set plain-prefix 

암호화된 문자열의 접두어를 변경한다.

Local IP

자신의 IP을 확인하는 기능이다.





+ Misc config

- Encrypt outgoing [On]

나가는 메시지의 암호화 하는 기능을 설정한다.

- Decrypt incoming [On]

들어오는 메시지의 해독하는 기능을 설정한다.

- Crypt-Mark (Incoming)

??? 쓸 일이 없어서 기능을 잘 모르겠다.

- Crypt-Mark (Outgoing)

??? 쓸 일이 없어서 기능을 잘 모르겠다.

- Nicktracker

닉을 추적한다.

- Encrypt NOTICE [Off]

공지의 내용을 암호화 할 것인지 설정한다.

- Encrypt ACTION [Off]

액션의 내용을 암호화 할 것인지 설정한다.

- Open blow.ini

bloiw.ini 파일을 연다. 이 파일안에는 채널이나 사용자간의 설정한 키 값이 암호화 되어 저장되어 있다.

- Encrypt TOPIC [OFF]

토픽의 내용을 암호화 할 것인지 설정한다.




 FiSH 키 추가하기


자, 이제 실습을 해보자 친구 Agent가 나에게 무언가를 말하고 있는데 먼가 복잡하게 암호화된 언어로 혼자 열심히 떠들고 있고 이메시지를 해석 할 수 없는 상태다. 이를 올바르게 해석 하기 위해서는 반드시 저 친구가 쓰는 암호키을 알아야 한다. 


보다 안전한 방법을 찾아 친구로부터 Key를 건네 받는다. 사실 이 부분도 쉽게 간과 할 수 있는 부분인데, 이것도 하나의 보안적 측면이자 구멍(Secure Hole)으로 바라볼 수 있다. 되도록 키는 자주 바꾸는 것이 좋다. 


키를 전달 받았으면, 다시 우측 마우스를 클릭해서 FiSH 메뉴을 열고 New Key을 선택해서 암호키를 설정하자. 암호키를 구성할때 영문 대소문자와 숫자를 적절히 배합 시켜서 강력한 암호키를 사용 할 수 있지만, 상대방에게 전달도 용이 해야하고 외우기 어렵기 때문에 단어와 숫자를 조합하여 8~16자 정도가 적당 하다고 생각한다. 이것도 어렵다면 한글을 영문 타자 그대로 조합하여 사용해도 생각보다 안전하다.




친구로부터 건네받은16자리 암호키를 등록한다.




이제 이 친구가 무슨 말을 하는지 알아 들을 수 있게 되었다.



1:1대화도 디피 헬만 키 교환 알고리즘을 통해 안전하게 대화를 할 수 있었다.


따라해보면 그렇게 어렵지 않다. 실습에서는 친구와 1:1 상황이었지만 다수의 사람들과 대화 할때도 전혀 무리가 없다. 

만약, 공개 채널에서 모든 사람들이 FiSH을 이용해 게임의 대해 이야기 하고 있을때 누군가 채널에 들어와서 이 광경을 보고 있으면 적지 않게 당황 할 것이다. 외계인 취급 받으면서 말이다. -_-;


FiSH는 비교적 국내 보다는 해외에서는 주로 많이 쓰이는 모습을 보였는데 정작 우리나라 채널이나 사용자들 사이에서는 잘 쓰는 사람을 보지 못한것 같다. 알고 있는 사람도 극히 소수여서 한편으로 아쉬운 마음이다. 개인적으로 필자는 FiSH 스크립트 만큼은 아얄씨 라이프에 꼭 필요한 완소 스크립트라고 항상 생각을 하고 있다.

'iRC > mIRC' 카테고리의 다른 글

더 안전하게 대화하는 방법은 없을까?  (0) 2015.10.24

HanIRC가 완전한 UTF-8을 쓰지 못하는 말 못할 이야기

iRC





mIRC 7 버전부터는 아얄씨의 문자세트가 유니코드(UTF-8)으로 강제 적용됨에 따라 기존에 HanIRC에서 사용하던 CP949 문자세트를 더 이상 사용 할 수 없게 되었다. 그래서 인지 mIRC의 개조버전으로 불리우는 ZeroIRC을 사용하는 유저들이 현재 까지도 상당히 많이 있으며 오히려 UTF-8이나 클라이언트 변경에 달갑지 않거나, 소극적인 태도를 보이고 있다. 이유가 무엇인가?


그전에 먼저 클라이언트에 대해 이야기를 해봐야 한다. HanIRC의 대부분 유저들은 모두 ZeroIRC을 사용하고 있다. 그런데 이 클라이언트는 어느 누군가가 독자적으로 개발한게 아니라 mIRC을 무단으로 개조 및 스크립트을 추가 시킨 배포판이라는 것이다. 당연히 mIRC에서 전혀 인가 받지 않았다. mIRC측에서도 이를 모를리가 있겠는가? 참다참다 두고 볼 수 없었던 mIRC측의 법적 대응을 고려 하겠다는, 강력한 반발로  ZeroIRC의 더 이상의 업데이트는 중단 되었다.



<이런 만능 리모컨이 있으면 얼마나 편리할까? 하지만...>


만능 리모컨은 양날의 검


하지만 이용자들은 아직도 고집하고 있다. 그 첫번째 이유로는 편리한 스크립트가 내장 되어 있기 때문이다. 적절한 비유로 영화 <클릭>에 나오는 만능 리모컨과 같다. 사용자가  몇번의 단계 수행 과정을 명령어 한번으로 처리를 할 수가 있는데 이 이점이 매우 크다는 것이다. 두번째로는 일종의 영속성이다. 채팅 하는데 아무런 문제가 없기 때문에 UTF-8의 전환에 대해서는 보수적인 입장이 다. UTF-8 전환을 위해서는 클라이언트를 쓰지 못하는건 물론 이거니와, 정품을 구입하거나 mIRC 7.x의 크렉판을 구해야 하니 말이다.


이러다보니 이용자들은 한 목소리로 "바꾸어야 하는 이유가 없는데? 이대로 두면 안되나?" 자연스럽게 나오게 된다. 


이것이 HanIRC가 유니코드로 완전한 전환을 하지 못하는 강력한 빗장이 되어 버렸으니...


유니코드가 대체 뭐길래 유니코드 사용을 권장 하느냐?


쉽게 말하면 전 세계의 모든 문자열을 유니코드 하나로 일관되게 표현을 할 수 있다는 것이다. 우리와 가장 가까운 이웃의 나라들도 하는 말도 다르고 쓰는 문자도 모두 다른데 전세계의 다양한 문화권의 글자를 표현하기 위한 표준의 필요성이 자연스럽게 대두 되었고, 그것이 바로 유니코드 협회에서 제정한 유니코드이다. 그리고 그 궁극적인 목적은 현존하는 문자 인코딩 방법들을 모두 유니코드로 교체하려는 것이다.


단, 일반적인 유니코드는 2바이트 표현의 제한(한글은 3바이트)이 있기 때문에, 정말 모든 문자열 표현이 가능한 것은 가변 길이 문자 인코딩 방식 중 하나를 사용하는 UTF-8을 지칭 하는 것이다.


다른 서버들은 어떻게 하고 있을까?


이와 대조적으로 2009년 4월부터 출범한 '오징어 IRC 네트워크'는 UTF-8을 전면 채택 하여 출범을 하였다. 그리고 UTF-8을 왜 쓰이는지의 대해 서술 해놓았다.



UTF-8 인코딩을 쓴다는데 무엇이고, 왜 쓰는 건가요?


UTF-8은 유니코드 문자를 표현하기 위한 방법(인코딩이라고 합니다) 중 하나입니다. 많은 다른 인코딩, 특히 EUC-KR 같이 특정한 언어와 문자를 위해 만들어진 인코딩과는 달리, UTF-8 같은 인코딩은 유니코드를 사용해서 세계의 여러 문자들을 한 인코딩만으로 표현할 수 있습니다. 비단 UTF-8이 아니더라도 유니코드는 이미 많은 소프트웨어에서 사용되고 있는 사실상의 대세이기도 하지요.


오징어 네트워크가 UTF-8 인코딩을 쓰는 이유는 비록 한국어만 사용하는 네트워크라 하더라도 한국어 이외의 여러 문자를 쓸 일은 꽤 있고, 이런 상황에서 불편을 끼치지 않으려는 것 때문입니다. 이를테면 HanIRC 같은 기존 네트워크에서 일본어 약자나 중국어 간체를 쓰다가 글자가 깨져서 고생하신 분들이 계실텐데, 오징어 네트워크는 유니코드를 사용하므로 이들 문자를 오롯이 표현할 수 있습니다.


오징어 네트워크가 mIRC의 비-_-협조에도 불구하고 UTF-8을 고수하는 이유는 언젠가 겪어야 할 문제이니만큼 빨리 결말을 보자는 이유가 강합니다. mIRC 사용자 여러분의 양해 부탁합니다.



HanIRC의 행보


HanIRC도 UTF-8가 필요한 이유와 그 전환의 필요성은 모르고 있는건 아니었다. 그리고 2012년 1월 18일 HanIRC UTF8 이전을 위해 이전 테스트 요청의 대해 공지를 했다.





< 2012년 당시 이전 테스트 요청 공지사항>


그런데 다시 잘 읽어보자. 기존의 운영하던 EUC-KR 문자열을 UTF-8으로 바꾼다는게 아니라 UTF-8 서버를 따로 운영하기로 한 결정이다.

테스트 서버가 결국 UTF-8 전용 서버가 된 것이다. 이와 같은 결정을 하게 된 이유는 당연히 보수적인 사용자들의 반발이었다.


ZeroIRC 클라이언트는 UTF-8 처리를 할 수 없었으니 말이다. 그렇다고 돈을 주고 살 사람들이 얼마나 된다고...


- apink.hanirc.org           :  2011년 (UTF-8)

- holywar.hanirc.org       :  2012년 (EUC-KR)

- aoa.hanirc.org             :  2014년 9월 27일 (UTF-8)


그렇게 HanIRC는 지금까지 잘 운영을 해오고 있다. 최근 2014년 9월 27일자로 새로운 UTF-8서버가 신설이 되었다. 지금은 이전과 많이 다르게 UTF-8 을 선호하거나 상위 클라이언트를 사용하는 유저들이 많아졌다.


오히려 필자는 EUC-KR만 쓰는 서버를 꺼리게 된다. HanIRC만 이용하는 유저들은 잘 느끼지 못하겠지만 현재는 당장 다른 서버 어디를 가더라도 UTF-8을 사용하지 않으면 채팅을 할 수가 없다. 그래도 꼭 HanIRC에 접속할 용무가 있다면 UTF-8 전용 서버를 사용한다.


언젠가는 UTF-8로 일원화 되어야 한다. 


지금은 모르겠으나 불과 몇년전만 해도 HanIRC는 유지 비용 부담과 인력난을 겪고 있었다. 툭 하면 서버가 죽었다 살아났다가 너무 심해서 참다 참다 필자와 지인과 협업하여 독자적으로 서버를 구동하여 지금까지도 잘 이용을 하고 있다. 이러다보니 요 몇년간 HanIRC는 접속 할 일이 없었다.


지금 이 글을 작성하고 있는 2015년 10월이다. 벌써 10월이고 곧 2016년이 멀지 않은 이 오늘 날까지 무일푼으로 수고해주신 HanIRC 운영측분들에게 박수를 보내고 싶다..


다만, HanIRC는 운영이 언제까지 될 수 있을지 모르겠다. HanIRC가 문 닫는 그날까지 UTF-8 완전화는 힘들지 않을까?


또, 100년 뒤에도 ZeroIRC는 쓰이고 있을까?  실없는 소리 같지만 정말 그럴꺼 같다...





'iRC' 카테고리의 다른 글

HanIRC가 완전한 UTF-8을 쓰지 못하는 말 못할 이야기  (0) 2015.10.23

glFTPd 인스톨 튜토리얼 2부 : PZS-NG 스크립트 적용하기

FTPd/glFTPd


https://github.com/pzs-ng/pzs-ng

http://pzs-ng.com/


PZS-NG을 다운로드 받고 압축을 푼다.


[root@3p1c] # wget https://github.com/pzs-ng/pzs-ng/archive/master.zip


[root@3p1c] # unzip master.zip


[root@3p1c] # cd pzs-ng-master


[root@3p1c] # ./configure --with-install-path=/jail/glftpd


그리고 configure 경로를 지정한다.

그러면 아래와 같이 Symlink 라이브러리 에러가 나오는데 이것은 정상이다.



You might see similar in replies, no worry, just messages:

checking hsregex.h usability... no

checking hsregex.h presence... no

checking for hsregex.h... no

checking for strlcpy... no



이제 zsconfig을 수정하여 본격적인 설정을 해야하는데, 그전에 'README.ZSCONFIG'을 열어서 꼭 읽어보도록 하도록 하자.

지면 관계상 이 부분은 숙지 했다고 가정하고 넘어가겠으며 나중에 별도로 다루어 자세히 설명하겠다.


[root@3p1c] # cd pzs-ng-master/zipscript/conf/


설정파일이 있는 zsconfig.h가 있는 경로로 이동한다.

하지만 그전에 파일명을 먼저 수정 해주어야 편집이 가능할 것이다.



[root@3p1c] # mv zsconfig.h.dist zsconfig.h


[root@3p1c] # nano zsconfig.conf


이렇게 파일명을 수정하고 nano 편집기로 열어보자.


중요한 부분만 몇가지 손 보자면...


#define short_sitename "NG"

사이트의 이니셜을 설정한다.


#define allow_file_resume TRUE

이어받기나 이어올리기의 재시작 허용 여부 옵션이다. TRUE 값을 권장


#define enable_nfo_script TRUE

NFO 스크립트 활성화 옵션이다. TRUE 값을 권장한다.


#define nfo_script "/bin/psxc-imdb.sh"

NFO 스크립트 경로를 지정한다. 기본적으로 imdb을 사용한다.


#define enable_complete_script TRUE

완료 스크립트 활성화 여부인데 TRUE 값을 권장한다.


#define complete_script "/bin/nfoextract.sh"

기본값은 nfo_copy.sh 스크립트를 사용할텐데 nfoextract.sh 스크립트로 바꾸는걸 권장한다.


최대한 README.ZSCONFIG을 참고하여 해당 기능들을 파악한 후 적절하게 모두 수정하도록 하자.


[root@3p1c] # nano /etc/glftpd.conf


calc_crc *

post_check /bin/zipscript-c *

cscript DELE post /bin/postdel

cscript RMD post /bin/datacleaner

cscript SITE[:space:]NUKE post /bin/cleanup

cscript SITE[:space:]UNNUKE post /bin/postunnuke 

cscript SITE[:space:]WIPE post /bin/cleanup


site_cmd RESCAN EXEC /bin/rescan

custom-rescan !8 *


cscript RETR post /bin/dl_speedtest


site_cmd AUDIOSORT EXEC /bin/audiosort

custom-audiosort !8 *


이제 다시한번 glftpd.conf을 열어서 다음 값을 최하단에 그대로 넣어주고 저장하면 끝이다.


[root@3p1c] # make


[root@3p1c] # make install


이제 컴파일을 하기 위해 컴파일을 진행한다.


[root@3p1c] # cd scripts/libcopy/ ; ./libcopy.sh


일부 라이브러리가 필요하기 때문에 복사를 해주어야 한다.


[root@3p1c] # chmod 666 /glftpd/ftp-data/logs/dupelog


그리고 chmod 명령어를 사용하여 dupelog의 퍼미션을 조정한다.


59 23 * * * chroot /glftpd /bin/cleanup >/dev/null 2>&1

29 4 * * * chroot /glftpd /bin/datacleaner >/dev/null 2>&1


앞서 glftpd.conf에 추가 해주었던 cleanup을 스케줄러에 추가 하기 위해 crontab을 편집하자.


[root@3p1c] # chmod -R 777 /glftp/site/*


마지막으로 site의 퍼미션을 조정해주면 끝이다.


이제 파일을 올리면서 Zip 스크립트가 잘 동작하는지 확인 한다. 만약 일부 스크립트가 동작하지 않아, 컴플리트 폴더가 생성되지 않는 문제가 발생한다면 대부분 zsconfig의 설정 문제라 봐야한다. 


특히 색션을 지정할때 대소문자 구분 하므로 필자처럼 삽질하지 말길 바란다. -_-;.

glFTPd 인스톨 튜토리얼 1부 : 설치 및 SSL 설정 하기

FTPd/glFTPd








일반적으로 리눅스 사용자들은 vsftpd을 주로 사용하기 때문에  glFTPD는 잘 쓰이지 않는다. 그러다보니 처음 glFTPD의 대한 정보를 찾을때 정보가 너무 없었다. 이리저리 검색 해보니 몇몇 관련 포스팅이 보였지만 10년전의 글이더라. (헐...)


그때 당시와 지금은 glFTPD는 설치법도 조금 달라져서 전혀 도움이 안되었다. 그래서 해외쪽으로 눈을 돌려 정보를 찾아보기로 했다. 유럽쪽에서는 쓰는 사용자들이 비교적 많기 때문에 우분투 포럼과 블로그에서 정보를 찾아 많은 도움이 되었다.


아울러, 더 나아가 대표적인 Zipscripts인 불리우는 PZS-NG도 함께 다룰 것이다.


이것이 무엇인지 알고있는 사람만 참고 하길 바란다. 일반 사용자는 Zipscripts까지 쓰지 않는다. ^^


Ubuntu Server 14.04.2 LTS (VMware) + glFTPd v2.05.2 for Linux (x64) + project-zs-ng_r2500-v1.2.0


※ 본 튜토리얼은 위와 같은 가상 환경으로 진행 했다.


glFTPD와 PZS-NG는 직접 사이트에서 내려받도록 하자.


PZS-NGhttp://www.pzs-ng.com

glFTPD  : http://www.glftpd.eu


[root@3p1c] # apt-get install xientd zip unzip openssl tcpd ftp-ssl gcc make

먼저 필요한 패키지를 모두 설치를 해버리자. 저장소는 US서버를 사용하길 바란다.



[root@3p1c] # weget http://glftpd.eu/files/glftpd-LNX-2.05.2_1.0.1e-2+deb7u15_x64.tgz


glFTPd 최신버전을 내려 받는다. http://www.glftpd.eu


[root@3p1c] # tar -zxvf glftpd-LNX-2.05.2_1.0.1e-2+deb7u15_x64.tgz


[root@3p1c] # cd glftpd-* ; ./installgl.sh


압축을 풀어주고 인스톨 스크립트를 실행한다.




             ###  #     ##### ##### ####  ####        ###    

            #   # #     #       #   #   # #   #      #   #  

            #     #     ###     #   #   # #   #         #    

            #  ## #     #       #   ####  #   #        #    

            #   # #     #       #   #     #   #       #      

             ###  ##### #       #   #     ####       #####  



                  --== WE MAKE FILES TRANSFER ==-- 



     ----------------------------------------------------------- 

                  GLFTPD INSTALLER v2.0.1 (linux) 


          Originally done by jehsom and dn. 

          Made ready for the new era by turranius and psxc.  

     ----------------------------------------------------------- 



Before we begin: If this installer fails on your system, please 

let the devs know. You find us on irc (efnet) in #glftpd. Thank you. 

Also, any bugs found in glftpd itself should be reported either to 

the board @ http://www.glftpd.com, in the irc channel, or both. 


Press <enter> to continue.  <엔터를 누른다>


엔터를 누르고 설치를 진행한다.

이 단계부터는 직접 타이핑을 해야 하니 엔터를 눌러서 넘기면 안된다.


1. TCPD SETUP: 

---------------------

Do you wish to use tcpd? If you are not sure then you should not 

use it. If you decided to change this at a later time, please 

search for tcpd in glftpd.docs for the required changes. 


Use tcpd? [Y]es o: NO


앞서 우리는 TCPD 패키지를 먼저 설치를 해주었으니 넘어 가도록 하자.



2. JAIL SETUP: 

---------------------

Do you want to run glftpd in a "Jailed" environment? In this 

environment a private directory will be created and glftpd will 

be installed inside. Regular shell users will not be able to get 

inside this private directory. The glftpd.conf is also moved 

inside for added security and a new group will be created so 

you and other users you specify can access glftpd through the shell. 


Use a jailed environment? [Y]es o: NO


Jailed는 private group 및 directory를 만들어서 glftpd를 설치할 수 있는 설치 옵션이다.

본 튜토리얼에서는 Jailed을 사용하지 않을 것이다.


3. GLFTPD BASE SETUP:

-----------------------------

Please enter the directory inside /home/ftpd to install glftpd to [/glftpd]: <엔터를 누른다>


원하는 Port를 설정한다. 본 튜토리얼에서는 1337 포트를 사용하겠다.

TIP : 높은 자릿수의 5자리 포트 사용을 권장한다.


6. PORT AND SYSTEM SETUP: 

------------------------------------

[Enter the port you would like glftpd to listen on [1337]: 1337


Xinetd (슈퍼데몬)을 사용하자.

Xinetd의 대한 자세한 설명은 여기서 확인하길 바란다.


http://lily.mmu.ac.kr/lecture/08sm/Fedora2/7jang/2.htm


Do you wish to use European weeks? European weeks starts with a Monday.

This is for glftpd's 'reset' binary (see docs for more info) [Y/N]: N


유럽의 주(Week)을 사용할 것이냐는 질문이다. 물론 N



다음 단계는 보안이다. glFTPd는 향상된 보안을 위해 SSL/TLS 연결을 지원한다.

나머지는 엔터를 눌러가며 따라오자.


Please specify location, inside /glftpd, to install the cert (ftpd-dsa.pem) [/etc]: <엔터를 누르자>


인증서을 생성하여 저장할 경로를 지정한다. 


TIP : 별도로 보관 하는 것이 안전하다.


Please specify a generic name for this certificate. This can be any name but should say something about the ftp server like the name for it perhaps (press enter for glftpd): <엔터를 누르자>


인증서 이름을 설정하는 것이다. 보통 사이트의 이니셜을 많이 사용한다. 


-> IMPORTANT !!!!

-> If you get TLS errors of any kind, read instructions in README.TLS

-> included in this package!


Press <ENTER> to continue <엔터를 누르자>


Copying /etc/resolv.conf to /glftpd/etc/resolv.conf . . . Done.

Testing entries in resolv.conf (can take time):

Testing 127.0.0.1 . . . OK.

Configuring xinetd for glftpd . . . Done.

Restarting xinetd . . . Success.


Adding crontab entry to tabulate site stats nightly . . . Done.


chmod'ing the site/ dir . . . Done.


Press <ENTER> to continue. <엔터를 누르자>



자, 여기까지 잘 따라왔다면 기본적인 설치는 모두 완료 한것이다.


이제 한번 접속을 해보자. 기본 아이디와 패스워드는 glftpd / glftpd 이다.


[root@3p1c] # ftp localhost 1337


FTP 명령어를 사용하여 로컬호스트에 1337 포트로 접속을 하자.



230-                                _____

230- ______________________________|__   |____ ________________________________

230- \     _      /   _     /  _     /   |    |    _     /  _     /    _      /

230-  \    \     /    /    /   /____/.   |    |    /    /   /____/.    /_____/

230-   \________/____/    /______    |___|____|___/    /______    |____|

230- .-=----------- /____/ ---- |____| --------- /____/ ---- |____| -------=-. 

230- `-=-------------------------------------------------------------------=-'

230-       `-----( Type 'site onel MESSAGE' to enter your message )-----'

230 User glftpd logged in.

Remote system logged in.

Using binary mode to transfer files.


성공적으로 로그인이 되었다.


접속이 되지 않는다면 설치과정에서 문제가 생긴 것이다!

잘못된 부분이 없나 다시 확인 해보자!


원할한 FTP운영을 위해서는 glFTPd에서 제공하는 다양한 명령어를 사용할줄 알아야한다.


TiP: 모든 명령어을 사용할시 접두사 'site'을 붙여야 한다.

TiP : site help 명령어를 사용하여 어떤 명령어가 있는지 확인하자.


기본 계정인 glftpd는 서버의 모든 권한을 가지고 있으나 이 계정은 보안상 우려가 있다.  

새로 관리자 계정을 생성해서 모든 권한을 위임시키자.


새 계정을 만들기 위해 'site adduser' 명령어를 사용하자.


e.g) site adduser <계정명> <비밀번호> <식별자>@<아이피>


site adduser 3p1c PASSWORD ident@127.0.0.1


계정의 비밀번호뿐만 아니라 Ident(식별자) 아이디와 해당하는 아이피 또는 대역이 모두 일치해야만 접속이 가능하다.

해킹사고로 계정이 유출된다고 해도 IP가 일치하지 않으면 절대 접속할 수가 없다. 


glFTPd는 레이쇼 시스템이 존재한다.

토렌트상에서 말하는 그 레이쇼 개념과 같다.

우리는 관리자 계정을 사용할 것이므로, 당연히 레이쇼 제한을 두지 않기 위해 조정할 필요가 있다.


site change 3p1c ratio 0



여기에 모든 권한을 가지고 있어야 하니 FLAG를 줘야한다.



1 = Site operator (siteop)

2 = Group admin (gadmin)

3 = Regular user

4 = Exempt from the “total user online” setting

5 = Can see the login text in color (if the client supports it, the login script has to be in colors too)

6 = Deleted user

7 = Can edit user accounts

8 = Anonymous user (anonymous@guest)

A = Can nuke

B = Can unnuke

C = Can undupe

D = Can kick other users

E = Can kill other user pids

F = Can take credits from users

G = Can give credits to users

H = Can do the “SITE USERS” command to see which users that are on site

I = Exempted from the “idle” setting

J-Z = Custom flags



site change 3p1c flags +1ABCDEFGH


이제 glFTPd과 동등한 권한을 가진 계정이 생성되었다.

환경설정을 하기 위해 'bye'나 'exit'명령어를 사용하여 접속을 종료하자.


[root@3p1c] # nano /etc/glftpd.conf


NANO 편집기을 사용하여 glftpd.conf을 열어보자.


sitename_long MY[:space:]SITE[:space:]NAME -> ANGEL[:space:]OF[:space:]DRUG

sitename_short MSN -> AOD


다음 문단을 찾아 사이트 이름과 약칭을 수정해보자.


# TLS enforcements.

userrejectsecure !*

userrejectinsecure !* ------> *

denydiruncrypted !* ------> *

denydatauncrypted !* ------> *


사이트의 보안 향상을 위해 모든 유저의 보안 연결을 강제할 필요가 있다.

모든 수정을 마쳤다면, F3을 눌러 모든 변경사항을 저장하고 F2을 눌러 편집기를 종료한다.


[root@3p1c] # ftp-ssl localhost 1337


ftp-ssl을 사용하여 보안 접속을 시도한다.



234 AUTH SSL succesful

[SSL Chipher ECDHE-ECDSA-AES256-GCM-SHA384]


256bit으로 암호화 하여 보안 연결을 하였음을 볼 수 있다.

이와 마찬가지로 윈도우에서 FTP 클라이언트을 이용하여 보안 연결을 해보면 알 수 있다.


234 AUTH TLS successful

TLSv1.2 의 협상을 성공...

TLSv1.2은(는) ECDHE-ECDSA-AES256-GCM-SHA384 (256 비트) 암호화를 사용하여 세션을 암호화함.


위는 FlashFXP을 클라이언트을 사용하여 접속했을때 모습이다.


이상 여기까지 glFTPd 기본적인 설치를 마무리 하였다. 이제부터 FLAG을 자신의 입맛에 따라 조금씩 바꿔보면 되겠다. Zipscripts는 2부에서 다루기로 하겠다.