#!/bin/bash # # chkconfig: - 15 85 # description: Starts and stops Linux firewall # # downloaded from: http://www.interadek.info/ #publiczny adres IP IP_PUBLIC=`ifconfig ppp0 | grep inet | awk '{ print $2 }' | tr -d addr:` #lokalizacja modprobe MOD="/sbin/modprobe" #lokalizacja iptables IPT="/usr/sbin/iptables" #lokalizacja skryptow sieciowych PROC="/proc/sys/net/ipv4/" #adresy sprzetowe uprawionych kart sieciowych MAC_ETH0="xx.xx.xx.xx.xx.xx xx.xx.xx.xx.xx.xx" MAC_WLAN0="xx.xx.xx.xx.xx.xx" #porty przepuszczane do Internetu TCP_PORTS="xx xx" UDP_PORTS="xx xx" #wczytywanie modulow jadra niezbednych do prawidlowego funkcjonowania uslug NAT i sledzenia polaczen $MOD ip_conntrack $MOD ip_conntrack_ftp #FIREWALL START #definicja warunkow normalnego uruchomienia zapory firewall_start(){ #DEFAULT.1 #usuwanie wszytkich regul i niestandardowych tabel $IPT -F $IPT -X #ustawienie domyslnej strategii na pomijanie pakietow nie pasujacych do innych regul $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT DROP #przepuszczanie pakietow pseudosieci $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT #blokowanie niedozwolonych adresow IP for IP_NDZW in 0.0.0.0/8 255.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 do $IPT -A INPUT -i ppp0 -s $IP_NDZW -m limit --limit 1/second -j LOG --log-prefix "IPTABLES False source_IP " $IPT -A INPUT -i ppp0 -s $IP_NDZW -j DROP done #przepuszczanie ruchu powiazanego z aktywnym polaczeniem $IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT #INPUT #dostep administracyjny do routera for MAC_DOZW in $MAC_ETH0 do $IPT -A INPUT -i eth0 -p tcp --dport xx -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT done #przepuszczanie ruchu diagnostycznego for MAC_DOZW in $MAC_ETH0 do $IPT -A INPUT -i eth0 -p icmp --icmp-type 8 -m mac --mac-source $MAC_DOZW -j ACCEPT $IPT -A FORWARD -i eth0 -p icmp --icmp-type 8 -m mac --mac-source $MAC_DOZW -j ACCEPT done for MAC_DOZW in $MAC_WLAN0 do $IPT -A INPUT -i wlan0 -p icmp --icmp-type 8 -m mac --mac-source $MAC_DOZW -j ACCEPT $IPT -A FORWARD -i eth0 -p icmp --icmp-type 8 -m mac --mac-source $MAC_DOZW -j ACCEPT done #blokowanie ruchu inicjowanego z Internetu $IPT -A INPUT -i ppp0 -m limit --limit 1/second -j LOG --log-prefix "IPTABLES Blocked WAN_input " $IPT -A INPUT -i ppp0 -j DROP #blokowanie pozostalego ruchu do routera $IPT -A INPUT -m limit --limit 1/second -j LOG --log-prefix "IPTABLES Blocked LAN_input " $IPT -A INPUT -j DROP #FORWARD #przekazywanie ruchu na dozwolonych portach <1024 for MAC_DOZW in $MAC_ETH0 do for PORTS in $TCP_PORTS do $IPT -A FORWARD -i eth0 -p tcp --dport $PORTS -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT done done for MAC_DOZW in $MAC_ETH0 do for PORTS in $UDP_PORTS do $IPT -A FORWARD -i eth0 -p udp --dport $PORTS -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT done done for MAC_DOZW in $MAC_WLAN0 do for PORTS in $TCP_PORTS do $IPT -A FORWARD -i wlan0 -p tcp --dport $PORTS -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT done done for MAC_DOZW in $MAC_WLAN0 do for PORTS in $UDP_PORTS do $IPT -A FORWARD -i wlan0 -p udp --dport $PORTS -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT done done #ruch Skype, P2P itd. (porty >=1024) for MAC_DOZW in $MAC_ETH0 do $IPT -A FORWARD -i eth0 -p tcp -m tcp --destination-port 1024:65535 -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT $IPT -A FORWARD -i eth0 -p udp -m udp --destination-port 1024:65535 -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT done for MAC_DOZW in $MAC_WLAN0 do $IPT -A FORWARD -i wlan0 -o ppp0 -p tcp -m tcp --destination-port 1024:65535 -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT $IPT -A FORWARD -i wlan0 -o ppp0 -p udp -m udp --destination-port 1024:65535 -m mac --mac-source $MAC_DOZW -m state --state NEW -j ACCEPT done #eMule & torrent if [[ $IP_PUBLIC != "" ]] then $IPT -t nat -A PREROUTING -i ppp0 -d $IP_PUBLIC -p tcp --dport xx -j DNAT --to xx.xx.xx.xx $IPT -A FORWARD -i ppp0 -o eth0 -d xx.xx.xx.xx -p tcp --dport xx -m state --state NEW -j ACCEPT $IPT -t nat -A PREROUTING -i ppp0 -d $IP_PUBLIC -p tcp --dport xx -j DNAT --to xx.xx.xx.xx $IPT -A FORWARD -i ppp0 -o eth0 -d xx.xx.xx.xx -p tcp --dport xx -m state --state NEW -j ACCEPT $IPT -t nat -A PREROUTING -i ppp0 -d $IP_PUBLIC -p udp --dport xx -j DNAT --to xx.xx.xx.xx $IPT -A FORWARD -i ppp0 -o eth0 -d xx.xx.xx.xx -p udp --dport xx -m state --state NEW -j ACCEPT # $IPT -A FORWARD -i eth0 -o ppp0 -s xx.xx.xx.xx -p udp --sport xx -m state --state NEW -j ACCEPT #blokowanie pozostalego przekazywanego ruchu $IPT -A FORWARD -m limit --limit 1/second -j LOG --log-prefix "IPTABLES Blocked LAN_forward " $IPT -A FORWARD -j DROP #OUTPUT #przepuszczanie zapytan DNS routera $IPT -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT #przepuszczanie wychodzacego ruchu HTTP $IPT -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT #przepuszczanie wychodzacego ruchu FTP $IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT #przepuszczanie wychodzacego ruchu SSH $IPT -A OUTPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT #przepuszczanie wychodzacego ruchu diagnostycznego $IPT -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT #NAT #maskowanie adresow komputerow lokalnych for IP_DOZW in xx.xx.xx.xx/xx xx.xx.xx.xx do $IPT -t nat -A POSTROUTING -s $IP_DOZW -j MASQUERADE done #DEFAULT.2 #odnotowanie i usuwanie pozostalych pakietow for CHAINS in INPUT FORWARD OUTPUT do $IPT -A $CHAINS -m limit --limit 1/second -j LOG --log-prefix "IPTABLES Default block " $IPT -A $CHAINS -j DROP done echo "Uruchomiono FIREWALL" } #FIREWALL STOP firewall_stop(){ $IPT -F $IPT -X $IPT -P INPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT $IPT -t nat -F $IPT -t nat -X echo "Zatrzymano FIREWALL" } #sterowanie zapora sieciowa case $1 in 'start') firewall_start;; 'stop') firewall_stop;; 'restart') firewall_stop firewall_start;; *) echo "Nie ma takiej opcji. Uzyj: $0 (start|stop|restart)" exit 0;; esac