ЁЯЪз рдзрдбрд╛ 10 тАФ Firewalls, NAT рдЖрдгрд┐ VPNs: рдлрд╛рдЯрдХ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 10 ┬╖ рдкреБрдвреЗ: lesson-11-load-balancers-cdn
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ10. рдХреЛрдг рдХреЛрдгрддреНрдпрд╛ рдЦреЛрд▓реАрд╡рд░ knock рдХрд░реВ рд╢рдХрддреЛ: firewall, рдлрд╛рдЯрдХрд╛рд╡рд░рдЪреЗ рдкрддреНрддреНрдпрд╛рдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ (address translation), рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рдЬрд╛рдгрд╛рд░реЗ рдмреЛрдЧрджреЗ.
- net/demo.py тАФ
ports(рдмрдВрдж рдЦреЛрд▓реА рд▓рдЧреЗрдЪ рдирдХрд╛рд░ рджреЗрддреЗ) рдЖрдгрд┐route(NAT рдорд╛рдЧрдЪрд╛ рддреБрдордЪрд╛ рдЦрд╛рдЬрдЧреА рдкрддреНрддрд╛)
ЁЯзТ 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)"]
тЭУ рдХрд╛рдп
- Firewall: (source, destination, port, protocol) рд╡рд░рдЪреЗ рдирд┐рдпрдо тЖТ allow / deny. Stateful: рддреБрдореНрд╣реА рдЙрдШрдбрд▓реЗрд▓реНрдпрд╛ connections рдЪреА рдЙрддреНрддрд░реЗ рдкрд░рдд рдпреЗрдК рджрд┐рд▓реА рдЬрд╛рддрд╛рдд. Cloud security groups рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ instance рд╕рд╛рдареА stateful allow-lists, default рдиреЗ deny.
- NAT: рдЦрд╛рдЬрдЧреА source рдкрддреНрддреЗ рдПрдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрддреНрддреНрдпрд╛рдд рдмрджрд▓рддреЛ рдЖрдгрд┐ port-mapping table рдареЗрд╡рддреЛ. рдЖрдд рдпреЗрдгрд╛рд▒реНрдпрд╛рд╕рд╛рдареА рд╕реНрдкрд╖реНрдЯ port forward рд▓рд╛рдЧрддреЛ.
- Refused рд╡рд┐рд░реБрджреНрдз timed out: рдмрдВрдж port рд▓рдЧреЗрдЪ reset рдкрд╛рдард╡рддреЛ; firewall рдЧреБрдкрдЪреВрдк рдЯрд╛рдХреВрди рджреЗрддреЛ рдЖрдгрд┐ рддреБрдордЪрд╛ timeout рд╣реЛрддреЛ. error рдЪ рджреЛрд╖реАрдЪреЗ рдирд╛рд╡ рд╕рд╛рдВрдЧрддреЗ.
- Tunnels:
ssh -L local:host:portрдПрдХ рдЦреЛрд▓реА рдлрд╛рдЯрдХрд╛рддреВрди рдиреЗрддреЛ; VPN рддреБрдордЪреЗ рд╕рдВрдкреВрд░реНрдг machine рдиреЗрддреЛ.
ЁЯдФ рдХрд╛
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 рд╡рд░ рдХрдзреАрдЪ рдХрд╛ рджрд┐рд╕рдд рдирд╛рд╣реА рд╣реЗ рд╕рдордЬрд╛рд╡реВ рд╢рдХрддрд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- port 22 рдХрд┐рдВрд╡рд╛ 5432 рд╡рд░ "рддрд╛рддреНрдкреБрд░рддреЗ"
0.0.0.0/0. Bots рддреЗ рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдд рд╢реЛрдзрддрд╛рдд. - security group рдХрдзреА update рдЭрд╛рд▓рд╛рдЪ рдирд╡реНрд╣рддрд╛, рдЖрдгрд┐ рддрд╛рд╕рднрд░ app debug рдХрд░рдд рдмрд╕рдгреЗ.
- "VPN рдЪреНрдпрд╛ рдЖрдд" рдореНрд╣рдгрдЬреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕реВ рдЕрд╕реЗ рдорд╛рдирдгреЗ. рдЪреЛрд░рд▓реЗрд▓рд╛ laptop рд╕реБрджреНрдзрд╛ рдЖрдд рдЕрд╕рддреЛ (trade-offs рдЪреЗ рдкрд╛рди рдкрд╛рд╣рд╛).
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: security groups, NACLs, WAFs рдЖрдгрд┐ zero-trust proxies рдореНрд╣рдгрдЬреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ layers рд╡рд░рдЪреЗ рд╣реЗрдЪ рдлрд╛рдЯрдХ; "misconfigured rule" рдЕрд╕рд▓реЗрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ cloud outage рдЪрд╛ post-mortem рдореНрд╣рдгрдЬреЗ рд╣рд╛рдЪ рдзрдбрд╛.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 11 тАФ load balancers, proxies рдЖрдгрд┐ CDNs: рдЕрдиреЗрдХ рдЦреЛрд▓реНрдпрд╛рдВрд╕рдореЛрд░рдЪрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрдХреНрд╖, рдЖрдгрд┐ рд╡рд╛рдЪрдХрд╛рдЬрд╡рд│рдЪреА рдкреНрд░рдд.