【ArchLinux】UFWのインストールとログの場所について
さて、この筆者のブログは本日、ThinkPad X240で稼働するArchLinux側に無事にリプレースできたわけですが、
世の中には怖い人たちがおりまして、WEBサーバを閲覧するだけではなくて、WEBサーバを乗っ取って
攻撃の踏み台にしてやろうとか考えてる方々が多いわけで、そこに晒されてしまいます。
こちらの例によれば外部からリモートデスクトップ接続を可能にしたWindowsサーバが6時間程度で乗っ取られてマイニングマシンにさせられたというケースがあります。
https://internet.watch.impress.co.jp/docs/column/shimizu/1195372.html
常にポートスキャンしているボットがいるわけです。
インターネットは恐ろしいですね。
そんなわけで今回は公開WEBサーバを守るための最低限のことを実施していきましょう。
ufwでサーバのセキュリティを強化
旧WEBサーバであるUbuntuLinuxサーバ時にはufw(Uncomplicated FireWall)で設定していました。
今回もそのufwでArchLinuxに設定していきましょう。
Linuxではパケットフィルタリングする仕組みをカーネルのモジュールレベルに組み込んでおり、
iptablesというコマンドで細かく制御できます。
以下で確認できます。
# lsmod |grep ip_tables
ip_tables 36864 9 iptable_filter
x_tables 57344 14 ip6table_filter,xt_conntrack,iptable_filter,xt_LOG,xt_tcpudp,xt_addrtype,xt_recent,ip6t_rt,ip6_tables,ipt_REJECT,ip_tables,xt_limit,xt_hl,ip6t_REJECT
しかし、難点として、複雑で学習コストが掛かります。
この設定を代行してくれるツールがあり、あまり細かく設定せず、
最低限できれば良いいという要望に答えてくれるツールが今回の「ufw」というわけです。
というわけで、今回はArchLinuxでufwを使う際の設定方法について紹介します。
ufwのインストール
さて、まずはufwをインストールしていきましょう。
インストールは以下コマンドで行います。
$ sudo pacman -S ufw
IPV6は無効化
ipv6は使わないので無効化します。
使わないものは無効化しておくに限ります。
rootになり、エディタでufw.confを開き、「IPV6=no」と書き込ます。
$ sudo su -
# vi /etc/ufw/ufw.conf
IPV6=no
許可する通信のルールを追加
以下のように必要なポートを許可してルールを追加します。
# ufw allow 80
# ufw allow 443
# ufw allow 22
登録されたルールの一覧を確認する
以下コマンドでルール一覧が確認できます。
# ufw status
[root@tpx240 share3]# ufw status
Status: active
To Action From
-- ------ ----
443 ALLOW Anywhere
22 ALLOW Anywhere
80 ALLOW Anywhere
ufwを有効化する
ufwを有効にします。
# ufw enable
ufwを無効化する
ufwを無効化する。有効化して通信できなくなった場合に、
ufwの設定ミスや不備が原因だと考えられたら無効化してみましょう。
# ufw disable
ufwのルールを削除する
間違った設定や不要なポートを削除したい場合、は以下コマンドでまずは一覧を表示します。
# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 8080 ALLOW IN Anywhere
[ 2] 443 ALLOW IN Anywhere
[ 3] 7080 ALLOW IN Anywhere
[ 4] 3128 ALLOW IN Anywhere
削除対象の左側の番号を以下コマンドで指定することで一度確認が入り、
yキーで削除できます。
# ufw delete 4
ufw delete 4
Deleting:
allow 3128
Proceed with operation (y|n)?
ログの場所について
ArchLinuxの場合、ufwのloggingをオンにしましたが、ログの出力先は以下となっていました。
# ufw logging on
Logging enabled
出力先は「/var/log/everything.log」となります。
しかし、これでは全てのログが含まれてしまうのと、一般ユーザでは閲覧できないので
筆者は以下をcrontabに追加してufwのみを1分毎に吐き出すようにしました。
# crontab -e
*/1 * * * * cat /var/log/everything.log |grep 'UFW BLOCK' | grep -v grep > /var/log/ufw.log && chmod 666 /var/log/ufw.log
既に2500件以上のブロックログが!
ここでufwのログを確認すると、既に2500件以上のブロックログがありました。
ufwは有効に機能していますね。
$ cat /var/log/ufw.log|wc -l
2531
拒否リストに登録するツールを旧WEBサーバで作成していたのですが、
そのスクリプトがログのフォーマットが若干異なるからか動作しないため、
再度作り直しかコードの見直しを急ぐ必要がありそうです。