ShadowsocksとApacheを共存させる

owner203の世界ではShadowsocksとApacheが導入されています。しかもいろんな原因で、ShadowsocksはTLS通信のデフォルトポート443番ポートを使っています。これはApacheとぶつかって、ApacheのTLS通信が使えなくなります。ブラウザからの接続はHTTPしか使えなくて、これはセキュリティ上よくないものです。ではどうすればいいでしょう?

実はshadowsocks-libevはパケット転送機能もついています。Shadowsocksではない通信が来た場合、それを指定したポートに転送することはできます。Shadowsocksの設定はこちらです。

/etc/shadowsocks-libev/config.json

{
"server":"0.0.0.0",
"server_port":443,
"local_port":1080,
"password":"mypassword",
"timeout":60,
"method":"chacha20-ietf-poly1305",
"fast_open":true,
"plugin":"obfs-server",
"plugin_opts":"obfs=tls;failover=127.0.0.1:8443;fast-open"
}

設定ファイルでplugin_optsにfailover=127.0.0.1:8443というオプションを追記すれば、443番ポートにShadowsocksではない通信が来たら、自動的にローカルの8443番ポートに転送されます。

次に、Apacheのデフォルトポートを変更します。

vi /etc/apache2/ports.conf
/etc/apache2/ports.conf

Listen 80
<IfModule ssl_module>
       --Listen 443
++Listen 8443
</IfModule>

<IfModule mod_gnutls.c>
        --Listen 443
++Listen 8443
</IfModule>
vi /etc/apache2/sites-enabled/000-default-le-ssl.conf
/etc/apache2/sites-enabled/000-default-le-ssl.conf

<IfModule mod_ssl.c>
--<VirtualHost *:443>
++<VirtualHost *:8443>
#後略...

これで、ApacheがでShadowsocksから転送された8443番ポートを使うようになります。