Database Support Blog

  • Oracle Cloud
2021.01.07

オンプレミスと同じ構成をOracle Cloudで実現する(プロキシサーバ編)


クラウドサービスを利用する一つの理由として、「構築や運用を簡単に実施する」というものがあります。

これは、クラウドであらかじめ用意されているサービス(ゲートウェイサービス,ファイアウォールサービス等)を使うことにより実現が可能ですが、これらのサービスを利用するとこれまでオンプレミスのルータや専用サーバの機能を利用した運用ができなくなることがあります。

クラウド化により運用を変えるというのも一つの手段ですが、クラウド環境でもこれまでと同様の仕組みを利用することで、運用方法や社内ノウハウを活かすことが可能です。

今回はあるお客様からの相談(プロキシサーバの利用)を例として、「Oracle Cloudでもオンプレミスと同じ構成が実現できる」という例をご紹介します。

Oracle Cloudでもプロキシサーバを使いたい

お客様の要件と質問は以下です。

  • 現在オンプレミスの構成として、インターネットへの出口としてプロキシサーバ(squid)を利用している
  • 主な利用用途
  • Web閲覧において、内部ネットワークからのアクセス先を制限(接続先IPや利用者ごとの制限)
  • アクセス監視の実施(アクセスログ)
  • 外部認証プログラムとの連携
  • Oracle CloudではInternet GatewayやNAT Gatewayといったクラウドサービスを通じてインターネットへ通信を行うと認識しているが、同一の機能は提供されているのか

要件はOracle Cloudの基本機能では提供されていない内容であったり、お客様は既にプロキシサーバの運用ノウハウを持っていることもあり、それらを生かすにはOracle Cloudでもプロキシサーバを利用することがベストであると考えました。

そのため、事前検証としてOracle Cloudでのsquidを用いたプロキシサーバの利用可否を検証しました。

Step1.Oracle Cloud環境の構築

まずはパブリックサブネットとプライベートサブネット等のネットワークリソースと、それぞれのサブネットにインスタンスを構築します。

システム構成としては、パブリックサブネットに構築するインスタンスがプロキシサーバとなり、プライベートサブネットからインターネットへの通信については、全てこのプロキシサーバを通る構成です。
そのため、NAT Gatewayは構築せずプライベートサブネットに関連付けるルーティングルールとして、ターゲットをプロキシサーバ(プライベートIP)とし、宛先を0.0.0.0/0とする設定を行います。

なお、ルーティングルールでプライベートIPをターゲットに設定する場合、該当のIPが割り当てられているVNICで「ソース/宛先チェックのスキップ」を有効とする必要がありますのでご注意ください。

この場合、パブリックサブネットに構築したインスタンスからプライベートサブネットに構築したインスタンスへの接続は可能です。
しかしながら、プライベートサブネット内のインスタンスからはインターネットに接続することはできません(wgetで確認)。

 
 
 ■squid-srvからsquid-cli へ接続
  
 [opc@squid-srv ~]$ ssh -i id_rsa opc@10.0.1.2
 The authenticity of host '10.0.1.2 (10.0.1.2)' can't be established.
 ECDSA key fingerprint is SHA256:4rLq2JdhIANEqyizIkZ8b80G9uBHOK8vchZaqAxIgTQ.
 ECDSA key fingerprint is MD5:27:59:26:98:4b:06:90:d0:75:e4:30:a7:55:f3:f6:bc.
 Are you sure you want to continue connecting (yes/no)? yes
 Warning: Permanently added '10.0.1.2' (ECDSA) to the list of known hosts.
 
  
 ■squid-cli からインターネットへの疎通を実施(失敗)
 
 [opc@squid-cli ~]$ wget https://www.ashisuto.co.jp/
 --2020-06-15 09:15:27--  https://www.ashisuto.co.jp/
 Resolving www.ashisuto.co.jp (www.ashisuto.co.jp)... 202.32.38.200
 Connecting to www.ashisuto.co.jp (www.ashisuto.co.jp)|202.32.38.200|:443...
  
 → 接続ができず応答待ちとなる
 

そのため、インターネットへの接続を実施するためのプロキシサーバを構築します。

Step2.プロキシサーバの構築

プロキシサーバにyumコマンドを用いてsquidをインストールします。

 
 
 [opc@squid-srv ~]$ sudo yum install squid -y
 
 (略)
  
 Installed:
   squid.x86_64 7:3.5.20-15.el7_8.1
  
 Dependency Installed:
   libecap.x86_64 0:1.0.0-1.el7                     libtool-ltdl.x86_64 0:2.4.2-22.el7_3
   perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7     perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
   perl-DBI.x86_64 0:1.627-4.el7                    perl-Data-Dumper.x86_64 0:2.145-3.el7
   perl-Digest.noarch 0:1.17-245.el7                perl-Digest-MD5.x86_64 0:2.52-3.el7
   perl-IO-Compress.noarch 0:2.061-2.el7            perl-Net-Daemon.noarch 0:0.48-5.el7
   perl-PlRPC.noarch 0:0.2020-14.el7                squid-migration-script.x86_64 7:3.5.20-15.el7_8.1
 
 Complete!
 
 

続いて、squidの設定を編集します(VCN内のCIDRからの通信を許可)

 
 
 [opc@squid-srv ~]$ sudo vi /etc/squid/squid.conf
 
 ■以下の内容を追記
 
 #Allow VCN
 acl our_network src 10.0.0.0/16    ★VCNのCIDRを記載
 
 # Allow Network ACL Allow/Deny Section#
 http_access allow our_network
 
 

最後に、squidの実行とOS上でのfirewall設定を行います。

 
 
 ■squidの起動
 
 [opc@squid-srv ~]$ sudo systemctl start squid
 [opc@squid-srv ~]$ sudo systemctl status squid
 ● squid.service - Squid caching proxy
    Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled)
    Active: active (running) since Mon 2020-06-15 08:01:26 GMT; 5s ago
   Process: 9321 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
   Process: 9315 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
  Main PID: 9323 (squid)
    CGroup: /system.slice/squid.service
            tq9323 /usr/sbin/squid -f /etc/squid/squid.conf
            tq9325 (squid-1) -f /etc/squid/squid.conf
            mq9326 (logfile-daemon) /var/log/squid/access.log
  
 Jun 15 08:01:26 squid-srv systemd[1]: Starting Squid caching proxy...
 Jun 15 08:01:26 squid-srv squid[9323]: Squid Parent: will start 1 kids
 Jun 15 08:01:26 squid-srv squid[9323]: Squid Parent: (squid-1) process 9325 started
 Jun 15 08:01:26 squid-srv systemd[1]: Started Squid caching proxy.
  
 
 ■firewallルールの編集
 
 [opc@squid-srv ~]$ sudo firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=10.0.0.2
 success
 [opc@squid-srv ~]$ sudo firewall-cmd --permanent --zone=public --add-port=3128/tcp
 success
 [opc@squid-srv ~]$ sudo firewall-cmd --permanent --add-masquerade
 success
 [opc@squid-srv ~]$ sudo firewall-cmd --complete-reload
 success
 
 

以上でプロキシサーバの設定は完了です。続いて、クライアントサーバの設定を実施します。

Step3.クライアントの設定と動作確認

クライアントサーバの/etc/profileにプロキシサーバに関する設定を記載します。
先程wgetコマンドを実行した際に443ポートが利用されていたため、今回はHTTPSを用いた通信のみを許可します。

 
 
 [opc@squid-cli ~]$ sudo vi /etc/profile
 
 ■以下の内容を追記
  
 MY_PROXY_SRV="http://10.0.0.2:3128/"
 HTTPS_PROXY=$MY_PROXY_SRV
 https_proxy=$MY_PROXY_SRV
 export  HTTPS_PROXY https_proxy
 
 
 ■設定の反映
 
 [opc@squid-cli ~]$ source /etc/profile
 
 
 
 

以上でプロキシサーバ側、クライアント側共に設定が完了です。先程実行したときには失敗したwgetコマンドを再度実行してみます。

 
 
 ■squid-cli からインターネットへの疎通を実施
 
 [opc@squid-cli ~]$ wget https://www.ashisuto.co.jp/
 --2020-06-15 09:17:36--  https://www.ashisuto.co.jp/
 Connecting to 10.0.0.2:3128... connected.
 Proxy request sent, awaiting response... 200 OK
 Length: 34848 (34K) [text/html]
 Saving to: ‘index.html’
  
 100%[===============================================================>] 34,848      --.-K/s   in 0.007s
  
 2020-06-15 09:17:36 (4.50 MB/s) - ‘index.html’ saved [34848/34848]
 
 
 

プロキシサーバを経由した接続が行われ、wgetコマンドが成功したことが無事に確認できました。
また、プロキシサーバのsquidログ(/var/log/squid/access.log)を見ることで、通信のログを確認できます。

 
 
 [root@squid-srv squid]# cat  /var/log/squid/access.log
 1592212656.092     35 10.0.1.2 TCP_TUNNEL/200 39164 CONNECT www.ashisuto.co.jp:443 - HIER_DIRECT/202.32.38.200 -
 
 

まとめ

今回はOracle Cloudにsquidを用いたプロキシサーバを構築し、正常に利用できることを確認しました。
ネットワークの設定周りのノウハウが必要になりますが、このようにオンプレミスなどで培ってきた運用を生かした構成をOracle Cloudで採用することが可能です。

一方で、上記した構成の場合プロキシサーバが単一障害点となってしまいますので、冗長化や監視機能の利用が必須となります。

※Oracle Cloudで用意されているゲートウェイサービスを利用する場合、冗長化等はOracle Cloud側で実施されていますので、考慮する必要がありません。
このように、クラウドサービスを利用する場合とオンプレミスの仕組みを生かす場合の両方にメリット/デメリットがあります。そのため、クラウド化を成功に導くためにも「正しくシステム要件を洗い出しを実施した上で、どの仕組みを採用するのか」をご検討下さい。


執筆者情報

はらだ たくろう プロフィール画像

2015年にアシストに入社後、Oracle DatabaseやOracle Cloudを中心としたフィールド技術を担当。
導入支援だけではなく、最新機能の技術検証も積極的に実施。社内外のイベントにて発表も行っている。


■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
 文中の社名、商品名等は各社の商標または登録商標である場合があります。


Oracle Databaseライセンスのご相談ならアシスト

関連している記事

  • Oracle Database
  • Oracle Cloud
  • PostgreSQL
  • AWS
  • Exadata
2022.05.24

入社2年目がレポート!Cloud Database Days 2022技術セッションの見どころ

2022年5月26日~6月3日に開催される「Cloud Database Days 2022」。その中でも10個に分かれた技術セッションについて、ポイントを押さえてそれぞれご紹介いたします!

  • Oracle Cloud
2022.04.14

【Oracle Cloud】opcユーザー以外のssh接続を許可する方法

Oracle Cloud上にComputeインスタンスやDBシステムを構築すると、システム管理者ユーザーであるopcユーザーが作成されますが、お客様の中にはopcユーザー以外からSSH接続を必要とするケースもあるかと思います。今回は、opcユーザー以外のユーザーからSSH接続を行う方法をご紹介します。

  • Oracle Cloud
2022.03.10

【Oracle Cloud】Cloud Shellで簡単にComputeへシリアルコンソール接続する方法!

Oracle Cloudで構築したComputeインスタンスは、ハードウェア等インフラ周りはオラクル社が管理しますが、OSやアプリケーションはお客様が管理する必要があります。今回は、事前準備不要で簡単に操作可能なCloud Shellによるコンソール接続をご紹介します。

ページの先頭へ戻る