Gå til innhold

Få iptables til å lese fra fil


Anbefalte innlegg

Videoannonse
Annonse

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 :)

Ø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

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

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

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

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.

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...