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