Gå til innhold

Få iptables til å lese fra fil


Anbefalte innlegg

Er det noe mulighet til å få iptables til å lese fra en fil?

Jeg har lyst til å ha en fil med macadresser som er sperret.

Det hadde vært mye bedre å vedlikeholdt en fil i steden får å gå inn i iptables scriptet.

 

Takker for svar

Mvh

Kengdal

Lenke til kommentar
Videoannonse
Annonse
Kan du ikke bare lage en løkke som leser MAC-adresser fra en fil, da? Det er jo tross alt et script, du har anledning til å hente informasjon utenfra om du vil.

6061427[/snapback]

Takker for svar, har du et eksempel på en slik løkke. Er ikke så kjent med slik scripting.

Lenke til kommentar

for macaddresse in `cat macaddresse.txt $1`

/sbin/iptables -A FORWARD -p ALL -i $eth0 -m mac --mac-source $macaddressse -j DROP

Noe sånt?

 

Er en stund siden jeg jobbet med noe sånt.

Takker for svar

MVH

KEngdal :D

Endret av kengdal
Lenke til kommentar

for n in $(ls -1 --color=none sperr.txt);do iptables -A INPUT -m mac --mac-source $n -j DROP;done

 

Uten å ha testet, tror jeg den vil sperre macadresser i sperr.txt, så lenge det er en mac på hver linje. Orker ikke teste ettersom jeg ikke sitter på noen fysisk boks, og ikke orker peset om jeg stenger meg selv ute :)

Lenke til kommentar

Øh. Hva er vitsen med "ls", FSK? Han skal ikke liste filen, han skal ha innholdet i den.

 

#!/bin/bash 
for i in `cat sperr.txt` 
do 
echo "$i" 
done 
exit 0 

 

Bytt ut echo "$i" med den aktuelle iptables-kommandoen ;--) Dette forutsetter at MAC'ene er på hver sin linje:

cat sperr.txt
88:77:11:22:44
77:22:33:11:11

Lenke til kommentar

Denne her funker fint.

/sbin/iptables -A FORWARD -p ALL -i $GREEN_DEV -m mac --mac-source 00:11:22:33:44:55 -j DROP

 

Denne funker ikke :dontgetit:

for sperr in `cat /etc/sperr.txt`

do

/sbin/iptables -A FORWARD -p ALL -i $GREEN_DEV -m mac --mac-source $sperr -j DROP 

done

 

Noen råd?

Lenke til kommentar

Du burde i hvert fall slenge "" rundt $sperr: "$sperr". Det er alltid et fint triks å kjøre echo i stedet for/i tillegg til kommandoen du skal kjøre, slik at du ser akkurat hva den bruker. Sleng en echo "$sperr" over iptables-linja og se hvordan det ser ut.

Lenke til kommentar

Distroen som bli kjørt her er ipcop. Den konfigurerer iptables selv.

 

Dette fungerer fint:

#!/bin/sh
#
# $Id: rc.firewall,v 1.7.2.19 2005/10/03 00:34:12 gespinasse Exp $
#

eval $(/usr/local/bin/readhash /var/ipcop/ppp/settings)
eval $(/usr/local/bin/readhash /var/ipcop/ethernet/settings)
IFACE=`/bin/cat /var/ipcop/red/iface 2> /dev/null | /usr/bin/tr -d '\012'`

if [ -f /var/ipcop/red/device ]; then
DEVICE=`/bin/cat /var/ipcop/red/device 2> /dev/null | /usr/bin/tr -d '\012'`
fi

iptables_init() {
# Flush all rules and delete all custom chains
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X

# Set up policies
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A FORWARD -p ALL -i $GREEN_DEV -m mac --mac-source 00:11:22:33:44:55 -j DROP

 

Dette fungerer ikke

#!/bin/sh
#
# $Id: rc.firewall,v 1.7.2.19 2005/10/03 00:34:12 gespinasse Exp $
#

eval $(/usr/local/bin/readhash /var/ipcop/ppp/settings)
eval $(/usr/local/bin/readhash /var/ipcop/ethernet/settings)
IFACE=`/bin/cat /var/ipcop/red/iface 2> /dev/null | /usr/bin/tr -d '\012'`

if [ -f /var/ipcop/red/device ]; then
DEVICE=`/bin/cat /var/ipcop/red/device 2> /dev/null | /usr/bin/tr -d '\012'`
fi

iptables_init() {
# Flush all rules and delete all custom chains
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X

# Set up policies
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT

for sperr in `cat /etc/sperr.txt` 
do
/sbin/iptables -A FORWARD -p ALL -i $GREEN_DEV -m mac --mac-source "$sperr" -j DROP 
done

Lenke til kommentar

Du kaller /bin/sh, ikke /bin/bash. Dette betyr sikkert annen syntaks - jeg kjenner ikke /bin/sh så godt. Så vidt jeg kan se skulle det ikke være noen problem å kjøre bash fremfor sh(altså bytte ut /bin/sh med /bin/bash i den første linja.)

 

Edit: Hmm, syntaks skal være mer eller mindre den samme. Du kan prøve med bash og se hva som skjer? Evt kan du slenge de linjene i et eget skript, som invoker bash, og kjøre det fra iptables-skriptet(altså en form for wrapperskript).

Endret av comicz
Lenke til kommentar

Det som er så rart er hvis jeg skriver

echo /sbin/iptables -A FORWARD -p ALL -i $GREEN_DEV -m mac --mac-source "$sperr" -j DROP

 

Så viser den /sbin/iptables -A FORWARD -p ALL -i $GREEN_DEV -m mac --mac-source 00:11:22:33:44:55 -j DROP

 

Dette er merkelig. Skulle nesten tro at den ikke liker at det står " for sperr in `cat

/etc/sperr.txt`

do"

 

Virker som den ikke bryr seg om det som skjer etter denne linja. Resten av scriptet fungerer nedover. Går det ann å legge til $sperr som henter ut infomasjon lenger oppe i scriptet så den bare henter ut det når den trenger det. Litt dårlig forklart men.

 

Så det ser sånn ut.

 
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A FORWARD -p ALL -i $GREEN_DEV -m mac --mac-source "$sperr" -j DROP

 

Noen som skjønte det :hmm:

Endret av kengdal
Lenke til kommentar
Øh. Hva er vitsen med "ls", FSK? Han skal ikke liste filen, han skal ha innholdet i den.

 

Akk, det må være en av de bedre typoene mine på lang tid. Selvfølgelig burde det ha vært cat sperr.txt inne i bildet der... Jaja :roll:

Lenke til kommentar

Dere tenker litt for tungvindt:

 

iptables -A FORWARD -p ALL -i $GREENDEV -m mac --mac-source 00:14:22:1b:2a:a6 -j DROP

iptables -A FORWARD -p ALL -i $GREENDEV -m mac --mac-source 00:14:22:1b:2a:a7 -j DROP

iptables -A FORWARD -p ALL -i $GREENDEV -m mac --mac-source 00:14:22:1b:2a:a8 -j DROP

 

Ikke noe poeng å putte mac-addressene i en egen fil. Om du absolutt vil organisere det litt "penere" kan du jo gjøre noe slik:

 

MACS="00:14:22:1b:2a:a8 "

MACS="$MACS 00:14:22:1b:2a:a9 "

MACS="$MACS 00:14:22:1b:2a:a7 "

MACS="$MACS 00:14:22:1b:2a:a6"

 

Deretter kan du bruke "for a in $MACS" osv.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...