Witam,
Napisalem sobie takiego prostego firewalla na podstawie firewalla czerwo... testuje w nim blokowanie po macku
#!/bin/sh
# firewall adminet.pl
. /etc/rc.conf
. /etc/rc.d/functions
. /etc/iptables/firewall.config
i=`which iptables`
case $1 in
start)
if [ -e /proc/sys/net/ipv4/tcp_ecn ];then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
$i -F
$i -F -t nat
$i -P INPUT DROP
$i -P FORWARD DROP
$i -P OUTPUT ACCEPT
# interfejs lo
$i -A INPUT -i lo -j ACCEPT
$i -A FORWARD -o lo -j ACCEPT
# Blaster i Saser
if [ $wirus = 1 ]; then
$i -A INPUT -p tcp --dst 0/0 --dport 135 -j LOG -m limit --limit 2/hour --log-prefix "Blaster z zewnatrz: "
$i -A INPUT -p tcp --dst 0/0 --dport 135 -j LOG -m limit --limit 2/hour --log-prefix "Blaster z zewnatrz: "
$i -A FORWARD -p tcp --dst 0/0 --dport 445 -j LOG -m limit --limit 2/hour --log-prefix "Saser z zewnatrz: "
$i -A FORWARD -p tcp --dst 0/0 --dport 445 -j LOG -m limit --limit 2/hour --log-prefix "Saser z zewnatrz: "
$i -A INPUT -p tcp --dst 0/0 -m multiport --dport 135,445 -j DROP
$i -A FORWARD -p tcp --dst 0/0 -m multiport --dport 135,445 -j DROP
fi
# Adresy zabronione
for IP in `cat /etc/iptables/ip_deny| cut -d "#" -f1`;do
$i -A INPUT -s $IP -j DROP
$i -A FORWARD -s $IP -j DROP
$i -A INPUT -d $IP -j DROP
$i -A FORWARD -d $IP -j DROP
done
# Adresy majace absolutny dostep do serwera, adresy zaufane
for IP in `cat /etc/iptables/ip_all| cut -d "#" -f1`;do
$i -A INPUT -s $IP -j ACCEPT
done
# Porty zablokowane dla wszystkich
if [ "$TCP_IN_DENY" ];then
$i -A INPUT -p tcp --dst 0/0 -m multiport --dport $TCP_IN_DENY -j DROP
fi
if [ "$UDP_IN_DENY" ];then
$i -A INPUT -p udp --dst 0/0 -m multiport --dport $UDP_IN_DENY -j DROP
fi
# uslugi udostepnione dla polaczen z internetu
if [ "$TCP_IN_ALLOW" ];then
$i -A INPUT -p tcp -i $EXTIF -m multiport --dst 0/0 --dport $TCP_IN_ALLOW -j ACCEPT
fi
if [ "$UDP_IN_ALLOW" ];then
$i -A INPUT -p udp -i $EXTIF -m multiport --dst 0/0 --dport $UDP_IN_ALLOW -j ACCEPT
fi
# zaplotkuj jesli nie chcesz udostepniac serwisu http do inetu
if [ $WWW = 1 ]; then
$i -A INPUT -p tcp -i $EXTIF --dport 80 -j ACCEPT
fi
# zaplotkuj jesli nie chcesz udostepniac serwisu https do inetu
if [ $HTTPS = 1 ]; then
$i -A INPUT -p tcp -i $EXTIF --dport 443 -j ACCEPT
fi
# zaplotkuj jesli nie chcesz udostepniac serwisu ftp do inetu
if [ $FTP = 1 ]; then
$i -A INPUT -p tcp -i $EXTIF --dport 20 -j ACCEPT
$i -A INPUT -p tcp -i $EXTIF --dport 21 -j ACCEPT
fi
# zaplotkuj jesli nie chcesz udostepniac poczty do inetu
if [ $MAIL = 1 ]; then
$i -A INPUT -p tcp -i $EXTIF --dport 110 -j ACCEPT
$i -A INPUT -p tcp -i $EXTIF --dport 25 -j ACCEPT
fi
# zaplotkuj jesli nie chcesz udostepniac SSH do inetu
if [ $SSH = 1 ]; then
$i -A INPUT -p tcp -i $EXTIF --dport 22 -j ACCEPT
fi
# zaplotkuj jesli nie chcesz udostepniac serwera IMAP do inetu
if [ $IMAP = 1 ]; then
$i -A INPUT -p tcp -i $EXTIF --dport 143 -j ACCEPT
$i -A INPUT -p udp -i $EXTIF --dport 143 -j ACCEPT
fi
# zaplotkuj jesli nie chcesz udostepniac serwera IMAPS do inetu
if [ $IMAPS = 1 ]; then
$i -A INPUT -p tcp -i $EXTIF --dport 993 -j ACCEPT
$i -A INPUT -p udp -i $EXTIF --dport 993 -j ACCEPT
fi
# Odrzucamy z komunikatem ICMP Port Unreachable polaczenia
# na IDENT oraz SOCKS (czesto sprawdzane przez serwery IRC)
# Jesli udostepniasz te uslugi zaplotkuj (#) odpowiedne linie
$i -A INPUT -p tcp --dst 0/0 --dport 113 -j REJECT --reject-with icmp-port-unreachable
$i -A INPUT -p tcp --dst 0/0 --dport 1080 -j REJECT --reject-with icmp-port-unreachable
#Blokada gadu-gadu
for IP in `cat /etc/iptables/ip_gg | cut -d "#" -f1` ;do
$i -I FORWARD -s $IP -p tcp --dport 443 -j DROP
$i -I FORWARD -s $IP -p tcp --dport 8074 -j DROP
$i -t nat -A PREROUTING -d 217.17.46.250 -s $IP -p tcp --dport 80 -j DNAT --to $IPADDR1
done
# pingi pozwalamy
$i -A INPUT -p icmp --icmp-type echo-request -j ACCEPT -m limit --limit 1/sec
#TTL
if [ $TTL = 1 ]; then
$i -t mangle -A POSTROUTING -o $INTIF1 -j TTL --ttl-set 1
fi
if [ $TTL = 2 ]; then
for IP in `cat /etc/iptables/ip_ttl| cut -d "#" -f1`;do
$i -t mangle -A POSTROUTING -d $IP -j TTL --ttl-set 1
done
fi
# Redirect wyswietlenie komunikatu o zablokowaniu dostepu do internetu
# przy kazdej probie laczenia sie z innymi numerami IP niz lokalne.
# Wymaga uruchomiena strony www na porcie 200 lub programu miniserv
for IP in `cat /etc/iptables/ip_redirect | cut -d "#" -f1`;do
$i -t nat -A PREROUTING -p tcp -s $IP -d ! $IPADDR1 -j REDIRECT --to-port 80
done
# domyslnie wszystkim wyswietla sie napis o macku
#$i -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 -d ! 192.168.1.1 -j REDIRECT --to-port 80
# $i -A INPUT -i ! eth0 -s 192.168.1.0/24 -j REDIRECT --to-port 80
#limit polaczen
echo "7200" >/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
for ip in `cat /etc/iptables/ip_polaczenia | cut -d "#" -f1`;do
$i -A FORWARD -s $ip -p tcp --tcp-flags SYN,RST,ACK SYN -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP
done
#limit polaczen koniec
$i -t nat -A POSTROUTING -s 195.182.164.0/24 -d 195.182.164.0/24 -j ACCEPT
#Zezwalamy na wszystko co odbywa sie w ramach juz dozwolonych polaczen
$i -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
$i -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
#Komendy uruchamiana po starcie firewalla
if [ -x /etc/rc.d/mrtg ]; then
/etc/rc.d/mrtg stop
killall mrtg
/etc/rc.d/mrtg start
fi
if [ -x /usr/stat/rc.stat ]; then
cd /usr/stat/
sh rc.stat restart
cd /etc/rc.d
fi
#KONIEC
wynik
;;
stop)
$i -F INPUT
$i -F FORWARD
$i -F OUTPUT
$i -P INPUT DROP
$i -P FORWARD DROP
$i -P OUTPUT DROP
echo 0 > /proc/sys/net/ipv4/ip_forward
wynik
;;
esac
potem dopialem dobie plik ktory generuje na podstawie mackow i ip takie wpisy dla firewalla:
#!/bin/sh
echo" ..."
com=`which iptables`
temp="./temp.tmp"
i=1
echo "" > $temp
for IP in `cat /etc/iptables/macip | cut -d "#" -f1 |awk '{print $1}'`; do
tablica_ip[$i]=$IP
i=$(expr $i + 1)
done
i=1
for MAC in `cat /etc/iptables/macip | cut -d "#" -f1 |awk '{print $2}'`; do
tablica_mac[$i]=$MAC
# input i forward
echo $com -A INPUT -i ! eth0 -s ${tablica_ip[$i]} -j ACCEPT >> $temp
#echo $com -A FORWARD -i ! eth0 -s ${tablica_ip[$i]} -j ACCEPT >> $temp
# maskarada
echo $com -t nat -A POSTROUTING -o eth0 -s ${tablica_ip[$i]} -j MASQUERADE >> $temp
#echo $com -i eth1 -s ${tablica_ip[$i]} -m mac --mac-source ${tablica_mac[$i]} -j ACCEPT >> $temp
echo $com -A FORWARD -m mac --mac-source ${tablica_mac[$i]} -s ${tablica_ip[$i]} -i ! eth0 -j ACCEPT >> $temp
i=$(expr $i + 1)
done
i teraz mam problem.... jesli komus nie pasuje mac do ip to nie ma internetu... a jesli pasuje to ma internet...
jak zrobic zeby dla tego komu nie pasuje mac wyskakiwala strona na porcie np 200 ze jego macka nie ma w bazie ?
z gory dzieki za sugestje