meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

【CentOS 7】ファイアウォール(Firewall)について説明します!

      2018/10/20

今日は、CentOS 7 のファイアウォール(Firewall)について説明します。

特定のアプリケーションのパケットを通過させる設定まで説明します(^o^)

ファイアウォールとは

ファイアウォールとは、サーバへのパケットの通過を制限させるためのものです。

全てのパケットをサーバへ通過させることはセキュリティ上、とてもとても危険なことです。なので、これを用いて悪意のあるパケットを通さないようにします。

因みにファイアウォールとは、英語で「防火壁」の意味です。

ファイアウォールを確認してみよう

早速、自分のサーバ(CentOS 7)のファイアウォールがどうなっているのかを確認してみましょう。

現在のファイアウォールの状態を確認するには、firewallcmd listall を使用します。

[meideru@localhost ~]$ firewall-cmd --list-all
public (default, active)
  interfaces: enp0s25
  sources:
  services: dhcpv6-client ftp http samba ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

重要なのは、2行目と5行目です。

2行目を見ると、現在のゾーンはpublicになっていることがわかります。ゾーンとは、セキュリティのレベルと思ってください。publicの他にもhomeなどがあります。これは、後で確認してみましょう。

5行目のservicesは、パケットの通過を許可するアプリケーションを意味します。つまり、上の状態だとdhcpv6-client、ftp、http、samba、sshのパケットは通過させる設定になっています。

重要なのは以上の2つです。

 

次に、他のゾーンも確認してみましょう。

全てのゾーンのファイアウォールを確認するには、firewall-cmd –list-all-zones を使用します。

[meideru@localhost ~]$ firewall-cmd --list-all-zones
block
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

dmz
  interfaces:
  sources:
  services: ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

drop
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

external
  interfaces:
  sources:
  services: ssh
  ports:
  masquerade: yes
  forward-ports:
  icmp-blocks:
  rich rules:

home
  interfaces:
  sources:
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

internal
  interfaces:
  sources:
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

public (default, active)
  interfaces: enp0s25
  sources:
  services: dhcpv6-client ftp http samba ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

trusted
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

work
  interfaces:
  sources:
  services: dhcpv6-client ipp-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

色々なゾーンがありますね・・・。

これらのゾーンは切り替えることができます。

ファイアウォールの設定を反映させる方法

まず初めにファイアウォールの設定を反映させる方法を書いておきます。

ファイアウォールを設定した後は、ファイアウォールを再読み込みするか、サーバを再起動しなければいけません。サーバは年中無休で動き続けなければならないケースが多いので、ここでは前者の再読み込みをします。

ファイアウォールを再読込するには、firewall-cmd –reload を使用します。

[meideru@localhost ~]$ sudo firewall-cmd --reload
success

特定のアプリケーションのパケットを通過させる方法

特定のアプリケーションのパケットを通過させるには、firewall-cmd –permanent –add-service=(アプリケーション名) –zone=(ゾーン名) を使用します。

–permanent を付けることによって、サーバ再起動後も継続してパケットを通過させる設定にすることができます。

 

試しに、Apacheのパケットを通過させる設定を行ってみましょう。Apacheはhttpというアプリケーション名なので、そちらを設定します。

[meideru@localhost ~]$ sudo firewall-cmd --permanent --add-service=http --zone=public
success
[meideru@localhost ~]$ sudo firewall-cmd --reload
success

publicゾーンにファイアウォールを設定しています。

特定のアプリケーションのパケットの通過を解除する方法

今度は、上の逆です。上では特定のアプリケーションのパケットの通過を許可する設定をしましたが、今度は逆に解除したいと思います。

例えば、現在のファイアウォールは以下のように設定されていたとします。

[meideru@localhost ~]$ firewall-cmd --list-all
public (default, active)
  interfaces: enp0s25
  sources:
  services: dhcpv6-client ftp http samba ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

sambaのパケットは通過できるように設定されていますが、これを外したいと思います。

 

外すには、firewall-cmd –permanent –remove-service=(サービス名)  –zone=(ゾーン名)を使用します。

[meideru@localhost ~]$ sudo firewall-cmd --permanent --remove-service=samba --zone=public
success

これで解除されました。ファイアウォールを再読み込み(firewall-cmd –reload)して確認してみましょう!

[meideru@localhost ~]$ firewall-cmd --list-all
public (default, active)
  interfaces: enp0s25
  sources:
  services: dhcpv6-client ftp http ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

OK!!

特定のポートを開放する方法

特定のポートを開くには、firewall-cmd –permanent –add-port=(ポート番号) –zone=(ゾーン名) を使用します。

[meideru@localhost ~]$ sudo firewall-cmd --permanent --add-port=25565/tcp --zone=public
success

とりあえず、25565というポートを開放してみました。これは成功です。

因みに、25565はマインクラフトのサーバで使用されるポートです。

特定のポートを閉じる方法

上の逆です。

特定のポートを閉じるには、firewall-cmd –permanent –remove-port=(ポート番号) –zone=(ゾーン名) を使用します。

上で設定した25565ポートを閉じてみましょう。

[meideru@localhost ~]$ sudo firewall-cmd --permanent --remove-port=25565/tcp --zone=public
success

開放されているポートの確認方法

ファイアウォールの話からは少しズレますが・・・。一応、開放されているポートの確認方法も書いておきます。

開放されているポートを確認するにはssコマンドを使用します。

[meideru@localhost ~]$ sudo ss -l
(結果は略)

-l というオプションを付けることで、開いているポートを確認することができます。

長いので結果は省略します。

 

こんなところです!

ノシ

 - 技術系