LoginSignup
0
0

More than 5 years have passed since last update.

シェルスクリプトで firewalld と iptables とどちらを使っているか調べて切り替える

Last updated at Posted at 2018-04-11

モチベーション

RHEL7になって標準でインストールされるパッケージが iptables から firewalld になりましたが、iptables パッケージがなくなったわけではなく、追加インストールすることにより引き続き iptables で運用することも可能です。また、旧バージョンを使用している場合やわざわざパッケージをアンインストールした場合など、firewalld が存在していないこともあるでしょう。シェルスクリプトで実際にどちらを使用しているかをチェックして処理を切り替えたい時の方法を考えました。

実現方法

以下の2点をチェックしてどちらも真である場合はfirewalld を使用しているものとします。

  • firewalld がインストールされている
  • firewalld が実行中である

firewalldへの操作はfirewalldを直接実行するのではなく、パッケージに含まれるfirewall-cmdを使用します。なお、firewall-cmd の実行は root 権限が必要で、権限がない場合は firewall-cmd の終了コードが必ずエラーとなります。ここでは省略しますが、事前に $EUID が 0 であるかどうかで root 権限があるかどうかを確認し、root権限がない場合はここに入らないようにする必要があります。
firewalld が実行中であるかどうかは

$ firewall-cmd --state

を実行して終了コードを確認します。

ということで、以下のようなスクリプトとなります。

check-firewalld.bash
#!/bin/bash

if which firewall-cmd >/dev/null 2>&1 && firewall-cmd --state >/dev/null 2>&1; then
  echo You are using firewalld.
  # ここにfirewalld使用時のコード
else
  echo You are using iptables.
  # ここにiptables使用時のコード
fi

結果

$ sudo ./check-firewalld.bash
You are using iptables.
$
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0