iptables op Dreambox

O

OrBiTeR

Ik heb een script voor iptables met de volgende 2 bestanden:
acl.sh (var/bin) >Het script
lijst.txt (var/etc) > Lijst met IP nr's

De bedoeling is om bepaalde ip's alleen toegang te geven op mijn Dreambox

Hoe kan ik dit script automatisch laten opstarten. En is dit voldoende om e.e.a. te beveiligen op IP-niveau !!!

Het script acl.sh ziet er als volgt uit:

#!/bin/sh
#
#
#set -x
ACLFILE=/var/etc/lijst.txt
IPT=/sbin/iptables
DEFAULTIP1=192.168.1.1
DEFAULTIP2=192.168.1.2
DEFAULTIP3=192.168.1.3

SetACL()
{
# flush current list
$IPT -F

# allow return traffic of dreambox initiated sessions (keyupdate etc)
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# add some default ipnumber, in case acl file contains errors
$IPT -A INPUT -s 127.0.0.1 -j ACCEPT # add localhost
$IPT -A INPUT -s $LOCALIP -j ACCEPT # add current ipnr
$IPT -A INPUT -s $DEFAULTIP1 -j ACCEPT # for testing
$IPT -A INPUT -s $DEFAULTIP2 -j ACCEPT # for testing
$IPT -A INPUT -s $DEFAULTIP3 -j ACCEPT # for testing

# now read acl file and add these ip numbers as well
while read IPNR
do
$IPT -A INPUT -s $IPNR -j ACCEPT
done < $ACLFILE

# reject everything else
$IPT -A INPUT -j REJECT

# show user current INPUT chain
echo "New iptables INPUT chain:"
$IPT -nL INPUT
}

GetLocalIP() # get's local ipaddress ($localip)
{
a=`/sbin/ifconfig eth0 | grep inet | cut -f 2 -d ":"`
LOCALIP=${a% Bcast}
}

CheckNetpilot()
{
if [ `ps -ef | grep netpilot | grep -v grep` ]
then
$netpilot=ok #dummy actie
else
echo "netpilot not running, starting now"
/var/bin/netpilot 127.0.0.1 666 &
fi
}

Main()
{
if [ -e $ACLFILE ]
then
dos2unix $ACLFILE
GetLocalIP;
SetACL;
else
echo "File $ACLFILE does not exist!"
exit 1
fi
}

Main;






De IP lijst (lijst.txt) ziet er als volgt uit:

192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
 
Yo,

Je gaat naar de "init" file,die vindt je in /var/etc.Als deze file er niet inzit even zelf aanmaken.Je moet deze file bewerken met een unix editor (vb editpad lite),niet met een gewone editor.Daar zet je deze regel in /var/bin/acl.sh.Daarna terug booten en het zou moeten werken.Ik heb het werkend in de Ronald image.Als het in de overige images werkt,weet ik niet.
 
Nee lijkt ons niet voldoende
Als je dat script via het bestand init (/var/etc) laat opstarten dan wordt jouw script alleen geladen als je de dreambox start. Op dat moment wordt iptables aangeroepen.

Wat nu als 1 minuut later iem. in je dream gaat.....

Je zult dus nog een scriptje moeten maken die om de zoveel tijd de ip's checkt. En degenen die geen toegang hebben er uit gooit.

Maak dus een script die bv. om de 5 minuten of zo de ip's checkt en roep die om te starten aan via init.

Pas dan kun je lekker achterover leunen :biggrin::biggrin::biggrin:
 
Ja en nee.

Ja: Zoals het er staat is het voldoende, alleen vind ik het niet zo overzichtelijk vandaar ook dat eendenteam zich waarschijnlijk hiermee vergist heeft.
Nee: het is niet echt mooi structureel geschreven en derhalve vertrouw ik het persoonlijk niet helemaal.

Uitleg:
Als iptables eenmaal werkt, dan blijft hij werken.
Het is wel belangrijk, zoals eendenteam ook al aangeeft, om te weten wat hij doet met de nieuwe verbindingen die na het starten van iptables nog proberen een verbinding te maken bijv.

Daarvoor zorgt deze regel:
# reject everything else
$IPT -A INPUT -j REJECT

Die zorgt dus dat alle input, behalve wat niet is aangegeven, rejected wordt.

Dit script is echter niet mooi opgezet, aanzien je normaliter altijd als allereerste alles gaat blokkeren en dan pas de uitzonderingen gaat aangeven, dus deze regel had bovenaan moeten staan.

Verder roept deze regel vragen op:
# allow return traffic of dreambox initiated sessions (keyupdate etc)
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Welnu.... waarom dit? De dreambox initieert geen sessies. Dit is leuk voor als je een pc als client hebt, maar niet voor een Dreambox, deze regel heeft weinig zin, of de omschrijving klopt niet want het gaat om input en niet om output.
Volgens mij staat hier dan ook dat het hier om gerelateerde verbindingen naar de dreambox toe gaat, die van buitenaf geinitieerd zijn, dus client pc, en dat deze geaccepteerd moeten worden indien ze doorgelaten worden door de firewall.

Ik weet dat hier een paar mensen zitten die echt verstand van linux firewalling hebben, dus zeg het me a.u.b. als ik hier een denkfout maak.

Anyway, het script is niet echt overzichtelijk, het Reject van de input string zou bovenaan moeten staan.
Op s4a staat ook een script wat overzichtelijker en mijns inziens beter van opzet is.
Misschien dat iemand een combinatie kan maken van dat script, en het hier geschreven script, omdat het voordeel van dit script weer is, dat je de acl (access control list) kunt beheren middels een .txt file.
 
Is er dan misschien iemand die een betrouwbaar/logisch script voor mij heeft, met evt. een kleine handleiding.
Uiteraard om te gebruiken op de Dreambox...

(dit script is afkomstig van sat4all)
 
Dan moet je dat andere script van sat4all nemen.

Er staat er nog eentje dat begint met
iptables CHAIN INPUT REJECT
iptables CHAIN FORWARD REJECT
iptables CHAIN OUTPUT REJECT

(REJECT kan ook DENY of DROP zijn, weet niet meer zeker wat er staat).

In elk geval zag ik die drie regels op deze manier ongeveer bovenaan in het script staan, als je dat script neemt zit je wel goed, is best eenvoudig.
 
Ik heb vele postings op sat4all doorgenomen, maar nu zie ik door de bomen het bos niet meer..
Zou iemand me misschien de link kunnen geven naar het juiste script wat Black Tiger bedoeld

b.v.d.
 
@orbiter: ik heb je al geholpen en het moet nu werken
 
Heb e.e.a. werkend nu met PP25-12, echter een ander script zoals in bovenstaand posting.
Geestelijke en fysieke hulp v/d eend, anders was het me never gelukt..
Het script bestaat uit 1 file (allow_ip_external.sh chmod755) geplaatst in var/bin
En het aanpassen van de init file in var/etc
"Het script is afkomstig van jcsat"

HET SCRIPT:

#!/bin/sh

# Alle bestaande regels verwijderen met - F (= FLUSH)
/sbin/iptables -F

#
# Standaardwaarden gebruiken
#
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
#
# Standaard alle pakketten laten vallen; toegang weigeren voor iedereen dus
#
/sbin/iptables -P INPUT DROP
#
# Defineer welke ip's w?l toegang mogen hebben !
# Eerst ip's van mijn interne netwerk toegang geven (let op: ik gebruik 192.168.0.xxx intern)
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p TCP -s 10.0.0.0/8 -j ACCEPT
/sbin/iptables -A INPUT -p TCP -s 192.168.0.0/16 -j ACCEPT
# Ik gebruik dus niet de 172.* net range !!!!
#
###################################################################
###################################################################
# Nu per regel aangeven wie er wel toegang mag hebben tot de dream
# Voorbeelden:
#/sbin/iptables -A INPUT -p TCP -s x.x.x.x --dport 678 -j ACCEPT
# Kan ook eenvoudiger:
#/sbin/iptables -A INPUT -p TCP -s x.x.x.x -j ACCEPT
# Ik gebruik de optie met toegang per ip en naar een dedicated destination-poort (dport)
#
# toegang 1
/sbin/iptables -A INPUT -p TCP -s x.x.x.x --dport 678 -j ACCEPT
#
# toegang 2
/sbin/iptables -A INPUT -p TCP -s x.x.x.x --dport 678 -j ACCEPT
#




AANPASSEN VAN DE INIT FILE:
toevoegen: /var/bin/allow_ip_external.sh &

Zo ziet mijn init file er nu uit:

#!/bin/sh

/var/bin/allow_ip_external.sh &

if [ -e /var/bin/emud ] ; then
/var/bin/emud
else
/bin/emud
fi

mkswap /hdd/SWAP/swapfile
swapon /hdd/SWAP/swapfile

exit 0


.....Bedankt voor eenieder die me geholpen heeft
 
Ja dat volgens mij ook die wat ik gezien heb, maar.....

# Standaardwaarden gebruiken
#
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT

Zou ik dus niet doen.

Dan heft zich meteen daarna weer eentje op
/sbin/iptables -P INPUT DROP


Ik zou deze DROP dus weghalen, en de eerste INPUT veranderen van ACCEPT naar DROP.
Scheelt alweer 2 regels onnodige tekst.:)

Dan zou ik de forward ook op DROP zetten, want de dream hoeft niets te forwarden en dan staat dan in elk geval dicht.

Output zou ik ook standaard op DROP zetten, dan staat alles in eerste instantie dicht en da's het meest veilige.

De rest van het script zorgt dan voor datgene wat wel open moet.
 
@orbiter thanks. Ik heb in je org. stukkie hierboven even een paar fouten weggehaald. Voor degenen die een kort script willen en waarin de opmerkingen van BT zijn verwerkt:

#!/bin/sh
#
/sbin/iptables -F
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
#
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p TCP -s 10.0.0.0/8 -j ACCEPT
/sbin/iptables -A INPUT -p TCP -s 192.168.0.0/16 -j ACCEPT
#
# toegang 1
/sbin/iptables -A INPUT -p TCP -s x.x.x.x --dport 678 -j ACCEPT
#
# toegang 2
/sbin/iptables -A INPUT -p TCP -s x.x.x.x --dport 678 -j ACCEPT
#
 
Kun je deze text gewoon in een text file zetten.
Dan de Ip nr's erin
En uploaden
Kan iemand mij daar mee verder helpen
Wat dat betrefd ben ik nog een leek
 
Je kunt de tekst niet zomaar in elke willekeurige tekst editor bewerken. Ik gebruik hiervoor "EditPad Pro" (http://www.editpadpro.com/download.html)
Je moet de file in EditPad Pro wel eenmalig omzetten naar UNIX
D.m.v. taakbalk "convert" > To UNIX (LF only)

Zorg er wel voor dat je de volgende regel aanpast met jou interne netwerk IP (anders kom je niet meer in je dreambox)

/sbin/iptables -A INPUT -p TCP -s 192.168.0.0/16 -j ACCEPT

in deze regel heeft elke LAN ip van 192.168.0.0 t/m 192.168.0.256 toegang op de Dreambox
 
moet dat niet zijn van 192.168.0.0 t/m 192.168.0.255 :biggrin::biggrin::biggrin:
 
And Orbiter wins the prize for the correct answer! :)
Alhoewel 0.0 normaliter nooit gebruikt word en men met 0.1 begint dus eigenlijk is het 192.168.0.1 t/m 192.168.0.254.
 
Hoi mede satters.

Ik ben dus geheel niet thuis in linux en de dreambox is nog redelijk nieuw voor mijn.
Nu zou ik dat script ook graag in mijn box eens willen testen maar ik heb geen idee hoe.
Het scipt opzich begrijp ik wel, maar hoe en waar ik het moet plaatsen hoe op te starten enz weet ik niet.
Mischien kan en wil iemand mijjn eens opweg helpen.
Mijn dank alvast.


Ron
 
Lees dan even de posting van Orbiter in deze thread, onderaan, dus onder het script wat hij schrijft, staat ook beschreven wat je moet aanpassen zodat het start etc. o.a. initfile aanpassen.
 
nou ik ben ook aan het stoeien geweest krijg het hier ook niet voor elkaar alles gedaan wat jullie zijden niets

ben ten einde raad

nou ja einde

al vast bedankt
 



Hosting Fun

Advertenties

Terug
Bovenaan Onderaan