それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

openwrt の firewall ipset 記述を入れた例

openwrt の firewall ipset 記述を入れたがうまく動かない。

firewall ipset を記述するときの注意。

fw4 / 2203以降

ipset ではなく、nft list setsを使ってる。

fw3 / 2203 未満

ipset rule を使っている。

rule が動かないとき

ipset を使った rule が動かない。(21.02.1、21.03.3 で確認)

protocol tcp を指定すると動く。

list proto 'tcp'

設定例 / マッチしたものを拒否

config ipset
  option name 'public_dns'
  option match 'dest_ip'
  option family 'ipv4'
  option loadfile '/etc/config/custom/public-dns/ip-list.txt'
  option enabled '1'

config rule
  option src 'lan'
  option dest 'wan'
  option ipset 'public_dns'
  option target 'REJECT'
  option device 'pppoe-mopera'
  option direction 'out'
  option family 'ipv4'
  option name 'reject public dns:ipset'
  list proto 'icmp'
  list proto 'any'

設定例 / マッチしないものを拒否

config ipset
  option name 'jp_addr'
  option match 'dest_ip'
  option family 'ipv4'
  option loadfile '/etc/config/custom/ipset/jp_addr.txt'
  option enabled '1'
config rule
  option name 'sslh-443 /ipset:cloudflare'
  option direction 'in'
  option device 'pppoe-ybb'
  option ipset '!jp_addr'
  option family 'ipv4'
  list proto 'tcp'
  list proto 'udp'
  option src 'wan'
  option dest_port '443'
  option target 'DROP'

rule 記述の注意。

わざわざ記事に書いているのは、トリッキー記述が必要だったから。プロトコル指定が必要。

ipsetを使うときluci/uci ではプロトコルを指定しないと動かなかった。プロトコルを指定すると動く。

以下に例を書く。

これは動く

#動く
  list proto 'tcp'
  list proto 'udp'
  list proto 'icmp'

プロトコルを省略したら動かない

## 動かない
config rule
  option name 'sslh-443 /ipset:cloudflare'
  option direction 'in'
  option ipset '!jp_addr'
  option family 'ipv4'
  option src 'wan'
  option dest_port '443'
  option target 'DROP'
## list proto 省略

プロトコルをANYにしても動かない。

## 動かない
  list proto 'any'

プロトコルを指定すると動く

## 動く
  list proto 'icmp'
  list proto 'tcp'
  list proto 'udp'

プロトコルをICMP+ANYにすると、ANYでマッチする(謎)

## 動く
  list proto 'icmp'
  list proto 'any'

理由はよくわからない。