プロキシ配下の CentOS に yum でSquidをインストールしようとした時に yum.conf にプロキシを書く必要があった件

プロキシ経由でないとインターネットに接続できない環境で yum を使って Squidをインストールしたのでここに記録しておきます。

サイトによっては、環境変数にプロキシを設定しておけばOKと書かれているものもありましたが、私が使ったCentOS 8 では /etc/yum.conf に直接記述しないとうまくいきませんでした。

環境変数でプロキシを指定した場合

以下の通りパッケージのダウンロードに失敗しました。

$ env | grep proxy
proxy=http://10.XX.XX.2:3128/
https_proxy=http://10.XX.XX.2:3128/
http_proxy=http://10.XX.XX.2:3128/
$ sudo yum install squid
・・・
エラー: パッケージのダウンロード中にエラーが発生しました:
  Cannot download Packages/perl-DBI-1.641-3.module_el8.3.0+413+9be2aeb5.x86_64.rpm: All mirrors were tried

yum.conf にプロキシを記述した場合

以下の通り /etc/yum.conf にプロキシを記載したところ、正常に Squid をインストールすることができました。

$ sudo cat /etc/yum.conf
[main]
・・・
proxy=http://10.XX.XX.2:3128/
・・・
$ sudo yum install squid
CentOS-8 - AppStream                            8.2 kB/s | 4.3 kB     00:00    
・・・」
Installed products updated.

インストール済み:
  libecap-1.0.1-2.module_el8.4.0+544+e8367ddf.x86_64                            
  perl-DBI-1.641-3.module_el8.3.0+413+9be2aeb5.x86_64                           
  perl-Digest-SHA-1:6.02-1.el8.x86_64                                           
  perl-Math-BigInt-1:1.9998.11-7.el8.noarch                                     
  perl-Math-Complex-1.59-420.el8.noarch                                         
  squid-7:4.15-1.module_el8.5.0+860+303ccf92.x86_64                             

完了しました!

補足:squid.confの場所

ちなみにCentOSにSquidをインストールした場合、設定ファイルは以下の場所にあるようです。

/etc/squid/squid.conf

Mac OSの時は /usr/local/etc/squid.conf だったので、OSによって場所が違うみたいですね。

参考サイト:

yum,wgetのproxy設定(centOS 7)(Qiita)
https://qiita.com/katsuta/items/17eee8e78543871b5f27

CentOS の firewalld にて特定の送信先のみにアウトバウンド通信を制限してみた

インターネットにアクセスする際に特定のプロキシサーバ経由でないとアクセスできないことを想定し、CentOS の firewalld にてアウトバウンド宛の通信を特定のアドレス(Proxyサーバ)のみに制限してみました。

なお、アウトバウンドの通信を制限するには、ダイレクトルールというものを利用しなければならないようです。

1.特定のIPアドレス宛のアウトバウンド通信を許可する

10.XX.XX.XX宛の通信を優先度1で許可します。この時、制御するNICのインターフェイスを “-o”オプションで指定しています。

$ sudo firewall-cmd --permanent --direct  --add-rule
ipv4 filter OUTPUT 1 -d 10.XX.XX.XX/32 -o enp0s5 -j ACCEPT

ちなみにACCEPTはすべて大文字にする必要がありそうです。
小文字にしていると、リロードするときにエラーが発生します。

2.それ以外の宛先のアウトバウンド通信をブロックする

それ以外の通信をどう表現するのか少し悩みましたが、”0.0.0.0/0″で良さそうでしたので、優先度2として下記のとおり設定しています。

$ sudo firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -d 0.0.0.0/0 -o enp0s5 -j DROP

3.設定を確認する

1.2.の設定は “/etc/firewalld/direct.xml”に書かれるので確認してみます。

$ sudo  vi /etc/firewalld/direct.xml

ちなみに直接このファイルを編集してみましたが、うまくいかなかったことがあるので、1.2.のようにコマンドで設定するのがようさそうです。

4.設定を有効化(リロード)する

3.で確認した設定を”–reload”オプションで有効化します。

$ sudo firewall-cmd --reload
success

5.有効化された設定を確認する

“–get-all-rules”で有効化されているルールを確認することが可能です。

$ sudo firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 -d 10.XX.XX.XX/32 -o enp0s5 -j ACCEPT
ipv4 filter OUTPUT 2 -d 0.0.0.0/0 -o enp0s5 -j DROP

CentOS にWiresharkをインストールしてみた

CentOS にインストールしたアプリからのパケットの流れを確認したくて、Wireshark をインストールしてみました。

インストール

インストールは非常に簡単です。以下のコマンドを実行するだけです。

$ sudo yum -y install wireshark
・・・
完了しました!

インストールが完了したら、以下のコマンドでバージョンを確認してみましょう。バージョンが確認できたら、インスール は成功していると思われます。

$ tshark -v
TShark (Wireshark) 2.6.2 (v2.6.2)

キャプチャ対象インターフェイスの確認

そしてキャプチャ対象インターフェイスの確認です。以下のコマンドを実行します。

$ sudo tshark -D
Running as user "root" and group "root". This could be dangerous.
1. enp0s5
2. lo (Loopback)
3. any
4. virbr0
5. bluetooth-monitor
6. nflog
7. nfqueue
8. usbmon0
9. usbmon1
10. usbmon2
11. usbmon3
12. usbmon4
13. virbr0-nic
14. ciscodump (Cisco remote capture)
15. sshdump (SSH remote capture)
16. udpdump (UDP Listener remote capture)

このときに、sudo を実施しないと、すべてのインターフェイスが表示されないことがありますので注意してください。

キャプチャの開始

そして以下のコマンドで指定したインターフェイスのキャプチャを開始します。

$ sudo tshark -i enp0s5
Running as user "root" and group "root". This could be dangerous.
Capturing on 'enp0s5'
    1 0.000000000 fe80::c097:faee:3e33:5960 → fe80::21c:42ff:fe00:18 DNS 100 Standard query 0xd31d A adservice.google.com
    2 0.000033477 fe80::c097:faee:3e33:5960 → fe80::21c:42ff:fe00:18 DNS 100 Standard query 0x8f21 AAAA adservice.google.com
    3 1.595906174  10.211.55.8 → 13.225.165.40 TLSv1.2 93 Application Data
・・・

sudo で実行すると dangerous と言われますが、sudo をつけないと enp0s5 をキャプチャできないのでやむなしです。