Budowa iptables

0

Na początku witam wszystki.
Mam takie pytanie bo chcę napisać taki programik który będzie z pliku tekstowego zczytywał adres mac a następnie na jego podstawie tworzył plik wyjściowy z regułkami iptables. Jak technicznie to zacząć albo czy wiecie gdzie są jakieś materiały które mogę wykorzystać.

0

to wez sobie zassaj zrodla IPTables, co za problem?

0

ale po co źródła - wystarczy poczytać dokumentacje i zobaczyć jak wygląda przykładowy plik z regułkami

0

sorry źle zadałem pytanie jeszcze raz.
Mam plik mac.txt

00:20:00:00:00:00
00:20:00:00:00:11

w którym mam wypisane liste mac'ków i teraz chciałbym mieć taki programik który stworzy mi pik rc.firewall z zawartością

iptables -t nat -A FORWARD -i eth1 -s 192.168.1.1 -m mac --mac-source 00:20:00:00:00:00 -j ACCEPT
iptables -t nat -A FORWARD -i eth1 -s 192.168.1.2 -m mac --mac-source 00:20:00:00:00:11 -j ACCEPT
 
0

no dobra a w czym problem?

0

to nie powinno byc w c/c++, bo wystarczy do tego skrypt w bashu lub tcsh

odczytujesz plik np. tak (bash):

cat plik.txt | while read a ; do iptables -t nat -A FORWARD -i eth1 -s 192.168.1.1 -m mac --mac-source "${a}" -j ACCEPT ; done

powyzszy wykona od razu regulki.
ponizszy wypisze

cat plik.txt | while read a ; do echo "iptables -t nat -A FORWARD -i eth1 -s 192.168.1.1 -m mac --mac-source ${a} -j ACCEPT" ; done

jesli chcesz do pliku to dodaj na koncu:
> plik
jesli hcesz aby byl wykonywalny to dodaj potem jeszcze do linijki:
; chmod 700 plik

...

cat mac.txt | while read a ; do echo "iptables -t nat -A FORWARD -i eth1 -s 192.168.1.1 -m mac --mac-source ${a} -j ACCEPT" ; done > firewall.rc ; chmod 700 firewall.rc 

(man bash, man chmod, man iptables)

poza tym nie ma sensu tworzyc pliku z komendami, skoro komende mozna jak w pierwszym wypadku wykonac od razu, zaraz po odczytaniu maca

0

tylko flabra zmień jeszcz, żeby IP nie były te same dla wszystkich MACów, a co do stwierdzenia "to nie powinno byc w c/c++, bo wystarczy do tego skrypt w bashu lub tcsh" to niech gość pisze w czym chce - może zna c/c++ a nie umie pisać skryptów

0

nie sprawdzilem, czy dziala, mi iptables wywala i przy -A i przy -D bledy, z tym ze ja mam zypelnie inna polityke, wycinam tylko to co musze, a nie wyszstko i dopiero dopuszczam cokolwiek.

#!/bin/sh

macfile="/etc/mac.txt"
eth="eth1"
tmpfile="/tmp/.$$"


case "$1" in
    start)
        echo "starting fwall"
        cat "${macfile}" | while read a b ; do
            iptables -t nat -A FORWARD -i "${eth}" -s "${b}" -m mac --mac-source "${a}" -j ACCEPT
        done
        ;;
    stop)
        echo "shutting down fwall"
        cat "${macfile}" | while read a b ; do
            iptables -t nat -D FORWARD -i "${eth}" -s "${b}" -m mac --mac-source "${a}" -j ACCEPT
        done
        ;;
    add)
        echo "adding new macadress to fwall rules"
        iptables -t nat -A FORWARD -i "${eth}" -s "${3}" -m mac --mac-source "${2}" -j ACCEPT && echo "${2} ${3}" >> "${macfile}"
        ;;
    remove)
        echo "removing macadress from fwall rules"
        grep "${2}" "${macfile}" | while read a b ; do
            iptables -t nat -D FORWARD -i "${eth}" -s "${b}" -m mac --mac-source "${a}" -j ACCEPT
            grep -v "${2}" "${macfile}" > "${tmpfile}" && mv -f "${tmpfile}" "${macfile}"
        done
        ;;
    *)
        echo "Usage: $0 {start|stop|add <mac> <ip>|remove <mac or ip>}"
        exit 1
        ;;
esac

Obsluge pliku mac.txt proponuje wykonac przez skrypt, bo dynamicznie powinien usuwac i regulki i wpisy z pliku.
plik wyglada mniej wiecej tak:

mac1 ip1
mac2 ip2
...

// misiekd , pisanie tego w c/c++ mija sie z celem, bo z wersji na wersje moze sie diametralnie zmienic api iptables, poza tym bylby to imho przerost formy nad trescia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1