27 Aralık 2015

Ubuntu IPTables (Linux IPTables) Firewall Ayarları - Bölüm 2

IPTables makalemize devam ediyoruz. Konuları daha iyi anlamak adına pratik yapalım.





Bir adres nasıl bloke edilir?
Örneğin facebook yasaklamak için ve blacklist eklemek için kullanılır.
# iptables –A OUTPUT –p tcp –d www.facebook.com –j DROP
# iptables –A OUTPUT –p tcp –d facebook.com –j DROP
Dışarıdan IP adresine nasıl izin verilir?
Dışarıdan  sadece btrisk.com adresine izin vermek için ve bu aynı zaman da whitelist eklemek için kullanılır.
# iptables –-policy INPUT DROP
# iptables –A INPUT –s btrisk.com –j ACCEPT
SQL server nasıl kısıtlanmalıdır?
SQL sunucuya herkezin erişme izni olmamalıdır. LAN kullanıcıları için SQL server izin verme:
# iptables –I INPUT –p tcp –s 10.18.12.0/24 –dport 3306 –j ACCEPT
http ve  https protokollerine nasıl izin tanımlanır?
Güvenliği yüksek olan sunucu ortamlarda sadece 80 ve 443 portuna izin verilmelidir. Sadece 80(http) ve 443(https) portuna izin verme:
# iptables –A INPUT –p tcp --dport 80,443 –m state --state  NEW,ESTABLISHED –j ACCEPT
# iptables –A OUTPUT –p tcp --sport 80,443 –m state --state ESTABLISHED –j ACCEPT
SSH portuna nasıl izin tanımlanır?
Bazen sunucuya uzaktan bağlanılabilmektedir. Bunun için en güvenli yöntem IP tanımlamaktadır. Belirli bir IP adresinden gelen SSH isteklerine izin verme:
# iptables –A INPUT –p tcp –s btrisk.com --dport 22 –m state --state NEW,ESTABLISHED –j ACCEPT
DoS’dan korunmak için nasıl tanımlanmalıdır?
DoS saldırıya karşı koruma:
# iptables –A INPUT –p tcp –dport 80 –m limit --limit 25/minute --limit-burst 100 –j ACCEPT
Toplam bağlantı süresi limit-burst seviyesine eriştikten sonra 25/minute uygulanacaktır.
Load Balance nasıl tanımlanır?
Gelen Web trafiğini iptables ile Load Balance edebilme:
# iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.2.11:443
# iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.2.12:443
# iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.2.13:443
Port Yönlendirme nasıl yapılmalıdır?
Port yönlendirme yapma, 420 portundan gelen isteği 22 portuna yönlendirmek için kullanılabilir.
# iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 420 -j DNAT --to 192.168.102.37:22 
İç ağda IP adresi koruma nasıl tanımlanır?
Belli IP adreslerini korumak için:
# iptables –I FORWARD –m tcp –p tcp –m iprange –src-range 192.168.2.50-192.168.2.200 –j REJECT
# iptables –I FORWARD –m udp –p udp –m iprange –src-range 192.168.2.50-192.168.2.200 –j REJECT
Video nasıl engellenir?
İç ağda çalışanlar için bazen video engellenmesi yapılmak istenmektedir. Videoları engellemek için kullanılabilir :
# iptables –I FORWARD –m udp –p udp --dport 80,443 –m iprange –src-range 192.168.2.50-192.168.2.200 –j REJECT
IPTables kullanarak nasıl bash script yazılır?
Bazen farklı durumlar için script hazırlamak gerekebilir. Bu scriptler farklı ortamlar için farklı olacağından hazırlanabilir.
Aşağıda bulunan script port taraması ve smurf saldırılarına karşı önlem amaçlı hazırlanmıştır. Aynı zamanda nasıl loglandığı göstermektedir.


#!/bin/sh
#
#
# Bu script port scan ve smurf saldırılarını engellmek içindir.
IPT      ="iptables"
echo "Starting IPv4 Wall..."

# Tüm iptables kurallarını sil
$IPT -F

BADIPS=$(egrep -v -E "^#|^$" /root/scripts/blacklist_IPs.fw)


################# INPUT iptable Kuralları #################
# loopback input kabul et
$IPT -A INPUT -i lo -p all -j ACCEPT

# TCP el sıkışmaya izin ver.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# Kara Listedeki IP'leri blokla
for ip in $BADIPS
do
    $IPT -A INPUT -s $ip -j DROP
    $IPT -A OUTPUT -d $ip -j DROP
done

# SMURF saldırlar için koruma
$IPT -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
$IPT -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
$IPT -A INPUT -p icmp -m icmp -m limit --limit 1/second -j ACCEPT

# Geçersiz paketleri DROP et.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
$IPT -A OUTPUT -m state --state INVALID -j DROP

# RST paket, smurf saldırına izin verme
$IPT -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

# Portscan koruma.
# Saldıran IP adresini 24 saat (3600 x 24 = 86400 Saniye) kitle.
$IPT -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
$IPT -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# 24 saat sonra bloğu kaldır.
$IPT -A INPUT -m recent --name portscan --remove
$IPT -A FORWARD -m recent --name portscan --remove

# Port taramaları logla. portscan prefix ile.
$IPT -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "portscan:"
$IPT -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

$IPT -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "portscan:"
$IPT -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

# İzin verilecek portlar
$IPT -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

# ICMP ping izin verme.
$IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# Son olarak tüm trafiği kabul etme.
$IPT -A INPUT -j REJECT


###### Aşağıdaki kurallar OUTPUT iptable içindir. ######

## Loopback OUTPUT izin ver.
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISH,RELATED -j ACCEPT

# İzin verilecek portlar
# SMTP   = 25
# DNS    = 53
# HTTP   = 80
# HTTPS  = 443
# SSH    = 22

$IPT -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
$IPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT

# Pinglere izin ver.
$IPT -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# Son olarak OUTPUT trafiğini kabul etme.
$IPT -A OUTPUT -j REJECT

# Forwarding  trafiği kabul etme.
$IPT -A FORWARD -j REJECT

<<Önceki Bölüm