#!/bin/sh

/sbin/modprobe ip_conntrack_ftp

CONNECTION_TRACKING="1"
ACCEPT_AUTH="0"
SSH_SERVER="0"
FTP_SERVER="0"
WEB_SERVER="0"
SSL_SERVER="0"
DHCP_CLIENT="1"
IPT="/sbin/iptables"                  # Lokalizacja polecenia iptables w Twoim systemie.
INTERNET="eth0"                       # Interfejs podczony do internetu.
LOOPBACK_INTERFACE="lo"               # Nazwa interfejsu ptli zwrotnej w Twoim systemie.
IPADDR="Twj.adres.ip"                # Twj adres IP.
SUBNET_BASE="adres.Twojej.podsieci"   # Adres bazowy segmentu sieci ISP.
SUBNET_BROADCAST="bcast.podsieci"     # Adres broadcastowy segmentu sieci.
MY_ISP="zakres.adresw.isp"           # Zakres adresw serwera i systemu NOC dostawcy usug internetowych.

NAMESERVER="serwer.nazw.isp.1"        # Adres zdalnego serwera nazw.
POP_SERVER="serwer.pop.isp"           # Adres zdalnego serwera pop.
MAIL_SERVER="serwer.poczty.isp"       # Adres zdalnej bramy pocztowej.
NEWS_SERVER="serwer.grup.dyskus.isp"  # Adres zdalnego serwera grup dyskusyjnych.
TIME_SERVER="jaki.serwer.czasu"      # Adres zdalnego serwera czasu.
DHCP_SERVER="serwer.dhcp.isp"         # Adres serwera dhcp Twojego ISP.

LOOPBACK="127.0.0.0/8"                # Zarezerwowany zakres adresw ptli zwrotnej.
CLASS_A="10.0.0.0/8"                  # Prywatne sieci klasy A.
CLASS_B="172.16.0.0/12"               # Prywatne sieci klasy B.
CLASS_C="192.168.0.0/16"              # Prywatne sieci klasy C.
CLASS_D_MULTICAST="224.0.0.0/4"       # Multicastowe adresy klasy D.
CLASS_E_RESERVED_NET="240.0.0.0/5"    # Zarezerwowane adresy klasy E.
BROADCAST_SRC="0.0.0.0"               # rdowy adres broadcastowy.
BROADCAST_DEST="255.255.255.255"      # Docelowy adres broadcastowy.

PRIVPORTS="0:1023"                    # Dobrze znany zakres portw uprzywilejowanych.
UNPRIVPORTS="1024:65535"              # Zakres portw nieuprzywilejowanych.

SSH_PORTS="1024:65535"

###############################################################

# Wczenie ignorowania broadcast echo.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Wyczenie pakietw routowanych rdowo.
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo 0 > $f
done

# Wczenie ochrony TCP SYN Cookies.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Wyczenie akceptowania komunikatw ICMP Redirect.
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f
done

# Nie wysyaj komunikatw Redirect.
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f
done

# Porzucanie takich sfaszowanych pakietw przychodzcych na dany interfejs,
# dla ktrych odpowied musiaaby zosta wysana z innego interfejsu.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
done

# Rejestrowanie pakietw z niemoliwymi adresami.
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
done

###############################################################

# Usunicie wszelkich istniejcych regu ze wszystkich acuchw.
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT --policy INPUT ACCEPT
$IPT --policy OUTPUT ACCEPT
$IPT --policy FORWARD ACCEPT
$IPT -t nat --policy PREROUTING ACCEPT
$IPT -t nat --policy OUTPUT ACCEPT
$IPT -t nat --policy POSTROUTING ACCEPT
$IPT -t mangle --policy PREROUTING ACCEPT
$IPT -t mangle --policy OUTPUT ACCEPT
if [ "$1" = "stop" ]
then
echo "Zapora sieciowa cakowicie zatrzymana!  UWAGA: NA TYM HOCIE NIE MA URUCHOMIONEJ ZAPORY SIECIOWEJ."
exit 0
fi

# Nieograniczony ruch na interfejsie ptli zwrotnej.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Ustawienie domylnej polityki na DROP.
$IPT --policy INPUT DROP
$IPT --policy OUTPUT DROP
$IPT --policy FORWARD DROP

###############################################################
# Skryte skanowania i flagi stanu TCP.
# Wszystkie bity s wyczyszczone.
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Ustawione s dwa bity: SYN i FIN.
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# Ustawione s dwa bity: SYN i RST.
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# Ustawione s dwa bity: FIN i RST.
$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# Ustawiony jest tylko bit FIN, bez oczekiwanego towarzyszcego bitu ACK.
$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
# Ustawiony jest tylko bit PSH, bez oczekiwanego towarzyszcego bitu ACK.
$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
# Ustawiony jest tylko bit URG, bez oczekiwanego towarzyszcego bitu ACK.
$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

###############################################################
# Uycie stanu poczenia do omijania sprawdzania regu.
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
    $IPT -A INPUT -m state --state INVALID -j LOG \
             --log-prefix "INVALID input: "
    $IPT -A INPUT -m state --state INVALID -j DROP
 
    $IPT -A OUTPUT -m state --state INVALID -j LOG \
             --log-prefix "INVALID output: "
    $IPT -A OUTPUT -m state --state INVALID -j DROP
fi

###############################################################
# Faszowanie adresw rdowych i inne ze adresy.

# Odrzucanie sfaszowanych pakietw pochodzcych rzekomo
# z adresu IP zewntrznego interfejsu.
$IPT -A INPUT -i $INTERNET -s $IPADDR -j DROP

# Odrzucenie pakietw pochodzcych rzekomo z prywatnej sieci klasy A.
$IPT -A INPUT -i $INTERNET -s $CLASS_A -j DROP

# Odrzucenie pakietw pochodzcych rzekomo z prywatnej sieci klasy B.
$IPT -A INPUT -i $INTERNET -s $CLASS_B -j DROP

# Odrzucenie pakietw pochodzcych rzekomo z prywatnej sieci klasy C.
$IPT -A INPUT -i $INTERNET -s $CLASS_C -j DROP

# Odrzucenie pakietw pochodzcych rzekomo z interfejsu ptli zwrotnej.
$IPT -A INPUT -i $INTERNET -s $LOOPBACK -j DROP

# Odrzucanie znieksztaconych pakietw broadcastowych.
$IPT -A INPUT -i $INTERNET -s $BROADCAST_DEST -j LOG
$IPT -A INPUT -i $INTERNET -s $BROADCAST_DEST -j DROP

$IPT -A INPUT -i $INTERNET -d $BROADCAST_SRC -j LOG
$IPT -A INPUT -i $INTERNET -d $BROADCAST_SRC -j DROP

if [ "$DHCP_CLIENT" = "0" ]; then
    # Odrzucanie broadcastw skierowanych,
    # ktre s wykorzystywane do mapowania sieci w atakach DoS.
    $IPT -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP
    $IPT -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP
 
    # Odrzucanie broadcastw ograniczonych.
    $IPT -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP
fi

# Odrzucanie multicastowych adresw klasy D,
# ktre s nieprawidowe jako adresy rdowe.
$IPT -A INPUT -i $INTERNET -s $CLASS_D_MULTICAST -j DROP

$IPT -A INPUT -i $INTERNET ! -p UDP -d $CLASS_D_MULTICAST -j DROP

$IPT -A INPUT -i $INTERNET -p udp -d $CLASS_D_MULTICAST -j ACCEPT

# Odrzucanie zarezerwowanych adresw IP klasy E.
$IPT -A INPUT -i $INTERNET -s $CLASS_E_RESERVED_NET -j DROP

if [ "$DHCP_CLIENT" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p udp \
             -s $BROADCAST_SRC --sport 67 \
             -d $BROADCAST_DEST --dport 68 -j ACCEPT
fi

# Odrzucanie adresw zdefiniowanych przez organizacj IANA jako zarezerwowane.
# 0.*.*.*                   nie mog by blokowane jednostronnie z DHCP.
# 169.254.0.0/16   sieci lokalne dla cza.
# 192.0.2.0/24        TEST-NET.

$IPT -A INPUT -i $INTERNET -s 0.0.0.0/8 -j DROP
$IPT -A INPUT -i $INTERNET -s 169.254.0.0/16 -j DROP
$IPT -A INPUT -i $INTERNET -s 192.0.2.0/24 -j DROP

###############################################################
# Serwer nazw DNS.

# dania przekazujcego serwera nazw lub klienta DNS.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NAMESERVER --dport 53 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p udp \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Dla duych odpowiedzi wykorzystywany jest protok TCP.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $NAMESERVER --dport 53 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Buforujcy serwer nazw DNS (lokalny serwer do podstawowego serwera).

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport 53 \
             -d $NAMESERVER --dport 53 \
             -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport 53 \
         -d $NAMESERVER --dport 53 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p udp \
         -s $NAMESERVER --sport 53 \
         -d $IPADDR --dport 53 -j ACCEPT

#...............................................................
# Przychodzce dania zdalnych klientw do lokalnych serwerw.

if [ "$ACCEPT_AUTH" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 113 \
             -m state --state NEW -j ACCEPT
    fi

$IPT -A INPUT -i $INTERNET -p tcp \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport 113 -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport 113 \
         --dport $UNPRIVPORTS -j ACCEPT
else
$IPT -A INPUT -i $INTERNET -p tcp \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport 113 -j REJECT --reject-with tcp-reset
fi

###############################################################
# Wysyanie poczty do dowolnego zewntrznego serwera pocztowego.
# Jeli zamiast tego korzystasz z bramy pocztowej ISP, uyj "-d $MAIL_SERVER". 

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 25 -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 25 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 25 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Odbieranie poczty jako klient POP (port TCP 110).

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $POP_SERVER --dport 110 -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $POP_SERVER --dport 110 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         -s $POP_SERVER --sport 110 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# ssh (port TCP 22).

# Wychodzce dania lokalnych klientw do zdalnych serwerw.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $SSH_PORTS \
             --dport 22 -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $SSH_PORTS \
         --dport 22 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 22 \
         -d $IPADDR --dport $SSH_PORTS -j ACCEPT

#...............................................................
# Przychodzce dania zdalnych klientw do lokalnych serwerw.

if [ "$SSH_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
             --sport $SSH_PORTS \
             -d $IPADDR --dport 22 \
             -m state --state NEW -j ACCEPT
    fi

$IPT -A INPUT -i $INTERNET -p tcp \
         --sport $SSH_PORTS \
         -d $IPADDR --dport 22 -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport 22 \
         --dport $SSH_PORTS -j ACCEPT
fi

###############################################################
# ftp (porty TCP 21, 20).

# Wychodzce dania lokalnych klientw do zdalnych serwerw.

# Wychodzce poczenie sterowania do portu 21.
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 21 -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 21 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 21 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

# Przychodzce poczenie trybu portu kanau danych z portu 20.
if [ "$CONNECTION_TRACKING" = "1" ]; then
    # Ta regua nie jest konieczna, 
    # jeli uywany jest modu ip_conntrack_ftp.
    $IPT -A INPUT -i $INTERNET -p tcp \
             --sport 20 \
             -d $IPADDR --dport $UNPRIVPORTS \
             -m state --state NEW -j ACCEPT
fi

$IPT -A INPUT -i $INTERNET -p tcp \
         --sport 20 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 20 -j ACCEPT

# Wychodzce poczenie trybu pasywnego kanau danych pomidzy nieuprzywilejowanymi portami.
if [ "$CONNECTION_TRACKING" = "1" ]; then
    # Ta regua nie jest konieczna, jeli uywany jest modu ip_conntrack_ftp.
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
fi
 
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport $UNPRIVPORTS -j ACCEPT

    $IPT -A INPUT -i $INTERNET -p tcp ! --syn \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Przychodzce dania zdalnych klientw do lokalnych serwerw.

if [ "$FTP_SERVER" = "1" ]; then
 
    # Przychodzce poczenie sterowania do portu 21.
    if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 21 \
             -m state --state NEW -j ACCEPT
    fi

$IPT -A INPUT -i $INTERNET -p tcp \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport 21 -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport 21 \
         --dport $UNPRIVPORTS -j ACCEPT
 
     # Wychodzce poczenie trybu portu kanau danych do portu 20.
     if [ "$CONNECTION_TRACKING" = "1" ]; then
     $IPT -A OUTPUT -o $INTERNET -p tcp \
              -s $IPADDR --sport 20\
              --dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
     fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport 20 \
         --dport $UNPRIVPORTS -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport 20 -j ACCEPT
 
# Przychodzce poczenie trybu pasywnego kanau danych pomidzy nieuprzywilejowanymi portami.
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport $UNPRIVPORTS \
             -m state --state NEW -j ACCEPT
    fi

$IPT -A INPUT -i $INTERNET -p tcp \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport $UNPRIVPORTS -j ACCEPT
fi

###############################################################
# Ruch WWW HTTP(port TCP 80).

# Wychodzce dania lokalnych klientw do zdalnych serwerw.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 80 -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
               --dport 80 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 80 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Przychodzce dania zdalnych klientw do lokalnych serwerw.

if [ "$WEB_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 80 \
             -m state --state NEW -j ACCEPT
fi

$IPT -A INPUT -i $INTERNET -p tcp \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport 80 -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport 80 \
         --dport $UNPRIVPORTS -j ACCEPT
fi

###############################################################
# Ruch WWW SSL (port TCP 443).

# Wychodzce dania lokalnych klientw do zdalnych serwerw.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 443 -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 443 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 443 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

#...............................................................
# Przychodzce dania zdalnych klientw do lokalnych serwerw.

if [ "$SSL_SERVER" = "1" ]; then
    if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p tcp \
             --sport $UNPRIVPORTS \
             -d $IPADDR --dport 443 \
             -m state --state NEW -j ACCEPT
fi

$IPT -A INPUT -i $INTERNET -p tcp \
         --sport $UNPRIVPORTS \
         -d $IPADDR --dport 443 -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp ! --syn \
         -s $IPADDR --sport 443 \
         --dport $UNPRIVPORTS -j ACCEPT
fi

###############################################################
# whois (port TCP 43).

# Wychodzce dania lokalnych klientw do zdalnych serwerw.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p tcp \
             -s $IPADDR --sport $UNPRIVPORTS \
             --dport 43 -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p tcp \
         -s $IPADDR --sport $UNPRIVPORTS \
         --dport 43 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp ! --syn \
         --sport 43 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Uzyskiwanie dostpu do zdalnych serwerw czasu (UDP 123).
# Uwaga: niektre klienty i serwery uywaj portu rdowego 123
# przy kwerendowaniu zdalnego serwera na porcie docelowym 123.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p udp \
             -s $IPADDR --sport $UNPRIVPORTS \
             -d $TIME_SERVER --dport 123 \
             -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport $UNPRIVPORTS \
         -d $TIME_SERVER --dport 123 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p udp \
         -s $TIME_SERVER --sport 123 \
         -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT

###############################################################
# Uzyskiwanie dostpu do serwera DHCP Twojego ISP (porty UDP 67, 68).

# Niektre pakiety broadcastowe s bezporednio ignorowane przez zapor sieciow.
# Inne s porzucane przez domyln polityk.
# Testy DHCP musz poprzedza reguy zwizane z broadcastami,
# poniewa DHCP w fazie inicjujcej opiera si na ruchu broadcastowym.

if [ "$DHCP_CLIENT" = "1" ]; then
    # Inicjowanie wymiany lub ponowne wizanie: brak dzierawy lub upyn czas dzierawy.

$IPT -A OUTPUT -o $INTERNET -p udp \
         -s $BROADCAST_SRC --sport 68 \
         -d $BROADCAST_DEST --dport 67 -j ACCEPT
 
    # Przychodzce komunikaty DHCPOFFER z dostpnych serwerw DHCP.

$IPT -A INPUT -i $INTERNET -p udp \
         -s $BROADCAST_SRC --sport 67 \
         -d $BROADCAST_DEST --dport 68 -j ACCEPT
    # Powrt do fazy inicjowania.
    # Klient zna swj serwer, ale utraci dzieraw
    # lub potrzebuje ponownie potwierdzi adres IP po restarcie systemu.

$IPT -A OUTPUT -o $INTERNET -p udp \
         -s $BROADCAST_SRC --sport 68 \
         -d $DHCP_SERVER --dport 67 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p udp \
         -s $DHCP_SERVER --sport 67 \
         -d $BROADCAST_DEST --dport 68 -j ACCEPT
     # W rezultacie powinnimy zmieni nasz adres IP zgodnie z tym komunikatem, 
     # ktry jest kierowany do naszego nowego adresu, zanim jeszcze klient dhcp otrzyma t aktualizacj.
     # W zalenoci od implementacji serwera adresem docelowym moe by nowy adres IP,
     # adres podsieci lub adres ograniczonego broadcastu.
 
     # Jeli adres podsieci jest wykorzystywany jako adres docelowy, 
     # nastpna regua musi dopuszcza przychodzce pakiety przeznaczone do adresu podsieci. 
     # Ta regua musi poprzedza wszelkie oglne reguy,
     #  ktre blokuj takie przychodzce pakiety broadcastowe.

$IPT -A INPUT -i $INTERNET -p udp \
         -s $DHCP_SERVER --sport 67 \
         --dport 68 -j ACCEPT
 
     # Odnowienie dzierawy.

$IPT -A OUTPUT -o $INTERNET -p udp \
         -s $IPADDR --sport 68 \
         -d $DHCP_SERVER --dport 67 -j ACCEPT

$IPT -A INPUT -i $INTERNET -p udp \
         -s $DHCP_SERVER --sport 67 \
         -d $IPADDR --dport 68 -j ACCEPT
     
     # Odrzucanie broadcastw skierowanych,
     # ktre s uywane do mapowania sieci w atakach DoS.
     iptables -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP
     iptables -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP
 
     # Odrzucanie broadcastw ograniczonych.
     iptables -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP
fi

###############################################################
# Komunikaty kontrolne i statusu ICMP.

# Rejestrowanie i porzucanie pocztkowych fragmentw ICMP.
$IPT -A INPUT -i $INTERNET --fragment -p icmp -j LOG \
        --log-prefix "Fragmented ICMP: "

$IPT -A INPUT -i $INTERNET --fragment -p icmp -j DROP

$IPT -A INPUT -i $INTERNET -p icmp \
         --icmp-type source-quench -d $IPADDR -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type source-quench -j ACCEPT

$IPT -A INPUT -i $INTERNET -p icmp \
         --icmp-type parameter-problem -d $IPADDR -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type parameter-problem -j ACCEPT

$IPT -A INPUT -i $INTERNET -p icmp \
         --icmp-type destination-unreachable -d $IPADDR -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type fragmentation-needed -j ACCEPT

# Nie rejestruj porzuconych wychodzcych komunikatw bdw ICMP.
$IPT -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type destination-unreachable -j DROP

# Porednie odpowiedzi traceroute.
$IPT -A INPUT -i $INTERNET -p icmp \
         --icmp-type time-exceeded -d $IPADDR -j ACCEPT

# Dopuszczaj wychodzce pakiety ping do dowolnego miejsca przeznaczenia.
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A OUTPUT -o $INTERNET -p icmp \
             -s $IPADDR --icmp-type echo-request \
             -m state --state NEW -j ACCEPT
fi

$IPT -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type echo-request -j ACCEPT

$IPT -A INPUT -i $INTERNET -p icmp \
         --icmp-type echo-reply -d $IPADDR -j ACCEPT

# Dopuszczaj przychodzce pakiety ping z zaufanych hostw.
if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p icmp \
             -s $MY_ISP --icmp-type echo-request -d $IPADDR \
             -m state --state NEW -j ACCEPT
fi

$IPT -A INPUT -i $INTERNET -p icmp \
         -s $MY_ISP --icmp-type echo-request -d $IPADDR -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p icmp \
         -s $IPADDR --icmp-type echo-reply -d $MY_ISP -j ACCEPT

###############################################################
# Rejestrowanie porzuconych pakietw.
$IPT -A INPUT -i $INTERNET -p tcp \
         -d $IPADDR -j LOG

$IPT -A OUTPUT -o $INTERNET -j LOG

exit 0


---


table filter {
        chain input {
                type filter hook input priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}


---

#!/bin/sh

NFT="/usr/local/sbin/nft"             # Lokalizacja polecenia nft w Twoim systemie.
INTERNET="eth0"                       # Interfejs podczony do internetu.
LOOPBACK_INTERFACE="lo"               # Nazwa interfejsu ptli zwrotnej w Twoim systemie.
IPADDR="Twj.adres.ip"                # Twj adres IP.
MY_ISP="zakres.adresw.isp"           # Zakres adresw serwera i systemu NOC dostawcy usug internetowych.
SUBNET_BASE="adres.Twojej.podsieci"   # Adres sieciowy Twojej podsieci.
SUBNET_BROADCAST="bcast.podsieci"     # Adres broadcastowy Twojej podsieci.
LOOPBACK="127.0.0.0/8"                # Zarezerwowany zakres adresw ptli zwrotnej.
NAMESERVER="serwer.nazw.isp.1"        # Adres zdalnego serwera nazw.
SMTP_GATEWAY="serwer.smtp.isp"        # Adres zdalnej bramy pocztowej.
POP_SERVER="serwer.pop.isp"           # Adres zdalnego serwera pop.
IMAP_SERVER="serwer.imap.isp"         # Adres zdalnego serwera imap.
TIME_SERVER="time.nist.gov"           # Adres zdalnego serwera NTP.
CLASS_A="10.0.0.0/8"                  # Prywatne sieci klasy A.
CLASS_B="172.16.0.0/12"               # Prywatne sieci klasy B.
CLASS_C="192.168.0.0/16"              # Prywatne sieci klasy C.
CLASS_D_MULTICAST="224.0.0.0/4"       # Multicastowe adresy klasy D.
CLASS_E_RESERVED_NET="240.0.0.0/5"    # Zarezerwowane adresy klasy E.
BROADCAST_SRC="0.0.0.0"               # rdowy adres broadcastowy.
BROADCAST_DEST="255.255.255.255"      # Docelowy adres broadcastowy.
PRIVPORTS="0-1023"                    # Dobrze znany zakres portw uprzywilejowanych.
UNPRIVPORTS="1024-65535"              # Zakres portw nieuprzywilejowanych.

for i in '$NFT list tables | awk '{print $2}''
do
       echo "Spukiwanie ${i}"
       $NFT flush table ${i}
       for j in '$NFT list table ${i} | grep chain | awk '{print $2}''
       do
              echo "...usuwanie acucha ${j} z tabeli ${i}"
              $NFT delete chain ${i} ${j}
       done
       echo "Usuwanie ${i}"
       $NFT delete table ${i}
done

if [ "$1" = "stop" ]
then
echo "Zapora sieciowa cakowicie zatrzymana!  UWAGA: NA TYM HOCIE NIE MA URUCHOMIONEJ ZAPORY SIECIOWEJ."
exit 0
fi

$NFT -f setup-tables

#Interfejs ptli zwrotnej.
$NFT add rule filter input iifname lo accept
$NFT add rule filter output oifname lo accept

#Stan poczenia.
$NFT add rule filter input ct state established,related accept
$NFT add rule filter input ct state invalid log prefix \"INVALID input: \" limit rate 3/second drop
$NFT add rule filter output ct state established,related accept
$NFT add rule filter output ct state invalid log prefix \"INVALID output: \" limit rate 3/second drop

#Faszowanie adresw rdowych.
$NFT add rule filter input iif $INTERNET ip saddr $IPADDR

#Nieprawidowe adresy.
$NFT add rule filter input iif $INTERNET ip saddr $CLASS_A drop
$NFT add rule filter input iif $INTERNET ip saddr $CLASS_B drop
$NFT add rule filter input iif $INTERNET ip saddr $CLASS_C drop
$NFT add rule filter input iif $INTERNET ip saddr $LOOPBACK drop

#Broadcasty rdowe i docelowe.
$NFT add rule filter input iif $INTERNET ip saddr $BROADCAST_DEST log limit rate 3/second drop
$NFT add rule filter input iif $INTERNET ip saddr $BROADCAST_SRC log limit rate 3/second drop

#Broadcasty skierowane.
$NFT add rule filter input iif $INTERNET ip daddr $SUBNET_BASE drop
$NFT add rule filter input iif $INTERNET ip daddr $SUBNET_BROADCAST drop

#Broadcasty ograniczone.
$NFT add rule filter input iif $INTERNET ip daddr $BROADCAST_DEST drop

#Multicasty.
$NFT add rule filter input iif $INTERNET ip saddr $CLASS_D_MULTICAST drop
$NFT add rule filter input iif $INTERNET ip daddr $CLASS_D_MULTICAST ip protocol != udp drop
$NFT add rule filter input iif $INTERNET ip daddr $CLASS_D_MULTICAST ip protocol udp accept

#Klasa E.
$NFT add rule filter input iif $INTERNET ip saddr $CLASS_E_RESERVED_NET drop

#X Window.
XWINDOW_PORTS="6000-6063"
$NFT add rule filter output oif $INTERNET ct state new tcp dport $XWINDOW_PORTS reject
$NFT add rule filter input iif $INTERNET ct state new tcp dport $XWINDOW_PORTS drop

NFS_PORT="2049"                         # (TCP) NFS.
SOCKS_PORT="1080"                       # (TCP) socks.
OPENWINDOWS_PORT="2000"                 # (TCP) OpenWindows.
SQUID_PORT="3128"                       # (TCP) squid.

$NFT add rule filter output oif $INTERNET tcp dport {$NFS_PORT,$SOCKS_PORT,$OPENWINDOWS_PORT,$SQUID_PORT} ct state new reject
$NFT add rule filter input iif $INTERNET tcp dport {$NFS_PORT,$SOCKS_PORT,$OPENWINDOWS_PORT,$SQUID_PORT} ct state new drop

NFS_PORT="2049"                         # NFS.
LOCKD_PORT="4045"                       # RPC lockd dla NFS/
$NFT add rule filter output oif $INTERNET udp dport {$NFS_PORT,$LOCKD_PORT} reject
$NFT add rule filter input iif $INTERNET udp dport {$NFS_PORT,$LOCKD_PORT} drop

#DNS.
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR udp sport $UNPRIVPORTS ip daddr $NAMESERVER udp dport 53 ct state new accept
$NFT add rule filter input iif $INTERNET ip daddr $IPADDR udp dport $UNPRIVPORTS ip saddr $NAMESERVER udp sport 53 accept

#tcp dns.
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR tcp sport $UNPRIVPORTS ip daddr $NAMESERVER tcp dport 53 ct state new accept
$NFT add rule filter input iif $INTERNET ip daddr $IPADDR tcp dport $UNPRIVPORTS ip saddr $NAMESERVER tcp sport 53 tcp flags != syn accept

#tcp smtp.
$NFT add rule filter output oif $INTERNET ip daddr $SMTP_GATEWAY tcp dport 25 ip saddr $IPADDR tcp sport $UNPRIVPORTS accept
$NFT add rule filter input iif $INTERNET ip saddr $SMTP_GATEWAY tcp sport 25 ip daddr $IPADDR tcp dport $UNPRIVPORTS tcp flags != syn accept

$NFT add rule filter output oif $INTERNET ip saddr $IPADDR tcp sport $UNPRIVPORTS tcp dport 25 accept
$NFT add rule filter input iif $INTERNET ip daddr $IPADDR tcp sport 25 tcp dport $UNPRIVPORTS tcp flags != syn accept
$NFT add rule filter input iif $INTERNET tcp sport $UNPRIVPORTS ip daddr $IPADDR tcp dport 25 accept
$NFT add rule filter output oif $INTERNET tcp sport 25 ip saddr $IPADDR tcp dport $UNPRIVPORTS tcp flags != syn accept

#tcp pop3.
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR ip daddr $POP_SERVER tcp sport $UNPRIVPORTS tcp dport 110 accept
$NFT add rule filter input iif $INTERNET ip saddr $POP_SERVER tcp sport 110 ip daddr $IPADDR tcp dport $UNPRIVPORTS tcp flags != syn accept

#tcp imaps.
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR tcp sport $UNPRIVPORTS ip daddr $IMAP_SERVER tcp dport 993 accept
$NFT add rule filter input iif $INTERNET ip saddr $IMAP_SERVER tcp sport 993 ip daddr $IPADDR tcp dport $UNPRIVPORTS tcp flags != syn accept

#Umoliwienie klientom czenia si z Twoim serwerem IMAPs.
$NFT add rule filter input iif $INTERNET ip saddr 0/0 tcp sport $UNPRIVPORTS ip daddr $IPADDR tcp dport 993 accept
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR tcp sport 993 ip daddr 0/0 tcp dport $UNPRIVPORTS tcp flags != syn accept

#ssh.
SSH_PORTS="1020-65535"
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR tcp sport $SSH_PORTS tcp dport 22 accept
$NFT add rule filter input iif $INTERNET tcp sport 22 ip daddr $IPADDR tcp dport $SSH_PORTS tcp flags != syn accept
$NFT add rule filter input iif $INTERNET tcp sport $SSH_PORTS ip daddr $IPADDR tcp dport 22 accept
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR tcp sport 22 tcp dport $SSH_PORTS tcp flags != syn accept

#ftp.
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR tcp sport $UNPRIVPORTS tcp dport 21 accept
$NFT add rule filter input iif $INTERNET ip daddr $IPADDR tcp sport 21 tcp dport $UNPRIVPORTS accept
#Zakada uycie moduu stanu ct dla ftp.

#dhcp (ta maszyna korzysta z dhcp na dwch interfejsach, wic potrzeba wicej regu).
$NFT add rule filter output oif $INTERNET ip saddr $BROADCAST_SRC udp sport 67-68 ip daddr $BROADCAST_DEST udp dport 67-68 accept
$NFT add rule filter input iif $INTERNET udp sport 67-68 udp dport 67-68 accept
$NFT add rule filter output udp sport 67-68 udp dport 67-68 accept
$NFT add rule filter input udp sport 67-68 udp dport 67-68 accept

#ntp.
$NFT add rule filter output oif $INTERNET ip saddr $IPADDR udp sport $UNPRIVPORTS ip daddr $TIME_SERVER udp dport 123 accept
$NFT add rule filter input iif $INTERNET ip saddr $TIME_SERVER udp sport 123 ip daddr $IPADDR udp dport $UNPRIVPORTS accept

#Rejestruj wszystkie pakiety, ktre dotary do tego miejsca.
$NFT add rule filter input log
$NFT add rule filter output log

#Domylna polityka:
$NFT add rule filter input drop
$NFT add rule filter output reject


---

#!/bin/sh

/sbin/modprobe ip_conntrack_ftp

CONNECTION_TRACKING="1"
ACCEPT_AUTH="0"
DHCP_CLIENT="0"
IPT="/sbin/iptables"                     # Lokalizacja polecenia iptables w Twoim systemie.
INTERNET="eth0"                          # Interfejs podczony do internetu.
LOOPBACK_INTERFACE="lo"                  # Nazwa interfejsu ptli zwrotnej w Twoim systemie.
IPADDR="Twj.adres.ip"                   # Twj adres IP.
SUBNET_BASE="adres.Twojej.podsieci"      # Adres bazowy segmentu sieci ISP.
SUBNET_BROADCAST="bcast.podsieci"        # Adres broadcastowy segmentu sieci.
MY_ISP="zakres.adresw.isp"              # Zakres adresw serwera i systemu NOC ISP.

NAMESERVER_1="serwer.nazw.isp.1"         # Adres zdalnego serwera nazw.
NAMESERVER_2="serwer.nazw.isp.2"         # Adres zdalnego serwera nazw.
NAMESERVER_3="serwer.nazw.isp.3"         # Adres zdalnego serwera nazw.
POP_SERVER="serwer.pop.isp"              # Adres zdalnego serwera pop.
MAIL_SERVER="serwer.poczty.isp"          # Adres zdalnej bramy pocztowej.
NEWS_SERVER="serwer.grup.dyskus.isp"     # Adres zdalnego serwera grup dyskusyjnych.
TIME_SERVER="jaki.serwer.czasu"         # Adres zdalnego serwera czasu.
DHCP_SERVER="serwer.dhcp.isp"            # Adres serwera dhcp Twojego ISP.
SSH_CLIENT="jaki.klient.ssh"

LOOPBACK="127.0.0.0/8"                   # Zarezerwowany zakres adresw ptli zwrotnej.
CLASS_A="10.0.0.0/8"                     # Prywatne sieci klasy A.
CLASS_B="172.16.0.0/12"                  # Prywatne sieci klasy B.
CLASS_C="192.168.0.0/16"                 # Prywatne sieci klasy C.
CLASS_D_MULTICAST="224.0.0.0/4"          # Multicastowe adresy klasy D.
CLASS_E_RESERVED_NET="240.0.0.0/5"       # Zarezerwowane adresy klasy E.
BROADCAST_SRC="0.0.0.0"                  # rdowy adres broadcastowy.
BROADCAST_DEST="255.255.255.255"         # Docelowy adres broadcastowy.

PRIVPORTS="0:1023"                       # Dobrze znany zakres portw uprzywilejowanych.
UNPRIVPORTS="1024:65535"                 # Zakres portw nieuprzywilejowanych.

# Traceroute zazwyczaj uywa -S 32769:65535 -D 33434:33523
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"

USER_CHAINS="EXT-input                  EXT-output \
             tcp-state-flags            connection-tracking \
             source-address-check       destination-address-check \
             local-dns-server-query     remote-dns-server-response \
             local-tcp-client-request   remote-tcp-server-response \
             remote-tcp-client-request  local-tcp-server-response \
             local-udp-client-request   remote-udp-server-response \
             local-dhcp-client-query    remote-dhcp-server-response \
             EXT-icmp-out               EXT-icmp-in \
             EXT-log-in                 EXT-log-out \
             log-tcp-state"

###############################################################

# Wczenie ignorowania broadcast echo.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Wyczenie pakietw routowanych rdowo.
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo 0 > $f
done

# Wczenie ochrony TCP SYN Cookies.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Wyczenie akceptowania komunikatw ICMP Redirect.
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f
done

# Nie wysyaj komunikatw Redirect.
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f
done

# Porzucanie takich sfaszowanych pakietw przychodzcych na dany interfejs,
# dla ktrych odpowied musiaaby zosta wysana z innego interfejsu.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
done

# Rejestrowanie pakietw z niemoliwymi adresami.
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
done

###############################################################

# Usunicie wszelkich istniejcych regu ze wszystkich acuchw.
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

$IPT --policy INPUT ACCEPT
$IPT --policy OUTPUT ACCEPT
$IPT --policy FORWARD ACCEPT
$IPT -t nat --policy PREROUTING ACCEPT
$IPT -t nat --policy OUTPUT ACCEPT
$IPT -t nat --policy POSTROUTING ACCEPT
$IPT -t mangle --policy PREROUTING ACCEPT
$IPT -t mangle --policy OUTPUT ACCEPT
if [ "$1" = "stop" ]
then
echo "Zapora sieciowa cakowicie zatrzymana!  UWAGA: NA TYM HOCIE NIE MA URUCHOMIONEJ ZAPORY SIECIOWEJ."
exit 0
fi

# Nieograniczony ruch na interfejsie ptli zwrotnej.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Ustawienie domylnej polityki na DROP.
$IPT --policy INPUT DROP
$IPT --policy OUTPUT DROP
$IPT --policy FORWARD DROP

# Tworzenie acuchw definiowanych przez uytkownika.
for i in $USER_CHAINS; do
    $IPT -N $i
done

###############################################################
# Buforujcy serwer nazw DNS (zapytanie do zdalnego serwera podstawowego).

$IPT -A EXT-output -p udp --sport 53 --dport 53 \
         -j local-dns-server-query

$IPT -A EXT-input -p udp --sport 53 --dport 53 \
         -j remote-dns-server-response

# Buforujcy serwer nazw DNS (zapytanie do zdalnego serwera poprzez TCP).

$IPT -A EXT-output -p tcp \
         --sport $UNPRIVPORTS --dport 53 \
         -j local-dns-server-query

$IPT -A EXT-input -p tcp ! --syn \
         --sport 53 --dport $UNPRIVPORTS \
         -j remote-dns-server-response

###############################################################
# dania przekazujcego serwera nazw lub klienta DNS.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-dns-server-query \
             -d $NAMESERVER_1 \
             -m state --state NEW -j ACCEPT
 
    $IPT -A local-dns-server-query \
             -d $NAMESERVER_2 \
             -m state --state NEW -j ACCEPT
 
    $IPT -A local-dns-server-query \
             -d $NAMESERVER_3 \
             -m state --state NEW -j ACCEPT
fi

$IPT -A local-dns-server-query \
         -d $NAMESERVER_1 -j ACCEPT

$IPT -A local-dns-server-query \
         -d $NAMESERVER_2 -j ACCEPT

$IPT -A local-dns-server-query \
         -d $NAMESERVER_3 -j ACCEPT

# Odpowiedzi serwera DNS na lokalne dania.

$IPT -A remote-dns-server-response \
         -s $NAMESERVER_1 -j ACCEPT

$IPT -A remote-dns-server-response \
         -s $NAMESERVER_2 -j ACCEPT

$IPT -A remote-dns-server-response \
         -s $NAMESERVER_3 -j ACCEPT

###############################################################
# Lokalny klient TCP, zdalny serwer.

$IPT -A EXT-output -p tcp \
         --sport $UNPRIVPORTS \
         -j local-tcp-client-request

$IPT -A EXT-input -p tcp ! --syn \
         --dport $UNPRIVPORTS \
         -j remote-tcp-server-response

###############################################################
# acuch output lokalnego klienta TCP  i acuch input zdalnego serwera.

# Klient SSH.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-tcp-client-request -p tcp \
             -d <selected host> --dport 22 \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A local-tcp-client-request -p tcp \
         -d <wybrany_host> --dport 22 \
         -j ACCEPT

$IPT -A remote-tcp-server-response -p tcp ! --syn \
         -s <wybrany_host> --sport 22 \
         -j ACCEPT

#...............................................................
# Reguy klienta dla da sterowania HTTP, HTTPS, AUTH oraz FTP. 

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-tcp-client-request -p tcp \
             -m multiport --destination-port 80,443,21 \
             --syn -m state --state NEW \
             -j ACCEPT
fi

$IPT -A local-tcp-client-request -p tcp \
          -m multiport --destination-port 80,443,21 \
          -j ACCEPT

$IPT -A remote-tcp-server-response -p tcp \
         -m multiport --source-port 80,443,21 ! --syn \
         -j ACCEPT
#...............................................................
# Klient POP.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-tcp-client-request -p tcp \
             -d $POP_SERVER --dport 110 \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A local-tcp-client-request -p tcp \
         -d $POP_SERVER --dport 110 \
         -j ACCEPT

$IPT -A remote-tcp-server-response -p tcp ! --syn \
         -s $POP_SERVER --sport 110 \
         -j ACCEPT

#...............................................................
# Klient poczty SMTP.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-tcp-client-request -p tcp \
             -d $MAIL_SERVER --dport 25 \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A local-tcp-client-request -p tcp \
         -d $MAIL_SERVER --dport 25 \
         -j ACCEPT

$IPT -A remote-tcp-server-response -p tcp ! --syn \
         -s $MAIL_SERVER --sport 25 \
         -j ACCEPT

#...............................................................
# Klient usugi Usenet.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-tcp-client-request -p tcp \
             -d $NEWS_SERVER --dport 119 \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A local-tcp-client-request -p tcp \
         -d $NEWS_SERVER --dport 119 \
         -j ACCEPT

$IPT -A remote-tcp-server-response -p tcp ! --syn \
         -s $NEWS_SERVER --sport 119 \
         -j ACCEPT

#...............................................................
# Klient FTP - poczenie kanau danych w trybie pasywnym.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-tcp-client-request -p tcp \
             --dport $UNPRIVPORTS \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A local-tcp-client-request -p tcp \
         --dport $UNPRIVPORTS -j ACCEPT

$IPT -A remote-tcp-server-response -p tcp ! --syn \
         --sport $UNPRIVPORTS -j ACCEPT

###############################################################
# Lokalny serwer TCP, zdalny klient.

$IPT -A EXT-input -p tcp \
         --sport $UNPRIVPORTS \
         -j remote-tcp-client-request

$IPT -A EXT-output -p tcp ! --syn \
         --dport $UNPRIVPORTS \
         -j local-tcp-server-response

# Poprawka dla pocze kanau danych FTP przychodzcych ze zdalnych serwerw w trybie portu.
# Moduy stanu traktuj to poczenie jako RELATED, jeli zaadowany jest modu ip_conntrack_ftp.

$IPT -A EXT-input -p tcp \
         --sport 20 --dport $UNPRIVPORTS \
         -j ACCEPT

$IPT -A EXT-output -p tcp ! --syn \
         --sport $UNPRIVPORTS --dport 20 \
         -j ACCEPT

###############################################################
# acuch input zdalnego klienta TCP i acuch output lokalnego serwera.

# Serwer SSH.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A remote-tcp-client-request -p tcp \
             -s <wybrany_host> --destination-port 22 \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A remote-tcp-client-request -p tcp \
         -s <wybrany_host> --destination-port 22 \
         -j ACCEPT

$IPT -A local-tcp-server-response -p tcp ! --syn \
         --source-port 22 -d <selected host> \
         -j ACCEPT

#...............................................................
# Serwer AUTH identd.

if [ "$ACCEPT_AUTH" = "0" ]; then
    $IPT -A remote-tcp-client-request -p tcp \
             --destination-port 113 \
             -j REJECT --reject-with tcp-reset
else
    $IPT -A remote-tcp-client-request -p tcp \
             --destination-port 113 \
             -j ACCEPT

   $IPT -A local-tcp-server-response -p tcp ! --syn \
            --source-port 113 \
            -j ACCEPT
fi

###############################################################
# Lokalny klient UDP, zdalny serwer.

$IPT -A EXT-output -p udp \
         --sport $UNPRIVPORTS \
         -j local-udp-client-request

$IPT -A EXT-input -p udp \
         --dport $UNPRIVPORTS \
         -j remote-udp-server-response

###############################################################
# Klient usugi czasu NTP.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A local-udp-client-request -p udp \
             -d $TIME_SERVER --dport 123 \
             -m state --state NEW \
             -j ACCEPT
fi
$IPT -A local-udp-client-request -p udp \
         -d $TIME_SERVER --dport 123 \
         -j ACCEPT

$IPT -A remote-udp-server-response -p udp \
         -s $TIME_SERVER --sport 123 \
         -j ACCEPT

###############################################################
# ICMP.

$IPT -A EXT-input -p icmp -j EXT-icmp-in

$IPT -A EXT-output -p icmp -j EXT-icmp-out

###############################################################
# Ruch ICMP.

# Rejestrowanie i porzucanie pocztkowych fragmentw ICMP.
$IPT -A EXT-icmp-in --fragment -j LOG \
         --log-prefix "Fragmented incoming ICMP: "

$IPT -A EXT-icmp-in --fragment -j DROP

$IPT -A EXT-icmp-out --fragment -j LOG \
         --log-prefix "Fragmented outgoing ICMP: "

$IPT -A EXT-icmp-out --fragment -j DROP

# Wychodzcy ping.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A EXT-icmp-out -p icmp \
             --icmp-type echo-request \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A EXT-icmp-out -p icmp \
         --icmp-type echo-request -j ACCEPT

$IPT -A EXT-icmp-in -p icmp \
         --icmp-type echo-reply -j ACCEPT

# Przychodzcy ping.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    $IPT -A EXT-icmp-in -p icmp \
             -s $MY_ISP \
             --icmp-type echo-request \
             -m state --state NEW \
             -j ACCEPT
fi

$IPT -A EXT-icmp-in -p icmp \
         --icmp-type echo-request \
         -s $MY_ISP -j ACCEPT

$IPT -A EXT-icmp-out -p icmp \
         --icmp-type echo-reply \
         -d $MY_ISP -j ACCEPT

# Komunikat Destination Unreachable typu 3.
$IPT -A EXT-icmp-out -p icmp \
         --icmp-type fragmentation-needed -j ACCEPT

$IPT -A EXT-icmp-in -p icmp \
         --icmp-type destination-unreachable -j ACCEPT

# Komunikat Parameter Problem.
$IPT -A EXT-icmp-out -p icmp \
         --icmp-type parameter-problem -j ACCEPT

$IPT -A EXT-icmp-in -p icmp \
         --icmp-type parameter-problem -j ACCEPT

# Komunikat Time Exceeded.
$IPT -A EXT-icmp-in -p icmp \
         --icmp-type time-exceeded -j ACCEPT

# Komunikat Source Quench.
$IPT -A EXT-icmp-out -p icmp \
         --icmp-type source-quench -j ACCEPT

###############################################################
# Flagi stanu TCP.

# Wszystkie bity s wyczyszczone.
$IPT -A tcp-state-flags -p tcp --tcp-flags ALL NONE -j log-tcp-state

# Ustawione s dwa bity: SYN i FIN.
$IPT -A tcp-state-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j log-tcp-state

# Ustawione s dwa bity: SYN i RST.
$IPT -A tcp-state-flags -p tcp --tcp-flags SYN,RST SYN,RST -j log-tcp-state

# Ustawione s dwa bity: FIN i RST.
$IPT -A tcp-state-flags -p tcp --tcp-flags FIN,RST FIN,RST -j log-tcp-state

# Ustawiony jest tylko bit FIN, bez oczekiwanego towarzyszcego bitu ACK.
$IPT -A tcp-state-flags -p tcp --tcp-flags ACK,FIN FIN -j log-tcp-state

# Ustawiony jest tylko bit PSH, bez oczekiwanego towarzyszcego bitu ACK.
$IPT -A tcp-state-flags -p tcp --tcp-flags ACK,PSH PSH -j log-tcp-state

# Ustawiony jest tylko bit URG, bez oczekiwanego towarzyszcego bitu ACK.
$IPT -A tcp-state-flags -p tcp --tcp-flags ACK,URG URG -j log-tcp-state

###############################################################
# Rejestrowanie i porzucanie pakietw TCP ze zymi kombinacjami stanw.

$IPT -A log-tcp-state -p tcp -j LOG \
         --log-prefix "Illegal TCP state: " \
         --log-ip-options --log-tcp-options

$IPT -A log-tcp-state -j DROP

###############################################################
# Omijanie sprawdzania regu dla ustanowionych wymian.

if [ "$CONNECTION_TRACKING" = "1" ]; then
    # Omijanie filtrw zapory sieciowej dla ustanowionych wymian.
    $IPT -A connection-tracking -m state \
             --state ESTABLISHED,RELATED \
             -j ACCEPT
 
    $IPT -A connection-tracking -m state --state INVALID \
             -j LOG --log-prefix "INVALID packet: "
    $IPT -A connection-tracking -m state --state INVALID -j DROP
fi

###############################################################
# Ruch DHCP.

# Niektre pakiety broadcastowe s bezporednio ignorowane przez zapor sieciow.
# Inne s porzucane przez domyln polityk.
# Testy DHCP musz poprzedza reguy zwizane z broadcastami,
# poniewa DHCP w fazie inicjujcej opiera si na ruchu broadcastowym.

if [ "$DHCP_CLIENT" = "1" ]; then

    # Inicjowanie wymiany lub ponowne wizanie: brak dzierawy lub upyn czas dzierawy.
 
    $IPT -A local-dhcp-client-query \
             -s $BROADCAST_SRC \
             -d $BROADCAST_DEST -j ACCEPT
 
    # Przychodzce komunikaty DHCPOFFER z dostpnych serwerw DHCP.

    $IPT -A remote-dhcp-server-response \
             -s $BROADCAST_SRC \
             -d $BROADCAST_DEST -j ACCEPT
 
    # Powrt do fazy inicjowania.
    # Klient zna swj serwer, ale utraci dzieraw
    # lub potrzebuje ponownie potwierdzi adres IP po restarcie systemu.
 
    $IPT -A local-dhcp-client-query \
             -s $BROADCAST_SRC \
             -d $DHCP_SERVER -j ACCEPT
 
   $IPT -A remote-dhcp-server-response \
            -s $DHCP_SERVER \
            -d $BROADCAST_DEST -j ACCEPT

   # W rezultacie powinnimy zmieni nasz adres IP zgodnie z tym komunikatem, 
   # ktry jest kierowany do naszego nowego adresu, zanim jeszcze klient dhcp otrzyma t aktualizacj.
   # W zalenoci od implementacji serwera adresem docelowym moe by nowy adres IP,
   # adres podsieci lub adres ograniczonego broadcastu. 

   # Jeli adres podsieci jest wykorzystywany jako adres docelowy,
   #  nastpna regua musi dopuszcza przychodzce pakiety przeznaczone do adresu podsieci.
   # Ta regua musi poprzedza wszelkie oglne reguy, 
   # ktre blokuj takie przychodzce pakiety broadcastowe.
 
   $IPT -A remote-dhcp-server-response \
            -s $DHCP_SERVER -j ACCEPT
 
   # Odnowienie dzierawy.
   
   $IPT -A local-dhcp-client-query \
            -s $IPADDR \
            -d $DHCP_SERVER -j ACCEPT
fi

###############################################################
# Sprawdzanie sfaszowanych adresw rdowych.

# Porzucanie pakietw pochodzcych rzekomo z interfejsu odbierajcego.
$IPT -A source-address-check -s $IPADDR -j DROP

# Porzucanie pakietw pochodzcych rzekomo z prywatnych sieci.

$IPT -A source-address-check -s $CLASS_A -j DROP
$IPT -A source-address-check -s $CLASS_B -j DROP
$IPT -A source-address-check -s $CLASS_C -j DROP
$IPT -A source-address-check -s $CLASS_D_MULTICAST -j DROP
$IPT -A source-address-check -s $CLASS_E_RESERVED_NET -j DROP
$IPT -A source-address-check -s $LOOPBACK -j DROP

$IPT -A source-address-check -s 0.0.0.0/8 -j DROP
$IPT -A source-address-check -s 169.254.0.0/16 -j DROP
$IPT -A source-address-check -s 192.0.2.0/24 -j DROP

###############################################################
# Sprawdzanie zych adresw i portw docelowych.

# Blokowanie broadcastw skierowanych z internetu.

$IPT -A destination-address-check -d $BROADCAST_DEST -j DROP
$IPT -A destination-address-check -d $SUBNET_BASE -j DROP
$IPT -A destination-address-check -d $SUBNET_BROADCAST -j DROP
$IPT -A destination-address-check ! -p udp \
         -d $CLASS_D_MULTICAST -j DROP

###############################################################
# Reguy rejestrowania przed porzuceniem przez domyln polityk.

# Reguy ICMP.

$IPT -A EXT-log-in -p icmp \
         ! --icmp-type echo-request -m limit -j LOG

# Reguy TCP.

$IPT -A EXT-log-in -p tcp \
         --dport 0:19 -j LOG

# Pomi ftp, telnet, ssh.
$IPT -A EXT-log-in -p tcp \
         --dport 24 -j LOG

# Pomi smtp.
$IPT -A EXT-log-in -p tcp \
         --dport 26:78 -j LOG

# Pomi finger, www.
$IPT -A EXT-log-in -p tcp \
         --dport 81:109 -j LOG

# Pomi pop-3, sunrpc.
$IPT -A EXT-log-in -p tcp \
         --dport 112:136 -j LOG

# Pomi NetBIOS.
$IPT -A EXT-log-in -p tcp \
         --dport 140:142 -j LOG

# Pomi imap.
$IPT -A EXT-log-in -p tcp \
         --dport 144:442 -j LOG

# Pomi secure_web/SSL.
$IPT -A EXT-log-in -p tcp \
         --dport 444:65535 -j LOG

# Reguy UDP.

$IPT -A EXT-log-in -p udp \
         --dport 0:110 -j LOG

# Pomi sunrpc.
$IPT -A EXT-log-in -p udp \
         --dport 112:160 -j LOG

# Pomi snmp.
$IPT -A EXT-log-in -p udp \
         --dport 163:634 -j LOG

# Pomi NFS mountd.
$IPT -A EXT-log-in -p udp \
         --dport 636:5631 -j LOG

# Pomi pcAnywhere.
$IPT -A EXT-log-in -p udp \
         --dport 5633:31336 -j LOG

# Pomi domylne porty traceroute.
$IPT -A EXT-log-in -p udp \
         --sport $TRACEROUTE_SRC_PORTS \
         --dport $TRACEROUTE_DEST_PORTS -j LOG

# Pomi reszt.
$IPT -A EXT-log-in -p udp \
         --dport 33434:65535 -j LOG

# Pakiety wychodzce.

# Nie rejestruj odrzuconych wychodzcych pakietw ICMP destination-unreachable.
$IPT -A EXT-log-out -p icmp \
         --icmp-type destination-unreachable -j DROP

$IPT -A EXT-log-out -j LOG

###############################################################
# Instalowanie acuchw zdefiniowanych przez uytkownika we wbudowanych acuchach INPUT i OUTPUT.

# Jeli protokoem jest TCP: sprawdzenie wzorcw stanu TCP typowych dla skanowania skrytego.
$IPT -A INPUT -p tcp -j tcp-state-flags
$IPT -A OUTPUT -p tcp -j tcp-state-flags

if [ "$CONNECTION_TRACKING" = "1" ]; then
    # Ominicie filtrw zapory sieciowej dla ustanowionych wymian.
    $IPT -A INPUT -j connection-tracking
    $IPT -A OUTPUT -j connection-tracking
fi

if [ "$DHCP_CLIENT" = "1" ]; then
    $IPT -A INPUT -i $INTERNET -p udp \
             --sport 67 --dport 68 -j remote-dhcp-server-response
    $IPT -A OUTPUT -o $INTERNET -p udp \
             --sport 68 --dport 67 -j local-dhcp-client-query
fi

# Testowanie nielegalnych adresw rdowych i docelowych w pakietach przychodzcych.
$IPT -A INPUT ! -p tcp -j source-address-check
$IPT -A INPUT -p tcp --syn -j source-address-check
$IPT -A INPUT -j destination-address-check

# Testowanie nielegalnych adresw docelowych w pakietach wychodzcych.
$IPT -A OUTPUT -j destination-address-check

# Rozpoczcie standardowych testw zapory sieciowej dla pakietw adresowanych do tego hosta.
$IPT -A INPUT -i $INTERNET -d $IPADDR -j EXT-input

# Ruch multicastowy.
#### WYBIERZ DROP LUB ACCEPT!
$IPT -A INPUT -i $INTERNET -p udp -d $CLASS_D_MULTICAST -j [ DROP | ACCEPT ]
$IPT -A OUTPUT -o $INTERNET -p udp -s $IPADDR -d $CLASS_D_MULTICAST \
-j [ DROP | ACCEPT ]

# Rozpoczcie standardowych testw zapory sieciowej dla pakietw wysanych z tego hosta.
# Faszowanie adresw rdowych przez ten host nie jest dopuszczalne
# z uwagi na testowanie adresu rdowego w tej regule.
$IPT -A OUTPUT -o $INTERNET -s $IPADDR -j EXT-output

# Rejestruj wszystkie interesujce Ci pakiety, ktre przeszy przez acuch, zanim porzuci je domylna polityka.
$IPT -A INPUT -j EXT-log-in
$IPT -A OUTPUT -j EXT-log-out

exit 0


---

#!/bin/sh

NFT="/usr/local/sbin/nft"            # Lokalizacja polecenia nft w Twoim systemie.

# Wczenie ignorowania broadcast echo.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Wyczenie pakietw routowanych rdowo.
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo 0 > $f
done
# Wczenie ochrony TCP SYN Cookies.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Wyczenie akceptowania komunikatw ICMP Redirect.
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
    echo 0 > $f
done

# Nie wysyaj komunikatw Redirect.
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
    echo 0 > $f
done
# Porzucanie takich sfaszowanych pakietw przychodzcych na dany interfejs,
# dla ktrych odpowied musiaaby zosta wysana z innego interfejsu.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
done
# Rejestrowanie pakietw z niemoliwymi adresami.
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
done

for i in '$NFT list tables | awk '{print $2}''
do
        echo "Spukiwanie ${i}"
        $NFT flush table ${i}
        for j in '$NFT list table ${i} | grep chain | awk '{print $2}''
        do
               echo "...usuwanie acucha ${j} z tabeli ${i}"
               $NFT delete chain ${i} ${j}
        done
        echo "Usuwanie ${i}"
        $NFT delete table ${i}
done

if [ "$1" = "stop" ]
then
echo "Zapora sieciowa cakowicie zatrzymana!  UWAGA: NA TYM HOCIE NIE MA URUCHOMIONEJ ZAPORY SIECIOWEJ."
exit 0
fi
$NFT -f setup-tables
$NFT -f localhost-policy
$NFT -f connectionstate-policy

$NFT -f invalid-policy
$NFT -f dns-policy

$NFT -f tcp-client-policy
$NFT -f tcp-server-policy

$NFT -f icmp-policy

$NFT -f log-policy
#Domylna polityka DROP.
$NFT -f default-policy


---

define int_loopback = lo
define int_internet = ethN
define ip_external =
define subnet_external =
define subnet_bcast =
define net_loopback = 127.0.0.0/8
define net_class_a = 10.0.0.0/8
define net_class_b = 172.16.0.0/16
define net_class_c = 192.168.0.0/16
define net_class_d = 224.0.0.0/4
define net_class_e = 240.0.0.0/5
define broadcast_src = 0.0.0.0
define broadcast_dest = 255.255.255.255

define ports_priv = 0-1023
define ports_unpriv = 1024-65535

define nameserver_1 =
define nameserver_2 =
define nameserver_3 =

define server_smtp =


---

table filter {
        chain input {
                ct state established,related accept
                ct state invalid log prefix "INVALID input: " limit rate 3/second drop
        }
        chain output {
                ct state established,related accept
                ct state invalid log prefix "INVALID output: " limit rate 3/second drop
        }
}


---

table filter {
        chain input {
                drop
        }
        chain output {
                drop
        }
}
table nat {
        chain postrouting {
                drop
        }
        chain prerouting {
                drop
        }
}


---

include "nft-vars"
table filter {
        chain input {
                ip daddr { $nameserver_1,$nameserver_2,$nameserver_3 } udp sport 53 udp dport 53 accept
                ip daddr { $nameserver_1,$nameserver_2,$nameserver_3 } tcp sport 53 tcp dport $ports_unpriv accept
                ip daddr { $nameserver_1,$nameserver_2,$nameserver_3 } udp sport 53 udp dport $ports_unpriv accept
        }
        chain output {
                ip daddr { $nameserver_1,$nameserver_2,$nameserver_3 } udp sport 53 udp dport 53 accept
                ip daddr { $nameserver_1,$nameserver_2,$nameserver_3 } tcp sport $ports_unpriv tcp dport 53 accept
                ip daddr { $nameserver_1,$nameserver_2,$nameserver_3 } udp sport $ports_unpriv udp dport 53 accept
        }
}


---

include "nft-vars"
table filter {
        chain input {
                icmp type { echo-reply,destination-unreachable,parameter-problem,source-quench,time-exceeded} accept
        }
        chain output {
                icmp type { echo-request,parameter-problem,source-quench} accept
        }
}


---

include "nft-vars"
table filter {
        chain input {
                iif $int_internet ip saddr $ip_external drop
                iif $int_internet ip saddr $net_class_a drop
                iif $int_internet ip saddr $net_class_b drop
                iif $int_internet ip saddr $net_class_c drop
                iif $int_internet ip protocol udp ip daddr $net_class_d accept
                iif $int_internet ip saddr $net_class_e drop
                iif $int_internet ip saddr $net_loopback drop
                iif $int_internet ip daddr $broadcast_dest drop
        }
        chain output {
        }
}


---

include "nft-vars"
table filter {
        chain input {
                iifname $int_loopback accept
        }
        chain output {
                oifname $int_loopback accept
        }
}


---

include "nft-vars"
table filter {
        chain input {
                log prefix "INPUT packet dropped: " limit rate 3/second
       }
       chain output {
                log prefix "OUTPUT packet dropped: " limit rate 3/second
       }
}


---

include "nft-vars"
table filter {
        chain input {
                type filter hook input priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}


---

include "nft-vars"
table filter {
        chain input {
        }
        chain output {
                tcp dport {21,22,80,110,143,993,995,443} tcp sport $ports_unpriv accept
                ip daddr $server_smtp tcp dport 25 tcp sport $ports_unpriv accept
        }
}


---

include "nft-vars"
table filter {
        chain input {
                #WYBIERZ ACCEPT LUB DROP!
                ip daddr $ip_external tcp sport $ports_unpriv tcp dport {22} [ accept | drop ]
        }
        chain output {
        }
}

