Ang aking unang blog

Saturday, February 23, 2008

Complete IPTables Firewall Rules

#!/bin/sh -e
# /etc/init.d/firewall-rule.sh : start/stop firewalls
# written by Gabriel L. Briones III
#

FW=`which iptables`

if [ ! "$FW" ]; then
echo
echo "FATAL: Unable to locate iptables, is it installed?"
echo " or you may want to check first your PATH"
echo
echo "unable to continue, exiting ...."
sleep 2
echo
exit 1
fi

INT_IFACE=eth2 # Facing the LAN
DMZ_IFACE=eth1 # Facing the DMZ Network
EXT_IFACE=eth0 # Facing the hardware firewall
LO_IFACE=lo # loop back interface
INT_IP=`ifconfig $INT_IFACE : grep inet : cut -d : -f 2 : cut -d \ -f 1`
DMZ_IP=`ifconfig $DMZ_IFACE : grep inet : cut -d : -f 2 : cut -d \ -f 1`
EXT_IP=`ifconfig $EXT_IFACE : grep inet : cut -d : -f 2 : cut -d \ -f 1`

DMZ_WEB=192.168.0.1
DMZ_EXT_MAIL=192.168.0.3
DMZ_LDAP=192.168.0.1
DMZ_PROXY=192.168.0.4
DMZ_DNS=192.168.0.1
INT_MAIL=131.107.2.6

LAN_IP=131.107.2.0
DMZ_NET=192.168.0.0


case "$1" in

start)

echo -n "Starting Jon's Firewall Rules"

# Set default policy to DROP
$FW -P INPUT DROP
$FW -P OUTPUT DROP
$FW -P FORWARD DROP

# Flush all rules first to make sure that we are starting from scratch
$FW -t nat -F
$FW -t mangle -F
$FW -X
$FW -F

# Explicitly turn off ECN (explicit congestion notification)
echo 0 > /proc/sys/net/ipv4/tcp_ecn

# Enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Allow traffic to loop back interface
$FW -A INPUT -i $LO_IFACE -j ACCEPT

# Spoof protection
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# SYN Flood protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#The Mangle portion of the ruleset.
#Here is where unwanted packet types get dropped.
#This helps in making port scans against your server
#a bit more time consuming and difficult, but not impossible.
$FW -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
$FW -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$FW -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$FW -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP

################## CUSTOM RULES !!!!!!! ##################
$FW -N firewalled
$FW -A firewalled -m limit --limit 15/minute -j LOG --log-prefix Firewalled:
$FW -A firewalled -j DROP

$FW -N bad_tcpflags
$FW -A bad_tcpflags -m limit --limit 15/minute -j LOG --log-prefix BAD_TCP_FLAGS:
$FW -A bad_tcpflags -j DROP
###########################################################

################## INPUT CHAIN !!!!!!! ####################
# These are all TCP flag combinations that should never, ever, occur in the
# wild. All of these are illegal combinations that are used to attack a box
# in various ways.
$FW -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ACK,URG URG -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags RST,FIN RST,FIN -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags SYN,ACK NONE -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags SYN,URG SYN,URG -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL NONE -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL ALL -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL SYN -m state --state ESTABLISHED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL RST -m state --state NEW,RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL ACK -m state --state NEW,RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL SYN,PSH -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL PSH,ACK -m state --state RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL RST,ACK -m state --state RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL SYN,ACK -m state --state NEW,RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL FIN,ACK -m state --state NEW,RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL SYN,ACK,PSH -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL FIN,PSH,ACK -m state --state NEW,RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL ACK,PSH,RST -m state --state NEW,RELATED -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j bad_tcpflags
$FW -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j bad_tcpflags

# Allow ESTABLISHED and RELATED connections
$FW -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow some services only
$FW -A INPUT -p tcp --dport 22 -j ACCEPT
#################################################################

################# FORWARD CHAIN !!!!! ###########################

$FW -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow only access to the internal network on the proxy server
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -p tcp -d $DMZ_PROXY -s $LAN_IP/24 --dport 8080 -j ACCEPT


# Allow external packet destined to publicly accessed services like SMTP, HTTP and HTTPS
$FW -A FORWARD -p tcp --dport 22 -j ACCEPT

$FW -A FORWARD -i $INT_IFACE -o $EXT_IFACE -s 131.107.2.92/32 -j ACCEPT

$FW -A FORWARD -i $EXT_IFACE -o $DMZ_IFACE -p tcp -d $DMZ_WEB/32 --dport 80 -j ACCEPT
$FW -A FORWARD -i $EXT_IFACE -o $DMZ_IFACE -p tcp -d $DMZ_WEB/32 --dport 443 -j ACCEPT

$FW -A FORWARD -i $EXT_IFACE -o $DMZ_IFACE -p tcp -d $DMZ_EXT_MAIL/32 --dport 25 -j ACCEPT
$FW -A FORWARD -i $EXT_IFACE -o $DMZ_IFACE -p tcp -d $DMZ_EXT_MAIL/32 --dport 80 -j ACCEPT
$FW -A FORWARD -i $EXT_IFACE -o $DMZ_IFACE -p tcp -d $DMZ_EXT_MAIL/32 --dport 443 -j ACCEPT
$FW -A FORWARD -i $EXT_IFACE -o $DMZ_IFACE -p tcp -d $DMZ_EXT_MAIL/32 --dport 993 -j ACCEPT

$FW -A FORWARD -i $INT_IFACE -o $EXT_IFACE -p tcp --dport 80 -s $INT_MAIL/32 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $EXT_IFACE -p tcp --dport 443 -s $INT_MAIL/32 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $EXT_IFACE -p tcp --dport 21 -s $INT_MAIL/32 -j ACCEPT

# Allow Local networks to access servers on DMZ
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_PROXY --dport 80 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_PROXY --dport 443 -j ACCEPT

$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_DNS --dport 53 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p udp -d $DMZ_DNS --dport 53 -j ACCEPT

$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_EXT_MAIL --dport 25 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_EXT_MAIL --dport 80 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_EXT_MAIL --dport 443 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_EXT_MAIL --dport 143 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_EXT_MAIL --dport 993 -j ACCEPT

$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_WEB --dport 80 -j ACCEPT
$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_WEB --dport 443 -j ACCEPT

$FW -A FORWARD -i $INT_IFACE -o $DMZ_IFACE -s $LAN_IP/24 -p tcp -d $DMZ_LDAP --dport 389 -j ACCEPT

# Allow machines on DMZ to access the net for security updates and bug fixes
$FW -A FORWARD -i $DMZ_IFACE -o $EXT_IFACE -s $DMZ_EXT_MAIL/32 -j ACCEPT
$FW -A FORWARD -i $DMZ_IFACE -o $EXT_IFACE -s $DMZ_PROXY/32 -j ACCEPT
$FW -A FORWARD -i $DMZ_IFACE -o $EXT_IFACE -s $DMZ_WEB/32 -j ACCEPT

##################################################################

################ OUTPUT CHAIN !!!!! ##############################
$FW -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$FW -A OUTPUT -o $LO_IFACE -j ACCEPT
$FW -A OUTPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
$FW -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
$FW -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
$FW -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
$FW -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
$FW -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
###################################################################

for CHAINS in INPUT FORWARD OUTPUT
do
# Allow some icmp packet and DROP the rest
$FW -A $CHAINS -p icmp --icmp-type 0 -j ACCEPT
$FW -A $CHAINS -p icmp --icmp-type 3 -j ACCEPT
$FW -A $CHAINS -p icmp --icmp-type 11 -j ACCEPT
$FW -A $CHAINS -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
$FW -A $CHAINS -p icmp -j firewalled
done

# SNAT LAN's IP
$FW -t nat -A POSTROUTING -o $EXT_IFACE -s $DMZ_NET/24 -j SNAT --to $EXT_IP
$FW -t nat -A POSTROUTING -o $EXT_IFACE -s 131.107.2.92/32 -j SNAT --to $EXT_IP

$FW -t nat -A POSTROUTING -o $EXT_IFACE -s $INT_MAIL/32 -j SNAT --to $EXT_IP

# DNAT connections from outside
$FW -t nat -A PREROUTING -i $EXT_IFACE -d 202.164.182.83 -p tcp --dport 80 -j DNAT --to $DMZ_EXT_MAIL
$FW -t nat -A PREROUTING -i $EXT_IFACE -d 202.164.182.83 -p tcp --dport 443 -j DNAT --to $DMZ_EXT_MAIL
$FW -t nat -A PREROUTING -i $EXT_IFACE -d 202.164.182.83 -p tcp --dport 993 -j DNAT --to $DMZ_EXT_MAIL

$FW -t nat -A PREROUTING -i $EXT_IFACE -d $EXT_IP -p tcp --dport 25 -j DNAT --to $DMZ_EXT_MAIL

$FW -t nat -A PREROUTING -i $EXT_IFACE -d $EXT_IP -p tcp --dport 80 -j DNAT --to $DMZ_WEB
$FW -t nat -A PREROUTING -i $EXT_IFACE -d $EXT_IP -p tcp --dport 443 -j DNAT --to $DMZ_WEB
$FW -t nat -A PREROUTING -i $EXT_IFACE -d $EXT_IP -p tcp --dport 993 -j DNAT --to $DMZ_WEB


# Layer 7 filterring
$FW -t mangle -A POSTROUTING -m layer7 --l7proto yahoo -j DROP
$FW -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -j DROP
$FW -t mangle -A POSTROUTING -m layer7 --l7proto msn-filetransfer -j DROP
$FW -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j DROP
$FW -t mangle -A POSTROUTING -m layer7 --l7proto irc -j DROP

echo "."

;;

stop)

echo -n "Flushing Jon's Firewall Rules"

$FW -P INPUT ACCEPT
$FW -P FORWARD ACCEPT
$FW -P OUTPUT ACCEPT
$FW -t nat -F
$FW -t mangle -F
$FW -F
$FW -X

echo "."

;;

status)

$FW -t nat -L
$FW -t mangle -L
$FW -L

;;

restart)
$0 stop
$0 start
;;


*)
echo 'Usage: /etc/init.d/firewall.rules {start:stop:restart}'
exit 1

esac

exit 0

Thursday, October 26, 2006




Me and Mr. Dennis Atkinson (Brother of Rowan Atkinson A.K.A. Mr. Bean)

Thursday, August 17, 2006

Dito ako nakatira



Sunday, July 23, 2006

Bridge network at IPTables sa Linux

Sa pagkakataong ito ay tatalakayin ko naman kung paano gumawa ng Bridged type na firewall.

Una sa lahat, ano ba ang bridged type na network?

LAN ---- BRIDGE DEVICE ---- ROUTER


sa pagsasalarawan na nasa itaas ay makikita natin an ang posisyon ng bridge device ay naka IN-LINE sa LAN at ROUTER, pero hindi alam ng LAN na may BRIDGE DEVICE sa pagitan niya at ng ROUTER samakatuwid, ang bridge type na firewall ay isang epektibong solusyon kung ayaw mong magpalit ng IP ng router at ng LAN. Tinatawag din ang bridged type na firewall na Transparent Firewall.


Ang mga kinakailangan:
IPTables (siyempre naman)
bridged-utils
Dalawa o higit pang Network Card (siyempre din naman)


Ipagpalagay nating dalawa ang network card ng ating bridge firewall, kinakailangan nating i up ang NIC ngunit hindi natin lalagyan ng IP, bakit? kasi nga bridged firewall ito at hindi niya kailangan ng IP


ifconfig eth0 0.0.0.0 up
ifconfig eth1 0.0.0.0 up

yan, naka up na ang NIC pero walang IP, kapag nag issue ka ng command na ifconfig, ganito dapat ang lalabas

eth0 Link encap:Ethernet HWaddr 00:0B:6A:C5:C2:5D
inet6 addr: fe80::20b:6aff:fec5:c25d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3332563221 errors:0 dropped:0 overruns:0 frame:0
TX packets:3382238062 errors:0 dropped:0 overruns:20 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2729358673 (2.5 GiB) TX bytes:386041953 (368.1 MiB)
Interrupt:10 Base address:0xb800

eth1 Link encap:Ethernet HWaddr 00:04:76:73:3C:2C
inet6 addr: fe80::204:76ff:fe73:3c2c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3377799673 errors:0 dropped:0 overruns:30349 frame:0
TX packets:3314537649 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3566158420 (3.3 GiB) TX bytes:8320849 (7.9 MiB)
Interrupt:5 Base address:0xbc00



ang susunod nating gagawin ay gagawa na tayo ng interface para sa bridge. Gwain lamang ang mga command na gaya ng nasa ibaba

brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig br0 up


yung unang hanay ay nagsasabing mag gawa ng bridge interface na ang pangalan ay br0 (puede nyo itong baguhin, nasa sainyo yun)

yung pangalawa at pangatlong hanay ay nagsasabing ang miyembro ng bridged na br0 ay eth0 at eth1

yung pang huli ay nagsasabing i up na ang bridge interface na br0

Sa pagkakataong ito ay dapat na gumagana na ang ating bridged type na setup. para ma test ito ay ikonekta ito ng naka IN-LINE sa LAN at ROUTER dapat ay parang walang nangyari kapag ginawa ito.

Ang mga packet ay dapat na dumaloy na walang problema dahil sa hindi pa naman tayo gumagawa ng mga restriksyon sa ating bridged device.

kung ang mga packet ay dumadaloy ng maayos, oras na para gumawa ng mga rules na maglilimita sa pagdaloy ng packet.


kung paano gumawa ng rules ay basahing muli ang aking isinulat patungkol sa IPTables

huwag kalimutang i enable ang ip forwarding

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




Hanggang sa muli.

Tuesday, July 11, 2006

Transparent Proxy at IPTables

marami ang nagtatanong kung paano ba ang gumawa ng isang transparent na proxy. Marami nang mga documents na nagkalat sa internet kung paano ito gawin pero wala lang gusto ko lang itong ilagay.

Simulan na natin.

Ang mga kinakailangan:
Squid - karamihan malamang ay sasangayon sa akin kapag sinabi kong ito ang pinaka popular na proxy server na open source.
IPTables - kung paano ito gamitin eh basahin nyo lang ang blog ko, may isinulat na akong tutorial tungkol dito.


Sa palagay ko ay hindi ko na kailangang talakayin kung paano mag install ng squid at IPTables dahil kung hindi kayo marunong nun eh malaki ang problema nyo.

simulan natin sa pagconfigure ng squid

buksan ang squid.conf na file at ilagay ang mga impormasyong kagaya ng nasa ibaba


httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on



then mag lagay lang ng rule na mag redirect ng http traffic sa squid port


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128


sa senaryong ito ay pinapalagay na ang gateway ng mga client ay ang proxy server mismo

ang kinakailangan na lang gawin ay paandarin ang squid at i test na ang mga client.


PAANO NAMAN KUNG ANG PROXY AT IPTABLES AY MAGKAIBANG MAKINA, POSIBLE BA??

wag kag sumigaw, ang sagot sa tanong mo eh posible.

May dalawang approach para magawa ito, una:

sa IPTables na makina, maglagay lamang ng IPTables rules na kagaya ng mga sumusunod:
iptables -t nat -A PREROUTING -i eth0 -s ! IP_NG_SQUID -p tcp --dport 80 -j DNAT --to IP_NG_SQUID:3128
iptables -t nat -A POSTROUTING -o eth0 -s IP_NG_NETWORK -d IP_NG_SQUID -j SNAT --to IP_NG_IPTABLES


Tandaan: ang nasa itaas na approach eh hindi gumagana sa iba, wag nyo akong tanungin kasi hindi ko rin alam kung bakit

Pangalawang approach:
mangangailangan tayo ng tools na part ng iproute2 na package,normaly ay kasama na ito sa inyong linux distribution.

gawin lamang ang mga sumusunod na commands sa IPTables na makina

iptables -t mangle -A PREROUTING -j ACCEPT -p tcp --dport 80 -s IP_NG_SQUID
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp --dport 80
ip rule add fwmark 3 table 2
ip route add default via IP_NG_SQUID dev eth0 table 2
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128


kung may problema o nais nyo pa ng mas maraming impormasyon ay sumangguni na lamang sa link na ito

http://www.tldp.org/HOWTO/TransparentProxy.html



yun lang at maraming salamat. Hanggang sa muli

Sunday, February 26, 2006

Paboritong Linya sa kanta ng Firehouse

With every kiss our love is like brand new
And every star up in the sky was made for me and you
Still we both know that the road is long
We know that we could be together because our love is strong

I've finally found the love of a lifetime
A Love to last my whole life through

.....

When I look into you eyes
I can see how much I love you
And it makes me realize
When I look into your eyes
I see all my dreams come true
When I look into your eyes

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