2017年9月14日

ブロードバンドタワーでScality RINGの構築を担当しています村上です。

今回はScality RING (以降 RING) をCentOS7で構築していた時に気付いた事をご紹介いたします。

以前にポールさんが紹介している通り、RINGはScality 社が開発・提供しているストレージのソフトウェアになります。

使用するOSは多くの場合にはCentOS(もしくはRHEL)で構築します。
CentOS で実行される代表的なファイアウォール製品としてiptables があります。
iptables はカーネルで制御され、netfilter がその役割を担います。

RINGは6台のx86 サーバでNode が構成され、Node 間では常にデータの整合性を管理しています。
上記よりパケットドロップによるデータの不整合を防ぐために、iptables を無効にする必要があります。

なお、専門的なスキルが必要になりますが、Linux カーネルにおけるnetfilter のconntrack_max や
hashsize の設定値を最適化できるようであれば、iptables の無効化は必須ではありません。

iptablesの無効化方法についてご説明いたします。
ご存じかと思いますが、CentOS7からはファイアウォールサービスはFirewalldになります。

ステータス確認

[root@localhost ~]# systemctl status firewalld
 ● firewalld.service - firewalld - dynamic firewall daemon
 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) 
 Active: active (running) since Mon 2017-08-28 19:17:12 JST; 1 weeks 1 days ago

firewalld停止

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
 Active: inactive (dead) since The 2017-08-29 11:10:06 JST; 13s ago

firewalld自動起動無効化

[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

iptablesのルール設定の確認

[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

サーバを再起動してもfirewalldが起動しないことを確認

[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
 Active: inactive (dead)

念のため、iptablesも確認するが無効化できていない

[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootpc

 

■ iptables が無効化できない原因

KVM 関連でiptables を利用するlibvirt パッケージがインストールされてしまっていたためでした。
CentOS インストール時にソフトウェア選択をする際、ベース環境のデフォルトの「最小限のインストール」以外を選択すると、libvirt パッケージが含まれるものがあるようで、意図せずにlibvirt パッケージがインストールされてしまう項目は以下となります。

選択項目 libvirtパッケージ有無
最小限のインストール ×
Compute Node ×
インフラストラクチャサーバー ×
ファイルとプリントサーバー ×
ベーシックWebサーバー ×
仮想化ホスト
サーバー(GUI使用)
GNOME Desktop
KDE Plasma Workspaces ×
開発およびクリエイティブワークステーション

また、以下の図からもわかるようにfirewalldを停止したとしてもiptablesを利用するサービスがあればルールは設定されている状態となります。

ちなみにlibvirtパッケージがインストールされていたとしてもlibvirtdサービスを停止すれば、iptablesのルールは設定されません。ファイアウォールサービスを停止させることは滅多に無いと思いますが、停止前にlibvirtパッケージの有無を確認してみてください。
何かありましたらまたご紹介いたします!

本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
品質保証を目的としたものではございません。

投稿者: 村上 優

主にストレージ、ネットワーク関連の構築を担当しています。