[Nasıl] Ubuntu Server ile Transparent Proxy + Firewall Kurulumu

Başlatan sdincsoy, 13 Kasım 2009 - 18:06:37

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

sdincsoy

Ubuntu Sunucu ile Transparent Proxy + Güvenlik DUvarı Kurulumu

Kurulacak olan sistem tek ya da çift ethernet kartlı Ubuntu Sunucu'ya Squid + iptables ile güvenlik duvarı yapılandırması içindir.
Ben ip adreslerimi kendime göre ayarladım. Siz de kendinize göre düzenleyin.
Ubuntu Sunucu olacak PC nin ip adresi : 172.16.10.210
Adsl Modemimim ip adresi : 172.16.10.1

Adsl Modemde DHCP yi kapattım. İç Network deki makinelere manual ip verdim ve iç network deki makinelerime Varsayılan Ağ Geçidi olarak (gateway) Ubuntu Sunucunun ip sini yazdım.
Siz isterseniz Ubuntu sunucumuza DHCP kurup ADSL modemin DHCP sini kapatıp o şekilde kullanın. Ben biraz manual ayarları seven kısımdayım. Çok gerekmedikçe herşeyi manual yaparım :)

Ubuntu sunucu kurulumu yapıp sadece SSH sunucu kuruyoruz,

ilk olarak root kullanıcımıza şifre atayalım.
sudo passwd root

yeni parolayı girdikten sonra

su
ile login olalim. Şahsen ben sudo yazmayı sevmiyorum. Siz isterseniz her komut satırının başına sudo ekleyin :)

ilk olarak kontrol etmemiz gereken Ethernet kartlarımızın durumu;
ifconfig

eth1      Link encap:Ethernet  HWaddr 08:00:27:62:23:09 

          inet addr:172.16.10.210  Bcast:172.16.10.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fe62:2309/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:216 errors:0 dropped:0 overruns:0 frame:0

          TX packets:136 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:19082 (19.0 KB)  TX bytes:15675 (15.6 KB)

          Interrupt:10 Base address:0xd240



lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)



Buna Benzer bir şeyler çıktı ise sorun yok. Sizde 2 ethernet kartı da olabilir.

Ethernet kartımız kurulum sırasında büyük ihtimal ile otomatik ip almıştır. Biz öncelikle ip adresimizi ve dns çözümlemesi için gerekli ayarlarımızı yapalım;

nano /etc/network/interfaces

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).



# The loopback network interface

auto lo

iface lo inet loopback



# The primary network interface

auto eth1

iface eth1 inet static

        address 172.16.10.210

        netmask 255.255.255.0

        network 172.16.10.0

        broadcast 172.16.10.255

        gateway 172.16.10.1

post-up iptables-restore < /etc/iptables.up.rules


Ben ip adreslerimi kendime göre ayarladım. Siz kendi network ünüze göre düzenleyin.
Bu işelmden sonra kaydedip çıkıyoruz ve DNS içiin ayarımızı yapıyoruz;

nano /etc/resolv.conf
nameserver 208.67.222.222
nameserver 195.175.39.40


kaydedip çıkalım.
Ben burada 1. DNS server olarak Open DNS kullandım. Malümünüz youtube ye felan girmek isterseniz uğraşmayın. Ama ben ttnet yasakladı ise ben de uyarım diyenlerdenseniz 1. DNS e TTNET in DNS ip lerini giriniz.

Server imizi restart edelim ve ssh client ile bağlanalıp bundan sonraki ayarlarımıza ordan devam edelim.

ssh root@172.16.10.210

root@172.16.10.210's password:

hiçbir sorun olmadan bağlanmamız gerekiyor. Olacağını da sanmıyorum ve anlatmaya devam ediyorum :)

Öncelikle internete çıkabiliyormuyuz bir test edelim;
ping www.yahoo.com

PING www-real.wa1.b.yahoo.com (69.147.76.15) 56(84) bytes of data.

64 bytes from f1.www.vip.re1.yahoo.com (69.147.76.15): icmp_seq=1 ttl=54 time=158 ms

64 bytes from f1.www.vip.re1.yahoo.com (69.147.76.15): icmp_seq=2 ttl=54 time=157 ms


.
.

Bu şekilde çıktı aldıysak sorun yok.

apt-get update

paket listemizi güncelliyoruz.

IP forward i etkinleştirelim;
nano /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4

net.ipv4.ip_forward=1


ipv4 satırındaki # i kaldırıyoruz.

Ubuntu Server imizi restart edip bir test edelim bakalim ne olacak?

Server imiz açıldıktan sonra terminallerden birisine gateway olarak Server imizin ip sini girelim;
Örn; ip address 172.16.10.211
   netmask 255.255.255.0
   gateway 172.16.10.210
   dns       172.16.10.210

yapalım ve test edelim.
Internete sorunsuz çıkması lazım...
AAAaaa ne oldu şimdi?
Ubuntu Server imiz Router oluverdi bir anda :)

Şimdi biraz iptables ile haşır neşir olalım ve Port kısıtmalası yapalım ki millet içerde at koşturmasın. Trojanlar virüsler sistemimizi halt etmesin ...

IPTABLES AYARLARI

Default kurulumda iptables da herhangi bir ayar olmaz.
iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
       


Şeklindedir.

Biz bunu değiştirelim ve standart internet çıkışı için gerekli olan tanımlamaları yapalım;

İlk olarak SSH ile bu server a bağlanacağımız için şu satırı girelim;
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT

ve bunu daha sonra açılışta çalıştıracağım bir dosyaya kayıt ediverelim;

iptables-save > /etc/iptables.up.rules

Port kısıtlamalarımızı yapmaya başlayalım;

iptables -P INPUT DROP

iptables -P FORWARD DROP


iptables-save > /etc/iptables.up.rules

iptables -L

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
Chain FORWARD (policy DROP)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     
   


Gördüğünüz gibi INPUT ve FORWARD paketlerini dropladık. Sadece ssh bağlantımız için gerekli olan tanımımız duruyor.

Ek olarak ip bilgilerini loglayalim;

iptables -A INPUT -j LOG

iptables -A FORWARD -j LOG

iptables -A OUTPUT -j LOG


( NOT : Bu loglara bakmak için ;
tail -f /var/log/messages 

Bu yaptıklarımızı tekrar kayıt edelim;
iptables-save > /etc/iptables.up.rules


Bu firewall betiğimizi açılışta çalıştıralım;

nano /etc/network/interfaces
The primary network interface
auto eth1
iface eth1 inet static
        address 172.16.10.210
        netmask 255.255.255.0
        network 172.16.10.0
        broadcast 172.16.10.255
        gateway 172.16.10.1






IPTABLES AYARLARIMIZ AÇILIŞTA ÇALIŞSIN



post-up iptables-restore < /etc/iptables.up.rules

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

kaydedip çıkalım ve server imizi restart edelim.

Restart dan sonra daha önce internete çıkan terminalizin internete artık çıkamadığını göreceksiniz.
EEEee olsun o kadar firewall ayarı yapıyoruz :)

Server imiz açıldıktan sonra iptables  imiz ne halde bir bakalım;
iptables -L

Chain INPUT (policy DROP)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere            LOG level warning
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
Chain FORWARD (policy DROP)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere            LOG level warning
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     
LOG        all  --  anywhere             anywhere            LOG level warning

Bir de localhost umuza full hak verelim;
iptables -A INPUT -i lo -j ACCEPT

* her şey yolunda. Şimdi terminallere internete çıkıiş hakkı verelim.

iptables -A FORWARD -s 172.16.10.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -s 172.16.10.0/24 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -s 172.16.10.0/24 -p tcp --dport 53 -j ACCEP
T

iptables -A FORWARD -s 172.16.10.0/24 -p udp --dport 53 -j ACCEPT
iptables-save > /etc/iptables.up.rules


Bu şekilde Sadece terminallere 80,443 ve DNS çözümlemeleri için hak verdik.
İçerdeki makinenin herhangi birisinden test edin. Sadece internette sörf yapabilirsiniz. Diğer tüm portlar kapandı :)
İçerdeki makinelerimiz mail gönderip alıyor ne yapacam diyenlere;

iptables -A FORWARD -s 172.16.10.0/24 -p tcp --dport 587 -j ACCEPT
iptables -A FORWARD -s 172.16.10.0/24 -p tcp --dport 110 -j ACCEPT



Tabii her ekleme den sonra unutmayalım ki;

iptables-save > /etc/iptables.up.rules

isterseniz bir kez daha reboot edin. Test edin. * her şey yolunda ise kendinize göre istediğiniz portları açın.


Belirli ip lere FULL PORT izin vermeniz gerekiyorsa;
iptables -A FORWARD -s 172.16.10.51/32 -p tcp -j ACCEPT
iptables -A FORWARD -s 172.16.10.52/32 -p tcp -j ACCEPT
iptables -A FORWARD -s 172.16.10.53/32 -p tcp -j ACCEPT
iptables -A FORWARD -s 172.16.10.51/32 -p udp -j ACCEPT
iptables -A FORWARD -s 172.16.10.52/32 -p udp -j ACCEPT
iptables -A FORWARD -s 172.16.10.53/32 -p udp -j ACCEPT

şeklinde yapabilirsiniz...

Ek olarak;
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A INPUT -i eth1 -m state –- state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state –- state RELATED,ESTABLISHED -j ACCEPT

yapalım.
iptables -L

Chain INPUT (policy DROP)
target     prot opt source               destination     
LOG        all  --  anywhere             anywhere            LOG level warning
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere            LOG level warning
ACCEPT     tcp  --  172.16.10.0/24       anywhere            tcp dpt:submission
ACCEPT     tcp  --  172.16.10.0/24       anywhere            tcp dpt:www
ACCEPT     tcp  --  172.16.10.0/24       anywhere            tcp dpt:https
ACCEPT     tcp  --  172.16.10.0/24       anywhere            tcp dpt:domain
ACCEPT     udp  --  172.16.10.0/24       anywhere            udp dpt:domain
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere            LOG level warning


Böyle bir iptables çıktımız olması gerekiyor.

Buraya kadar sanırım iptables konusunda ve Ubuntu Server imizi bir firewall haline getirmekte sizlere yardımcı olmuşumdur.
Aynı sistem 2 Ethernet kartı olsa ne olurdu? Buyrun onu da yapıverelim :)

2 ETHERNET KARTI ile FIREWALL UYGULAMASI


Bu senaryo da 2 ethernet kartı olduğunu ve 1 kartımızın Network e diğer kartımızın ADSL modeme bağlı olduğunu varsayalım.

İlk önce Ethernet Kartlarımızı ayarlayalıyoruz ;

nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# İç Network e Bakan Ethernet Kartımız
auto eth0
iface eth0 inet static
        address 192.168.2.2
        netmask 255.255.255.0
        network 192.168.2.0
        broadcast 192.168.2.255
        gateway 192.168.2.1


# ADSL MODEME bağlı olan Ethernet Kartımız
auto eth1
iface eth1 inet static
        address 172.16.10.210
        netmask 255.255.255.0
        network 172.16.10.0
        broadcast 172.16.10.255
post-up iptables-restore < /etc/iptables.up.rules

     



nano /etc/resolv.conf
nameserver 208.67.222.222
nameserver 195.175.39.40

kaydedip çıkalım.
Ben burada 1. DNS server olarak Open DNS kullandım. Malümünüz youtube ye felan girmek isterseniz uğraşmayın. Ama ben ttnet yasakladı ise ben de uyarım diyenlerdenseniz 1. DNS e TTNET in DNS ip lerini giriniz.

Server imizi restart edelim ve ssh client ile bağlanalıp bundan sonraki ayarlarımıza ordan devam edelim.

ssh root@172.16.10.210

root@172.16.10.210's password:

hiçbir sorun olmadan bağlanmamız gerekiyor. Olacağını da sanmıyorum ve anlatmaya devam ediyorum :)

Öncelikle internete çıkabiliyormuyuz bir test edelim;
ping www.yahoo.com

PING www-real.wa1.b.yahoo.com (69.147.76.15) 56(84) bytes of data.

64 bytes from f1.www.vip.re1.yahoo.com (69.147.76.15): icmp_seq=1 ttl=54 time=158 ms

64 bytes from f1.www.vip.re1.yahoo.com (69.147.76.15): icmp_seq=2 ttl=54 time=157 ms


Bu şekilde çıktı aldıysak sorun yok.

apt-get update
paket listemizi güncelliyoruz.

IP forward i etkinleştirelim;
nano /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4

net.ipv4.ip_forward=1



ipv4 satırındaki (#) i kaldırıyoruz.


Restart ediyoruz. Buradan sonra işler biraz farklılaşıyor...

Iptables imizi yine yukarıda açıkladığım gibi düzenliyoruz. Ek olarak;

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A INPUT -i eth0 -m state –- state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state –- state RELATED,ESTABLISHED -j ACCEPT


eklememiz gerekiyor.

TRANSPARENT SQUID KURULUMU

İlk olarak Squid paketini kuralım;

apt-get install squid
Squid başarılı bir biçimde kurulduktan sonra ayarlamızı yapalım;
nano /etc/squid/squid.conf

# Example rule allowing access from your local networks.

# Adapt to list your (internal) IP networks from where browsing

# should be allowed

acl localnet src 10.0.0.0/8     # RFC1918 possible internal network

acl localnet src 172.16.0.0/12  # RFC1918 possible internal network

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network


Buradaki satirlari kendi network umuze göre ayarlamamız gerekiyor.

#Recommended minimum configuration:

#

# Only allow cachemgr access from localhost

http_access allow manager localhost

http_access deny manager


http_access allow localnet
 
( Bu satırı siz EKLEYECEKSİNİZ)
Kaydedip çıktıktan sonra Squid imizi restart edelim;

/etc/init.d/squid restart
Peki Squid i de kurduk. Acaba çalışıyormu ?
Öncelikli olarak iptables da ayarlarımızı yapalım;

iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables-save > /etc/iptables.up.rules

Terminallerden Internet Explorer ya da Mozilla ne kullanıyorsanız Proxy sunucu olarak Ubuntu Server imizin ip sini ve squid imizin port unu girelim ve bakalım ne olacak ?
Ben 172.16.10.210 port 3128 yaptim. Siz istediğiniz gibi değiştirebilirsiniz.

Bundan sonra;
bakalım terminalimiz squid den mi çıkmış diye test edelim;

tail -f /var/log/squid/access.log

1258127178.143    646 172.16.10.212 TCP_MISS/200 654 GET http://csm50.url.trendmicro.com/P/224/7EDF84EFB3177DB2D7409E21071BEE634629391CEB0BDA74755E8DE4F726D38DFAE825A41C8A903F3D051953B8716899E1CEF0D203E95D134A210252CD86572D334EB89DF82ED8482E8C3DE0BD2A7AAEA54C68E043F06A68AA0514AA016CA8D7A7997EE855B7408D9CE0482B25555C13 - DIRECT/213.155.157.48 text/html

1258127178.570    424 172.16.10.212 TCP_MISS/200 7627 GET http://www.google.com.tr/search?hl=tr&source=hp&q=deneme&btnG=Google%27da+Ara&meta=&aq=null&oq= - DIRECT/66.102.9.99 text/html




Oh ne güzel Squid de çalışıyor.

Şimdi de öyle bi ayar yapalım ki terminale proxy girmeden Squid den internete çıkılsın (şu meşhur transparent Proxy olayı) ben de log layayım, içerik filtresi koyayım derseniz;
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 172.16.10.210:3128

iptables-save > /etc/iptables.up.rules


nano /etc/squid/squid.conf


# Squid normally listens to port 3128

http_port 3128

Satırını bulup;

# Squid normally listens to port 3128

http_port 3128 transparent


bu hale getiriyoruz.
Test edelim bakalım ne olmuş?

tail -f /var/log/squid/access.log

1258127744.945    106 172.16.10.212 TCP_MISS/200 5461 GET http://l.yimg.com/a/i/us/crsl/sma/09q2/71471689_47.jpg - DIRECT/77.238.187.43 image/jpeg

1258127745.035    394 172.16.10.212 TCP_MISS/200 33379 GET http://l.yimg.com/a/i/crsl/gam/09q4/cut_350x200_gam_v2.jpg - DIRECT/77.238.187.43 image/jpeg

1258127745.159    176 172.16.10.212 TCP_MISS/200 651 GET http://csm50.url.trendmicro.com/P/2688


1258127745.733    496 172.16.10.212 TCP_MISS/200 6348 GET http://d.yimg.com/a/i/ww/met/sprite_pg_081209.png - DIRECT/77.238.187.39 image/png


Eee ne güzel di mi?
Ve Squid imiz transparent oluveriyor. :)

Squid çok geniş bir konu. Zira iptables da aynı şekilde. Ben basit kurulum için gerekli olanları elimden geldiğince yazmaya çalıştım.
Squid de içerik filtrelemesi yapabilirsiniz. Ya da ben hazır birşeyler kullanmak isterim derseniz Dansguardian ya da SquidGuard kullanabilirsiniz. Ayrıca Bu loglari Internet Explorer ya da Mozilla  dan ya da browser olarak ne kullanıyorsanız ordan seyretmek için SARG i kurabilirsiniz.
Bunlar çok geniş bir konuşlar. Squid ve diğer paketler içinde sizlere dökümhan hazırlarım isterseniz.



Not: Sizlere bu dökümhanı hazırlarken aynı anda ben de kurulum yaptım ve test ettim. Aldığım loglar dan anlayabilirsiniz.

Düzenleme Notu: Türkçe karşılığı varken İngilizce kelimeler kullanmayınız. "Server"= Sunucu; "Firewall"= Güvenlik Duvarı


ihtiyar said

Elinize sağlık diyelim bizde. Sunucu konularında konularımız eksik, mutlu olduk paylaşımınızdan dolayı. ;)

sdincsoy

Rica ederim. Faydalı olabildi isem ne mutlu  bana.
Bundan 3-5 ay önce sizlerin de yardımları ile öğrendiklerimi birleştirdim. Bu tarz kurulumları şimdi kolaylıkla yapabiliyorum.
Forum da çok konu vardı bununla ilgili ayrı ayrı başlıklarda. Hepsi bir arada olsun kolaylık olur dedim.



ironic

Teşekkürler. Başlığı düzenleyip bu güzel anlatımı sabitliyorum.

mustafam33

benim gibi cemi için süper bir kaynak olmuş, birkaç sorum olucak şirketim için kullanmak istiyorum, burdaki bağlantı uydu modem ile kablosuz interneti dağıtıyoruz, yanlız kullanıcılar video ve benzeri şeyler indirdiğinde  diğer kullanıcılar internetten faydalanamıyor, sadece downloadı nasıl kapatabiliriz, diğer herşey serbest msn vs.. video chat filan .

Felâsife

Ben bu konuyu kaçirmisim, biraz geç olacak ama @sdincsoy eline saglik müthis olmus. :)
Maceraya hazır mısın!  Bir BSD almaz mısın?

sdincsoy

Selam
uzun bir aradan sonra tekrar buradayım. işlerim çok yoğun olduğu için epey bir zamandır foruma giremedim.
mustafam33 http://forum.ubuntu-tr.net/index.php/topic,13770.msg169143.html#msg169143 link i sana yeteri kadar yardımcı olacaktır sanırrım.

kolay gelsin.

rumeliruzgari

Merhaba,
peki benim verdiğim IPTABLES ve bridge ayarlarına göre nasıl bir konfigürasyon yapılır squid.conf dosyasına?
Benim kurduğum Ubunru server versiyonu değil.Lokal ağı çalıştırır mı?

ilkersorar

mrb sdincsoy
Peki şunu sorayım size
3 veya 5 bilgisayarlı bir ofiste pfsense mi ubuntu üzerinde başka bir firewall mı mantıklı.
loglama yapsın
kısıtlama getirsin(mesala belli saatlerde facebook veya flash oyunlara girilsin gibi)

nyhat

arkadaşlar acil bir durumla karşı karşıyayım ALLAH RIZASI İÇİN YARDIM EDİN...
HOCA öDEV vermiş fakat benim işim gereği hiç vaktim olmadı ve unuttum ödevin yarın anlatılacağını çok hazırlıksız yakalandım
İPTABLES kurulumu ile ilgili ekranda video ile gösterimi ses olmayacak sadece anlatımı olacak