#!/bin/bash ##################### Czesc konfigurowalna skryptu ###################### # Podaj swoj interfejs wyjsciowy do intenetu, moze byc ppp0 UPLINK="eth0" # Jezeli nie chcemy rozdzielac internetu a chcemy samego firewall`a wpisujemy "no" ROUTER="yes" # Podajemy swoje IP, jezeli mamy IP dynamiczne np neostrada wpisujemy "dynamic" NAT="10.10.48.33" # Podajemy wszystkie interfejsy razem z lo INTERFACES="lo eth0 eth1" # Podajemy nazwy servisow ktore chcemy miec dostepne na serverze z zewnatrz, sa to nazwy z /etc/services lub numery portow SERVICES="21 60 80" #################### W tej czesci lepiej nic nie zmieniac jesli sie nie wie o co chodzi ###################### if [ "$1" = "start" ]; then echo "Starting Firewall...done." # Budowe firewall`a zaczynamy od zablokowania wszystkiego iptables -P INPUT DROP # Teraz przepuszczamy wszystko co zainicjowane jest z wewnatrz sieci, czyli nie idzie z internetu iptables -A INPUT -i ! ${UPLINK} -j ACCEPT # Przepuszczamy polaczenia juz zestawione iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Otwieramy porty servisow podanych wyzej for x in ${SERVICES} do iptables -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT done # Poniewaz zablokowalismy caly ruch przychodzacy ze swiata nasz komputer nie odpowiada na standardowy "TCP reset" # i "ICMP port-unreachable response", w tym wypadku musimy dodac linijki naprawiajace ten blad iptables -A INPUT -p tcp -i ${UPLINK} -j REJECT --reject-with tcp-reset iptables -A INPUT -p udp -i ${UPLINK} -j REJECT --reject-with icmp-port-unreachable # Wylaczmy ECN if [ -e /proc/sys/net/ipv4/tcp_ecn ]; then echo 0 > /proc/sys/net/ipv4/tcp_ecn fi # Jezeli chcemy zeby nasz komputer odpowiadal na pingi # iptables -A INPUT -i ${UPLINK} -p icmp -j ACCEPT # Wylaczamy spoofowanie na wszystkich interfejsach for x in ${INTERFACES} do echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter done # Wlaczamy forward pakietow if [ "$ROUTER" = "yes" ]; then echo 1 > /proc/sys/net/ipv4/ip_forward # Wlaczamy masquerade na statycznym badz dynamicznym IP if [ "$NAT" = "dynamic" ]; then echo "Starting MASQUERADE (dynamic IP)...done." iptables -t nat -A POSTROUTING -o ${UPLINK} -j MASQUERADE elif [ "$NAT" != "" ]; then echo "Starting SNAT (static IP)...done." iptables -t nat -A POSTROUTING -o ${UPLINK} -j SNAT -s 192.168.1.0/24 -d ! 192.168.1.0/24 --to ${NAT} # Jezeli chcemy przekierowac jakis port na komputer w lanie # iptables -t nat -A PREROUTING -i ${UPLINK} -p tcp --dport 21 -j DNAT --to 192.168.1.2:21 fi fi # Wylaczamy firewall`a elif [ "$1" = "stop" ]; then echo "Stoping Firewall...done." iptables -F INPUT iptables -P INPUT ACCEPT # Wylaczamy masquerade iptables -t nat -F POSTROUTING if [ "$NAT" = "dynamic" ]; then echo "Stoping MASQUERADE...done." elif [ "$NAT" != "" ]; then echo "Stoping SNAT...done." fi fi # Koniec