LPIC-303 新版ノート334.3 Packet Filtering / v67 Mobile Sheet Fix
LPIC-3 Security334.3Weight 5Understand / Use / Implement

334.3 Packet Filtering

334.1で「Network上に何が流れているか」を観測した。ここでは、そのPacketがLinuxへ入る・Linuxを通過する・Linuxから出る流れを追い、iptables/ip6tables・Connection Tracking・NAT・IP Setsで制御する。

334.3の最終到達点:DMZを含むFirewall構成を説明し、Packet PathからChainを選び、iptables/ip6tables Ruleを読み書きし、Stateful Filtering・NAT・ipset・save/restoreまで実践できる。nftables / ebtables / conntrackdは役割を識別する。
公式要求:Understand firewall architectures including DMZ; understand/use iptables and ip6tables including standard modules, tests and targets; implement IPv4/IPv6 filtering, connection tracking and NAT; manage IP sets; awareness of nftables/nft, ebtables and conntrackd.
01 Firewall/Netfilter02 Rule構造03 Packet Path04 Match/Filter05 Conntrack06 NAT07 ipset/Persistence08 Awareness
現行Linuxとの関係:環境によってiptables commandがnftables backendを利用する場合がある。それでもLPI 303-300 v3.0の334.3は、iptables/ip6tablesを実践対象、nftables/nftをAwarenessとして明示しているため、この章では公式深度を優先する。
334.3 · 01/0901 Firewall / Netfilter
🟡 UnderstandArchitecture / DMZ

Firewallは「どこを分離し、どの通信を境界で制御するか」から考える

このページの到達点:DMZをNetwork Architectureとして説明し、Netfilterとiptablesの役割を混同しない。
Internet / DMZ / Internalを分ける
Internet信頼しない外部
DMZPublic Serviceを分離
Internal内部Network

DMZはTable名でもChain名でもない

DMZ = Demilitarized Zone。Internetから到達させるWeb/DNS等を内部LANと同じTrust Zoneへ置かず、Firewall境界で分離するArchitecture。侵害されたPublic ServerからInternalへ横展開されるRiskを減らす。

構成考え方
Dual-homed host2つ以上のInterfaceを持つHostが境界になる。
Screened subnet / DMZPublic Service用NetworkをInternalから分離する。
Host firewallServer自身でlocal trafficを制御する。

Netfilterとiptablesを分ける

Packet ↓ Linux Kernel ↓ Netfilter hooks / ruleset ↑ iptables / ip6tables └─ User spaceからRuleを追加・削除・確認
覚え方:NetfilterはKernel側のPacket処理Framework。iptables/ip6tablesはそのRuleを管理するUser-space Tool。
EXAM DECISION

ArchitectureとToolを混ぜない

  • Public ServerをInternalから分離 → DMZ
  • KernelのPacket Filter Framework → Netfilter
  • IPv4 Rule管理 → iptables
  • IPv6 Rule管理 → ip6tables
334.3 · 02/0902 iptables Structure
🔴 Understand / UseTable → Chain → Rule → Target

iptablesは「どのTableの、どのChainへ、どんなRuleを置くか」

このページの到達点:Ruleの構造を読み、filter/nat TableとINPUT/FORWARD/OUTPUT Chainの役割を区別できる。
Ruleの階層
Table ↓ Chain ↓ Rule = Match conditions + Target ↓ ACCEPT / DROP / REJECT / LOG ...

まずfilterとnatを軸にする

Table主目的代表Chain
filter通す/落とすPacket Filtering。Default Table。INPUT / FORWARD / OUTPUT
natAddress/Portを書き換えるNAT。PREROUTING / OUTPUT / POSTROUTING
manglePacket header/mark等の特殊変更。複数
rawConnection Tracking前の処理等。PREROUTING / OUTPUT

Ruleを分解して読む

# IPv4: TCP/22への新規SSHを許可する例 iptables -A INPUT \ -p tcp --dport 22 \ -m conntrack --ctstate NEW \ -j ACCEPT
-A INPUTINPUT Chain末尾へ追加
-p tcp / --dport 22Protocol/PortでMatch
-m conntrack追加Match Module
-j ACCEPTMatch時のTarget
-A
Chainの末尾へRuleをAppend。
-I
指定位置へInsert。順番が重要なFirewallでは使い分ける。
-L
RuleをList表示。
-S
Commandに近いRule specificationとして表示。
-P
Built-in ChainのDefault Policyを設定。
Rule順序:上から評価し、MatchしたTargetによって処理が決まる。広いACCEPTを上に置けば、後ろのDROPへ到達しない場合がある。
EXAM DECISION

Rule問題は4段階で読む

  • どのTable?
  • どのChain?
  • 何にMatch?
  • Targetは何?
334.3 · 03/0903 Packet Path
🔴 ImplementINPUT / OUTPUT / FORWARD

Chain選択は「Packetの最終目的地がどこか」で決める

このページの到達点:Local host宛・Local host発・Router通過を見分け、INPUT / OUTPUT / FORWARDを即答できる。
3つの基本Path
外部 → Linux自身のService = INPUT Linux上のProcess → 外部 = OUTPUT LAN A → Linux Router → LAN B = FORWARD
受信NICへ到着
Route判断Local宛?
INPUTLocal Processへ
FORWARD別Interfaceへ
OUTPUTLocal生成Packet

問題文からChainを選ぶ

Scenariofilter Chain
Internet Client → このLinux Web Serverの443INPUT
このLinux Server → DNS Resolverの53OUTPUT
Internal Client → Linux Gateway → InternetFORWARD

NATで見る位置

外部から入るPacket ↓ PREROUTING ← DNATを行う代表位置 Route decision ├─ Local → INPUT └─ Transit → FORWARD ↓ POSTROUTING ← SNAT / MASQUERADEの代表位置
確認:「Linux Routerを通過するTrafficを止める」なのにINPUTへRuleを置く → Chain選択が違う。
EXAM DECISION

最初に「Linux自身が終点か」を問う

  • Linux自身が受信 → INPUT
  • Linux自身が生成 → OUTPUT
  • Linuxを経由 → FORWARD
334.3 · 04/0904 Match / Filtering
🔴 Use / ImplementIPv4 / IPv6

Filteringは「条件を組み合わせ、最後にTargetを選ぶ」

このページの到達点:標準的なTest/Match/Targetを目的から選び、IPv4/IPv6の基本Ruleを組める。

代表的なTestを目的別に整理

知りたい条件代表Option / Module
Source / Destination Address-s / -d
Input / Output Interface-i / -o
Protocol-p tcp / udp / icmp / icmpv6
TCP/UDP Port--sport / --dport
複数Port-m multiport --dports ...
Connection状態-m conntrack --ctstate ...
IP Set-m set --match-set NAME src|dst

Targetを分ける

Target意味
ACCEPTPacketを許可。
DROP通知せず破棄。
REJECT拒否応答を返して拒否。
LOGLogを記録するTarget。通常は別Ruleで最終ACCEPT/DROP等も必要。
RETURN現在のUser-defined Chain等から呼出元へ戻る。

IPv4 / IPv6を同じ発想で書く

# IPv4 HTTPS iptables -A INPUT -p tcp --dport 443 -j ACCEPT # IPv6 HTTPS ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT # IPv6 ICMPv6を丸ごと遮断する設計は避ける # Neighbor Discovery等にも必要
IPv6注意:IPv6でICMPv6はNeighbor Discovery等の基本機能にも使われる。「ICMPだから全部DROP」はNetwork自体を壊し得る。試験ではIPv4/IPv6双方のFilteringを設計対象として分けて考える。
EXAM DECISION

「条件」と「処理」を分ける

  • -s/-d/-p/--dport/-m ... → Match条件
  • -j ACCEPT/DROP/REJECT/LOG → Target
  • IPv4 → iptables / IPv6 → ip6tables
334.3 · 05/0905 Connection Tracking
🔴 ImplementStateful Firewall

Connection Trackingは「Packetを単発ではなくConnectionの文脈で見る」

このページの到達点:NEW / ESTABLISHED / RELATED / INVALIDを区別し、戻りTrafficをStateで許可できる。
1本のConnectionとして追跡
Client → SYN → Server NEW Client ← SYN/ACK ← Server ESTABLISHED Client ↔ Data ↔ Server ESTABLISHED 既存通信に関連する別通信 RELATED 追跡情報と整合しないPacket INVALID
NEW新しいConnection開始、またはまだ双方向Packetを確認していない。
ESTABLISHED双方向通信を確認したConnection。
RELATED既存Connectionに関連して開始する別Connection/ICMP error等。
INVALID既知Connectionへ正しく関連付けられない。

Stateful Firewallの基本形

# 戻りTrafficを先に許可 iptables -A INPUT \ -m conntrack \ --ctstate ESTABLISHED,RELATED \ -j ACCEPT # 新規SSHは条件付きで許可 iptables -A INPUT \ -p tcp --dport 22 \ -m conntrack --ctstate NEW \ -j ACCEPT
state matchとの関係:古い例では-m state --state ...も見かける。現在はより多くのConnection Tracking情報を扱えるconntrack matchを中心に理解する。
よくある失敗:Inbound NEWだけ許可して、戻りのESTABLISHEDを許可しない → 応答Packetが落ちる。
EXAM DECISION

State名をScenarioへ変換

  • 新規Connection → NEW
  • 既存ConnectionのPacket → ESTABLISHED
  • 既存Connectionに関連 → RELATED
  • 追跡不能/不整合 → INVALID
334.3 · 06/0906 NAT
🔴 ImplementDNAT / SNAT / MASQUERADE

NATは「通す/落とす」ではなくAddressを書き換える

このページの到達点:DNAT / SNAT / MASQUERADEを、書き換えるAddressとPacket位置から選べる。
DNATDestinationを書き換える。外部公開Port→Internal Server等。
SNATSourceを書き換える。Staticな外部Addressへ変換する場合等。
MASQUERADEOutgoing InterfaceのAddressへSource NAT。Dynamic Address向け。

DNAT: 受信時に行先を変える

iptables -t nat -A PREROUTING \ -p tcp --dport 443 \ -j DNAT \ --to-destination 10.0.0.20:443
読む:外部で443を受けたPacketのDestinationを10.0.0.20:443へ変更。実際に転送させるならFORWARD側のFiltering/Route/IP forwardingも別途必要。

SNAT / MASQUERADE: 外へ出る時に送信元を変える

# Static external address iptables -t nat -A POSTROUTING \ -s 10.0.0.0/24 \ -j SNAT --to-source 203.0.113.10 # Dynamic external address iptables -t nat -A POSTROUTING \ -o ppp0 -j MASQUERADE
Connection Trackingとの関係:NATはConnection単位で対応関係を追跡する。最初のPacketに対するNAT決定が以後のPacketにも反映される。
EXAM DECISION

何を書き換える?

  • Destination → DNAT
  • Source + Static address → SNAT
  • Source + Dynamic interface address → MASQUERADE
  • NATしてもFiltering Ruleは別に考える
334.3 · 07/0907 IP Sets / Persistence
🔴 Manage / Useipset / save / restore

IP Setsは「大量のAddressを1 Ruleから参照する」

このページの到達点:ipsetを作成・更新・確認してiptablesから参照し、Rule/Setをsave/restoreできる。
Ruleを増やす代わりにSetを更新
badhosts set ├─ 192.0.2.10 ├─ 192.0.2.11 └─ 198.51.100.0/24 ↓ iptables Rule 1本 -m set --match-set badhosts src → DROP

Setを管理する

ipset create badhosts hash:net ipset add badhosts 192.0.2.10 ipset add badhosts 198.51.100.0/24 ipset test badhosts 192.0.2.10 ipset list badhosts

iptables Ruleから参照

iptables -A INPUT \ -m set --match-set badhosts src \ -j DROP
src / dstSetの値をPacketのSource/Destinationのどちらと照合するかを指定する。

Rulesetを保存・復元

# IPv4 iptables-save > /root/iptables.rules iptables-restore < /root/iptables.rules # IPv6 ip6tables-save > /root/ip6tables.rules ip6tables-restore < /root/ip6tables.rules # IP Set ipset save > /root/ipset.rules ipset restore < /root/ipset.rules
再起動時の永続化:DistributionによってService/保存場所は異なる。LPI公式Partial listではsave/restore Utilityそのものを確実に区別する。
EXAM DECISION

大量IPをRuleへ1件ずつ書かない

  • Set作成 → ipset create
  • Entry操作 → add/del/test/list
  • Netfilterから参照 → -m set --match-set
  • IPv4/IPv6 Ruleset → iptables-save/restore・ip6tables-save/restore
334.3 · 08/0907 Operation / Troubleshooting
🔴 UseInspect / Safe changes

Packet Filteringの障害は「Path → Rule順 → State → NAT → Route」で切り分ける

このページの到達点:Ruleを変更する前に現在状態を保存・確認し、Trafficがどこで落ちるかを段階的に切り分けられる。

確認の順番

1. PacketのPathは INPUT / OUTPUT / FORWARD のどれ? 2. 対象Table / ChainのRule順は? 3. Counterは増えている? 4. conntrack Stateは想定どおり? 5. DNAT/SNAT後のAddressは? 6. Route / IP forwarding / Return pathは? 7. IPv4 Ruleだけ直してIPv6を忘れていない?

現在Ruleを読む

iptables -L -n -v --line-numbers iptables -S iptables -t nat -L -n -v ip6tables -L -n -v --line-numbers ip6tables -S
見るもの意味
packet/byte counterRuleへ実PacketがHitしているか。
line numberRule順・削除対象を確認。
Policy最後までMatchしなかった時の処理。
nat tableAddress変換Ruleを別に確認。

Remote接続中のFirewall変更は特に危険

安全性:SSH接続中にDefault DROPへ切り替えるなど、管理経路を自分で遮断できる。変更前Rulesetをsaveし、Console/rollback手段を確保し、必要なESTABLISHED/管理Port Ruleを先に設計する。
TROUBLESHOOT

「Ruleがあるのに通らない」で終わらない

  • 正しいChainか
  • 前のRuleで先にMatchしていないか
  • conntrack / NAT / Routeまでつながっているか
  • IPv4とIPv6を別々に確認
334.3 · 09/0908 Awareness / Integration
⚪ Awarenessnftables / ebtables / conntrackd

334.3最終整理:実践対象とAwarenessを混ぜない

このページの到達点:nftables/nft・ebtables・conntrackdを役割で識別し、iptables/ipsetの実践深度との差を守る。
項目役割公式深度
iptables / ip6tablesIPv4/IPv6 Packet Filter/NAT Ruleを管理Understand / Use / Implement
ipsetAddress/Network等のSetを管理しRuleから参照Manage / Use
nftables / nftNetfilterの新しいRuleset Interface/FrameworkAwareness
ebtablesEthernet Bridge/L2 filtering系Awareness
conntrackdConnection Tracking stateの同期/高可用性用途等Awareness

全体を1本で戻す

Firewall Architecture / DMZ ↓ Packet Pathを決める ↓ iptables/ip6tables: Match → Target ↓ conntrackでStateful化 ↓ 必要ならNAT ↓ ipsetで大量Address管理 ↓ save / restoreで運用
OBJECTIVE COMPLETE

334.3完了条件

  • DMZをNetwork Architectureとして説明できる
  • Table / Chain / Match / Targetを読める
  • INPUT / OUTPUT / FORWARDをScenarioから選べる
  • IPv4/IPv6 Filteringを組める
  • NEW/ESTABLISHED/RELATEDをRuleへ使える
  • DNAT/SNAT/MASQUERADEを区別できる
  • ipsetとsave/restoreを使える
  • Awareness 3項目を過剰学習しない
次に334.2へ進む理由: Firewallで境界と通過条件を作った後は、許可されたTrafficやTargetに異常・脆弱性がないかをSnort/OpenVAS等で検知する。
334.3 Packet Filtering · CHECKPOINTObjective末尾
Weight 5客観判定50 → 75 → 100%

334.3 Packet Filtering:学習直後にここで解く

本文を読み終えた直後に、そのObjectiveだけを確認する。別ページへ移動して問題を探さない。誤答した問題から該当ノートへ戻り、再度ここへ戻る。

合格条件: 50%は基礎選択式9問中8問以上、75%は選択肢なし再現8問中7問以上。75%到達から72時間後、専用実戦Bankから11問中10問以上で100%。さらに各段階で全小テーマを最低1問正解する必要がある。毎回Question Bankからランダム出題する。
現在の到達度
選択式から開始
0%
問題プール 40問小テーマ 7 実戦Bank 20問直近重複を抑制未出題優先
小テーマ別履歴問題を解くと正答率を表示
全体到達度を見る

Objective Check

100%専用: 72時間後の再テストでは既存564問ではなく、このObjective専用の実戦相当20問から出題する。各問は複数知識・近い誤答・設定/出力/状況判断のいずれかを含み、誤答時は全選択肢の違いまで確認する。
出題方式:初回は小テーマをできるだけ横断し、未出題・出題回数の少ない問題を優先する。再挑戦では小テーマ網羅より直近問題の重複回避を優先し、必要な場合だけ再利用する。
この問題の役割:Objective理解の客観Checkpoint。実試験の出題再現ではないが、固定問題の暗記だけでは突破しにくい構成にする。