Thursday 6 October 2011

Bridge Server (Transparent Firewall) တလုံး ရဲ့ အသံုး ဝင္ ပံု


     ဒီတခါ မွာေတာ့ small network infracture က ေန large network infracture အထိ ကို အသံုး ဝင္ တဲ့ Linux Bridge Server တခု အ ေၾကာင္း ကို share ပါမယ္.. ဒါေပမဲ့ Medium, Large Network infrature အတြက္ ဆိုရင္ေတာ့ Feature ေတြစံုတဲ့ Router မ်ိဳးေတြပဲ ဝယ္သံုးေတာ့ မွာေပါ့။ အခု share မွာက ပိုက္ဆံ အမ်ားၾကီး မသံုးခ်င္ တဲ့ small network infracture ေလးေတြ အတြက္ပါ။ Firewall လိုလဲ ေျပာလိုရပါတယ္.  Transparent Firewall ဆိုရင္ ပိုမွန္ ပါမယ္...

     Bridge ဆိုသည့္ အတိုင္း တခုနဲ႕တခု ကိုခ်ိတ္ဆက္ ေပးမွာပါ။ ရွင္းပါတယ္။ ဒါေပမဲ့ အဲဒီလို ခ်ိတ္ဆက္ ေပးမူမွာ  ဘယ္ဟာ ပဲျဖတ္သန္း ခြင္. ေပးမယ္ ဘယ္ဟာကိုေတာ့ NO ပါဆိုျပီ သက္မွတ္ျပီ လုပ္ၾကည့္ရ ေအာင္.. 
တကဲ့ကို simple က်ပါတယ္... ေအာက္က ပံုေလး ကိုတခ်က္ ၾကည့္လိုက္ ပါ...


     အရင္ဦးဆုံး အထက္ပါ ပံုတြင္ ပါတဲ့ IP and Information ေျပာပါမယ္ (နားလည္ မူလြယ္ေအာင္ ပါ)...

1) Modern + Router (Home Level Router)
IP   : 10.10.10.1
Subnet   : 255.255.255.240
Broadcast  : 10.10.10.15
Host Address Range : 10.10.10.1 - 10.10.10.14

2) Bridge 
IP   : 10.10.10.5
Subnet   : 255.255.255.240
Broadcast  : 10.10.10.15
Gateway   : 10.10.10.1
Service    : To provide as like firewall/bridge

3) Server 1 
IP   : 10.10.10.2
Subnet   : 255.255.255.240
Broadcast  : 10.10.10.15
Gateway   : 10.10.10.1
Service    : To provide web server with port 80 and 443

4) Server 2 
IP   : 10.10.10.3
Subnet   : 255.255.255.240
Broadcast  : 10.10.10.15
Gateway   : 10.10.10.1
Service    : To provide NAT server for local network

5) Server 3
IP   : 10.10.10.4
Subnet   : 255.255.255.240
Broadcast  : 10.10.10.15
Gateway   : 10.10.10.1
Service    : To provide FTP Server with port 21

     စျပီး Bridge Server အတြက္ လိုအပ္ တာေတြ ေျပာျပီး Bridge Server ကိုစျပီ လုပ္ပါေတာ့မယ္.

Requirements  
1) Minimun PIII Normal System-Unit, RAM 256MB or 512MB, HDD 10GB
2) 2 Network NIC
3) Any Linux OS
4) Bridge-Utils Package

(ဒီ မွာေတာ့ က်ေနာ္က Debian 5 ကိုသံုးထား ပါတယ္)

     အရင္ ဦးဆံုး OS ကို Install လုပ္လိုက္ပါ။ ( Bridge Server အ ေၾကာင္း ျဖစ္တဲ့ အတြက္ OS install လုပ္တာေတြ ဘာေတြ မျပ ေတာ့ပါ ). OS ကို Install လုပ္ျပီး သြားရင္ ေတာ့ ထံုးစံ အတိုင္း Install လုပ္ထားတဲ့ OS ကို update and upgrade လုပ္သင့္ ပါတယ္. 

#apt-get update
#apt-get dist-upgrade

     OS ကို update/upgrade လုပ္ျပီ ရင္ေတာ့ bridge-utils ဆိုတဲ့ package ကို install လုပ္ ရပါမယ္ ။ သူ႕ကို install လုပ္ထား မွ bridge interface ကို တည္ ေဆာက္ လို႕ရပါမယ္...

#apt-get install bridge-utils

     စျပီ bridge interface  အတြက္ script တခု စ ေရးပါမယ္. script name ကိုေတာ့ bridge_if လိုေပးလိုက္ပါမယ္.ေနာက္ပိုင္း တြင္ ဒီ script ကို OS boot  စတက္ တာနဲ႕ run  ဖိုလုပ္မွာပါ။ အဲဒီေတာ့ ဒီ script ရဲ့ location က /etc/init.d/ တြင္ ဆိုအ ေကာင္းဆုံး ပါပဲ.

(bridge_if name နဲ႕ /etc/init.d/ ေအာက္ထဲမွာ file တခု create လုပ္လိုက္ ပါျပီ)
#touch /etc/init.d/bridge_if 

(အဲဒီ file ထဲမွာ ေရးပါမယ္)
#vi /etc/init.d/bridge_if

(ဘာ ေရးမွာလဲ? ေအာက္က အတိုင္း ေရးမွာပါ)
#!/bin/bash
# Creating the interface br0
/usr/sbin/brctl addbr br0

# Add the Ethernet interfaces to use with the bridge
/usr/sbin/brctl addif br0 eth0 eth1

# Start up the Ethernet interface
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0

# Configure the bridge Ethernet
# The bridge will be correct and invisible ( transparent firewall ).
# It's hidden in a traceroute and you keep your real gateway on the 
# other computers. Now if you want you can config a gateway on your
# bridge and choose it as your new gateway for the other computers.

/sbin/ifconfig br0 10.10.10.5 netmask 255.255.255.240 broadcast 10.10.10.15
route add default gw 10.10.10.1 br0

(save လိုက္ ပါ) 
:wq

----------------$$$$----------------

     Bridge Interface အတြက္ ျပီးသြား ဆိုရင္ေတာ့ တျခား IP ေတြအတြက္ Rules ေတြေရးပါမယ္. အဲဒီ အတြက္ /etc/init.d/  ေအာက္ထဲမွာ script ေနာက္တခု အတြက္ file ေနာက္တခုထက္ create လုပ္ပါမယ္. ဒီ script ကိုေတာ့ name "bridge_fw" လိုေပးလိုက္ပါမယ္.

(bridge_fw name နဲ႕ /etc/init.d/ ေအာက္ထဲမွာ file တခု create လုပ္လိုက္ ပါျပီ)
#touch /etc/init.d/bridge_fw 

(အဲဒီ file ထဲမွာ ေရးပါမယ္)
#vi /etc/init.d/bridge_fw

(ဘာ ေရးမွာလဲ? ေအာက္က အတိုင္း ေရးမွာပါ)
#!/bin/bash
################################################################
# Bridge firewall rules
################################################################
iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "1"     

# Limit ICMP 
iptables -A FORWARD -p icmp -m limit --limit 4/s -j ACCEPT

################################################################
# Incoming traffic 
################################################################

#hostname : Server 1
#Allow for port 80 and 443 (web) connection from anywhere
iptables -A FORWARD -p tcp -d 10.10.10.2 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -d 10.10.10.2 --dport 443 -j ACCEPT

#hostname : Server 3
#Allow for port 21 (ftp) connection from anywhere
iptables -A FORWARD -p tcp -d 10.10.10.4 --dport 21 -j ACCEPT

################################################################
# Outgoing traffic from 10.10.10.2 - 10.10.10.14
################################################################
#Allowing outgoing traffic for only port 80 and 443
iptables -A FORWARD -p tcp -s 10.10.10.2 -d 0.0.0.0/0 -j ACCEPT

#Allowing outgoing traffic for all
iptables -A FORWARD -p all -s 10.10.10.3 -d 0.0.0.0/0 -j ACCEPT

#Allowing outgoing traffic on only port 21
iptables -A FORWARD -p tcp -s 10.10.10.4 -d 0.0.0.0/0 -j ACCEPT

#Not Working IPs
#iptables -A FORWARD -p tcp -s 10.10.10.5 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.6 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.7 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.8 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.9 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.10 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.11 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.12 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.13 -d 0.0.0.0/0 -j ACCEPT
#iptables -A FORWARD -p tcp -s 10.10.10.14 -d 0.0.0.0/0 -j ACCEPT

###### Incoming traffic to Bridge ###############################
iptables -F INPUT
iptables -P INPUT DROP
iptables -A INPUT -p tcp -s 10.10.10.3 -d 10.10.10.5 --dport 22 -j ACCEPT

(save လိုက္ ပါ) 
:wq

     /etc/init.d/ ေအာက္ထဲမွာ ေရးခဲ့တဲ့ bridge_if နဲ႕ bridge_fw ေတြကို excute လုပ္လိုရ ေအာင္ permission ခ်ိန္း ရပါမယ္..

#chmod +x /etc/init.d/bridge_if
#chmod +x /etc/init.d/bridge_fw

     ကဲ ဒါဆိုရင္ ေတာ့ အဲဒီ script ႏွစ္ခုကို OS boot တက္လာတာနဲ႕ run ဖိုကိုလုပ္ ပါေတာ့ မယ္။ ထိပ္ဆုံး ကိုယ္ OS  ရဲ့ runlevel ကိုအရင္ ခ်က္ရပါမယ္. ဒါမွ ကိုက ဒီ script ေတြကိုဘယ္ runlevel ထဲကိုထည့္ ရမလဲ ဆိုတာကို သိမွာပါ. Debian မွာ ေတာ့ runlevel ေတြကို  /etc/rc0.d Run level 0, /etc/rc1.d Run level 1, /etc/rc2.d Run level 2, /etc/rc3.d Run level 3, /etc/rc4.d Run level 4, /etc/rc5.d Run level 5, /etc/rc6.d Run level 6 စသည္ျဖင့္ သတ္မွတ္ တယ္ေပါ့ ဗ်ာ.

#runlevel
N 2

     အခုက runlevel 2 မွာဆိုေတာ့ rc2.d ထဲကိုထည့္ ရမွာေပါ့... အဲဒီ ေတာ့ "ln" command  နဲ႕ ေအာက္က အတိုင္း link လုပ္ေပး လိုက္႐ံု ပါပဲ..

#ln -s /etc/init.d/bridge_if /etc/rc2.d/S50bridge_if
#ln -s /etc/init.d/bridge_fw /etc/rc2.d/S50bridge_fw

    ျပီးသြားရင္ေတာ့ eth0  နဲ႕ eth1 interfaces  ေတြကို manual activate လုပ္ပါမယ္ ဆိုတာကို /etc/network/ ေအာက္က interfaces မွာေအာက္ပါ အတိုင္း ဝင္ျပင္ရပါမယ္

(အဲဒီ file ထဲမွာ ေရးပါမယ္)
#vi /etc/network/interfaces

(ဘာ ေရးမွာလဲ? ေအာက္က အတိုင္း ေရးမွာပါ)
#The loopback network interface
auto lo
iface lo inet loopback

#The eth0 and eth1 network interface
iface eth0 inet manual
iface eth1 inet manual

(save လိုက္ ပါ) 
:wq

(တျခား လိုင္းေတြ active ျဖစ္ေန ရင္ "#" နဲ႕ ပိတ္ခဲ့ ရန္)

      OK Script ေတြကို RUN လိုရပါ ျပီ /etc/init.d/ ေအာက္ကိုသြား ျပီ  RUN လိုက္႐ံုပါ ပဲ..

#cd /etc/init.d/
#./bridge_if
#./bridge_fw

     ေနာက္ပိုင္း မွာ DMZ ထဲမွာ New Server အသစ္ တိုးရင္ေသာ္၎ လက္ ရွိ Forwarding Rule ကိုျပင္ ခ်င္ ရင္ေသာ္၎ /etc/init.d/ ေအာက္က "bridge_fw"  ဆိုတဲ့ file မွာျပင္ေရး ႐ံုပါပဲ. (ေရးျပီ ရင္ "./bridge_fw" ဆိုျပီ script ကိုျပန္ RUN ေပးဖိုေတာ့ လိုပါတယ္)

Note: -  1)Network IP Scan ဆြဲရင္ ဒီ Bridge IP (10.10.10.5) က Dead ျဖစ္ေနပါမယ္ ping ရင္ လဲ ping လိုမရပါဘူး
            2)Server 1 (10.10.10.2) သူက public ကို port 80 and 443 နဲ႕ service ေပး႐ံုပဲ  သက္ဆိုင္ ရာ port က ေန service ကို reply ျပန္႐ံုပဲ အဲဒီေတာ့ သူ႕ကို outgoing traffic rule မွာ "tcp"  ကိုပဲ allow ေပးခဲ့တဲ့ အတြက္ သူ႕က public ကိုျပန္ request လိုမရပါ ဘူး (ဥပမာ : သူက ေန internet သံုးလို မရဘူး ေပါ့) ဒါ ေကာင္းတဲ့ feature ပါ တေယြာက္ေယြာက္က ဒီ server ကို တနည္းနည္းနဲ႕ ခ်ဳပ္ကိုင္ ႏိုင္ သြားျပီ ထားဦး သူ႕က ေန internet ကိုျပန္ျပီး request လုပ္ဖို မလြယ္ႏိုင္ ပါဘူး.
            3)Server 2 (10.10.10.3)သူက ရွင္းပါတယ္ သူက ေန service ေပးတာ မရွိ ဘူးေလ သူ႕က local အတြက္ NAT  လုပ္ေပး႐ံုပဲ အဲဒီေတာ့ Incoming traffic မွာေရးစရာ မလိုေတာ့ ဘူး Outgoing traffic မွာပဲ ၾကိဳက္တဲ့ protocol ထြက္ႏိုင္ တယ္ဆိုျပီ "all" allow ေပးထားပါတယ္
            4)Server 3 (10.10.10.4)သူ႕ကိုလဲ server 1 အတိုင္း လုပ္ထားပါတယ္
            5)အဲေနာက္ပိုင္း မွာ Bridge Server  ကိုလွမ္း accept လုပ္ျပီ configure လုပ္ဖိုကို Server 2 (10.10.10.3) တခုက ေနပဲ port 22 နဲ႕ allow ေပးမယ္ဆိုတာ ကို bridge_fw script ရဲ့ ေအာက္ဆုံး မွာသက္မွတ္ ခဲ့တဲ့ အတြက္ သူ႕ကို server 2 ip 10.10.10.2 က လာတဲ့ request ပဲ allow ေပးပါလိမ့္မယ္.

*** ဒီ sample ေလးက ေန ကိုဟာကို ကို network အတြက္ ျဖည့္ စြတ္ ၍ အသံုး ျပဳႏိုင္ ၾကပါေစ ဗ်ာ ***

>>

UTEE

1 comment:

  1. back to back firewall ထားခ်င္ရင္ ဒီ bridge ကြန္ပ်ဴတာကို local switch ေရွ႕မွာ လာထားရင္ေရာ အဆင္ေၿပႏိုင္မလား ။ အဲ႔က် brigde script က ဘယ္လိုၿပင္ေရးရမလဲ ဒီအတိုင္းၿပန္ေရးလို႔ရလား တီးတီး

    ReplyDelete