OpenWRTのFirewall設定をデフォルトDrop/Rejectにしてセキュリティ強化する

OpenWRT21.02でデフォルトDrop/RejectのACLを作成します。

背景・目的

以前「OpenWrtのFirewall設定を読み解きVLAN含めてセキュアなフィルタ設定を行う」でGUIで設定した内容がiptablesではどのように反映されるのかを逐次確認して読み解きましたが、ACLの項目数は最小限にしシンプルなACLとするべきだったと反省点がありました。21.02へのリプレース時にその反省点を生かして管理しやすいACLを作ってみたいと思います。

以前(OpenWRT19.07)のACL設定

移行前のOpenWRTルータ(19.07)は、許可したい通信はすべてTraffic Roulesに記載し、デフォルトの通信設定は全てRejectとしていました。その設定画面は下記の通りです。

OpenWRT21.02インストール後、VLAN構成をとった時点のACL設定

WAN→内部へのForwardのデフォルトはRejectとし、当たり前のセキュリティは確保されているものの、その他はAcceptが多いです。インストール直後にマルチメディアやゲーム含めて動作を保証し、かつ一定レベルのセキュリティを保つのであれば、デフォルト設定でも良いと思います。

しかし、許可していない通信がされてしまう事は好まない為、「 以前(OpenWRT19.07)のACL設定 」同様にデフォルトDrop/Rejectにしたいと思います。

事前準備

OpenWrtは接続済みの通信はそのまま許可する為、SSHを接続しっぱなしにしていれば、ファイアウォール(iptables)の設定ミス程度ならリセットせずともリカバリ可能です。可能な限りSSHでOpenWRTにログインしたまま作業してください。

万が一、GUI管理コンソールに繋がらなくなった場合には、SSHコンソールからiptablesコマンドをたたき、一時的に穴あけしてリカバリします。

不要なACL削除

VPNを利用していないのであれば、デフォルトで作成される下記は不要だと思いますので削除します。デフォルトDROPにすれば包括されるルールも削除します。

  • Allow-IPSec-ESP(VPN関係)
  • Allow-ISAKMP(VPN関係)
  • Support-UDP-Traceroute(デフォルトDROPにすればどうせ含まれるので削除)

上記を削除したら、保存&適用します。

次に、必要なACLを追加していきます。画面一番下の追加を押します。

LAN(当方はVLAN使用しているので、VLAN1)からCPU(OpenWRT本体)に届くUDPとして、宛先53を追加します。

追加方法は上記と同じなので、下表のとおり必要なACLを追加していきます。

LANとCPU(OpenWRT)間の通信許可

Firewall – Traffic Rulesに以下を設定して、保存&適用します。UDPはステートレスの為、OpenWRTでデフォルト指定されている「通信確立した戻りは許可する」ルールで面倒を見てくれません。ですので、基本的に追加するルールは以下です。

※普通にOpenWRTをセットアップした場合には、lanとwanしか出来ない為、下記はその前提でルールを記載しています。「OpenWRTでVLAN毎に無線LANを設定する(21.02対応)」のように、LANは何もデバイスが無く、VLANを作成して利用している場合には、lanをVLAN1等に読み替えてください。

※VLANを利用する際に、VLANによっては、OpenWRTの管理コンソールへアクセス不要(アクセスさせないことが望ましい)場合には、該当VLANセグメントには「 LAN-to-CPU(TCP) 」の Destination Port を53のみとするか、それ自体を作成しなくてもいいと思います。

名前プロトコルSource ZoneSource Port宛先ゾーンDestination PortAction
LAN-to-CPU(UDP)UDPlanデバイス53 67 123accept
CPU-to-LAN(UDP) UDPデバイス53 67 123 lanaccept
LAN-to-CPU(TCP) TCPlanデバイス22 53 80 443accept
LAN-to-WAN(TCP)TCPlanwan80 443accept

上記を設定することで、以下要件を満たします。

  • OpenWRTルータから、lan上のPCへのDHCPによるIPアドレスの配布・更新
  • OpenWRTルータへlan上のPCからのDNS名前解決、時刻同期
  • OpenWRTルータへlan上のPCからのSSH接続、管理コンソールへのアクセス
  • lan上のPCによるインターネット上コンテンツの利用(http/httpsポート利用)

他に要件があれば、同じ要領でACLを追加します。

デフォルトをすべてRejectへ(DROPにしてもOKです)

ここから、デフォルト設定で通信を拒否する設定にしていきます。RejectとDropの違いは、下表のとおりで、お好みで選択してください。

ターゲット意味備考
Accept許可
Reject拒否、但し拒否した旨を通知するLAN内(例えばVLAN1⇒VLAN2等)や、LAN⇒WANはRejectにすると、タイムアウトで長時間待たされずに済みます。
Drop拒否、パケット自体を無視するWAN(インターネット)⇒お行儀よく攻撃者に「このポートにアクセスしても閉まってますよ~。」と言って差し上げる必要は無いため、LANへの通信はDropでも良いです。

言葉ぬ先の杖:万が一管理コンソールへアクセス不可となった際の備え

デフォルトを全てRejectへするにあたって、事前にSSHでOpenWRTへ接続した状態にしてください。OpenWRT管理コンソールから設定した設定値が間違っていると、WEB画面の保存が完了したのち、通信が拒否されてしまい、OpenWRT管理コンソールへアクセス不可となってしまいます。その場合でも、すでに通信確立済みの通信は拒否されないため、SSHを使ってリカバリ可能です。

なお、SSHを使った魔法のリカバリコマンドは一行だけです。下記のIPアドレス「 10.2.0.116 」は私の作業PCのIPアドレスなので、ご自身の作業用IPアドレスへ変えて実行してください。

iptables -I INPUT -s 10.2.0.116 -j ACCEPT

上記コマンド実行後、管理コンソールへアクセス可能となったら、 Firewall – Traffic Rules の間違った個所を修正してテストしたくなります。その際には、一時的に許可したACLを下記コマンドで削除できます。

iptables -D INPUT -s 10.2.0.116 -j ACCEPT

ちなみに、iptablesの最初のオプションの意味は下記のとおりです。

iptablesのオプション意味
iptables -Aルールをルールセットの最後に追加
※先に拒否/許可ルールがあると最後に追加した命令まで処理が回ってこないことがある
iptables -Iルールをルールセットの最初に追加
※先頭にルールを追加するので、デバッグで「これは許可」等とするときに便利
iptables -D該当ルールを削除する

デフォルトを全てReject(DROPでも良いです)にする

ネットワーク>ファイアウォール>Zone Settingsより、全項目をRejectにして保存&適用します。

上記で保存&適用すると、デフォルトDrop/RejectのACLになります。もし、実際のACLの値を確認したい場合には、SSHでOpenWRTに接続し、下記コマンドを実行してください。

# ipv4
iptables -L -n -v

# ipv6
ip6tables -L -n -v

ステータス>ファイアウォールからも確認できますが、慣れた方の場合には、SSHでコマンドを叩いた方が早いと思います。

最後に

簡単なチューニング方法は「OpenWrtのFirewall設定を読み解きVLAN含めてセキュアなフィルタ設定を行う」に記載しているのでそちらをご覧ください。

タグ . ブックマークする パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください