Ang aking unang blog

Sunday, February 19, 2006

Paano gumawa ng Firewall na gamit ang IPTables (Part 4)

Sa nakaraang pag-aaral ay natutunan natin (may natutunan ba?) ang paggawa ng tumatayong magisa na firewall (stand alone firewall). Ngayon naman ay pag-aaralan natin kung paano gumawa ng firewall na magsisilbi ding gateway o router ng ating network. Kung isasalarawan natin ang aking sinasabi ay ganito ang kalalabasan.


LAN <----> FIREWALL <----> INTERNET


bale ang ating firewall ay may dalawang NIC, isang nakaharap sa internet at isa ang nakaharap sa ating network na siyang magsisilbing default gateway ng mga miyembro sa ating LAN.


Narito ang ating mga gagamitin sa design ng ating ng firewall:

Makinang Firewall:
dalawang Network Card: (eth0 and eth1)
kung saan:
eth0 == Ang NIC na nakaharap sa internet
eth1 == Ang NIC na nakaharap sa LAN

IP ng eth0 sa firewall: 1.2.3.4 (Public IP)
IP ng eth1 sa firewall: 192.168.0.254

IP ng LAN: 192.168.0.0/24


Serbisyong tumatakbo sa firewall:
SSH (22)

Nota:
Para sa kaalaman ng lahat, ang /24 ay katumbas ng netmask na 255.255.255.0

Maglagay din tayo ng Mail Server at Web Server sa loob ng LAN na may settings na kagaya ng mga sumusunod:

IP Ng Web Server: 192.168.0.252
IP Ng Mail Server: 192.168.0.253



Ang mga kinakailangang makamit:

1.) Payagang makalabas ang packet ng Mail Server ngunit sa port lamang ng SMTP (25).
2.) Ang papayagan lamang na makapag internet ay ang mga IP na 192.168.0.1, 192.168.0.10 at 192.168.0.100.
3.) Payagan ang buong mundo na maka access sa Web Server at Mail Server.
4.) Payagang maka pasok ang kahit sino sa OpenSSH na tumatakbo sa firewall
5.) Payagang maka access ang makinang firewall sa port 80 at 21 lamang para makakuha ng updates sa internet.
6.) Maliban sa mga nabanggit sa itaas, wala nang packet na papayagang makadaloy.



Base sa mga kailangang makamit ay masasabi nating lahat ng chains ay magagamit natin ngayon, hindi kagaya nung stand alone na firewall na puro INPUT chain lang ang nagamit.


Umpisahan na natin ang pag design sa ating firewall:

Kagaya ng nauna nating pag-aaral, uumpisahan natin ang rules na DROP lahat by default, kaya ang unang unang rule na dapat nating ilagay ay ang mga sumusunod:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP


At para makasiguro tayong walang firewall rules na tumatakbo ay isunod datin ang rule na kagaya ng nasa ibaba:

iptables -F

At dahil sa ang firewall ay magsisilbi ring router/gateway, kailangan nating i enable ang ip forwarding sa pamamagitan ng command na gaya ng nasa ibaba

echo "1" > /proc/sys/net/ipv4/ip_forward


Ngayon ay isa-isahin natin ang mga dapat na allowed lamang base sa requirements.

1.) Payagang makalabas ang packet ng Mail Server ngunit sa port lamang ng SMTP (25).

iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -s 192.168.0.253 -j ACCEPT

dito ay gumamit tayo ng panibagong opsyon na hindi nabanggit sa mga una nating pag-aral, ito ay ang "-i eth1", "-o eth0", at "-s 192.168.0.253" kung saan ang "-i" ay tumutukoy sa input interface, "-o" naman ay tumutukoy sa output interface at ang "-s" ay tumutukoy naman sa source IP na sa pagkakataong ito ay ang IP ng ating Mail Server.

Kung isasalin ulet natin sa salita ang rule ng gaya sa itaaas ay ganito ang kakalabasan

"Magdagdag ng rule na magpapasa (-A FORWARD) at pumasok sa interface eth1 (-i eth1) at lumabas sa interface eth2 (-o eth2) na ang protocol ay tcp (-p tcp) at papunta sa port ng SMTP (--dport 25) na galing sa ip na 192.168.0.253 (-s 192.168.0.253) at ito ay tanggapin (-j ACCEPT)"


2.) Ang papayagan lamang na makapag internet ay ang mga IP na 192.168.0.1, 192.168.0.10 at 192.168.0.100.

iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.10 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.100 -j ACCEPT



Sa mga naunang rule ay pinapayagan natin ang ilang packet na makadaloy sa FORWARD chain at ang intensyon ay makalabas sa internet, ngunit para magkaroon ka ng komunikasyon sa internet ay kailangan mo ng public IP. Paano mo ito ngayon gagawin? Ang sagot? mag translate ka ng pribadong IP sa public IP. Gawin lang ang kagaya ng rule na nasa ibaba para makapag translate.

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 1.2.3.4

mapapansin nyo na gumamit tayo ng "-t nat" na opsyon na kung saan ito ay tumutukoy sa pangalan ng table na gagamitin. Kinakailangan nating gamitin ang opsyon na -t dahil kapag hindi natin ito ginamit, ito ay gagamit ng filter table sa kadahilanang ito ang siyang default.

gumamit din tayo ng POSTROUTING na chain sa kadahilanang ito ang huling stage na dadaanan papalabas, dito tayo dapat mag translate ng IP

gumamit din tayo ng "-j SNAT --to 1.2.3.4" na ang ibig sabihin ay "source translation" na ang kasunod ay ang translated na IP na sa pagkakataong ito ay ang public IP

3.) Payagan ang buong mundo na maka access sa Web Server at Mail Server.

Ito naman ay manggagaling sa internet ang packet at papunta sa ating Mail at Web Server na kung saan ay parehong nasa likod ng firewall at pareho ring pribado ang IP.

Muli ay kailangan nating mag translate ng IP ngunit sa pagkakataong ito ay mula sa Public IP ay i translate natin para maging pribadong IP, kaya ang chain na dapat nating gamitin ay ang PREROUTING chain.

at dahil sa ang destinasyon ng packet ay mula sa labas papunta sa loob ng LAN, kailangan din nating payagan ang packet sa FORWARD chain.

kaya kung isusulat natin ang rule ay ganito ang kalalabasan:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to 192.168.0.253
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.252

iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT



4.) Payagang maka pasok ang kahit sino sa OpenSSH na tumatakbo sa firewall

Ang service na ito ay sa firewall mismo tumatakbo kaya ang chain na dapat nating gamitin ay ang INPUT chain

iptables -A INPUT -p tcp --dport 22 -j ACCEPT


5.) Payagang maka access ang makinang firewall sa port 80 at 21 lamang para makakuha ng updates sa internet.

Ito naman ay mula sa firewall papunta sa internet ngunit sa port lamang na 80 at 21. Dahil ito ay mula nasa firewall, hindi na natin kailangang mag translate ng IP dahil siya na mismo ang may public IP, kaya ang kailangan na lang nating gawin ay payagan ang port 80 at 21 na makalabas mula sa firewall. Tingnan ang rule sa ibaba

iptables -A OUTPUT -o eth0 -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT



6.) Maliban sa mga nabanggit sa itaas, wala nang packet na papayagang makadaloy.

wala na tayong kinakailangang rule para makamit ang huling requirement na ito sa kadahilanang DROP ang ating default policy sa lahat ng chain, maliban sa nga pinayagan nating makalusot sa firewall, lahat ay babawalan na.


Kaya kung pagsasama-samahin natin ang mga rules ay ganito ang kalalabasan

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables -F

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -s 192.168.0.253 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.10 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.100 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 1.2.3.4

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to 192.168.0.253
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.252

iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT




Sa tingin nyo ba ay okay na? kung ang sagot nyo ay Oo, mag-isip ulet kayo dahil nagkakamali kayo, dahil kung matatandaan nyo sa mga nakaraan nating pag-aaral ay kailngan nating gawing stateful ang ating firewall kung saan ay papayagang makalusot ang mga packet na parte na ng aktibong kuneksyon at may relasyon sa aktibong kuneksiyon.

At isa pang importanteng rule ay ang pag-allow ng DNS traffic sa na dumaloy sa firewall, kahit hindi natin binanggit sa requirement na dapat itong i-allow ay kailangan nating isama ang rule na mag aallow sa DNS traffic, kaya kailangan nating isama ang mga sumusunod na rule:

iptables -A FORWARD -p tcp --dport 53 ACCEPT
iptables -A FORWARD -p udp --dport 53 ACCEPT

iptables -A OUTPUT -p tcp --dport 53 ACCEPT
iptables -A OUTPUT -p udp --dport 53 ACCEPT

Kaya kung kukumpletohin natin ang ating firewall ay ganito ang kalalabasan. Isaayos na rin natin ang pagkakasunod-sunod para magandang tingnan

# Mag set ng DROP na default policy sa tatlong mayor na chain
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP


# i-flush muna ang rule para sigurado
iptables -F

# i-enable ang ip forwarding
echo "1" > /proc/sys/net/i[v4/ip_forward


# Payagan ang ESTABLISHED at RELATED na packet sa lahat ng chain
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



# Payagan ang SSH connection papunta sa firewall
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Payagan ang DNS traffic na dumaloy sa firewall
iptables -A FORWARD -p tcp --dport 53 ACCEPT
iptables -A FORWARD -p udp --dport 53 ACCEPT



# I-translate ang packet na patungo sa Mail at Web server
# sa kadahilanang ang mga ito ay pribado lamang ang IP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to 192.168.0.253
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.252


# Payagan ang Mail server mula sa LAN na makalabas papunta sa port 25
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -s 192.168.0.253 -j ACCEPT


# Payagan ang mga ip na 192.168.0.1, 192.168.0.10 at 192.168.0.100 na
# makalabas sa internet

iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.10 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -s 192.168.0.100 -j ACCEPT


# Payagan ang mga packet mula sa labas papunta sa loob ng LAN
# ngunit sa Mail at Web Server lamang

iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT


# I-translate ang sa public IP kapag ang source IP ay mula sa LAN
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 1.2.3.4


# Payagan ang firewall na makapag internet ngunit limitado lamang sa port na 80 at 21
iptables -A OUTPUT -o eth0 -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT


# Payagan ang firewall na maka-acess din ng DNS server
iptables -A OUTPUT -p tcp --dport 53 ACCEPT
iptables -A OUTPUT -p udp --dport 53 ACCEPT

15 Comments:

At 2:48 AM, Anonymous Anonymous said...

assteeg ito jond3rd!

 
At 5:58 AM, Anonymous Anonymous said...

isa kang henyo =) sana ay matutunan ko din at maging bihasa patungkol sa iptables.

mabuhay ka! ^_^

 
At 6:54 AM, Blogger thad said...

Jon,

Ngayon ko lang napasyalan ang iyong blog. Malaking bagay na iyong isinulat ito sa ating sariling wika. Sa kasalukuyan ako isang sys admin contractor dito sa Tampa, Florida at sa environment na maraming dayuhan akong kasama, (mga kano, ruso at syempre anaps) at nag-iisang pinoy sa aming team.

Ipagpatuloy mo ang paggawa ng mga ganitong blog.

 
At 3:02 AM, Anonymous Anonymous said...

magaling ang pagka ilustrate ng rules ng iptables mo pero medyo alanganin ako.. i just learned iptables recently pero parang kulang ang iyong firewall rules.. correct if im wrong.. ang concern ko is papano mo i route yung packets galing sa lan mo papunta sa mailserver mo or sa webserver mo?

 
At 10:18 PM, Blogger jond3rd said...

Hindi kulang ang rules, kung mapapansin mo, ang LAN ay 192.168.0.0/24 at ang web server at mail server ay may IP na mga sumusunod:

IP Ng Web Server: 192.168.0.252
IP Ng Mail Server: 192.168.0.253

kabilang sila pereho sa 192.168.0.0/24 na network kaya di na kailangan ng specific na routing or rules para ma-access ang web o ang mail server.

kakailanganin mo lang ng specific na rule or routing king ang mail server or web server mo ay nasa ibang segment o di kaya'y nasa DMZ.

salamat sa iyong tanong


Love,

-jond3rd-

 
At 7:24 PM, Anonymous Anonymous said...

tama! iniisip ko kac yung kagaya mismo ng commercial na router na nasa loob ng network mismo tapos gus2 mo kunwari gus2 mo i browse yung webserver mo na dala ang public IP at hindi yung i browse mo sya sa kanyang internal IP which is tama naman din.. :) pero sa iyong config ok naman. may isa lang akong tanong kasi meron din akong firewall ngayon at kagaya mo my servers din ako sa loob ng aking lan at may iba pang mga workstations. sa ngayong lahat ng services ng internet ay accessible ng lahat ng workstations. papano ko kaya ma configure ang firewall ko na i -allow lang ang aking LAN na maka access lng ports/services 80,8088,22,25,110 at siguro ibang pang ports na kakailanganin ko sa susunod at isasara ko ang ibang ports na hindi ko gagamitin.

 
At 7:42 PM, Blogger jond3rd said...

siguro po mas masasagot ko ng maayos ang tanong mo kung mabibigyan mo ako ng diagram kahit ascii text lang ng iyong network.

pero sa pag-aallow ng mga ports ay maaari mong gamitin ang kagaya ng rules na nasa ibaba

iptables -A INPUT -s [IP-NG-LAN]/NETMASK -m multiport -p tcp --dports 22,25,80,110,8088 -j ACCEPT

o di kaya naman kung nasa ibang segment ang server mo ay ganito naman:

iptables -A FORWARD -s [IP-NG-LAN]/NETMASK -d [IP-NG-SERVER] -m multiport -p tcp --dports 22,25,80,110,8088 -j ACCEPT

salamat sa pagsusulat mo at pagtangkilik sa blog ko

Love
jond3rd

 
At 8:13 AM, Anonymous Anonymous said...

ok.. salamat sa pagsagot.. ganito ang diagram:

INTERNET<--->FIREWALL<---->LAN

services na tumatakbo sa FIREWALL:
SSH
DHCP

services na tumatakbo sa LAN:
SSH
SMTP
POP3
HTTP

sa aking LAN ay may 25 machines kabilang na ang mga servers na itaas. ngayong ang aking firewall ay ina-allow ang aking LAN na ma-access ang kahit ano sa internet. gusto ko i-configure ito na i-allow lamang aking LAN na maka access sa internet ngunit limitado lamang sa mga ports like yahoochat,msn,icq,aol, at kasali ang mga ports na nabanggit ko sa una kong komento. nasubukan ko na rin yang una mong suggestion pero papano naman yung replies ng iyong ginawang suggestion para maging stateful ang daloy ng packet.

 
At 6:22 PM, Blogger jond3rd said...

Para maging stateful ang daloy ng packet ang kailangan mo lang ay ang rule na kagaya ng nasa ibaba:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


sa tanong mo kung paano i-limit lang ang LAN na maka access ng services kagaya ng yahoochat at mga kauri nito ay mangangailangan ka ng "match" na opsyon. Hindi mo mahaharangan ang daloy sa ganitong uri ng packet sa pamamagitan lang ng pagfilter sa port dahil dynamic ang ginagamit nitong port at higit sa lahat, may kakayahan itong mag tunnel kahit sa port 80.

May tinatawag tayong "Application Layer Filterring" kung saan ang packet ay hinuhusgahan hindi sa IP/Port na kumbinasyon kundi sa layer mismo ng application. Puntahan mo ang link na ito para mas malinawan ka.

 
At 8:26 PM, Anonymous Anonymous said...

salamat.. ito pala email ko... pogz69@hotmail.com may IM ka ba? send mo lng email ko.. :)

 
At 8:11 PM, Anonymous Anonymous said...

Dude, ang galing ng iptables mo..thx sa website mo..Ang tanong ko naman kung paano gumawa ng proxy server na at the same time naka iptables na rin baka kasi ma kack ako eh. Thx ulit sa website mo laking tulong.

Zub

 
At 9:35 PM, Blogger jond3rd said...

Hi Zub,

Mabuhay!

Salamat sa pagtangkilik mo sa Blog ko.

Dun sa tanong mo na proxy sever at IPTables, puede mong pagsamahin ang dalawang serbisyo sa iisang makina, siguraduhin mo lang na ang LAN mo lang ang merong access sa proxy port mo, kung hindi eh magiging proxy ka ng buong mundo.

 
At 1:57 AM, Anonymous Anonymous said...

dude bilib ako sau nagawa mo ang iptables sa wika natin.. Saan ka nag work?

 
At 8:27 PM, Anonymous Anonymous said...

mabuhay ka jond3rd, magaling ang iptables mo,napakalinaw

pasuyo nman ng transparent proxy code sa ganitong klaseng design mo ng iptables

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

very safe ang ganitong dale,ang galing.
pano kaya magsetup ng transparent proxy pag my policy na drop? Nabasa ko ung una mong blog about transparent proxy, ang galing gumana agad pag sinundan lang ang iung paliwanag. Ngunit pag my drop na policy na gani2,un lang,'di gumagana. Pasuyo na lang,salamat :D

-

 
At 11:56 PM, Anonymous Anonymous said...

a sir nadale ko na ung code sa tinatanong ko sau, anyways,salamat!
2409 ang proxy port ko,'la lang,maiba nman

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A POSTROUTING -t nat -o eth0 -s 172.20.1.0/29 -d 0/0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -s 172.20.1.0/29 -p tcp -i eth1 --dport 80 -j REDIRECT --to-port 2409
iptables -A INPUT -i eth1 -p tcp --dport 2409 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


liit laang ng pinagtestingan ko 'no: 172.20.1.0/29, yaan mo na,hahaha

 

Post a Comment

<< Home