sslh (ssl/ssh multiplexer)

SSLH는 ssl/ssh 멀티플렉스를 지원하는 소프트웨어이다.
개념은 단일한 443 포트(또는 임의의 한 포트)를 통해 다수의 서비스에 접속하는 것이다. 즉, ssh도 443포트로, https도 443포트로 또는 원하는 임의의 ssl 서비스를 443포트로 동시에 접속이 가능하다(그럼에도 불구하고, 이 글을 쓰는 현재 시점에서 구현된 서비스는 HTTP, SSL, SSH, OpenVPN, tinc, XMPP 정도이다). 이는 방화벽뒤의 서버에 접속할때 유용해 보인다. 443포트는 주로 https를 서비스하기때문에 방화벽에서 보통은 차단하지 않기 때문이다.

sslh_concept

시험환경
OS: CentOS 6, 64bit
IP Address: 192.168.100.21
서비스: ssh(22 port), https(8443 port)

1. 설치
rpmforge repository가 현 시점에서 사용 불가능하므로, epel repository를 추가한다. 이미 추가되어 있다면 아래과정은 필요없다.

# yum repolist
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: ftp.daumkakao.com
 * extras: ftp.daumkakao.com
 * updates: ftp.daumkakao.com
repo id                        repo name                                  status
base                           CentOS-6 - Base                            6,696
extras                         CentOS-6 - Extras                             62
updates                        CentOS-6 - Updates                           670
repolist: 7,428

# yum repolist
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: ftp.daumkakao.com
 * epel: mirror.premi.st
 * extras: ftp.daumkakao.com
 * updates: ftp.daumkakao.com
repo id          repo name                                                status
base             CentOS-6 - Base                                           6,696
epel             Extra Packages for Enterprise Linux 6 - x86_64           12,126
extras           CentOS-6 - Extras                                            62
updates          CentOS-6 - Updates                                          670
repolist: 19,554


# yum install epel-release

repository를 설치한 후에, sslh 패키지를 설치한다.

# yum install sslh

2. 설정 및 실행
/etc/sslh.cfg 화일을 수정하고, service sslh start하였으나 아래와같은 오류발생함. 해결 안됨. 혹시 아시는 분은 댓글좀 부탁합니다.

# cat /etc/sslh.cfg
verbose: false;
foreground: false;
inetd: false;
numeric: false;
transparent: false;
timeout: 2;
user: "sslh";
pidfile: "/var/run/sslh/sslh.pid";


# Change hostname with your external address name.
listen:
(
    { host: "192.168.100.21"; port: "443"; }
);

protocols:
(
     { name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; },
     { name: "ssl"; host: "localhost"; port: "8443"; log_level: 0; }
);
# service sslh start
Starting sslh: /bin/bash: line 1: 20423 Segmentation fault      /usr/sbin/sslh -F/etc/sslh.cfg
                                                           [FAILED]

커맨드라인에서 아래와 같이 실행하면 문제없이 잘 된다.

# sslh --user sslh -p 192.168.100.21:443 --ssl localhost:8443 --ssh localhost:22

3. 시험
iptables로 443 포트만 허용하도록 한다. 아래와 같이 설정하고, iptables를 재실행 한다.

# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Jun  1 13:32:56 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 5634 -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Wed Jun  1 13:32:56 2016

# service iptables restart

이제, 22번포트와 443포트로 ssh 접속을 해 본다. 동시에, 443포트로 https 접속을 해 본다.
결과는? ….. 아래와 같이 잘 된다!

ssh_test

https_test

답글 남기기

Your email address will not be published.