それマグで!

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

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

openwrt で ipset をfirewall のルールに書く

openwrt で ipset をfirewall のルールに書く

ipset を使って openwrt の firewall ルールを記入する

目的

ipset を使ってルールを完結に書きつつ、OpenWRTのWEB-UI(luci)と連携したい

追記2023-04-04

バージョンによってはlist proto`を書かないと動かない。詳しくは、別エントリ に書いた。

準備

ipset を準備する。

opkg install ipset

ipset コマンドの使い方の確認

ipset にテーブル(リスト)を作って、そこにデータをいれて、中身をみて、リストを消す方法。最初に覚えておいてサクッと確認する。

ipset list 
ipset create my_list hash:ip 
ipset add my_lisrt 192.168.1.1/32
ipset list my_list 
ipset list -n 
ipset destory my_list

ipset を firewall ルールに追加する

openwrt の firewall は ipset のルールを使用可能なので、マニュアルにしたがって記入する。

以下の設定例は、ファイルに記載されたIPアドレスをipset に読み込んでリスト表を作成する。

記入例

config ipset
    option name 'public_dns'
    option storage 'hash'
    list match 'dest_ip'
    option enabled '1'
    option family 'ipv4'
    option loadfile '/root/my-ip-list.txt'

ファイルに記載されたIPアドレスを読むこんで、IPSetのリスト表が作成される。

再起動して確認。

service firewall restart
ipset list public_dns

記述ミスがあると、再起動しても反映されない。

Warning: Option @ipset[0].storage has invalid value 'hash:xxx'

Warning と出てくるが、実際にはエラーである。記述を見直してエラー修正して、再起動

設定例2 / 日本のv4アドレスに限定する。

設定例2

config ipset
    option name 'jp_addr_list'
    option storage 'hash'
    list match 'src_net'
    option enabled '1'
    option loadfile '/etc/jp_addr_list.txt'

最初の例と違って、IPアドレスではなく、ネットワーク範囲で指定している。 ファイルの記述例 / jp_addr_list.txt

153.120.0.0/13
153.128.0.0/13
153.136.0.0/14
153.140.0.0/15
153.142.0.0/16
153.143.0.0/19

作成済みIPSet を使う

IPSetを使ったファイアウォールのルールを記述する。

名前を使って、IPSetのリスト名を指定する。

config rule
    option ipset 'public_dns'

設定例

config rule
    option src 'lan'
    option dest 'wan'
    option ipset 'public_dns'
    option target 'REJECT'
    option device 'my-pppoe'
    option direction 'out'
    option family 'ipv4'
    option name 'reject public dns '

上記の設定例はpublic_dns へのFORWARDを拒否する。public_dns を使わせないようにする設定を書いて、DNSサーバーで監視するGoogle HomeやTP-linkを締め出す設定例。

設定のマニュアル

指定可能な項目は、OpenWRT wiki にマニュアル記載があるので、細かい指定はマニュアルを参照すると良い。