Linux Host Firewalls Hands-On: iptables, nftables, firewalld आणि UFW
Lucas Meyer व Sneha Reddy: iptables, nftables, firewalld, ufw. फक्त firewall hands-on. SELinux/fail2ban: hardening survey.
या chapter मध्ये तुम्ही काय शिकाल
- चार tools कधी
- Port allow/deny
- Output वाचा
- curl/nc + persistent
- SG सोबत काम
1. रोजचे उदाहरण
SG = building gate; host FW = apartment lock. Port 9000 बंद — ufw किंवा nftables.
2. SG असताना host FW का?
हे का लागतं?
- Peer lateral movement
- Bastion default deny
- Local policy
- Compliance
3. Tool map
| Tool | Best on | Style |
|---|---|---|
| iptables | Legacy scripts | Chains |
| nftables | Modern distros | nft language |
| firewalld | RHEL family | Zones |
| ufw | Ubuntu | Simple CLI |
एकच backend
ufw + firewalld + raw iptables एकत्र = fight. Image मध्ये एक primary निवडा.
4. iptables hands-on
हे काय आहे?
iptables → netfilter. INPUT/OUTPUT/FORWARD. Policy ACCEPT/DROP.
कसं करायचं (step by step)
# View rules (filter table)
sudo iptables -L -n -v --line-numbers
# sample output meaning:
# Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
# num pkts bytes target prot opt in out source destination
# 1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
# → line 1 allows SSH (tcp/22) from anywhere
# Default deny incoming (careful: keep SSH allowed first!)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
# OUTPUT often left ACCEPT for beginners
# Delete a line
sudo iptables -D INPUT 3
Persist: iptables-persistent / netfilter-persistent. RHEL: service किंवा nft/firewalld.
5. nftables hands-on
# List
sudo nft list ruleset
# sample: table inet filter { chain input { type filter hook input priority 0; policy drop;
# ct state established,related accept
# tcp dport 22 accept
# } }
# Quick inet filter (IPv4+IPv6)
sudo nft add table inet filter
sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input tcp dport 22 accept
sudo nft add rule inet filter input tcp dport 80 accept
# Persist: save to /etc/nftables.conf and enable nftables.service
sudo nft list ruleset | sudo tee /etc/nftables.conf
sudo systemctl enable --now nftables
6. firewalld hands-on
# State and default zone
sudo firewall-cmd --state
# running
sudo firewall-cmd --get-default-zone
# public
# Allow HTTP permanently and reload
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
# sample: public (active)
# services: cockpit dhcpv6-client http ssh
# ports: 8080/tcp
# → http and 8080 are allowed in zone public
# Rich rule example: allow 10.0.0.0/24 to 3306
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 port port=3306 protocol=tcp accept'
sudo firewall-cmd --reload
7. ufw hands-on
sudo ufw status verbose
# Status: inactive
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
# or: sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# Command may ask for confirmation — say y
sudo ufw status numbered
# [ 1] 22/tcp ALLOW IN Anywhere
# [ 2] 80/tcp ALLOW IN Anywhere
# → SSH and HTTP allowed; everything else incoming denied by default
# Delete rule number 2
sudo ufw delete 2
ufw enable = reboot नंतरही rules.
8. curl आणि nc ने test
कसं करायचं (step by step)
# From a second host (or your laptop if SG allows)
curl -s -o /dev/null -w "%{http_code}\n" http://TARGET/
# 200 → web allowed; 000 / timeout → blocked or down
nc -vz TARGET 22
# Connection to TARGET 22 port [tcp/ssh] succeeded!
nc -vz TARGET 9000
# nc: connect to TARGET port 9000 (tcp) failed: Connection refused / timed out
# → refused often means nothing listening; timed out often means filtered (FW)
# On the target, watch drops (nft example)
sudo nft monitor | head
Ravindra Bagale's Tip
AWS वर SG आणि host FW दोन्ही उघडा. एक विसरले की 30 मिनिटे blame game.
9. Persistent — cheat sheet
| Tool | Persist |
|---|---|
| iptables | iptables-persistent |
| nftables | nftables.conf + service |
| firewalld | --permanent + reload |
| ufw | ufw enable |
10. Multi-industry
- Clinic: ufw + bastion IP
- Fintech: nft + firewalld
- Ecommerce: ufw CI subnet
- Uni: firewalld zones
11. Lab: VM lock + proof
- Snapshot/AMI.
- एक tool.
- SSH IP + 80; deny in.
- Proof matrix.
- Reboot persist.
- Notes.
Cleanup
- Throwaway → terminate.
- Shared → tighten.
12. Command map
| Job | iptables | nft | firewalld | ufw |
|---|---|---|---|---|
| List | iptables -L -n -v | nft list | firewall-cmd --list-all | ufw status |
| Allow 8080 | -A INPUT 8080 | nft add | --add-port | ufw allow |
| Deny IP | -I DROP | nft drop | rich-rule | ufw deny from |
| Save | iptables-save | nft save | runtime to perm | ufw enable |
13. Lab A
Throwaway VM: HTTP server, lock, one port, curl/nc prove.
# Terminal 1 (server)
python3 -m http.server 8080 --bind 0.0.0.0
# Terminal 2 (firewall) — ufw example
sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 8080/tcp
sudo ufw enable
sudo ufw status numbered
# Terminal 3 (client)
curl -v --max-time 3 http://SERVER_IP:8080/
nc -vz SERVER_IP 8080
nc -vz SERVER_IP 8081
Expected: 8080 OK; 8081 fail. Both OK means default allow or another layer.
14. Lab B
# Export legacy
sudo iptables-save > /tmp/legacy.v4
iptables -V
sudo nft flush ruleset
sudo nft -f - <<'EOF'
table inet filter {
chain input { type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
tcp dport { 22, 80, 443 } accept
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
EOF
sudo nft list ruleset
sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable --now nftables
15. Lab C
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" service name="ssh" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
16. Eight Linux FW errors
17. सामान्य errors आणि fixes
प्रत्येक row = खरी चूक. Panic करण्याआधी fix वाचा.
| Error / लक्षण | Fix |
|---|---|
| -A after ACCEPT | -I / reorder |
| Not permanent | Save |
| Both on | One only |
| Same-host test | Other IP |
| IPv6 open | Check v6 |
| Docker rewrite | Plan |
| fail2ban vs UFW | Integrate |
| No counters | -v hits |
18. Troubleshooting
19. Troubleshooting checklist
- Daemon status?
- Who owns?
- Default policy?
- INPUT vs FORWARD
- Timeout vs refused
- First match wins
20. Firewall decision checklist
- Threat एक वाक्य.
- Layer निवडा.
- Form निवडा.
- Default policy.
- Allow + deny tests.
- Logging dest.
- On-call.
- Deep chapter link.
- Cost estimate.
- Persist test.
21. Copy-paste quick commands
# --- Host (Ubuntu ufw) ---
sudo ufw status verbose
sudo ufw allow OpenSSH && sudo ufw allow 80/tcp && sudo ufw enable
# --- Host (RHEL firewalld) ---
sudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reload
# --- Host (nft) ---
sudo nft list ruleset
# --- AWS pointers (details in linked chapters) ---
aws ec2 describe-security-groups --group-ids $SG
aws wafv2 list-web-acls --scope REGIONAL --region ap-south-1
aws network-firewall list-firewalls --region ap-south-1
aws route53resolver list-firewall-rule-groups --region ap-south-1
22. अजून industry stories
- Retail: host+network; WAF ecommerce only
- Media: CF+WAF; NF admin; Shield
- Gov: FMS mandate
- Startup: grow into NF
- Logistics: DNS+Suricata
23. Glossary
| Term | अर्थ |
|---|---|
| Netfilter | Linux packet framework |
| Suricata | IDS/IPS; NF dialect |
| 5-tuple | 5 fields |
| East-west | आतील traffic |
| North-south | बाहेरील traffic |
| Default deny | Match नसेल तर drop |
| False positive | Legit block चुकून |
24. Practice: मोठ्याने explain
- 60s guard story.
- 60s four tools.
- 60s four AWS.
- 60s inspection VPC.
- Record ×2.
25. Safe lab hygiene
- Prod SSH + DROP = console.
- Tag owner+expiry.
- Rollback file.
- Allowlist first.
- NF hourly — delete.
26. या set ची links
- Networking basics
- SG vs NACL
- Hardening survey
- CF+WAF
- WAF/Shield set
27. Rule-writing workshop
आधी English rule, मग tool. वाईट: bad stuff. चांगले: Drop 445 except 10.0.0.0/16.
- Direction.
- Match fields.
- Action.
- Observability.
- Rollback.
- Peer review.
28. Allow / deny matrix
| Flow | SG | Host | WAF | NF |
|---|---|---|---|---|
| Public HTTPS | 80/443 world | 80/443 | CRS+/login | edge वर कमी |
| SSH bastion | 22 corp | 22 corp | n/a | optional |
| App→DB | app SG | optional | n/a | east-west optional |
| Egress DNS | 53 | allow | n/a | DNS+NF |
29. दहा oral drills
- Packet vs stateful ×3.
- Four Linux tools.
- Refused ≠ filtered.
- Inspection VPC.
- UTM when.
- Suricata on AWS.
- FMS stops drift.
- No duplicate.
- Two industries.
- NF hourly delete.
30. सामान्य errors आणि fixes
प्रत्येक row = खरी चूक. Panic करण्याआधी fix वाचा.
| Error / लक्षण | Fix |
|---|---|
| SSH DROP आधी | आधी allow 22 |
| न --permanent | --permanent वापरा |
| दोन्ही on | एक निवडा |
| Lockout | Console |
| Only localhost | Second host |
| SG विसरले | SG उघडा |
| Empty overwrite | Review first |
| SSH world open | Revoke/bastion |
| Refused vs timeout | अर्थ वेगळा |
31. Troubleshooting checklist
- कोणता tool owner?
- आधी SG/NACL.
- LOG then DROP.
- conntrack full?
- Reboot proof.
32. FAQ
प्र. iptables की nft?
नवीन = nft; legacy docs साठी iptables.
प्र. ufw backend
nftables (modern Ubuntu).
प्र. Host ≠ Network FW
Scope वेगळा.
प्र. SELinux?
Hardening chapter link.
प्र. Cloud मध्ये host FW skip?
नाही — peers/bastion साठी OS lock.
प्र. कुठून सुरू?
Types → Linux → AWS → WAF/Shield links.
33. Interview Q&A
प्र. iptables vs nftables
Legacy vs modern netfilter UI.
प्र. firewalld persist
--permanent + reload.
प्र. Filtered prove
Remote nc + counters.
प्र. MNC bastion
Deny in + VPN CIDR + log + reboot.
प्र. 80 vs http
Port explicit; profile OK.
34. Tips — English, मराठी आणि हिंदी
Ravindra Bagale's Tip (EN)
Allow management access first, default deny second, prove with a second host third, persist fourth.
Ravindra Bagale's Tip (MR)
आधी management allow, मग default deny, मग remote proof, शेवटी persist.
Tip (HI)
पहले SSH/आपना IP allow करें, फिर default deny, दूसरे होस्ट से test, फिर persist।
घरी करून बघा
- Disposable VM lab.
- Output + comments.
- Hardening chapter skim.
थोडक्यात सांगायचं तर
- चार tools; एक primary.
- SSH → deny → remote test.
- Persist + reboot.
- SG + host FW.
उजळणी, मुलाखत आणि तुलना cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.








अजून cards: Ravi Sir's Cards.
सराव Tasks
Vidarbha Cotton Mills हा नागपूर मधला वस्त्रोद्योग व्यवसाय आहे. Ganesh Wankhede त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 16
सोपं iptables
का: List.
काय करायचं: -L list तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं nft
का: List.
काय करायचं: nft list तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं ufw
का: Allow.
काय करायचं: ufw allow तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं firewalld
का: Zones.
काय करायचं: Zones तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं ufw status
का: Check.
काय करायचं: Verbose ufw status command.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं nc probe
का: Test.
काय करायचं: nc -vz 10.0.0.5 22.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Order
का: Order.
काय करायचं: First match तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
मध्यम Permanent
का: Persist.
काय करायचं: Permanent reload तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
मध्यम Timeout
का: Probe.
काय करायचं: Timeout filtered तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
मध्यम Refused
का: Probe.
काय करायचं: Refused closed तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
मध्यम nft list
का: Check.
काय करायचं: पूर्ण nft ruleset list.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम ufw allow
का: Open.
काय करायचं: ufw ने TCP 8080 allow.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Conflict
का: Conflict.
काय करायचं: Conflict तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
अवघड IPv6
का: v6.
काय करायचं: IPv6 check तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
अवघड Docker
का: Chains.
काय करायचं: Docker chains तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
अवघड Counters
का: Hits.
काय करायचं: Counters तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.