ot Vladsun(24-10-2006)
reiting (12)
[ dobre ]
[ zle ]
Variant za otpechatvane 1. Uvod
Statiiata ima za tsel da populiarizira izpolzvane na moshtniia instrument za filtrirane v iptables - ipset. Blagodaria na Nasko (atanas __tochka__ tsonkov (a) gmail __tochka__ com) za nasokata, koiato mi dade v edna moia predishna statiia.
Obiasneniia po otnoshenie na IPMARK i suotvetniiat nachin na polzvaneto mu suvmestno s tc mozhete da namerite v Optimizatsiia na iptables i tc pravila.
Poveche informatsiia za vuzmozhnostite na ipset mozhete da namerite v http://ipset.netfilter.org ili "man ipset".
Predimstvoto pri polzvane na ipset, suvmestno s iptables, se izraziava v povishenata proizvoditelnost pri edni i sushti sistemni resursi. Tova se dulzhi na fakta, che ipset izpolzva heshirane za da opredeli dali daden adres (src/dst) na konkreten paket se namira v opredeleno mnozhestvo ili ne. Pri iptables tova stava s lineino tursene, koeto e mnogo neefektivno.
Predimstvata pri izpolzvane na ipmark, suvmestno s tc, sa razgledani v gorespomenatata statiia.
2. Instalatsiia
Sledvaite instruktsiite dadeni v http://ipset.netfilter.org/install.html i traditsionnoto pachvane s PoM - ./runme IPMARK. Pri men sled niakolko opita vsichko (iptables, ipset i ipmark) mina dobre s iadro 2.6.15.7. Sled uspeshniia opit ne sum pravil proverka, dali s drugi, po-novi iadra kompilatsiiata minava dobre.
3. Prilozhenie
3.1. Razdeliane/markirane na mezhdunaroden i bulgarski trafik
V skriptove izpolzvani s tazi tsel, koito sum vizhdal, ne se izpolzva IPSET (osven v primerite na Nasko). Vednaga davam primer kak da stane tova:
Primeren kod |
iptables -F -t filter
iptables -F -t nat
iptables -F -t mangle
iptables -F -t raw
iptables -X -t filter
iptables -X -t nat
iptables -X -t mangle
iptables -X -t raw
iptables -Z -t filter
iptables -Z -t nat
iptables -Z -t mangle
iptables -Z -t raw
ipset -F
ipset -X
iptables -P FORWARD DROP
iptables -N TRAF_IN -t mangle
iptables -N TRAF_OUT -t mangle
iptables -N BG_IN -t mangle
iptables -N BG_OUT -t mangle
iptables -N INT_OUT -t mangle
iptables -N INT_IN -t mangle
iptables -A FORWARD -t mangle -j MARK --set-mark 1
iptables -t mangle -A FORWARD -i eth1 -o eth0 -j TRAF_OUT
iptables -t mangle -A FORWARD -i eth0 -o eth1 -j TRAF_IN
iptables -t mangle -A FORWARD -i eth1 -o eth1 -j BG_IN
iptables -t mangle -A FORWARD -i eth1 -o eth1 -j BG_OUT
ipset -N BG_NETS nethash
for i in `cat /etc/bgnets`; do
ipset -A BG_NETS $i
done |
Purvo initsializirahme iptables tablitsite i ipset spisutsite.
Sled tova suzdadohme verigi za vhodiasht/izhodiasht trafik, suotvetno mezhdunaroden/bulgarski trafik.
Suzdadohme adresen spisuk na prefiksite na mrezhite v bulgarskoto Internet prostranstvo.
Sledvashtata stupka e da markirame trafika na vseki otdelen potrebitel. Neka imame sluchai s edna S-klas mrezha:
Primeren kod |
$ipt="iptables"
$ips="ips"
$ipt -t mangle -A TRAF_IN -m set --set BG_NETS src -j BG_IN
$ipt -t mangle -A TRAF_OUT -m set --set BG_NETS dst -j BG_OUT
$ipt -A BG_IN -t mangle -d 90.0.0.0/24 -j IPMARK --addr=dst --and-mask=0xff --or-mask=0x10100
$ipt -A BG_OUT -t mangle -s 90.0.0.0/24 -j IPMARK --addr=src --and-mask=0xff --or-mask=0x10200
$ipt -A BG_OUT -t mangle -j RETURN
$ipt -A BG_IN -t mangle -j RETURN
$ipt -A TRAF_IN -t mangle -m mark --mark 1 -j INT_IN
$ipt -A TRAF_OUT -t mangle -m mark --mark 1 -j INT_OUT
$ipt -A INT_IN -t mangle -d 90.0.0.0/24 -j IPMARK --addr=dst --and-mask=0xff --or-mask=0x10300
$ipt -A INT_OUT -t mangle -s 90.0.0.0/24 -j IPMARK --addr=src --and-mask=0xff --or-mask=0x10400
$ipt -A INT_OUT -t mangle -j RETURN
$ipt -A INT_IN -t mangle -j RETURN |
S tova vsichkite neobhodimi deistviia za markirane na upload/download, bulgarski/mezhdunaroden trafik za vsako otdelno IP ot edna S-klas mrezha. S neobhodimite filtri i klasove v tc (kakto e opisano v dadenata po-gore statiia) tsialata sistema za ogranichavane na trafika e zavurshena.
3.2. Kontrol vurhu Internet dostupa
V tazi chast shte razgledame kak da kontrolirame Internet dostupa na vseki potrebitel. Otnovo shte izpolzvame ipset:
Primeren kod |
$ipt -A FORWARD -i eth1 -o eth1 -j ACCEPT
$ips -N FW_90_0_0_0 ipmap --network 90.0.0.0/24
$ipt -A FORWARD -m set --set FW_90_0_0_0 src -j ACCEPT
$ipt -A FORWARD -m set --set FW_90_0_0_0 dst -j ACCEPT |
Suzdadohme adresen spisuk, koito za momenta e prazen i dostuput do Internet na vsichki IP-ta ot tazi mrezha e zabranen. Razreshavaneto na dostupa do Internet za IP ot tazi mrezha stava chrez edna edinstvena komanda:
Primeren kod |
$ips -A FW_90_0_0_0 90.0.0.XXX |
Edin "trik" izpolzvan ot mnogo Internet dostavchitsi e da prenasochvat port 80 kum tehen Web surver za da pokazhat tiahna stranitsa na potrebitelia prikanvasht go kum podnoviavane na abonamenta. Tova pak stava izklyuchitelno lesno s izpolzvaneto na IPSET:
Primeren kod |
$ips -N PRE_ACCEPT iphash
$ips -A PRE_ACCEPT 90.0.0.1
$ipt -t nat -A PREROUTING -i eth1 -m set --set PRE_ACCEPT dst -j ACCEPT
$ips -N PRE_90_0_0_0 ipmap --network 90.0.0.0/24
$ipt -t nat -N WARNPAGE
$ipt -t nat -A WARNPAGE -p tcp --dport 80 -j DNAT --to 90.0.0.1:80
$ipt -t nat -A WARNPAGE -j DROP
$ipt -t nat -A PREROUTING -i eth1 -m set --set PRE_90_0_0_0 src -j WARNPAGE |
Tozi put deistvieto za "razreshavane" na IP e obratno - triabva da go niama v spisuka PRE_90_0_0_0. Za zabrana izpolzvame:
Primeren kod |
$ips -A PRE_90_0_0_0 90.90.0.HHH |
3.3. MAC/IP filtrirane
IPSET pozvoliava suzdavane na spisuk ot IP/MAC chiftove. Po tozi nachin mozhem da kontrolirame (v izvestna stepen) korektnoto izpolzvane na Internet dostupa ot vseki potrebitel. V primera otnovo e izpolzvano prenasochvane na trafika za port 80 kum definirana ot vas stranitsa.
Primeren kod |
$ips -N MACS_90_0_0_0 macipmap --network 90.0.0.0/24
$ipt -t nat -N MACIPS
$ipt -t nat -A PREROUTING -i eth1 -s 90.0.0.0/24 -j MACIPS
$ipt -t nat -A MACIPS -i eth1 -m set --set MACS_90_0_0_0 src -j RETURN
$ipt -t nat -A MACIPS -m limit --limit 1/m --limit-burst 2 -j LOG --log-level info --log-prefix '
$ipt -t nat -A MACIPS -j WARNPAGE |
Vuv faila /var/log/messages shte namerite suobshteniiata za nesuotvetstvashtite IP/MAC chiftovete.
Dobaviane na MAC/IP chift stava po sledniia nachin:
Primeren kod |
$ips -A MACS_90_0_0_0 90.0.0.IP%MAC |
V statiiata ne sa razgledani vuzmozhnostite na IPSET za suzdavane na adresni spisutsi svurzani sus spisutsi na portove. Tova ostaviam na vas :P.
<< Domashnata bezzhichna mrezha i ADSL na BTK | Dostup do ueb resursi chrez H.509 identifikatsiia >>
|