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は役割を識別する。
Objective判定: このObjectiveの最後に客観Checkpointを配置。学習後は 末尾の問題へ。
公式要求: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 host | 2つ以上のInterfaceを持つHostが境界になる。 |
| Screened subnet / DMZ | Public Service用NetworkをInternalから分離する。 |
| Host firewall | Server自身で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 |
nat | Address/Portを書き換えるNAT。 | PREROUTING / OUTPUT / POSTROUTING |
mangle | Packet header/mark等の特殊変更。 | 複数 |
raw | Connection 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
-AChainの末尾へRuleをAppend。
-I指定位置へInsert。順番が重要なFirewallでは使い分ける。
-LRuleをList表示。
-SCommandに近いRule specificationとして表示。
-PBuilt-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を選ぶ
| Scenario | filter Chain |
|---|---|
| Internet Client → このLinux Web Serverの443 | INPUT |
| このLinux Server → DNS Resolverの53 | OUTPUT |
| Internal Client → Linux Gateway → Internet | FORWARD |
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 | 意味 |
|---|---|
| ACCEPT | Packetを許可。 |
| DROP | 通知せず破棄。 |
| REJECT | 拒否応答を返して拒否。 |
| LOG | Logを記録する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 / dst:Setの値を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 counter | Ruleへ実PacketがHitしているか。 |
| line number | Rule順・削除対象を確認。 |
| Policy | 最後までMatchしなかった時の処理。 |
| nat table | Address変換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 / ip6tables | IPv4/IPv6 Packet Filter/NAT Ruleを管理 | Understand / Use / Implement |
| ipset | Address/Network等のSetを管理しRuleから参照 | Manage / Use |
| nftables / nft | Netfilterの新しいRuleset Interface/Framework | Awareness |
| ebtables | Ethernet Bridge/L2 filtering系 | Awareness |
| conntrackd | Connection 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%
小テーマ別履歴問題を解くと正答率を表示
Objective Check
100%専用: 72時間後の再テストでは既存564問ではなく、このObjective専用の実戦相当20問から出題する。各問は複数知識・近い誤答・設定/出力/状況判断のいずれかを含み、誤答時は全選択肢の違いまで確認する。
出題方式:初回は小テーマをできるだけ横断し、未出題・出題回数の少ない問題を優先する。再挑戦では小テーマ網羅より直近問題の重複回避を優先し、必要な場合だけ再利用する。
この問題の役割:Objective理解の客観Checkpoint。実試験の出題再現ではないが、固定問題の暗記だけでは突破しにくい構成にする。