Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: Soulstealer в Jan 12, 2005, 23:20



Титла: initial firewall script
Публикувано от: Soulstealer в Jan 12, 2005, 23:20
Здравейте ;)
Реших да си сложа firewall на router, който е над една малка мрежичка.Намерих един примерен скрипт и го настроих според моята система, но се появи един проблем.След като пусна скрипта и не ми работи (от части) DNS-а.Имам отделен zone файл, според който IP-to на router-а ми се reslove-ва с определено име.Та след като пусна скришта и не мога да reslove-на IP-to на router-а. Или с други думи като напиша името в browser-а на самия router и не се resove-ва, но ако го пробвам от машина в мрежата...няма проблем всичко си работи нормално. Не мога да разбера как точно този скрипт ми спира тази услога и то само на router-а. Ако някой може да ми помогне... ? :)
ето и скрипта как изглежда
Цитат
#!/bin/sh
LAN_IP_RANGE="192.168.10.0/24"
LAN_IP="192.168.10.1/32"
LAN_BCAST_ADRESS="192.168.10.255/32"
LOCALHOST_IP="127.0.0.1/32"
STATIC_IP="X.X.X.X/32"
INET_IFACE="eth0"
LAN_IFACE="eth1"
IPTABLES="/usr/local/sbin/iptables"
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t filter -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t filter -X
$IPTABLES -t mangle -X

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
$IPTABLES -t mangle -A PREROUTING -i $INET_IFACE -j TTL --ttl-set 128
$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

$IPTABLES -N icmp_packets
$IPTABLES -N tcp_packets
$IPTABLES -N udpincoming_packets

$IPTABLES -N allowed
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP

$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 137 -j allowed

$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 123 -j ACCEPT
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 2074 -j ACCEPT
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 4000 -j ACCEPT

$IPTABLES -t nat -A PREROUTING -i $INET_IFACE -s 192.168.0.0/16 -j DROP
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE -s 10.0.0.0/8 -j DROP
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE -s 172.16.0.0/16 -j DROP

$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udpincoming_packets

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BCAST_ADRESS -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $LOCALHOST_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $STATIC_IP -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A OUTPUT -p ALL -s $LOCALHOST_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $STATIC_IP -j ACCEPT


Титла: initial firewall script
Публикувано от: Uvigii в Jan 13, 2005, 13:28
може да пробваш да локализираш проблема. Малко хамалско е но работи и без да мислиш
;)
Цитат

iptables -P INPUT/OUTPUT/FORWARD ACCEPT

едно по едно - докато проработи...
след което гледаш точно какво е ...
Успех.


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 14, 2005, 11:33
Това съм го пробвал вече поне за OUTPUT, но не става, а FORWARD не искам да го правя на ACCEPT, защото рискувам някое IP  от мрежата ми да "излезе на вън", а това няма да се хареса на моя ISP :) пък и до колкото съм чел default policy-то на FORWARD е DROP. Ако имате други идеи с удоволствие ще ги чуя :)


Титла: initial firewall script
Публикувано от: vlad73 в Jan 14, 2005, 14:34
сигурно ли е, че resolv.conf сочи към 127.0.0.1?
скрипта си изглежда ок (е, има какво да пооправиш, ма не изглежда той да е проблема)

dig linux-bg.org @127.0.0.1 връща ли някакъв резултат, различен от дупка от геврек?

forward мисля няма какво да го пипаш в случая, макар да не ми се верва да изскокне някое ip, ама освен с output пробвай и input да турнеш на accept


Титла: initial firewall script
Публикувано от: Uvigii в Jan 14, 2005, 16:26
Цитат (Soulstealer @ Ян. 14 2005,12:33)
а FORWARD не искам да го правя на ACCEPT, защото рискувам някое IP  от мрежата ми да "излезе на вън",

ми как ?
Цитат
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE


@vlad73
Цитат
Та след като пусна скришта и не мога да reslove-на IP-to на router-а.

Което значи (поне според мен), че преди пускането на скрипта си работи ОК ? т.е. означава ли, че проблема е в скрипта или не ?

@Soulstealer
Цитат
Ако имате други идеи с удоволствие ще ги чуя

Ми то май остана само в INPUT да е ... Ама по-лесно да попиташ де ...


Титла: initial firewall script
Публикувано от: VladSun в Jan 15, 2005, 00:47
Отвори порт 53 и за TCP на INPUT, вътрешен интерфейс - може и да ти проработи DNS...


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 15, 2005, 11:55
VladSun, не става... :(
направих го е то така:
Цитат
iptables -A INPUT -p tcp -i eth1 --dport 53 -j ACCEPT
като eth1 ми е вътрешния интерфейс
докато INPUT е с default policy DROP не става...
и не мога да разбера как така от машина в локалната мрежа името се resolve-ва а на самия router не може...
какво да правя ? :)


Титла: initial firewall script
Публикувано от: в Jan 15, 2005, 15:00
1) Протокола за DNS е UDP.
2) май този ред
Примерен код

$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT

трябва да е
Примерен код
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --dport 53 -j ACCEPT


Предполагам разбираш че ако дест порта ти е затворен няма как да резолвне. А Лан мрежата най вероятно резолвира от ДНС-а на доставчика ти.


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 15, 2005, 15:36
Ами не става, добвих и dport-а и дори казах на UDP пакетите идващи от вътрешния интерфейс да скочат във верига updincoming_packets, но не става. А иначе машините в LAN мрежата ми използват моя router като DNS, аз съм пуснал BIND и нямам domain(платен) просто съм си направил zone файл, който работи само за моята мрежа...а сега тотално прецаках работата
и не знам как по-точно
като спра firewall-а и на самия router се ресолвва само главния домейн...както ми е на мен в случая soulstealer.org, а събдомейните не могат...но на машините в мрежата ми събдомайните се ресолвват но главния не може! Не мога да разбера къде съм сгрешил...
ето как ми изглежда zone файла
Цитат
$ORIGIN .
$TTL 14400
soulstealer.org       IN      SOA    soulstealer.org. root.soulstealer.org. (
                      20040647        ; serial
                      28800          ; refresh (8 hours)
                      7200            ; retry (2 hours)
                      864000          ; expire (1 week 3 days)
                      86400          ; minimum (1 day)
                      )
                      NS      ns.soulstealer.org.
                      MX      10 soulstealer.org.
                      A       192.168.10.1
$ORIGIN soulstealer.org
ftp IN A 192.168.10.2
danny IN A 192.168.10.3

а с пуснат firewall няма и идея за ресолвване на каквото и да било на самия router :)
но иначе събдомейните се ресолвват на машините в мрежата
...не знам какво става, чувствам се като малоумен!... :)


Титла: initial firewall script
Публикувано от: VladSun в Jan 16, 2005, 03:04
Цитат (Guest @ Ян. 15 2005,15<!--emo&:0)
1) Протокола за DNS е UDP.


.http://www.freesoft.org/CIE/Course/Section2/11.htm

... Either TCP or UDP can be used to transport DNS protocol messages, connecting to server port 53 for either. Ordinary DNS requests can be made with TCP, though convention dictates the use of UDP for normal operation. TCP must be used for zone transfers, however, because of the danger of dropping records with an unreliable delivery protocol such as UDP ...


Титла: initial firewall script
Публикувано от: VladSun в Jan 16, 2005, 03:13
$IPTABLES -A INPUT -p ALL -d $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $STATIC_IP -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT

Тия редове не ми харесват ...
Значи при първия и третия все ми се струва че си обърнал посоката - т.е. т.д.б. :

$IPTABLES -A INPUT -p ALL -s $LAN_IP -j ACCEPT
и
$IPTABLES -A OUTPUT -p ALL -d $LAN_IP -j ACCEPT

А втория ред не ми харесва с това че не пускаш нови конекции към сървера - как ще се добереш до ДНС-а тогава?


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 16, 2005, 11:04
VladSun, мерси! :)
стана ! :)
просто добавих NEW към ESTABLISHED и RELATED и всичко се оправи.Source-а и destination-а на INPUT и OUTPUT не съм ги пипал...все пак съм гледал от примерен script от един iptables tutorial не вярвам хората там да са сгрешили :)
както и да е...мерси отново
ама сега се появява едно малко съмнение в мене...а именно
до колко е secure тоя state NEW а ? :)


Титла: initial firewall script
Публикувано от: Astor в Jan 16, 2005, 15:22
Здравейте, странно но при моя firewall точно без това NEW във FORWARD веригата си работи идеално:
Цитат

#INTERNAL Interface = eth0
#EXTERNAL Interface = eth1
#INTERNET IP = 192.168.30.36
#LOCAL NET = 10.0.0.0/24

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -p ICMP -d 192.168.30.36 -j ACCEPT
iptables -A INPUT -i eth1 -m tcp -p tcp --dport 20:21 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -m state --state  ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT


Титла: initial firewall script
Публикувано от: Bogo в Jan 16, 2005, 15:53
Незнам на вас как ще ви се стори но на мен, като слаб по iptables много ми хареса генераторчето на този саит:)


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 16, 2005, 19:24
Astor, кое по-точно при теб си работи идеално ? :)
Bogo, такова бещо за първи път виждам :)
но ми харесва :) идеино е
и може много да се взаимства от там, за да си направиш хубав script :)


Титла: initial firewall script
Публикувано от: VladSun в Jan 16, 2005, 23:21
Soulstealer
Цитат
до колко е secure тоя state NEW а ?  

Еми дотолкова че позволяваш от вътрешната мрежа да правят нови конецкии към сървера ти - т.е. ако го комбинираш с порт правило можеш да ги ограничиш само до определен порт новите конекции (прим. 53, 21, 80 и .тн.)

Астор
Цитат
Здравейте, странно но при моя firewall точно без това NEW във FORWARD веригата си работи идеално:

DNS сървера в случая се намира в gateway-a, т.е. не е транзитен поток (FORWARD) а е насочен към самата машина (INPUT). С твоето правило указваш да не могат да се правят нови конекции от външната страна към локалната мрежа

Bogo
Много интересен сайт, ще разгледам за нещо ново :)


Титла: initial firewall script
Публикувано от: VladSun в Jan 16, 2005, 23:24
Цитат (Soulstealer @ Ян. 16 2005,11:0)
Source-а и destination-а на INPUT и OUTPUT не съм ги пипал...все пак съм гледал от примерен script от един iptables tutorial не вярвам хората там да са сгрешили <!--emo&:)
както и да е...мерси отново

Сега чак се вгледах, че LAN_IP ти е ИП-то на вътрешния интерфейс, а не локалната мрежа (т.е. прим. 192.168.1.0/24) :) Нищо де, нали се оправи :)


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 17, 2005, 12:04
VladSun, в момента с този ред
Примерен код
$IPTABLES -A INPUT -p ALL -d $STATIC_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
ми "отваря" външния интерфейс $STATIC_IP ми е IP-то на външния интерфейс, а това не ми се струва много security издържано :)
и се питам защо след като от вътрешната мрежа до IP-то от вътрешния интерфейс всичко е на ACCEPT трябва да разреша и нови "връзки" към външния адрес ? Какво общо има външното ми IP с вътрешната мрежа?


Титла: initial firewall script
Публикувано от: VladSun в Jan 18, 2005, 01:08
Еми ти не би трябвало да отваряш външния интерфейс, а вътрешния - за какво й е на лок. мрежа да се обръща към ДНС-а през външния интерфейс?


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 18, 2005, 01:28
Ама нали и аз това питам :)
Цитат
Какво общо има външното ми IP с вътрешната мрежа?


Титла: initial firewall script
Публикувано от: VladSun в Jan 18, 2005, 16:11
$IPTABLES -A INPUT -i eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

това, ако eth1 ти е вътрешния интерфей, а eth0 - външния

няма нужда да работиш с ип-та ...

П.С. от -p ALL няма нужда - то си е по подразбиране (май винаги, когато пропускаш параметър се подразбира ALL)


Титла: initial firewall script
Публикувано от: Uvigii в Jan 18, 2005, 23:52
-i lo ?


Титла: initial firewall script
Публикувано от: VladSun в Jan 19, 2005, 00:38
Цитат (Uvigii @ Ян. 18 2005,23:52)
-i lo ?

какво за него?


Титла: initial firewall script
Публикувано от: Uvigii в Jan 19, 2005, 14:00
Цитат (Uvigii @ Ян. 18 2005,23:52)
-i lo ?

Цитат (VladSun @ Ян. 19 2005,01:38)
какво за него?

Цитат (Soulstealer @ Ян. 13 2005,00:20)
Или с други думи като напиша името в browser-а на самия router и не се resove-ва, но ако го пробвам от машина в мрежата...няма проблем


Титла: initial firewall script
Публикувано от: nenni в Jan 19, 2005, 17:59
s kakav adres tarsish tvoq dns server. ako e s vanshen nali se sehstash 4e otiva na eth0-vanshna nic.
za zonite sashto beshe spomenal, ako zonata koqto ne moge da ti otgovori e s realni adresi pak si v tova pologenie.
moge i da gresha.


Титла: initial firewall script
Публикувано от: Soulstealer в Jan 20, 2005, 11:59
Разбира се, че зоната е с вътрешен адрес :)


Титла: initial firewall script
Публикувано от: OVP в Jan 21, 2005, 02:43
Аз също имам пуснат DNS на мойта машина, настроил съм го така че ако неможе да намери търсената информациа в своите зони да пита DNSа на доставчика ми. В  /etc/resolv.com съм писал само nameserver 127.0.0.1 .  Мисля че отначало имах подобен проблем, но го оправих. Доколкото знам има значение на кое място се слагат правилата във веригите на iptables (всеки един пакет се сравнява дали отговаря на правилото и ако да се изпълнява политиката на това правило, ако неотговаря на нито едно се изпалнява общата политика на веригата) така че трябва да се внимава кое каде се пише. Аз ползвах тоя tutorial iptables
Примерен код
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
....

Примерен код
00:18:25.500204 IP 127.0.0.1.32780 > 127.0.0.1.53:  12057+ A? abv.bg. (24)
00:18:25.501023 IP 127.0.0.1.53 > 127.0.0.1.32780:  12057 5/3/3 A 194.153.145.80, A[|domain]
протокола е UDP/53
Незнам какво си писал в /etc/resolv.com най вероятно nameserver 127.0.0.1 , обаче забелязявам че всичките ти опити да оправиш проблема са насочени към ethX вместо lo


Титла: initial firewall script
Публикувано от: Uvigii в Jan 21, 2005, 11:34
Цитат (OVP @ Ян. 21 2005,03:43)
обаче забелязявам че всичките ти опити да оправиш проблема са насочени към ethX вместо lo

Мда ... съгласен!