Ravindra BagaleCourses & study guides English

AWS मध्ये Security Group vs NACL

मागच्या chapter मध्ये आपण VPC चे subnets केले आणि internet gateway व route table ने त्यातला एक public केला, AWS VPC मध्ये Public आणि Private Subnets कसे बनवायचे. या chapter मध्ये ते सगळं प्रत्यक्ष वापरायचं. Default VPC आणि custom VPC ची तुलना, VPC चा खर्च, web, app आणि database tier साठी custom VPC, phone पासून web server पर्यंत एका request चा प्रवास, आणि त्या रस्त्यावरचे दोन firewalls: security group आणि network ACL (NACL). एक stateful आणि दुसरा stateless का, ephemeral ports म्हणजे काय, NACL rule numbers कोणाला आत सोडायचं ते कसं ठरवतात, public Nginx .php requests private app server कडे कसा देतो, आणि PHP private IP वरच्या database ला कसा पोचतो, हे सगळं बघू. शेवटी एक puzzle: ज्या server ला internet च नाही, त्याच्यावर काहीही install कसं करायचं?

या class मध्ये काय शिकणार

  • Default VPC vs custom VPC
  • VPC चा खर्च आणि काय free आहे
  • तीन tiers साठी custom VPC: एक public, दोन private subnets
  • Web server पर्यंत एका request चा प्रवास
  • Security group vs NACL
  • Stateful vs stateless, आणि ephemeral ports
  • NACL rules: rule numbers, order आणि gaps
  • Nginx .php requests private app server कडे पाठवतो
  • PHP private IP वरच्या database ला connect होतो
  • Console मध्ये बनवणे

1. Custom VPC का

का: खऱ्या application ला तीन tiers असतात: web, app आणि database. फक्त web tier internet ला दिसायला हवा. App आणि database servers वर code आणि data असतो, म्हणून बाहेरच्या कुणालाच तिथपर्यंत पोचता यायला नको.

काय: custom VPC म्हणजे तुम्ही स्वतः design केलेला VPC: तुमचा CIDR, तुमचे subnets, आणि कुठला subnet public ते तुमचा निर्णय. AWS प्रत्येक account ला एक default VPC पण देतो, आणि दोघांचं वागणं खूप वेगळं आहे.

Classroom line

If AWS feels complex to someone from the very start, they will leave AWS.

2. Default VPC vs custom VPC

Default VPC का असतो: नवशिक्याला networks बद्दल काहीही माहीत नसताना पहिल्या मिनिटात server launch करता यावा म्हणून.

  1. AWS प्रत्येक Region मध्ये एक default VPC बनवतो, CIDR 172.31.0.0/16.
  2. त्यात प्रत्येक Availability Zone मध्ये एक default /20 subnet असतो.
  3. Internet gateway आधीच attach केलेला असतो.
  4. त्याच्या main route table मध्ये आधीच 0.0.0.0/0 → internet gateway असतो, म्हणून प्रत्येक default subnet public.

Custom VPC रिकामा सुरू होतो:

  1. तुम्ही बनवेपर्यंत subnets नाहीत.
  2. तुम्ही attach करेपर्यंत internet gateway नाही.
  3. Main route table मध्ये फक्त local route, म्हणून route add करेपर्यंत सगळं private.

Rule: default VPC शिकण्यासाठी आणि quick tests साठी. Production साठी custom VPC बनवा, म्हणजे तुम्ही निवडलेलेच subnets public होतील.

Classroom line

In the default VPC, the main route table is a public route table by default.

Default VPC vs custom VPC कोण बनवतो Default VPC: AWS, प्रत्येक Region मध्ये   Custom VPC: तुम्ही CIDR Default VPC: 172.31.0.0/16   Custom VPC: तुमची निवड, उदा. 10.0.0.0/16 Subnets Default VPC: प्रत्येक AZ मध्ये एक /20   Custom VPC: तुम्ही बनवेपर्यंत एकही नाही Internet gateway Default VPC: Attached   Custom VPC: तुम्ही attach करेपर्यंत नाही Main route table Default VPC: local + 0.0.0.0/0 IGW कडे   Custom VPC: फक्त local (private) परिणाम Default VPC: प्रत्येक default subnet public   Custom VPC: Route add करेपर्यंत private कशासाठी Default VPC: शिकणे आणि quick tests   Custom VPC: Production

Figure 1. Default VPC (172.31.0.0/16) सोबत प्रत्येक AZ मध्ये subnet, internet gateway आणि public main route table येतो, म्हणून प्रत्येक default subnet public. Custom VPC काहीही नसताना सुरू होतो आणि route add करेपर्यंत private राहतो.

3. Route tables: थोडक्यात आठवण

Route table मध्ये दोन columns, डावीकडून उजवीकडे वाचायचे: Destination (एक CIDR) आणि Target (कुठे पाठवायचं). Details Route tables: Destination and Target मध्ये आहेत. या chapter साठी तीन गोष्टी लागतात:

  1. प्रत्येक route table मध्ये 10.0.0.0/16 → local असतो, म्हणून VPC चे सगळे subnets एकमेकांशी बोलू शकतात.
  2. Public route table मध्ये 0.0.0.0/0 → igw-... असतो. Private route table मध्ये नसतो.
  3. ज्या subnet चं explicit association नाही, तो main route table वापरतो.

4. VPC चा खर्च

का महत्त्वाचं: students गोष्टी चालू ठेवतात आणि bill येतं. कुठले parts free आहेत ते माहीत हवं.

Free:

  1. VPC स्वतः, subnets आणि route tables.
  2. Internet gateway.
  3. Security groups आणि network ACLs.

पैसे लागतात:

  1. AWS मधून internet कडे जाणारा data. दर महिन्याचे पहिले 100 GB free; त्यानंतर प्रत्येक GB ला charge.
  2. Public IPv4 addresses, प्रत्येक public IP ला तासाप्रमाणे charge, वापरा किंवा नका वापरू.
  3. NAT gateways, तासाप्रमाणे आणि त्यातून जाणाऱ्या प्रत्येक GB प्रमाणे charge.

5. तीन tiers साठी custom VPC

Plan (VPC 10.0.0.0/16, प्रत्येक tier ला एक /20):

  1. Public subnet 10.0.0.0/20: Nginx आणि HTML pages (उदा. signup.html) असलेला web server.
  2. Private subnet 10.0.16.0/20: PHP असलेला app server.
  3. Private subnet 10.0.32.0/20: MySQL (MariaDB) असलेला database server.
  4. Public route table: 10.0.0.0/16 → local आणि 0.0.0.0/0 → internet gateway. फक्त web subnet associate करा.
  5. Private route table: फक्त 10.0.0.0/16 → local. App आणि DB subnets तो वापरतात.

App आणि DB servers ना internet कडे route नाही आणि public IP नाही, म्हणून बाहेरून कोणी तिथपर्यंत पोचू शकत नाही. local route मुळे ते web server शी मात्र बोलू शकतात.

3-tier app साठी custom VPC Internet Internet gateway VPC 10.0.0.0/16 Public subnet: web 10.0.0.0/20 Nginx, signup.html public route table (web subnet) Destination Target 10.0.0.0/16 local 0.0.0.0/0 igw-0abc Private subnet: app 10.0.16.0/20 PHP Private subnet: DB 10.0.32.0/20 MySQL (MariaDB) private route table (app + DB subnets) Destination Target 10.0.0.0/16 local Internet कडे route नाही: बाहेरून app किंवा DB पर्यंत कोणी पोचतनाही.

Figure 2. Custom VPC 10.0.0.0/16: public web subnet 10.0.0.0/20 (Nginx), private app subnet 10.0.16.0/20 (PHP) आणि private DB subnet 10.0.32.0/20 (MySQL). फक्त public route table मध्ये 0.0.0.0/0 internet gateway कडे.

6. एका request चा प्रवास

समजा आपण Instagram आहोत, Mumbai Region (ap-south-1) मध्ये host केलेलं, आणि एक user phone वर signup page उघडतो. Request असा प्रवास करते:

  1. Phone → mobile tower → internet.
  2. Internet → AWS Mumbai Region.
  3. Internet gateway: VPC चं दार.
  4. Route table: request web subnet कडे पाठवतो.
  5. NACL: subnet चा firewall.
  6. Security group: server चा firewall.
  7. Web server वरचा Nginx उत्तर देतो.

म्हणजे request दोन firewalls मधून जाते: आधी subnet च्या दारावर NACL, मग server च्या दारावर security group.

Classroom line

Got it? See whether you follow this path.

Web server पर्यंत एका request चा प्रवास Phone → Mobile tower → Internet 1. Request phone पासून internet वरून AWS Region पर्यंतजाते AWS Mumbai → IGW → Route table 2. Internet gateway मधून VPC मध्ये येते; route table तीsubnet कडे पाठवतो NACL → SG · VPC च्या आत 3. Subnet च्या दारावर NACL check करतो, server च्यादारावर security group Nginx 4. Web server वरचा Nginx उत्तर देतो

Figure 3. Animation: phone, tower, internet, AWS Mumbai; मग VPC च्या आत internet gateway, route table, NACL (subnet चं दार), security group (server चं दार), आणि शेवटी Nginx.

7. Security group vs NACL

Security group: instance वरचा (त्याच्या network card वरचा) firewall. तो तुम्ही Security groups chained tier by tier मध्ये पाहिला.

NACL (network access control list): subnet वरचा firewall. Subnet मधला प्रत्येक server त्याच्या मागे असतो.

दोन्ही का: समजा एक IP आपल्यावर attack करतोय. एका /20 subnet मध्ये 4,091 servers बसू शकतात. फक्त security groups असतील तर प्रत्येक server चे rules बदलावे लागतील, आणि वाईट traffic तरीही प्रत्येक server पर्यंत पोचेल. NACL मधला एक deny rule ते subnet च्या दारावरच थांबवतो, कुठल्याही server पर्यंत पोचण्याआधी.

Classroom line

Why are you putting that load on the server?

Security group vs NACL कुठे काम करतो SG: Instance (त्याचं network card)   NACL: Subnet Rules SG: फक्त allow   NACL: Allow आणि deny State SG: Stateful: reply आपोआप allowed   NACL: Stateless: reply ला वेगळा rule Rule order SG: सगळे rules एकत्र check   NACL: सर्वात लहान number आधी, पहिला matchजिंकतो Defaults SG: Inbound सगळं deny, outbound सगळं allow   NACL: Default NACL सगळं allow; नवीन सगळं deny एक IP block SG: शक्य नाही   NACL: हो, deny rule ने SG = Security group

Figure 4. Security group: instance level, फक्त allow rules, stateful, सगळे rules एकत्र check. NACL: subnet level, allow आणि deny, stateless, सर्वात लहान rule number आधी. एक IP block फक्त NACL करू शकतो.

आणखी तुलना Security group vs NACL मध्ये आहे.

8. Stateful vs stateless

Stateful (security group): तो प्रत्येक connection लक्षात ठेवतो. Request आत allowed झाली असेल, तर तिचा reply आपोआप बाहेर allowed. तुम्ही फक्त inbound rule लिहायचा.

Stateless (NACL): त्याला काहीच लक्षात राहत नाही. आत येणारी request आणि बाहेर जाणारा reply वेगवेगळे check होतात, म्हणून request साठी inbound rule आणि reply साठी outbound rule दोन्ही लागतात.

Classroom line

This is exactly what they ask in interviews.

9. Ephemeral ports: reply कुठे जातो

का महत्त्वाचं: NACL outbound rule चुकीच्या port साठी लिहिला तर page कधीच load होत नाही.

Worked example: एक phone आपल्या web server वर https:// उघडतो.

  1. Phone या connection साठी एक random मोठा port निवडतो, उदा. 41296. हा ephemeral (थोड्या वेळाचा) port.
  2. Request phone च्या port 41296 कडून server च्या port 443 कडे जाते.
  3. Server स्वतःच्या port 443 वरून phone च्या port 41296 ला reply करतो. Server दुसऱ्या port वर जात नाही.
  4. Security group: stateful, म्हणून reply आपोआप allowed.
  5. NACL: stateless, म्हणून reply ला outbound rule लागतो. Phone चा port random असतो, म्हणून पूर्ण ephemeral range allow करा: 0.0.0.0/0 कडे outbound 1024-65535.

उलटी बाजू: server स्वतः call करतो, उदा. sudo yum install nginx -y, तेव्हा server client असतो. तो ephemeral port निवडतो आणि replies त्याच्याकडे परत येतात. म्हणून NACL inbound rules मध्ये पण 1024-65535 allow हवे.

Ephemeral ports: reply client च्या random port वरपरत जातो तुमचा phone port 41296 random, client ने निवडलेला 41296 -> 443 1. Request: port 41296 कडून port 443 कडे NACL inbound: 0.0.0.0/0 कडून 443 allow. SG inbound: 0.0.0.0/0 कडून 443allow. Web server port 443 Nginx 443 -> 41296 2. Security group stateful आहे त्याला request लक्षात राहते, म्हणून 443 कडून 41296 कडे जाणाराreply आपोआप allowed. 3. NACL stateless आहे तो reply परत check करतो. NACL outbound मध्ये 0.0.0.0/0 कडे ports1024-65535 allow हवे. Server च्या स्वतःच्या calls साठी (sudo yum install): replies साठीNACL inbound मध्ये 1024-65535 allow हवे.

Figure 5. Animation: request port 41296 कडून 443 कडे जाते; security group 443 कडून 41296 कडे जाणारा reply आपोआप सोडतो; NACL ला 1024-65535 साठी outbound rule लागतो.

10. Defaults

  1. Security group: inbound सगळं deny, outbound सगळं allow. तुम्ही फक्त allow rules add करता; deny rule नसतोच.
  2. Default NACL (VPC सोबतच बनलेला): सगळं traffic आत आणि बाहेर allow. तुम्ही दुसरा निवडेपर्यंत प्रत्येक नवीन subnet तोच वापरतो.
  3. तुम्ही बनवलेला NACL: rules add करेपर्यंत सगळं traffic आत आणि बाहेर deny.

म्हणून एक IP block करायला security group काही करू शकत नाही: त्यात deny नाही. NACL deny rule लागतो.

Classroom line

In a security group we don't block, we only allow.

11. NACL rules: सर्वात लहान number जिंकतो

प्रत्येक NACL rule मध्ये: Rule number, Type, Protocol, Port range, Source (inbound) किंवा Destination (outbound), आणि Allow किंवा Deny.

NACL कसं ठरवतो:

  1. तो सर्वात लहान rule number पासून वर rules check करतो.
  2. पहिला match होणारा rule निर्णय घेतो. बाकीचे वाचले जात नाहीत.
  3. शेवटचा rule, *, काहीच match न झालेलं सगळं deny करतो. तो delete करता येत नाही.

Worked example. समजा आपण Instagram आहोत. Attacker 3.3.3.3 port 80 वर flood करतोय; normal user 7.7.7.7 आहे.

चुकीचा order:

  1. Rule 1: 0.0.0.0/0 कडून HTTP 80 allow.
  2. Rule 2: 3.3.3.3/32 कडून HTTP 80 deny.
  3. Attacker ची request आधी rule 1 ला match होते: allowed. Rule 2 वाचलाच जात नाही.

बरोबर order:

  1. Rule 1: 3.3.3.3/32 कडून HTTP 80 deny.
  2. Rule 2: 0.0.0.0/0 कडून HTTP 80 allow.
  3. 3.3.3.3 rule 1 ला match: denied.
  4. 7.7.7.7 rule 1 ला match होत नाही, rule 2 ला होतो: allowed.

Rule: deny rule ला, तो ज्या allow rule ला हरवायचा आहे त्यापेक्षा लहान number द्या.

Classroom line

The smaller the rule number, the higher its priority.

NACL: सर्वात लहान rule number आधी, पहिला matchजिंकतो चुकीचा order: attacker 3.3.3.3 port 80 ला request पाठवतो #  Type Port Source      Allow/Deny 1  HTTP 80   0.0.0.0/0     ALLOW 2  HTTP 80   3.3.3.3/32    DENY *  ALL  ALL  0.0.0.0/0     DENY Rule 1 आधी match: ALLOW. Rule 2 वाचलाच जात नाही. Attacker आतयेतो. बरोबर order: deny rule ला लहान number #  Type Port Source      Allow/Deny 1  HTTP 80   3.3.3.3/32    DENY 2  HTTP 80   0.0.0.0/0     ALLOW *  ALL  ALL  0.0.0.0/0     DENY 3.3.3.3 rule 1 ला match: DENY. User 7.7.7.7 rule 1 skip, rule 2 match:ALLOW.

Figure 6. Animation: allow rule 1 असेल तर attacker 3.3.3.3 आत येतो कारण rule 2 वाचलाच जात नाही. Deny rule 1 असेल तर 3.3.3.3 denied आणि 7.7.7.7 rule 2 ने allowed.

12. Rule numbers मध्ये gaps सोडा

का: site live आहे. पुढच्या आठवड्यात attacker 4.4.4.4 वर जातो. तुमचे rules 1, 2, 3 असतील तर allow rule च्या वर नवीन deny ठेवायला जागाच नाही, आणि live rules renumber करणं risky.

कसं: rules टप्प्याटप्प्याने number करा, उदा. 10, 20 ... 100.

  1. Live rules: 10 deny 3.3.3.3/32, 100 allow 0.0.0.0/0, * deny.
  2. Attacker 4.4.4.4 वर गेला: 4.4.4.4/32 कडून HTTP 80 deny करणारा rule 20 add करा.
  3. Rule 20, 10 आणि 100 च्या मध्ये बसतो. कुठलाही live rule बदलत नाही.

Limits: rule numbers 1 ते 32766. एका NACL ला by default 20 inbound आणि 20 outbound rules; AWS ते प्रत्येकी 40 पर्यंत वाढवू शकतो. Rules कधीही edit किंवा delete करता येतात.

Classroom line

Once the website is live, changing rule numbers later is a big problem.

Rule numbers मध्ये gaps सोडा आधी: live website #    Type Port Source      Allow/Deny 10   HTTP 80   3.3.3.3/32    DENY 100  HTTP 80   0.0.0.0/0     ALLOW *    ALL  ALL  0.0.0.0/0     DENY Attacker 4.4.4.4 वर गेला: gap मध्ये rule 20 add करा #    Type Port Source      Allow/Deny 10   HTTP 80   3.3.3.3/32    DENY 20   HTTP 80   4.4.4.4/32    DENY 100  HTTP 80   0.0.0.0/0     ALLOW *    ALL  ALL  0.0.0.0/0     DENY Rule 20, 10 आणि 100 च्या मध्ये बसतो. कोणताही live rule renumberहोत नाही. Rule numbers: 1 ते 32766. Default limit: 20 inbound + 20 outbound.

Figure 7. Live rules 10 (3.3.3.3 deny) आणि 100 (सगळं allow). Attacker 4.4.4.4 वर गेला की rule 20 gap मध्ये बसतो आणि काहीच renumber होत नाही.

13. एक public server: .php app server कडे पाठवा

का: या design मध्ये internet पर्यंत पोचणारा web server हा एकच server आहे. HTML, images आणि CSS थेट त्याच्यावरून देता येतात. पण PHP code private app server वर आहे.

Classroom line

That is the only server that is public.

समजा आपण Instagram आहोत: page /get_reels.php मागतं. Public Nginx ने ती request app server कडे द्यायची आणि उत्तर browser ला परत पाठवायचं. याला reverse proxy म्हणतात, Put Nginx in front as the reverse proxy सारखं.

कसं (web server वर):

  1. Config उघडा: sudo nano /etc/nginx/nginx.conf.
  2. server { ... } block च्या आत add करा:

    location ~ \.php$ {
        proxy_pass http://10.0.16.7;
    }
    
  3. ~ म्हणजे "पुढचा भाग regular expression आहे". \.php$ म्हणजे "path .php ने संपतो" (\. म्हणजे खरा dot, $ म्हणजे शेवट).

  4. 10.0.16.7 हा app server चा private IP. तुमच्या स्वतःच्या app server चा IP वापरा; तो app subnet 10.0.16.0/20 च्या आतला हवा.
  5. Config test करा: sudo nginx -t.
  6. Reload: sudo service nginx reload.

आता /signup.html web server स्वतः देतो, आणि /get_reels.php app server कडे जातं.

14. App server पण request ला उत्तर देतो

Request app server पर्यंत HTTP वरून पोचते, म्हणून ती घ्यायला app server ला पण web server लागतो: त्याचा स्वतःचा private Nginx आणि php-fpm, The server: Nginx, php-fpm and MariaDB प्रमाणे setup केलेला. तो Nginx .php file php-fpm ला देतो, PHP HTML बनवतो, आणि उत्तर public Nginx मधून browser कडे परत जातं.

Classroom line

On the PHP server, who will handle the request and the response?

App server चा security group: HTTP 80 allow करा, source = web server चा security group. बाकी कोणीही त्याला call करू शकत नाही.

15. PHP private IP वरच्या database ला connect होतो

Connect व्हायला PHP ला चार values लागतात: server name, username, password, database name (The four connection values). Database त्याच server वर असतो तेव्हा server name localhost असतं. आता तो स्वतःच्या server वर आहे, म्हणून फक्त server name बदलतं, DB server च्या private IP मध्ये:

$servername = "10.0.32.10";         // DB server's private IP (example)
$username   = "appuser";
$password   = "YOUR_APP_PASSWORD";
$database   = "insta";

10.0.32.10 हे DB subnet 10.0.32.0/20 मधलं उदाहरण; तुमच्या DB server चा स्वतःचा private IP वापरा.

Classroom line

Where will the query run? On this MySQL server.

DB server वर तीन गोष्टी नक्की करा:

  1. Network वर listen करा. /etc/my.cnf.d/mariadb-server.cnf मध्ये bind-address 127.0.0.1 नसावा (ती line काढा किंवा bind-address=0.0.0.0 ठेवा). मग sudo service mariadb restart.
  2. App server च्या IPs साठी user, localhost साठी नाही:

    CREATE USER 'appuser'@'10.0.16.%' IDENTIFIED BY 'YOUR_APP_PASSWORD';
    GRANT ALL PRIVILEGES ON insta.* TO 'appuser'@'10.0.16.%';
    

    10.0.16.% म्हणजे "10.0.16. ने सुरू होणारा कुठलाही IP", म्हणजे app subnet मधून. 3. DB server चा security group: MySQL/Aurora 3306 allow करा, source = app server चा security group.

साखळी: web SG 0.0.0.0/0 कडून 80/443 allow करतो → app SG फक्त web SG कडून 80 → DB SG फक्त app SG कडून 3306.

एक public web server, मागे PHP आणि MySQL लपलेले Browser समजा आपण Instagram आहोत GET /signup.html · publicNginx देतो Web: 10.0.0.0/20 public Nginx location ~ \.php$ { proxy_pass http://10.0.16.7; } GET /get_reels.php · .php नेसंपते: proxy App: 10.0.16.7 private Nginx + php-fpm servername = 10.0.32.10 username, password, database name SQL query · MySQL server वरचालते DB: 10.0.32.10 MariaDB, port 3306 network वर listen (bind-address) app साठी user: 'app'@'10.0.16.%' Security groups, साखळी: web SG: 0.0.0.0/0 कडून 80/443 -> app SG: फक्त web SG कडून 80 -> DB SG:फक्त app SG कडून 3306 DB IP 10.0.32.10 हे उदाहरण; तुमच्या DB server चा स्वतःचा private IPवापरा.

Figure 8. /signup.html public Nginx देतो; /get_reels.php .php ने संपतं, म्हणून ते app server 10.0.16.7 (Nginx + php-fpm) कडे proxy होतं, आणि तिथला PHP DB server च्या private IP वरच्या MariaDB ला connect होतो. Security groups साखळी web → app → DB.

16. Console मध्ये बनवा

Part A: network (Build it in the console प्रमाणे)

  1. VPC > Your VPCs > Create VPC, VPC only, name my-vpc, IPv4 CIDR 10.0.0.0/16.
  2. Subnets बनवा: web-a (10.0.0.0/20, ap-south-1a), app-b (10.0.16.0/20, ap-south-1b), db-c (10.0.32.0/20, ap-south-1c).
  3. Internet gateway my-igw बनवा आणि attach करा.
  4. public-rt बनवा: 0.0.0.0/0 → my-igw add करा, फक्त web-a associate करा.
  5. app-b आणि db-c main route table वरच राहू द्या, त्यात फक्त local आहे.

Part B: security groups (EC2 > Security Groups > Create security group, VPC my-vpc)

  1. web-sg: inbound HTTP 80 आणि HTTPS 443 0.0.0.0/0 कडून, SSH 22 My IP कडून.
  2. app-sg: inbound HTTP 80, source web-sg.
  3. db-sg: inbound MySQL/Aurora 3306, source app-sg.

Part C: servers

  1. Web server web-a मध्ये web-sg सोबत launch करा, Auto-assign public IP: Enable.
  2. App server app-b मध्ये app-sg सोबत launch करा, Auto-assign public IP: Disable.
  3. DB server db-c मध्ये db-sg सोबत launch करा, Auto-assign public IP: Disable.

Part D: एक NACL deny rule

  1. VPC > Network ACLs, web-a ला associate असलेला NACL (default वाला) select करा. त्यात सगळं traffic allow करणारा rule 100 आणि deny करणारा * आहे.
  2. Inbound rules > Edit inbound rules > Add new rule: Rule number 10, Type HTTP (80), Source 3.3.3.3/32, Deny. Save changes.
  3. Rule 10 हा 100 पेक्षा लहान, म्हणून तो आधी check होतो.

NACL rules बद्दल आणखी: Network ACL: inbound and outbound rules.

17. काही चुकलं तर

  1. स्वतःचा NACL बनवल्यावर page काहीच load करत नाही: नवीन NACL सगळं deny करतो. Inbound 80/443 आणि outbound 1024-65535 add करा.
  2. Custom NACL असताना web server वर sudo yum install अडकतं: replies ephemeral ports वर परत येतात. Inbound 1024-65535 allow करा.
  3. Block केलेला IP तरीही आत येतो: त्याच्या deny rule चा number आधी match होणाऱ्या allow rule पेक्षा मोठा आहे.
  4. .php pages 502 Bad Gateway देतात: app server port 80 वर उत्तर देत नाहीये. त्याचा Nginx आणि php-fpm check करा, आणि app-sg web-sg कडून 80 allow करतो का ते बघा.
  5. PHP database ला connect होत नाही: $servername मधला private IP, bind-address, user 'appuser'@'10.0.16.%', आणि db-sg app-sg कडून 3306 allow करतो का ते check करा.
  6. nginx -t fail होतं: location block मध्ये ; किंवा } राहिलाय.

Ravindra Bagale's Tip

"या server शी कोण बोलू शकतं" यासाठी security groups वापरा आणि NACLs साधे ठेवा: default allow-all, आणि block करायच्या IPs साठी deny rules, 10 च्या टप्प्याने numbered. काही बंद पडलं तर request ज्या क्रमाने जाते त्याच क्रमाने check करा: route table, NACL, security group, मग server वरची service.

18. Puzzle: private server वर PHP

Web server सोपा होता:

  1. Laptop वरून त्याच्या public IP वर SSH.
  2. sudo yum install nginx -y
  3. sudo service nginx start
  4. HTML files scp ने copy.

आता app server वर PHP install करा. दोन गोष्टी अडवतात:

  1. Public IP नाही: laptop वरून त्याला SSH करता येत नाही.
  2. Internet कडे route नाही: आत गेलात तरी sudo yum install php -y काहीच download करू शकत नाही.

Classroom line

That PHP server has no public IP.

Classroom line

It has no internet at all, so where will it install from?

Puzzle: private app server वर PHP कसा installकरायचा? तुमचा laptop SSH VPC 10.0.0.0/16 Public subnet: web sudo yum install nginx -y ✓ चालतं: public IP + IGW कडे route Private subnet: app sudo yum install php -y ✗ 1. Public IP नाही: laptop वरून SSH करता येत नाही ✗ 2. Internet कडे route नाही: yum packages download करू शकत नाही Package repos internet वर

Figure 9. Public web server वर Nginx सहज install होतो. Private app server ला public IP नाही (laptop वरून SSH नाही) आणि internet कडे route नाही (yum download करू शकत नाही), म्हणून sudo yum install php -y अजून चालू शकत नाही.

पुढे वाचण्याआधी विचार करा: त्या server पर्यंत कसं पोचाल, आणि तो public न होता packages कसे download करेल? उत्तर, bastion host आणि NAT gateway, पुढच्या chapter मध्ये आहे: How to Access a Private EC2 with a Bastion Host and NAT Gateway.

Classroom line

Switch on the light bulb in your brain.

19. संपूर्ण class एका page वर

  1. Default VPC: 172.31.0.0/16, प्रत्येक AZ मध्ये subnet, IGW attached, public main route table. Custom VPC: तुम्ही बनवेपर्यंत रिकामा आणि private.
  2. Free: VPC, subnets, route tables, IGW, SGs, NACLs. पैसे: 100 GB/महिना नंतर data out, public IPv4, NAT gateways.
  3. तीन tiers: web public subnet मध्ये, app आणि DB local-only route table वरच्या private subnets मध्ये.
  4. Request चा रस्ता: internet → IGW → route table → NACL (subnet) → SG (instance) → server.
  5. SG: instance level, फक्त allow, stateful. NACL: subnet level, allow आणि deny, stateless.
  6. Reply server च्या port (443) कडून client च्या ephemeral port कडे जातो; NACLs ना replies साठी 1024-65535 allow लागतं.
  7. Defaults: SG आत सगळं deny, बाहेर सगळं allow; default NACL सगळं allow; नवीन NACL सगळं deny.
  8. NACL: सर्वात लहान rule number आधी, पहिला match जिंकतो, * बाकी deny करतो. Deny allow च्या आधी ठेवा, आणि टप्प्याने number करा.
  9. Rule numbers 1-32766; by default 20 inbound + 20 outbound rules.
  10. Public Nginx: location ~ \.php$ { proxy_pass http://<app private IP>; }, मग sudo nginx -t आणि reload.
  11. PHP चा $servername DB चा private IP होतो; DB network वर listen करायला हवा आणि 10.0.16.% साठी user हवा; SGs साखळी web → app → DB.

20. घरी करून बघा

घरी करून बघा

Task 1: कागदावर

  1. 5.5.5.5 आणि 6.6.6.6 ला port 80 वरून block करणारे आणि बाकी सगळ्यांना allow करणारे NACL inbound rules लिहा. Gaps सोडा.
  2. एक phone port 50123 वरून तुमच्या server च्या port 443 ला connect होतो. Reply चे source आणि destination ports लिहा.

Task 2: console मध्ये

  1. web-a, app-b आणि db-c, IGW आणि public-rt सोबत my-vpc बनवा (section 16).
  2. साखळी sources सोबत web-sg, app-sg आणि db-sg बनवा.
  3. web-a मध्ये web server launch करा, Nginx install करा, आणि त्याचा public IP browser मध्ये उघडा.

Task 3: NACL prove करा

  1. तुमच्या स्वतःच्या public IP कडून HTTP 80 deny करणारा inbound rule 10 add करा (laptop वर curl ifconfig.me तो दाखवतो). Page reload करा: fail होतं.
  2. Rule number 200 करा आणि save करा. Reload: page load होतं, कारण rule 100 आधी allow करतो.
  3. Rule delete करा. Clean up: servers terminate करा, security groups, subnets, route table, IGW आणि VPC delete करा.

Recap

थोडक्यात

  1. Default VPC सगळीकडे public; custom VPC तुम्ही उघडेपर्यंत private.
  2. फक्त web subnet ला internet gateway कडे route; app आणि DB private राहतात.
  3. Request आधी subnet वर NACL ला, मग server वर security group ला भेटते.
  4. Security groups stateful आणि फक्त allow; NACLs stateless आणि deny करू शकतात.
  5. सर्वात लहान NACL rule number जिंकतो; नंतरच्या rules साठी gaps सोडा.
  6. Public Nginx .php private app server कडे proxy करतो, आणि PHP DB ला private IP ने पोचतो.

सराव Tasks

या scenario बद्दल

Maple Leaf Books हा टोरांटो मधला पुस्तक विक्री व्यवसाय आहे. Emily Tremblay त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे CAD मध्ये मोजले जातात आणि AWS resources ca-central-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 12

सोपं /16 मध्ये किती addresses?

का: VPC size ठरवायला ही संख्या लागते.

काय करायचं: Maple Leaf Books चा VPC 10.131.0.0/16. एकूण किती IP addresses?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

सोपं VPC बनवा

का: VPC म्हणजे AWS मधलं तुमचं स्वतःचं private network.

काय करायचं: 10.5.0.0/16 CIDR block असलेला VPC बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं Internet gateway बनवा

का: Internet gateway शिवाय VPC मधलं काहीही internet ला पोचत नाही.

काय करायचं: नवा internet gateway बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम एका AZ मध्ये subnet बनवा

का: Subnets VPC range वाटतात व प्रत्येक एकाच AZ मध्ये असतो.

काय करायचं: vpc-0e32412000deadbee मध्ये ca-central-1a मध्ये 10.5.1.0/24 subnet बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Internet route जोडा

का: Route table 0.0.0.0/0 internet gateway ला पाठवत असेल तरच subnet "public".

काय करायचं: Route table rtb-002d32412000bb22 मध्ये सगळं internet traffic (0.0.0.0/0) igw-02d32412000aa11 कडे पाठवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम VPC router address शोधा

का: AWS router साठी base+1 राखतो.

काय करायचं: 10.131.4.0/24 मध्ये VPC router साठी AWS कोणता address राखतो?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

मध्यम AWS /24 subnet मधले usable IPs

का: AWS प्रत्येक subnet मध्ये 5 addresses राखून ठेवतो.

काय करायचं: AWS वर 10.131.1.0/24 subnet मध्ये Maple Leaf Books servers साठी किती addresses वापरू शकतो?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

मध्यम Subnet route table शी जोडा

का: Associate करेपर्यंत subnet main route table वापरतो.

काय करायचं: Subnet subnet-002d32412000bb1 ला route table rtb-002d32412000bb22 शी associate करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Internet gateway attach करा

का: VPC ला attach केल्याशिवाय gateway काही करत नाही.

काय करायचं: igw-02d32412000aa11 ला vpc-0e32412000deadbee शी attach करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Server साठी पहिला usable IP

का: पहिले 4 addresses AWS राखतो.

काय करायचं: AWS वर 10.131.20.0/24 मध्ये server ला मिळणारा पहिला IP?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

अवघड सर्वात लहान prefix निवडा

का: योग्य size मुळे address space वाचतो.

काय करायचं: AWS वर subnet मध्ये 100 servers हवेत. बसणारा सर्वात मोठा prefix number? उदा. /25.

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

अवघड /24 चे दोन भाग

का: Public व private subnets एक block वाटून घेतात.

काय करायचं: 10.131.8.0/24 चे दोन समान subnets करा. दोन्ही CIDRs comma ने लिहा.

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

झटपट उजळणी cards

हा chapter दोन मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR त्याचा lesson उघडतो.

Security group vs NACL: SG works on the instance, is stateful and has allow rules only; NACL works on the subnet, is stateless and has allow and deny rules checked by number.
Card 1 of 1: Security group vs NACL · PNG download करा
तुलना card: Default VPC vs Custom VPC. Default VPC: AWS प्रत्येक Region मध्ये आपोआप बनवतो तो VPC. Custom VPC: तुम्ही स्वतः बनवलेला VPC.
तुलना: Default VPC vs Custom VPC · PNG download करा
तुलना card: Stateful vs Stateless. Stateful: प्रत्येक request लक्षात ठेवणारा firewall. Stateless: प्रत्येक packet वेगळा तपासणारा firewall.
तुलना: Stateful vs Stateless · PNG download करा
उजळणी card: VPC चा खर्च. Students VPC charges ला घाबरून practice टाळतात. VPC, subnets, route tables, IGW, SGs आणि NACLs free. NAT gateways आणि public IPv4 चे पैसे. Labs नंतर NAT gateways delete आणि IPs release. NAT ≈ $0.045 दर तास ≈ $32 दर महिना.
उजळणी card: VPC चा खर्च · PNG download करा
उजळणी card: NACL rules आणि क्रम. NACL पूर्ण subnet block करू शकतो; एक चुकीचा rule servers तोडतो. Rules सगळ्यात कमी number पासून तपासले जातात; पहिला match जिंकतो. * बाकी deny. Gaps मध्ये numbers (100, 200) म्हणजे नंतर rules घालता येतात. Rules:
उजळणी card: NACL rules आणि क्रम · PNG download करा
उजळणी card: Ephemeral ports. Port 80 आत allow करणारा NACL सुद्धा site तोडू शकतो. Replies client च्या random high port (1024-65535) ला जातात. NACLs stateless. NACL मध्ये outbound 1024-65535 allow करा. :51234 वरून :80 ला request; reply :51234 ला.
उजळणी card: Ephemeral ports · PNG download करा
मुलाखत card: Internet पासून VPC मधल्या web server पर्यंत request trace करा.. IGW › route table › NACL (subnet) › security group (instance) › Nginx. प्रत्येक layer block करू शकतो; याच क्रमाने debug. Timeout? Route, NACL, SG, मग nginx status.
मुलाखत card: Internet पासून VPC मधल्या web server पर्यंत request trace करा. · PNG download करा
मुलाखत card: Default VPC ऐवजी custom VPC का बनवायचा?. Default VPC मध्ये फक्त public subnets; custom VPC मध्ये private add करता येतात. Databases आणि app servers private हवेत. Custom 10.0.0.0/16: 1 public, 2 private subnets.
मुलाखत card: Default VPC ऐवजी custom VPC का बनवायचा? · PNG download करा
मुलाखत card: NACL मध्ये 100 ALLOW 80 आणि 90 DENY 80. Port 80 उघडा आहे का?. नाही. Rule 90 आधी तपासला जातो आणि जुळतो, म्हणून deny. NACLs सगळ्यात कमी जुळणारा number वापरतात. 90 delete करा किंवा renumber.
मुलाखत card: NACL मध्ये 100 ALLOW 80 आणि 90 DENY 80. Port 80 उघडा आहे का? · PNG download करा

अजून cards: Ravi Sir's Cards: AWS VPC and Subnets.