#!/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." fifi# Koniec