Kod: Zaznacz cały
#!/bin/bash
echo "£adowanie htb i iptables"
#Kasacja starych zasad:
tc qdisc del root dev eth2 2> /dev/null
tc qdisc del root dev eth1 2> /dev/null
tc qdisc del root dev eth0 2> /dev/null
#Interfejs wychodzący na LAN eth1:
tc qdisc add dev eth0 root handle 1:0 htb default 11
tc class add dev eth1 parent 1:0 classid 1:1 htb rate 95000kbit ceil 95000kbit
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 93000kbit ceil 95000kbit prio 2
tc class add dev eth1 parent 1:1 classid 1:11 htb rate 2000kbit ceil 2000kbit prio 1
tc filter add dev eth1 parent 1:0 protocol ip u32 match ip src 192.168.1.2 flowid 1:10
tc filter add dev eth1 parent 1:0 protocol ip u32 match ip src 192.168.1.3 flowid 1:10
tc qdisc add dev eth1 parent 1:10 handle 10:0 sfq perturb 10
tc qdisc add dev eth1 parent 1:11 handle 11:0 sfq perturb 10
#Interfejs wychodzący na DMZ eth2:
tc qdisk add dev eth2 root handle 2:0 htb default 11
tc class add dev eth2 parent 2:0 classid 2:1 htb rate 95000kbit ceil 95000kbit
tc class add dev eth2 parent 2:1 classid 2:10 htb rate 93000kbit ceil 95000kbit prio 2
tc class add dev eth2 parent 2:1 classid 2:11 htb rate 2000kbit ceil 2000kbit prio 1
tc filter add dev eth2 parent 2:0 protocol ip u32 match ip src 192.168.2.0/24 flowid 2:10
tc qdisk add dev eth2 parent 2:10 handle 20:0 sfq perturb 10
tc qdisk add dev eth2 parent 2:11 handle 21:0 sfq perturb 10
#Interfejs wychodzący na Internet eth0:
tc qdisk add dev eth0 root handle 3:0 htb default 112
tc class add dev eth0 parent 3:0 classid 3:1 htb rate 1000kbit ceil 1000kbit
tc class add dev eth0 parent 3:1 classid 3:10 htb rate 500kbit ceil 1000kbit
tc class add dev eth0 parent 3:1 classid 3:11 htb rate 500kbit ceil 1000kbit
tc class add dev eth0 parent 3:10 classid 3:101 htb rate 250kbit ceil 1000kbit
tc class add dev eth0 parent 3:10 classid 3:102 htb rate 250kbit ceil 1000kbit
tc class add dev eth0 parent 3:11 classid 3:111 htb rate 250kbit ceil 1000kbit
tc class add dev eth0 parent 3:11 classid 3:112 htb rate 250kbit ceil 1000kbit
tc filter add dev eth0 parent 3:0 protocol ip src 192.168.1.2 flowid 3:101
tc filter add dev eth0 parent 3:0 protocol ip src 192.168.1.3 flowid 3:102
tc filter add dev eth0 parent 3:0 protocol ip dport 80 0xffff flowid 3:111
tc qdisk add dev eth0 parent 3:101 handle 30:0 sfq perturb 10
tc qdisk add dev eth0 parent 3:102 handle 31:0 sfq perturb 10
tc qdisk add dev eth0 parent 3:111 handle 32:0 sfq perturb 10
tc qdisk add dev eth0 parent 3:112 handle 33:0 sfq perturb 10
Kod: Zaznacz cały
#!/bin/bash
INET_IFACE=192.168.3.1/24
DMZ_IFACE=192.168.1.1/24
LAN_IFACE=192.168.2.1/24
IP_PUBLICZNE=83.15.3.4/8
DMZ_HTTP_IP=192.168.1.2/24
DMZ_DNS_IP=192.168.1.3/24
LAN_IP=192.168.2.0/24
DMZ_IP=192.168.1.0/24
IPTABLES=/sbin/iptables
#Wpisy ogólne:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t nat -F
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A FORWARD -o lo -j ACCEPT
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
#$IPTABLES -t nat -A POSTROUTING -s 192.168.2.0/24 -d 0.0.0.0/0 -j SNAT --to-source 192.168.3.1/24 #tutaj nie jestem pewien
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE --dport 80 -p tcp -j DNAT --to-destination $DMZ_HTTP_IP
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE --dport 53 -p tcp -j DNAT --to-destination $DMZ_DNS_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_IP -j SNAT --to $IP_PUBLICZNE
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $DMZ_IP -j SNAT --to $IP_PUBLICZNE
#Strefa DMZ:
$IPTABLES -A FORWARD -i $DMZ_IFACE -o $INET_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $DMZ_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -o $DMZ_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP --dport 80 -j allowed
$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP -j icmp_packets
$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP --dport 53 -j allowed
$IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP --dport 53 -j ACCEPT
$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP -j icmp_packets
#Strefa LAN:
$IPTABLES -A FORWARD -i $LAN_IFACE -o $INET_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
Kod: Zaznacz cały
LAN ----- eth1 Serwer eth0 ----- Interf. zewnętrzny
/ eth2 \
192.168.2.1/24 | 192.168.3.1/24
|
DMZ 192.168.1.2/24 i 192.168.1.3/24
eth1 i eth2 (192.168.2.1 i 192.168.1.1): 100MBit
Moje dwa pytania, może trochę głupie ale jednak jestem ciekawy odpowiedzi:
- Czy tego typu kolejkowanie htb + sfq jest wystarczające do większości zastosowań, czy trzeba się byłoby zainteresować innymi technikami (hfsc, imq itp. wynalazkami)?
- Czy sprzęganie z iptables działa tylko za pomocą poleceń:Mówiąc w skrócie, ostatnio zainteresowałem się tematem QoS. Przeczytałem sporo materiałów na ten temat i interesuje mnie czy dobra znajomość htb i sfq będzie wystarczająca i czy nie ma innych sposobów łączenia firewalla z htb.
Kod: Zaznacz cały
handle xyz fw iptables -A POSTROUTING -o eth1 -j MARK –set-mark 0×2 iptables -A POSTROUTING -o eth1 -j RETURN
Szukałem odpowiedzi w sieci, ale przyznam uczciwie, że z każdym przeczytanym tematem mam coraz większy mętlik w głowie.