ЁЯПл The SchoolтА║ЁЯХ╕я╕П NetworkingтА║ЁЯЪз рдзрдбрд╛ 10 тАФ Firewalls, NAT рдЖрдгрд┐ VPNs: рдлрд╛рдЯрдХ
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯЪз рдзрдбрд╛ 10 тАФ Firewalls, NAT рдЖрдгрд┐ VPNs: рдлрд╛рдЯрдХ

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 10 ┬╖ рдкреБрдвреЗ: lesson-11-load-balancers-cdn


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ10. рдХреЛрдг рдХреЛрдгрддреНрдпрд╛ рдЦреЛрд▓реАрд╡рд░ knock рдХрд░реВ рд╢рдХрддреЛ: firewall, рдлрд╛рдЯрдХрд╛рд╡рд░рдЪреЗ рдкрддреНрддреНрдпрд╛рдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ (address translation), рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рдЬрд╛рдгрд╛рд░реЗ рдмреЛрдЧрджреЗ.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдлрд╛рдЯрдХрд╛рдХрдбреЗ рдПрдХ рдпрд╛рджреА рдЕрд╕рддреЗ: рдкрд╛рд╣реБрдгреЗ рдЦреЛрд▓реА 443 рд╡рд░ knock рдХрд░реВ рд╢рдХрддрд╛рдд, office рдордзрд▓реЗ рдХрд░реНрдордЪрд╛рд░реА рд░рдЦрд╡рд╛рд▓рджрд╛рд░рд╛рдЪреЗ рджрд╛рд░ 22 рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛рдд, рдиреЛрдВрджреАрдВрдЪреНрдпрд╛ рдЦреЛрд▓реАрдд рдмрд╛рд╣реЗрд░реВрди рдХреЛрдгреАрд╣реА рдпреЗрдК рд╢рдХрдд рдирд╛рд╣реА. рдирд┐рдпрдо рдореЛрдбрдгрд╛рд▒реНрдпрд╛ рд▓рдЦреЛрдЯреНрдпрд╛рдВрдирд╛ рдирдХрд╛рд░ рджрд┐рд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА тАФ рддреЗ рдЧреБрдкрдЪреВрдк рдЯрд╛рдХреВрди рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд, рдореНрд╣рдгреВрди рдкрд╛рдард╡рдгрд╛рд░рд╛ рд╡рд╛рдЯ рдкрд╛рд╣рдд рд░рд╛рд╣рддреЛ. рдлрд╛рдЯрдХ NAT рдкрдг рдХрд░рддреЗ: рдЖрдд рдкреНрд░рддреНрдпреЗрдХрд╛рдЪрд╛ рдЦрд╛рдЬрдЧреА рдкрддреНрддрд╛ рдЕрд╕рддреЛ; рдмрд╛рд╣реЗрд░ рдкрдбрддрд╛рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓рдЦреЛрдЯреНрдпрд╛рд╡рд░ рд╢рд╛рд│реЗрдЪрд╛ рдПрдХрдЪ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрддреНрддрд╛ рдкреБрдиреНрд╣рд╛ рд▓рд╛рд╡рд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдХреЛрдгреА рд╡рд┐рдЪрд╛рд░рд▓реЗ рд╣реЗ рдлрд╛рдЯрдХ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЗ, рдореНрд╣рдгрдЬреЗ рдЙрддреНрддрд░ рдкрд░рдд рд╡рд╛рдЯ рд╢реЛрдзрддреЗ. VPN рдореНрд╣рдгрдЬреЗ рдлрд╛рдЯрдХрд╛рддреВрди рдЬрд╛рдгрд╛рд░рд╛ рдмреЛрдЧрджрд╛: рдШрд░реВрди рдЕрд╕рд▓рд╛рдд рддрд░реА рддреБрдореНрд╣реА "рдЖрдд" рдЕрд╕рддрд╛.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
  W["ЁЯМН world"] -->|443 allow| G["ЁЯЪз the gate<br/>firewall + NAT"]
  O["ЁЯПв office IP"] -->|22 allow| G
  W -.->|5432 DROP| G
  G --> A["app :443"] ; G --> C["caretaker :22"] ; G -.- D["record room :5432 (inside only)"]

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

deploy рдирдВрддрд░рдЪреНрдпрд╛ рдмрд╣реБрддреЗрдХ "connect рд╣реЛрдд рдирд╛рд╣реА" incidents рдорд╛рдЧреЗ рдПрдХ рди рдЬреЛрдбрд▓реЗрд▓рд╛ рдирд┐рдпрдо рдЕрд╕рддреЛ, рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ wing рд▓рд╛ рдЬреЛрдбрд▓реЗрд▓рд╛. Least privilege тАФ 443 рд╕рд░реНрд╡рд╛рдВрдирд╛, 22 рдлрдХреНрдд рддреБрдореНрд╣рд╛рд▓рд╛, database рдлрдХреНрдд app рдЪреНрдпрд╛ subnet рд▓рд╛ тАФ рд╣реА рдкрд╛рдЪ рдУрд│реАрдВрдЪреА policy рдмрд╣реБрддреЗрдХ рдШреБрд╕рдЦреЛрд░реА рд░реЛрдЦрддреЗ.

ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)

ports() рдордзрд▓рд╛ connect_ex рдмрдВрдж рдЦреЛрд▓реНрдпрд╛рдВрд╕рд╛рдареА рд▓рдЧреЗрдЪ рдкрд░рдд рдпреЗрддреЛ; timeout 3 s рдареЗрд╡рд╛ рдЖрдгрд┐ firewall рдорд╛рдЧрдЪрд╛ host рд╡рд╛рдкрд░реВрди рдкрд╛рд╣рд╛ рдореНрд╣рдгрдЬреЗ рдлрд░рдХ рдЬрд╛рдгрд╡реЗрд▓.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

python3 net/demo.py ports                               # closed rooms answer fast
nc -zv -w 3 example.com 8443 ; echo "exit $?"           # a port the gate drops: ~3 s, then timed out
nc -zv -w 3 example.com 443                             # the allowed room: succeeded
ssh -L 15432:db.internal:5432 bastion.example -N &      # (if you have one) a tunnel: localhost:15432 is now the record room

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

рдмрдВрдж local ports: рд▓рдЧреЗрдЪ closed. example.com рд╡рд░ 8443: рддреАрди seconds рдЪреА рд╡рд╛рдЯ рдЖрдгрд┐ рдордЧ timeout тАФ рдлрд╛рдЯрдХ. 443: succeeded!. Refused рдЬрд▓рдж, dropped рд╣рд│реВ: рдкреВрд░реНрдг рдирд┐рджрд╛рди рд╣реЗрдЪ.

ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ

failure рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рд╡рд░реВрди рддреБрдореНрд╣реА рд░рд┐рдХрд╛рдореА рдЦреЛрд▓реА рдЖрдгрд┐ рдХреБрд▓реВрдкрдмрдВрдж рдлрд╛рдЯрдХ рдпрд╛рдВрддрд▓рд╛ рдлрд░рдХ рдУрд│рдЦреВ рд╢рдХрддрд╛, рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ laptop рдЪрд╛ рдкрддреНрддрд╛ internet рд╡рд░ рдХрдзреАрдЪ рдХрд╛ рджрд┐рд╕рдд рдирд╛рд╣реА рд╣реЗ рд╕рдордЬрд╛рд╡реВ рд╢рдХрддрд╛.

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: security groups, NACLs, WAFs рдЖрдгрд┐ zero-trust proxies рдореНрд╣рдгрдЬреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ layers рд╡рд░рдЪреЗ рд╣реЗрдЪ рдлрд╛рдЯрдХ; "misconfigured rule" рдЕрд╕рд▓реЗрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ cloud outage рдЪрд╛ post-mortem рдореНрд╣рдгрдЬреЗ рд╣рд╛рдЪ рдзрдбрд╛.

тПня╕П рдкреБрдвреЗ

рдзрдбрд╛ 11 тАФ load balancers, proxies рдЖрдгрд┐ CDNs: рдЕрдиреЗрдХ рдЦреЛрд▓реНрдпрд╛рдВрд╕рдореЛрд░рдЪрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрдХреНрд╖, рдЖрдгрд┐ рд╡рд╛рдЪрдХрд╛рдЬрд╡рд│рдЪреА рдкреНрд░рдд.

ЁЯЪз Lesson 10 тАФ Firewalls, NAT & VPNs: the gate

ЁЯУН You are here: Lesson 10 of 12 ┬╖ Next: lesson-11-load-balancers-cdn


ЁЯУж What's in this branch

Lessons 01тАУ10. Who may knock on which room: the firewall, the address translation at the gate, and tunnels through it.

ЁЯзТ Explain like I'm 5

The gate has a list: visitors may knock on room 443, staff from the office may use the caretaker's door 22, nobody may enter the record room from outside. Envelopes that break the rule are not refused тАФ they are silently dropped, so the sender waits and waits. The gate also does NAT: inside, everyone has a private address; leaving, every envelope is re-labelled with the school's one public address and the gate remembers who asked so the reply finds its way back. A VPN is a tunnel through the gate: from home, you are "inside".

ЁЯЧ║я╕П Diagram

flowchart LR
  W["ЁЯМН world"] -->|443 allow| G["ЁЯЪз the gate<br/>firewall + NAT"]
  O["ЁЯПв office IP"] -->|22 allow| G
  W -.->|5432 DROP| G
  G --> A["app :443"] ; G --> C["caretaker :22"] ; G -.- D["record room :5432 (inside only)"]

тЭУ What

ЁЯдФ Why

Most "cannot connect" incidents after a deploy are a rule that was not added, or one added to the wrong wing. Least privilege тАФ 443 to everyone, 22 to you, the database to the app's subnet only тАФ is a five-line policy that prevents most breaches.

ЁЯФз How (in this repo)

connect_ex in ports() returns immediately for closed rooms; set the timeout to 3 s and try a firewalled host to feel the difference.

ЁЯзк Try it

python3 net/demo.py ports                               # closed rooms answer fast
nc -zv -w 3 example.com 8443 ; echo "exit $?"           # a port the gate drops: ~3 s, then timed out
nc -zv -w 3 example.com 443                             # the allowed room: succeeded
ssh -L 15432:db.internal:5432 bastion.example -N &      # (if you have one) a tunnel: localhost:15432 is now the record room

тЬЕ Verify тАФ what you should see

Closed local ports: closed instantly. 8443 on example.com: a three-second wait then a timeout тАФ the gate. 443: succeeded!. Refused is fast, dropped is slow: that is the whole diagnostic.

ЁЯПБ What you just proved

You can tell an empty room from a locked gate by the shape of the failure, and explain why your laptop's address never appears on the internet.

тЪая╕П Common mistakes

ЁЯПн Why this matters in production: security groups, NACLs, WAFs and zero-trust proxies are this gate at different layers; every cloud outage post-mortem with "misconfigured rule" is this lesson.

тПня╕П Next

Lesson 11 тАФ load balancers, proxies & CDNs: the reception desk in front of many rooms, and the copy near the reader.

тЖР PreviousroutingNext тЖТload balancers cdn

This page is the lesson's README from the lesson-10-firewalls-nat-vpn branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.