Buno Journals

It's what I do that defines me.

ufwでファイアウォール設定、管理

ufwとは

ファイアウォールの設定、管理はiptablesコマンドを用いるが、よりシンプルなufwコマンドを利用することもできる。 ufwPythonで書かれたiptablesのフロントエンド。内部的にはiptablesを利用し、iptablesよりも単純なインターフェースを提供している。

インストール

Ubuntuにはパッケージがある。

UFW - Community Help Wiki

CentOS用のufwパッケージは存在しないが、ソースコードからインストールできる。

ufw in Launchpad

wget https://launchpad.net/ufw/0.35/0.35/+download/ufw-0.35.tar.gz
tar zxf ufw-0.35.tar.gz
cd ufw-0.35
sudo python ./setup.py install
sudo chmod -R g-w /etc/ufw /lib/ufw /etc/default/ufw /usr/sbin/ufw

最後のコマンドは、ufwコマンド実行時に「WARN: /etc/default/ufw is group writable!」という警告が表示されないように実行。

ufwを利用する場合は/lib/ufw/ufw-initスクリプトを利用するので、iptables ip6tablesサービスは停止して、自動起動設定を解除する。

sudo service iptables stop
sudo service ip6tables stop
sudo chkconfig --del iptables
sudo chkconfig --del ip6tables

...CentOS 7以降は以下かもしれない(未確認)

sudo systemctl stop firewalld

エディタで/etc/rc.localを開き(要sudo)

/lib/ufw/ufw-init start

と追記。これでCentOSブート時にufwで設定したパケットフィルタリングが自動的に有効になる。

初期設定

sudo ufw default reject # まず「外部からの通信は拒否する」というデフォルトルールを設定する
sudo ufw allow 22 # ssh接続を許可するため22番ポートを解放
sudo ufw enable # 設定を有効化

その他の設定例

sudo ufw allow 80 # httpのために80番を開ける
sudo ufw allow http # 上記と同じ意味
sudo ufw allow 80/tcp # tcp80番だけ開ける(udpは開けない)
sudo ufw allow 80,443/tcp # コンマ区切りで複数ポート指定
sudo ufw allow 8080:8083/tcp # コロンで範囲指定

ルール設定のシンタックス

前述のような書き方(シンプルシンタックス)の他にフルシンタックスがある。

sudo ufw allow 80/tcp # シンプルシンタックス
sudo ufw allow proto tcp to any port 80 # フルシンタックス

IPアドレスを指定する場合は、上記のto anyto xxx.xxx.xxx.xxxとしてやれば良い。

またfromを用いて接続元IPを指定してルールを追加することもできる。

sudo ufw allow proto tcp from 192.168.0.101 to any port 3306

状態とルール一覧確認

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
1337                       ALLOW       Anywhere
22                         ALLOW       Anywhere
1337 (v6)                  ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)

sudo ufw satus numberedとすると番号付きでルール一覧を表示する。

ルール削除

sudo ufw delete 2 のようにufw deleteコマンドにルール番号を渡す。

ルールの優先度と挿入

ufw status numbersで一覧を表示した際により上にあるルールの方が優先される。 優先度を変えて新しいルールを挿入したい場合はufw insert 番号として、新しいルールを挿入する。

sudo ufw insert 1 reject from 192.168.179.4 to any port 1337

参考書籍

Ruby on Rails環境構築ガイド, Chapter13 ファイアウォール

Ruby on Rails環境構築ガイド

Ruby on Rails環境構築ガイド