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ć.
to wez sobie zassaj zrodla IPTables, co za problem?
ale po co źródła - wystarczy poczytać dokumentacje i zobaczyć jak wygląda przykładowy plik z regułkami
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
no dobra a w czym problem?
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
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
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.