IPTABLE'LAR VE GÜVENLİK DUVARI
Bugün iptables ve güvenlik duvarını inceleyeceğiz ve bu ikisinin geçmişini, kurulumu ve bunları Linux dağıtımlarımız için nasıl yapılandırabileceğimizi öğreneceğiz.
Daha fazla vakit kaybetmeden başlayalım.
Öncelikle iptables'ın ne olduğunu bilmemiz gerekiyor. Kıdemli BT profesyonellerinin çoğu bunu biliyor ve onunla da çalışıyordu. Iptables, kullanıcının Linux çekirdeği güvenlik duvarı ve zincirleri tarafından sağlanan güvenlik veya güvenlik duvarı güvenlik tablolarını, kullanıcının güvenlik gereksinimlerini karşılayacak şekilde buna göre güvenlik duvarı kuralları ekleyip çıkarabilmesini sağlayacak şekilde yapılandırmasına olanak tanıyan bir uygulama/programdır. Iptables, kullanıcının en iyi şekilde yararlanabilmesi için farklı çekirdek modülleri ve farklı protokoller kullanır. Örneğin, hem tcp hem de udp için IPv4 (IP sürüm 4/32 bit) için iptables ve IPv6 (IP sürüm 6/64 bit) için ip6tables kullanılır. Normalde iptables kuralları Sistem Yöneticisi veya Sistem Analisti veya BT Yöneticisi tarafından yapılandırılır. Her iptables kuralını yürütmek için root ayrıcalıklarına sahip olmanız gerekir. Linux Çekirdeği, iptables kullanılarak gerçekleştirilebilecek ağ ile ilgili çeşitli işlemleri sağlayabilmek için Netfilter çerçevesini kullanır. Daha önce ipchains, Linux dağıtımlarının çoğunda aynı amaçla kullanılıyordu. Her iptables kuralı doğrudan Linux Çekirdeği tarafından yönetilir ve buna çekirdek görevi denir. Sunucunuzun güvenlik duvarı güvenliğini yapılandırmak için hangi GUI araçlarını veya diğer güvenlik araçlarını kullanırsanız kullanın, günün sonunda iptables kurallarına dönüştürülür ve işlemi gerçekleştirmek için çekirdeğe sağlanır.
İptables'ın yükselişi netfilter ile başlıyor. Paul Rusty Russell, netfilter/iptables'ın ilk yazarı ve arkasındaki düşünce kuruluşuydu. Daha sonra pek çok teknoloji insanı ona katıldı, ardından Netfilter çekirdek ekibini oluşturup oluşturdu ve diğer birçok açık kaynak projesi gibi ortak bir çaba olarak netfilter/iptables projesini geliştirip sürdürdü. Harald Welte 2007'ye kadar eski liderdi ve ardından 2013'e kadar Patrick McHardy başkandı. Şu anda netfilter çekirdek ekibinin başkanı Pablo Neira Ayuso'dur.
Netfilter hakkında daha fazla bilgi edinmek için lütfen bu bağlantıyı ziyaret edin. Netfilter'ın geçmişi hakkında daha fazla bilgi edinmek için lütfen bu bağlantıyı ziyaret edin.
İptables geçmişi hakkında daha fazla bilgi edinmek için lütfen bu bağlantıyı ziyaret edin.
Artık her Linux Çekirdeği iptables ile birlikte geliyor ve tüm ünlü modern Linux dağıtımlarında önceden oluşturulmuş veya önceden yüklenmiş olarak bulunabilir. Çoğu Linux sisteminde iptables bu /usr/sbin/iptables dizinine kuruludur. Ayrıca /sbin/iptables dosyasında da bulunabilir, ancak iptables "temel ikili dosya" yerine daha çok bir hizmete benzediğinden, tercih edilen konum /usr/sbin dizininde kalır.
Ubuntu veya Debian için
sudo apt-get install iptablesCentOS için
sudo yum install iptables-servicesRHEL için
sudo yum install iptablesİptables sürümünüzü öğrenmek için terminalinize aşağıdaki komutu yazın.
sudo iptables --versionOpenSUSE 42.1'i durdurmak için aşağıdakini yazın.
sudo /sbin/rcSuSEfirewall2 stopTekrar başlatmak için
sudo /sbin/rcSuSEfirewall2 start
Ubuntu'yu durdurmak için aşağıdakini yazın.
sudo service ufw stopTekrar başlatmak için
sudo service ufw startDebian ve RHEL'i durdurmak için aşağıdakini yazın.
sudo /etc/init.d/iptables stopTekrar başlatmak için
sudo /etc/init.d/iptables startCentOS'ta durdurmak için aşağıdakini yazın.
sudo service iptables stopTekrar başlatmak için
sudo service iptables startİprable'larınızda mevcut ve aktif olan tüm kuralları öğrenmek için bir terminal açmanız ve aşağıdakini yazmanız yeterlidir.
sudo iptables -LEğer iptables'ta hiçbir kural çıkışı yoksa, iptables güvenlik duvarınızda şu ana kadar eklenmiş bir kural yoksa, aşağıdaki görüntüye benzer bir şey göreceksiniz.
Yukarıdaki resimde üç (3) zincir olduğunu ve bunların INPUT, FORWARD, OUTPUT olduğunu ve herhangi bir kural bulunmadığını görebilirsiniz. Aslında henüz eklemedim.
iptables güvenlik duvarınızın zincirlerinin durumunu öğrenmek için aşağıdakileri yazın.
sudo iptables -SYukarıdaki komut ile zincirlerinizin kabul edip etmediğini öğrenebilirsiniz.
Tüm iptables kurallarını temizle
İptables güvenlik duvarınızdaki tüm kuralları temizlemek için lütfen aşağıdakini yazın. Bu normalde iptables kurallarınızı temizleme olarak bilinir.
sudo iptables -FYalnızca INPUT zincirini veya herhangi bir zinciri temizlemek istiyorsanız, gereksinimlerinize göre aşağıdaki komutları verin.
sudo iptables -F INPUTsudo iptables -F OUTPUTsudo iptables -F FORWARDKABUL veya BIRAKMA Zincirleri
Belirli bir zinciri kabul etmek veya bırakmak için, gereksinimlerinizi karşılayacak şekilde terminalinizde aşağıdaki komutlardan herhangi birini çalıştırın.
iptables --policy INPUT DROPYukarıdaki kural o sunucuya gelen hiçbir şeyi kabul etmeyecektir. Tekrar KABUL durumuna geri döndürmek için aşağıdakileri yapın
iptables --policy INPUT ACCEPTAynı şey diğer zincirler için de geçerli
iptables --policy OUTPUT DROPiptables --policy FORWARD DROPNot: Varsayılan olarak tüm iptables zincirleri ( INPUT, OUTPUT, FORWARD ) ACCEPT modundadır. Bu, Politika Zinciri Varsayılan Davranışı olarak bilinir.
Herhangi bir bağlantı noktasına izin verme
Ana makinenizde herhangi bir web sunucusu çalıştırıyorsanız, sunucunuzun 80 numaralı bağlantı noktasını dinlemesi veya yanıt vermesi için iptables güvenlik duvarınıza izin vermelisiniz. Varsayılan olarak web sunucusu 80 numaralı bağlantı noktasında çalışır. O zaman bunu yapalım.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTYukarıdaki satırda A, ekleme anlamına geliyor, iptables listesine yeni bir kural eklediğimiz anlamına geliyor. INPUT, INPUT zincirini temsil eder. P, protokol anlamına gelir ve dport, hedef bağlantı noktası anlamına gelir. Varsayılan olarak herhangi bir web sunucusu 80 numaralı bağlantı noktasında çalışır. Benzer şekilde SSH bağlantı noktasına da izin verebilirsiniz.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPTVarsayılan olarak SSH, 22 numaralı bağlantı noktasında çalışır. Ancak SSH'yi 22 numaralı bağlantı noktasında çalıştırmamak iyi bir uygulamadır. SSH'yi her zaman farklı bir bağlantı noktasında çalıştırın. SSH'yi farklı bir bağlantı noktasında çalıştırmak için favori düzenleyicinizde /etc/ssh/sshd_config dosyasını açın ve 22 numaralı bağlantı noktasını başka bir bağlantı noktasıyla değiştirin.
Diyelim ki 135 numaralı bağlantı noktasını engellemek istiyoruz. Bunu şu şekilde yapabiliriz:
sudo iptables -A INPUT -p tcp --dport 135 -j DROPsunucunuzun, sunucudan başka bir ana bilgisayara/sunucuya herhangi bir SSH bağlantısı başlatmasını engellemek istiyorsanız aşağıdaki komutu verin
sudo iptables -A OUTPUT -p tcp --dport 22 -j DROPBunu yaptığınızda hiç kimse sunucunuzdan SSH bağlantısı başlatmak için sunucunuzu kullanamaz. OUPUT zinciri, başka bir ana bilgisayara giden herhangi bir TCP bağlantısını filtreleyecek ve DROP yapacaktır.
Bağlantı Noktası ile belirli IP'ye izin verme
sudo iptables -A INPUT -p tcp -s 0/0 --dport 22 -j ACCEPTBurada -s 0/0, herhangi bir IP adresine sahip herhangi bir gelen kaynağı temsil eder. Bu nedenle, sunucunuzun hedef bağlantı noktası 22 olan bir tcp paketine yanıt vermesinin hiçbir yolu yoktur. Yalnızca belirli bir IP'ye izin vermek istiyorsanız aşağıdakini kullanın.
sudo iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22 -j ACCEPTYukarıdaki örnekte yalnızca 12.12.12.12 IP adresinin SSH bağlantı noktasına bağlanmasına izin veriyorsunuz. Geri kalan IP adresleri 22 numaralı bağlantı noktasına bağlanamayacaktır. Benzer şekilde CIDR değerlerini kullanarak da izin verebilirsiniz. Örneğin
sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j ACCEPTYukarıdaki örnek, 22 numaralı bağlantı noktasındaki bağlantıyı kabul etmek için tüm bir IP bloğuna nasıl izin verebileceğinizi gösterir. 12.12.12.1'den 12.12.12.255'e kadar IP'yi kabul edecektir.
Bu tür IP adresleri aralığını engellemek istiyorsanız, aşağıdaki gibi ACCEPT'i DROP ile değiştirerek bunun tersini yapın.
sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROPYani 12.12.12.1'den 12.12.12.255 IP adreslerine kadar 22 numaralı port üzerinden bağlantı kurulmasına izin vermeyecektir.
ICMP'yi engelleme
Sunucunuza gelen ve sunucunuzdan gelen ICMP (ping) isteklerini engellemek istiyorsanız aşağıdakileri deneyebilirsiniz. İlki, ICMP ping yankı isteğinin başka bir ana bilgisayara gönderilmemesini engelleyecektir.
sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j DROPŞimdi google.com'a ping atmayı deneyin. OpenSUSE sunucunuz google.com'a ping atamayacaktır.
Sunucunuza gelen ICMP (ping) yankı isteğini engellemek istiyorsanız terminalinize aşağıdakini yazmanız yeterlidir.
sudo iptables -I INPUT -p icmp --icmp-type 8 -j DROPArtık herhangi bir ICMP ping yankı isteğine yanıt vermeyecektir. Diyelim ki sunucunuzun IP adresi 13.13.13.13. Ve eğer sunucunuzun IP'sine ping atarsanız, sunucunuzun o ping isteğine yanıt vermediğini göreceksiniz.
MySql/MariaDB Bağlantı Noktasını Engelleme
Mysql veritabanınızı tuttuğu için veritabanınızı dışarıdan gelen eklentilerden korumalısınız. Güvenilir uygulama sunucunuzun IP adreslerinin yalnızca MySQL sunucunuza bağlanmasına izin verin. Diğerini engellemek için
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPTYani 192.168.1.0/24 IP bloğu dışında herhangi bir MySql bağlantısı almayacaktır. MySql varsayılan olarak 3306 portunda çalışır.
SMTP'yi engelleme
Ana sunucunuzda herhangi bir posta sunucusu çalıştırmıyorsanız veya sunucunuz bir posta sunucusu gibi davranacak şekilde yapılandırılmamışsa, sunucunuzun herhangi bir etki alanına herhangi bir spam veya posta göndermemesi için SMTP'yi engellemeniz gerekir. Sunucunuzdan giden postaları engellemek için bunu yapmanız gerekir. Böyle yaparak,
sudo iptables -A OUTPUT -p tcp --dport 25 -j DROPDDoS'u engelle
Hepimiz DDoS terimine aşinayız. Bundan kurtulmak için terminalinizde aşağıdaki komutu verin.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPTGereksinimlerinizi karşılamak için sayısal değeri yapılandırmanız gerekir. Bu sadece sürdürülmesi gereken bir standarttır.
ile daha fazlasını koruyabilirsiniz
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlogBağlantı Noktası Taramasını Engelleme
Sunucunuzun açık portlarını tarayıp sunucu güvenliğinizi bozmaya çalışan yüzlerce kişi var. Engellemek için
sudo iptables -N block-scansudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURNsudo iptables -A block-scan -j DROPBurada blok tarama yeni bir zincirin adıdır.
Kötü Bağlantı Noktalarını Engelleme
Sunucunuz için bazı hatalı bağlantı noktalarını da engellemeniz gerekebilir. İşte bunu nasıl yapabileceğiniz.
badport="135,136,137,138,139,445"
sudo iptables -A INPUT -p tcp -m multiport --dport $badport -j DROP
sudo iptables -A INPUT -p udp -m multiport --dport $badport -j DROPİhtiyaçlarınıza göre daha fazla bağlantı noktası ekleyebilirsiniz.
Firewalld, ağ bağlantılarının veya arayüzlerinin güven düzeyini tanımlayan ağ/güvenlik duvarı bölgelerini destekleyen, dinamik olarak yönetilen bir güvenlik duvarı sağlar. IPv4, IPv6 güvenlik duvarı ayarları, ethernet köprüleri ve IP setleri desteği vardır. Çalışma zamanı ve kalıcı yapılandırma seçenekleri arasında bir ayrım vardır. Ayrıca, güvenlik duvarı kurallarını doğrudan eklemek için hizmetlere veya uygulamalara yönelik bir arayüz sağlar.
System-config-firewall/lokkit içeren eski güvenlik duvarı modeli statikti ve her değişiklik güvenlik duvarının tamamen yeniden başlatılmasını gerektiriyordu. Bu aynı zamanda güvenlik duvarı netfilter çekirdek modüllerinin kaldırılmasını ve yeni yapılandırma için gerekli modüllerin yüklenmesini de içeriyordu. Modüllerin kaldırılması, durum bilgisi olan güvenlik duvarını ve kurulan bağlantıları bozuyordu. Güvenlik duvarı arka plan programı ise güvenlik duvarını dinamik olarak yönetir ve tüm güvenlik duvarını yeniden başlatmadan değişiklikleri uygular. Bu nedenle tüm güvenlik duvarı çekirdek modüllerini yeniden yüklemeye gerek yoktur. Ancak bir güvenlik duvarı arka plan programı kullanmak, arka plan programındaki durumun ve çekirdekteki güvenlik duvarının senkronize olduğundan emin olmak için tüm güvenlik duvarı değişikliklerinin o arka plan programıyla yapılmasını gerektirir. Güvenlik duvarı arka plan programı, iptables ve ebtables komut satırı araçları tarafından eklenen güvenlik duvarı kurallarını ayrıştıramaz. Arka plan programı, D-BUS aracılığıyla mevcut aktif güvenlik duvarı ayarları hakkında bilgi sağlar ve ayrıca PolicyKit kimlik doğrulama yöntemlerini kullanarak D-BUS aracılığıyla değişiklikleri kabul eder.
Dolayısıyla, güvenlik duvarı işlemleri gerçekleştirmek için zincir ve kurallar yerine bölgeleri ve hizmetleri kullanır ve mevcut oturumları ve bağlantıları bozmadan kuralları dinamik olarak yöneterek güncellemelere ve değişikliklere izin verebilir.
Aşağıdaki özelliklere sahiptir.
- D-Bus API'si.
- Zamanlanmış güvenlik duvarı kuralları.
- Belirli güvenlik duvarı kuralları için Zengin Dil.
- IPv4 ve IPv6 NAT desteği.
- Güvenlik duvarı bölgeleri.
- IP seti desteği.
- Reddedilen paketlerin basit günlüğü.
- Doğrudan arayüz.
- Kilitleme: Güvenlik duvarını değiştirebilecek uygulamaların beyaz listeye alınması.
- iptables, ip6tables, ebtables ve ipset güvenlik duvarı arka uçları desteği.
- Linux çekirdek modüllerinin otomatik yüklenmesi.
- Kukla ile entegrasyon.
Güvenlik duvarı hakkında daha fazla bilgi edinmek için lütfen bu bağlantıyı ziyaret edin.
Güvenlik duvarını kurmadan önce lütfen iptables'ı durdurduğunuzdan ve ayrıca iptables'ın artık kullanılmadığından veya çalışmadığından emin olun. Böyle yaparak,
sudo systemctl stop iptablesBu, iptables'ın sisteminizde oluşmasını durduracaktır.
Daha sonra terminalde aşağıdaki komutu vererek iptables'ın sisteminiz tarafından artık kullanılmadığından emin olun.
sudo systemctl mask iptablesŞimdi iptables'ın durumunu kontrol edin.
sudo systemctl status iptablesArtık güvenlik duvarını sistemimize yüklemeye hazırız.
Ubuntu için
Ubuntu'ya kurmak için önce UFW'yi kaldırmalısınız, ardından Firewalld'u kurabilirsiniz. UFW'yi kaldırmak için terminalde aşağıdaki komutu verin.
sudo apt-get remove ufwUFW'yi kaldırdıktan sonra terminalde aşağıdaki komutu verin
sudo apt-get install firewall-appletVeya
Ubuntu Yazılım Merkezi'ni açabilir ve "güvenlik duvarı uygulaması" ifadesini arayabilir veya arayabilir ve ardından bunu Ubuntu sisteminize yükleyebilirsiniz.
RHEL, CentOS ve Fedora için
CentOS sisteminize güvenlik duvarını kurmak için aşağıdaki komutu yazın.
sudo yum install firewalld firewall-config -yFirewalld'u yapılandırmadan önce, kurulum sonrası güvenlik duvarının durumunu bilmeliyiz. Bunu bilmek için aşağıdakini yazın.
sudo systemctl status firewalldGüvenlik duvarı bölge bazında çalıştığı için henüz herhangi bir yapılandırma yapmamış olsak da tüm bölgeleri ve hizmetleri kontrol etmemiz gerekiyor.
Bölgeler için
sudo firewall-cmd --get-active-zonesveya
sudo firewall-cmd --get-zones
Varsayılan bölgeyi bilmek için aşağıdaki komutu verin
sudo firewall-cmd --get-default-zoneVe Hizmetler İçin
sudo firewall-cmd --get-servicesBurada güvenlik duvarı kapsamındaki hizmetleri görebilirsiniz.
Önemli bir not, her değişiklikten sonra, değişikliklerinizin gerçekleşebilmesi için güvenlik duvarını yeniden yüklemeniz gerekir.
Varsayılan bölgeyi ayarlamak için
sudo firewall-cmd --set-default-zone=internalveya
sudo firewall-cmd --set-default-zone=publicBölgeyi değiştirdikten sonra değişip değişmediğini kontrol edin.
sudo firewall-cmd --get-default-zonesudo firewall-cmd --permanent --zone=public --add-port=80/tcpBu, güvenlik duvarının ortak bölgesine TCP bağlantı noktası 80'i ekleyecektir. 80'i kendi bağlantı noktanızla değiştirerek istediğiniz bağlantı noktasını da ekleyebilirsiniz.
Şimdi güvenlik duvarını yeniden yükleyin.
sudo firewall-cmd --reloadŞimdi durumu kontrol ederek TCP 80 portunun eklenip eklenmediğini kontrol edin.
sudo firewall-cmd --zone=public --list-ports
Burada tcp port 80'in eklendiğini görebilirsiniz.
Veya buna benzer bir şeyi deneyebilirsiniz.
sudo firewall-cmd --zone=public --list-allTcp 80 bağlantı noktasını ortak bölgeden kaldırmak için aşağıdakini yazın.
sudo firewall-cmd --zone=public --remove-port=80/tcpTerminalinizde yankılanan bir “başarılı” metni göreceksiniz.
80'i kendi bağlantı noktanızla değiştirerek istediğiniz bağlantı noktasını da koyabilirsiniz.
Firewalld'a ftp hizmeti eklemek için aşağıdaki komutu uygulayın
sudo firewall-cmd --zone=public --add-service=ftpTerminalinizde yankılanan bir “başarılı” metni göreceksiniz.
Benzer şekilde smtp servisini eklemek için aşağıdaki komutu verin.
sudo firewall-cmd --zone=public --add-service=smtpFTP ve smtp'yi, güvenlik duvarına eklemek istediğiniz kendi hizmetinizle değiştirin.
Ftp & smtp servislerini güvenlik duvarından kaldırmak için terminalde aşağıdaki komutu verin.
sudo firewall-cmd --zone=public --remove-service=ftpsudo firewall-cmd --zone=public --remove-service=smtpDilerseniz güvenlik duvarını kullanarak gelen veya giden paketleri/bağlantıları engelleyebilirsiniz. Bu, güvenlik duvarının "paniklemesi" olarak bilinir. Bunu yapmak için aşağıdaki komutu verin.
sudo firewall-cmd --panic-onTerminalinizde yankılanan bir “başarılı” metni göreceksiniz.
Bunu yaptıktan sonra, bir ana bilgisayara ping atamayacak ve hatta herhangi bir web sitesine göz atamayacaksınız.
Bunu kapatmak için terminalinizde aşağıdaki komutu verin.
sudo firewall-cmd --panic-offsudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" accept'Bunu yaparak, güvenlik duvarı kaynak IP 192.168.1.4'ten IP v4 paketlerini kabul edecektir.
Benzer şekilde herhangi bir IP adresini engellemek için
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" reject'Bunu yaparak, güvenlik duvarı her IP v4 paketini kaynak IP 192.168.1.4'ten bırakır/atar.
Burada Firewalld'ın temellerini anlattım, böylece çalışma metodolojisini ve iptables ile arasındaki farkları kolayca anlayabilirsiniz.
Hepsi bugün için. Umarım bu makaleyi okumaktan keyif alırsınız.
Dikkatli ol.









