#!/bin/sh # # Przykladowy plik z regulami dla iptables (Linux). # # Krzysztof Kozlowski http://www.koziol.prv.pl # kozik1 [at] o2 [dot] pl http://acn.waw.pl/koziol # # # Licencja: GNU General Public License # # Ostatnia zmiana: 2.03.2006 # # ################ Poczatek regul ####################################### # KONFIGURACJA, ustaw wedle swoich potrzeb LAN=eth1 # interfejs lokalny WAN=eth0 # interfejs publiczny #WAN_IP=`hostname -i` # adres IP publicznego interfejsu WAN_IP='X.X.X.X' # adres IP publicznego interfejsu LAN_IP='192.168.0.1' # adres IP prywatnego interfejsu LAN_IP_CLASS='192.168.0.0/255.255.255.0' # Klasa adresow z sieci lokalnej # Czyscimy reguly... iptables -F iptables -t nat -F iptables -X iptables -N icmp_allowed_in iptables -N icmp_allowed_out iptables -F icmp_allowed_in iptables -F icmp_allowed_out iptables -N established_connections iptables -F established_connections iptables -N check_flags iptables -F check_flags iptables -N our_services iptables -F our_services # ####################################################################### # Ustawiamy policy #iptables -P INPUT ACCEPT #iptables -P OUTPUT ACCEPT iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # ####################################################################### # Puszczamy wszystko przychodzace z LAN-u oraz loopback iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i ${LAN} -j ACCEPT iptables -A FORWARD -o lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A OUTPUT -o ${LAN} -j ACCEPT # Blokujemy wychodzacy ruch z adresami LAN iptables -A OUTPUT -o ${WAN} -d ${LAN_IP_CLASS} -j DROP # Przychodzace z sieci nie do nas - DROP # UWAGA !!! RYZYKOWNE !!! # Niekompatybilne z broadcast i multicast ! iptables -A INPUT -i ${WAN} -d ! ${WAN_IP} -j LOG --log-prefix "TEST [NOT FOR ME]: " iptables -A INPUT -i ${WAN} -d ! ${WAN_IP} -j DROP # ####################################################################### # Ruch ICMP # icmp_allowed_in - dozwolony ruch ICMP przychodzacy do maszyny # icmp_allowed_out - dozwolony ruch ICMP wychodzacy z maszyny iptables -A icmp_allowed_in -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A icmp_allowed_in -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A icmp_allowed_in -p icmp --icmp-type echo-reply -j ACCEPT iptables -A icmp_allowed_in -p icmp --icmp-type parameter-problem -j ACCEPT iptables -A icmp_allowed_in -p icmp --icmp-type timestamp-reply -j ACCEPT iptables -A icmp_allowed_out -p icmp --icmp-type echo-request -j ACCEPT iptables -A icmp_allowed_out -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A icmp_allowed_out -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A icmp_allowed_out -p icmp --icmp-type parameter-problem -j ACCEPT iptables -A icmp_allowed_out -p icmp --icmp-type timestamp-request -j ACCEPT iptables -A icmp_allowed_in -p icmp -j LOG --log-prefix "ICMP: " iptables -A icmp_allowed_in -p icmp -j DROP iptables -A icmp_allowed_out -p icmp -j LOG --log-prefix "ICMP: " iptables -A icmp_allowed_out -p icmp -j DROP # ####################################################################### # Odrzucamy caly ruch przychodzacy z Internetu na uprzywilejowane porty # (jesli masz jakies uslugi na serwerze, np. WWW, to przed ponizszymi # regulami musisz pozwolic na ich ruch) # FTP : iptables -A our_services -p TCP -d 0/0 --dport 20:21 -j ACCEPT iptables -A our_services -p TCP -d 0/0 --dport 10000:10100 -j ACCEPT # WWW : #iptables -A our_services -p TCP -d 0/0 --dport 80 -j ACCEPT # MySQL : iptables -A our_services -p TCP -d 0/0 --dport 3306 -j DROP # Wszystkie na uprzywilejowane DROP : #iptables -A our_services -p TCP -d 0/0 --dport 0:1023 -j LOG --log-prefix "TEST [PRIV-TCP]: " #iptables -A our_services -p UDP -d 0/0 --dport 0:1023 -j LOG --log-prefix "TEST [PRIV-UDP]: " iptables -A our_services -p TCP -d 0/0 --dport 0:1023 -j DROP iptables -A our_services -p UDP -d 0/0 --dport 0:1023 -j DROP # Pozostale stale otwarte porty # aMule : iptables -A our_services -p TCP --dport 4662 -j ACCEPT iptables -A our_services -p UDP --dport 4662 -j ACCEPT iptables -A our_services -p TCP --dport 4665 -j ACCEPT iptables -A our_services -p UDP --dport 4665 -j ACCEPT iptables -A our_services -p TCP --dport 4672 -j ACCEPT iptables -A our_services -p UDP --dport 4672 -j ACCEPT # bittorrent : iptables -A our_services -p TCP --dport 6881 -j ACCEPT iptables -A our_services -p UDP --dport 6881 -j ACCEPT # FTP (wychodzce klienckie) : iptables -A our_services -p TCP --sport 20 -j ACCEPT # ####################################################################### # Catch portscanners # Z Gentoo Handbook : # http://www.gentoo.org/doc/en/security/security-handbook.xml?part=1&chap=12 iptables -A check_flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP-XMAS:" iptables -A check_flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP iptables -A check_flags -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS:" iptables -A check_flags -p tcp --tcp-flags ALL ALL -j DROP iptables -A check_flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH:" iptables -A check_flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP iptables -A check_flags -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN:" iptables -A check_flags -p tcp --tcp-flags ALL NONE -j DROP iptables -A check_flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST:" iptables -A check_flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -A check_flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN:" iptables -A check_flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # ####################################################################### # Reguly statefull: iptables -A established_connections -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A established_connections -i $LAN -m limit -j LOG --log-prefix "Bad packet from ${LAN}:" iptables -A established_connections -j DROP # KONCZY REGULY - RESZTE BLOKUJE! # ####################################################################### # ####################################################################### # Ruch przychodzacy - ICMP, skany i puszczamy TYLKO nawiazane # polaczenia (established_connections) #iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "Invalid STATE: " #iptables -A INPUT -m state --state INVALID -j DROP iptables -A INPUT -j icmp_allowed_in iptables -A INPUT -j check_flags iptables -A INPUT -j our_services iptables -A INPUT -j established_connections # ####################################################################### # Ruch FORWARD # - blokujemy z interfejsu LAN na adresy LAN # - puszczamy z interfejsu LAN na adresy WAN # - puszczamy z interfejsu WAN na adresy LAN #iptables -A FORWARD -m state --state INVALID -j LOG --log-prefix "Invalid STATE: " #iptables -A FORWARD -m state --state INVALID -j DROP iptables -A FORWARD -j icmp_allowed_out iptables -A FORWARD -i ${LAN} -d ${LAN_IP_CLASS} -j DROP iptables -A FORWARD -i ${LAN} -s ${LAN_IP_CLASS} -j ACCEPT iptables -A FORWARD -i ${WAN} -d ${LAN_IP_CLASS} -j ACCEPT # ####################################################################### # Ruch wychodzacy - ICMP i reszte puszczamy #iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "Invalid STATE: " #iptables -A OUTPUT -m state --state INVALID -j DROP iptables -A OUTPUT -j icmp_allowed_out iptables -A OUTPUT -j ACCEPT # ####################################################################### # Regula dla NAT-u iptables -t nat -A POSTROUTING -o ${WAN} -j SNAT --to ${WAN_IP} ################ Koniec regul ################################