Closed5

ufwとiptablesによるファイアウォール設定

でぶねこでぶねこ

目的

自宅サーバのポートが全開放になっているのはよろしくないので
ファイアウォール(FW)を設定し使用しているポート以外は閉じる

環境

Ubuntu Sever 22.04 LTS

利用技術と設定方針

Linuxには「iptables」というパケットフィルタを行う機能がある
ただ設定が複雑なため、Ubuntuには「ufw」という「iptables」を簡単に設定できる機能がある
そのため基本は「ufw」で設定し、必要に応じて「iptables」を利用する

参考

https://ubuntu.com/server/docs/security-firewall
https://matsuand.github.io/docs.docker.jp.onthefly/network/iptables/

でぶねこでぶねこ

ufwコマンド

操作 コマンド 備考
動作状態確認 sudo ufw status verbose 無効:inactive / 有効:active
設定ルールを番号づけで表示 sudo ufw status numbered ルール削除の際に利用
有効化 sudo ufw enable
無効化 sudo ufw disable
外部からの通信拒否 sudo ufw default DENY 内から外は許可
ポート開放 sudo ufw allow [ポート番号/アプリ名] 定義されているアプリ名指定も可 、「proto tcp(udp)」でプロトコル指定も可
IP指定してポート開放 sudo ufw allow from [IP] to any port [ポート番号] IPはサブネットで範囲指定も可能
連続接続の場合は拒否 sudo ufw limit ssh [ポート番号/アプリ名]
アプリ定義一覧表示 sudo ufw app list
ルール削除 sudo ufw delete [ルール番号]
でぶねこでぶねこ

ufwによる設定例、ここではssh以外を拒否する

# 外部からの通信を拒否
$ sudo ufw default DENY

# 192.168.0.*を対象にsshを有効化
$ sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22

# sshの連続接続を拒否(順番大事)
$ sudo ufw limit 22

# 有効化
$ sudo ufw enable
$ sudo reboot
でぶねこでぶねこ

基本的には上記のようにufwで設定で良いが、Dockerを使用している場合は注意が必要
ホスト側との通信設定を行うと自動的に「iptables」の設定もポート開放するように設定される
そのためDockerよるサービスがLAN内向けなどであれば下記のように制限をかけた方が良い

$ sudo apt install iptables-persistent
$ sudo iptables -I DOCKER-USER -i [通信インターフェイス名] ! -s 192.168.0.0/24 -j DROP
$ sudo reboot

この場合「192.168.0.*」以外からのアクセスは拒否する
なお最初にインストールしているのは「iptables」の設定を保持するためのもの
https://qiita.com/ohhara_shiojiri/items/e08076009cd3098a9deb

でぶねこでぶねこ

再起動後にルールが反映されているか確認する

 $ sudo iptables -L -n -v | grep -A7 "DOCKER-USER"
Cain DOCKER-USER (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  [NIC] *      !192.168.0.0/24       0.0.0.0/0           
 8167 8948K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0 
このスクラップは2023/12/28にクローズされました