от Yordan Georgiev(26-10-2004)

рейтинг (34)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Как да си направим защитна стена за по малко от пет минути !

ВНИМАНИЕ: Статията е предназначена за начинаещи !




На дадения момент чета една много интересна книга – Сърварни хакове за Линукс, с автор Роб Фликенджър и издателство O’Reilly. Четейки си тази увлекателна книга (препоръчвам на всички, имащи възможността, да си я закупят – преведена е на български и издадена от издателство ЗеСТ Прес) стигнах до Хак #45 “Създаване на защитна стена от команден ред на всеки сървар”.

На кратко е описан един шел скрипт, с чиято помощ можем за раздавам достъп до машината си. Използват се три основни “групи” потребители:
1.Потребители от който ще приемем всичкия трафик. Тези машини и мрежи ще запишем в whitelist.
2.Потребители на които ще откажем достъпа до машината ни. Въвеждаме ги в blacklist.
3.И третата група са всички останали. На тези потребители ще дадем достъп, но само н определени портове, които ще запишем в allowed.

Преди да продължа искам да спомена как ще записваме потребителите. За всяка една група създаваме текстови файл. Аз го права така:
•Създавам директорията /etc/myfirewall
•Съответно за всяка група по един текстови файл със съответното има.
В резултат на което трябва да имаме:
/etc/myfirewall/witelist.txt
/etc/myfirewall/blacklist.txt
/etc/myfirewall/allowed.txt

И последно преди да покажа самия скрипт, нека да видим, как ще използваме тези текстови (конфигурационни) файлове. В първите два ще ни се налови да въвеждаме машини и мрежи. Това става като на всеки ред, въвеждаме дадената машина или мрежа
Пример:
#192.168.0.1
192.168.10.5
192.168.5.0/26
В този пример виждаме следното. Първия ред започва с #, което означава, че няма да играе в настройките. Всеки такъв ред в “коментар”. Втория показва, как се въвежда машина и последни как става това с мрежа.
Във файла allowed въвеждаме портовете, който трябва да са достъпни от потребителите, не участващи в горните два файла.

Ето и самия скрипт, който използва iptables:


#!/bin/sh
whitelist=/etc/myfirewall/witelist.txt
blacklist=/etc/myfirewall/blacklist.txt
allowed=/etc/myfirewall/allowed.txt

# iztriwame predi6nite nastroiki

iptables –F

#obhojadme whitelist, priemaiki celiqt trafik ot mrejite i ma6inite w spisaka
for white in `grep –v ^# $whitelist | awk ‘{print $1}’`; do
echo “Permitting $white…”
iptables –A INPUT –t filter –s $white –j ACCEPT
done

#obhojadme blacklist, othwarlqiki celiqt trafik ot mrejite i ma6inite w spisaka
for black in `grep –v ^# $blacklist | awk ‘{print $1}’`; do
echo “Blocking $black…”
iptables –A INPUT –t filter –s $black –j DROP
done

# i nakraq portowete pozwoleni za ma6inite koito ne sa w spisaka na lo6ite mom4eta
for port in `grep –v ^# $allowed | awk ‘{print $1}’`; do
echo “Accepting port $port…”
iptables –A INPUT –t filter –p tcp --dport $port –j ACCEPT
done

#oswen ako ne se spomenawa po-gore I stawa wapros
#za whodq6ta zaqwka za startirane na wrazka, prosto q otkazwame.
iptables –A INPUT –t filter –p tcp --syn –j DROP

Е това е скрипта, състой се само от 18 реда – какво по лесно от това. Става за домашна употреба и не само.
Искам да обърна внимание и на още някои неща:
1.За използването на iptables са необходими root права. Ако искате да стартирате скрипта от друг потребител се консултирайте с “man sudo”
2.Обърнете внимание и кой има достъп и какъв до конфигурационните файлове.
3.Както се казва в книгата, от която е цитата, прилагайте въображение и променяйте хаковете. Моят принос за този хак е използването на файл за портовете (преди това бяха в променлива и ми се стори, че по-удачно е да са във файл).

И накрая искам да ви дам една задачка. Какво ще стане , ако прибавим в скрипта
iptables –t nat –A POSTROUTING –o $EXT_IFACE –j MASQUERADE
Отговора е ШЛЮЗ.

Очаквам въпроси, обиди и каквото ви дойде на ум.



Йордан Георгиев – GigaVolt


E-mail: gigavolt@abv.bg
WEB:http://gigavolt.hit.bg


<< САГА ЗА POSIX или УВОД В POSIX'ИВИЗМА | Slackware и Promise FastTrak 378 RAID контролер >>