Raspberry Pi brandvägg och Intrusion Detection System (11 / 14 steg)
Steg 11: Brandväggsinställningar
Om du inte vill att säkerhetsnivå, finns det också ett enklare brandvägg skript som är i grunden "ställa in och glömma".
Du kan välja mellan firewall.advanced eller firewall.simple, och sedan anpassa den. Krediter gå till Guillaume Kaddouch
A - avancerade regeluppsättning
Detta skript i princip gör följande:
-Blockerar inkommande/utgående ogiltiga TCP flaggor (även från etablerade flöden)
-Optimerar DNS-frågor (IP TOS field)
-Identifierar trafik av flödestyp, och sedan matcha det mot en regeluppsättning
-Lägger till slumpmässighet i NAT processen
-Endast tillåta några utgående standardportar (http, https, ftp)
-Loggar exakt vad tappas och undvika log flood
-Droppar för inkommande paket med låg TTL (kan betyda en ttl utgången attack eller en traceroute)
-Identifiera och blockera utgående malware anslutningar
$ sudo touch /etc/firewall.advanced
$ sudo touch /etc/firewall.flows
$ sudo chmod u + x /etc/firewall.*
Flöden identifiering är en lista över regler styra trafiken till matchande anpassad kedjan (t.ex. FORWARD_OUT, FORWARD_IN, LAN_IN, etc...). Denna lista över regler, en gång felsökning och validerade, bör inte ändras efteråt. Också, eftersom de använder lite utrymme i skriptet och kunde vara tråkigt att läsa, det gör filterregler svårare att läsa om de är på samma manus. Det är därför jag flytta dem i en separat fil, som jag bara ringa från den huvudsakliga skriften:
$ sudo vi /etc/firewall.flows
#! / bin/bash
# "Datum augusti 2012
# "Författare: Guillaume Kaddouch
# "Version: flödar 1.0
#######################
# FLÖDE ID #
##############################################################################################
# NAT_OUT
iptables -t nat - en POSTROUTING -o $LAN -p tcp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --dst-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j NAT_OUT
iptables -t nat - en POSTROUTING -o $LAN -p udp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --dst-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j NAT_OUT
iptables -t nat - en POSTROUTING -o $LAN -p icmp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --dst-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j NAT_OUT
# FORWARD_OUT
iptables - en framåt -i $LAN -p tcp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --src-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j FORWARD_OUT
iptables - en framåt -i $LAN -p udp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --src-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j FORWARD_OUT
iptables - en framåt -i $LAN -p icmp--ipv4 -m iprange \
--src-range $DHCP_RANGE! --dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --src-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j FORWARD_OUT
# FORWARD_IN
iptables - en framåt -i $LAN -p tcp--ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --src-typ LOCAL\
-m state--ange etablerat sig, ANKNYTANDE -j FORWARD_IN
iptables - en framåt -i $LAN -p udp--ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --src-typ LOCAL\
-m state--ange etablerat sig, ANKNYTANDE -j FORWARD_IN
iptables - en framåt -i $LAN -p icmp--ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype--pkt-typ unicast -m addrtype! --src-typ LOCAL\
-m state--ange etablerat sig, ANKNYTANDE -j FORWARD_IN
# LAN_IN
iptables - A INPUT -i $LAN -p tcp--ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype--pkt-typ unicast -m addrtype--dst-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j LAN_IN
iptables - A INPUT -i $LAN -p udp--ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype--pkt-typ unicast -m addrtype--dst-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j LAN_IN
iptables - A INPUT -i $LAN -p icmp--ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype--pkt-typ unicast -m addrtype--dst-typ LOCAL\
-m state--state nya, etablerat sig, ANKNYTANDE -j LAN_IN
# LAN_BROADCAST
iptables - A INPUT -i $LAN -p tcp--ipv4 \
! -d $RSS -m pkttype--pkt-typ broadcast -m addrtype--dst-typ BROADCAST\
-m state! --Ange ogiltig -j LAN_BROADCAST
iptables - A INPUT -i $LAN -p udp--ipv4 \
! -d $RSS -m pkttype--pkt-typ broadcast -m addrtype--dst-typ BROADCAST\
-m state! --Ange ogiltig -j LAN_BROADCAST
iptables - A INPUT -i $LAN -p icmp--ipv4 \
! -d $RSS -m pkttype--pkt-typ broadcast -m addrtype--dst-typ BROADCAST\
-m state! --Ange ogiltig -j LAN_BROADCAST
# INTERNET_GATEWAY
iptables - A INPUT -i $LAN -p tcp--ipv4 \
! -s $LAN_SUBNET -d $RSS -m pkttype--pkt-typ unicast -m addrtype--dst-typ LOCAL\
-m state--ange etablerat sig, ANKNYTANDE -j INTERNET_GATEWAY
iptables - A INPUT -i $LAN -p udp--ipv4! \
-s $LAN_SUBNET -d $RSS -m pkttype--pkt-typ unicast -m addrtype--dst-typ LOCAL\
-m state--ange etablerat sig, ANKNYTANDE -j INTERNET_GATEWAY
iptables - A INPUT -i $LAN -p icmp--ipv4 \
! -s $LAN_SUBNET -d $RSS -m pkttype--pkt-typ unicast -m addrtype--dst-typ LOCAL\
-m state--ange etablerat sig, ANKNYTANDE -j INTERNET_GATEWAY
# GATEWAY_LAN
iptables - en OUTPUT -o $LAN -p tcp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype--pkt-typ unicast -m addrtype--dst-typ UNICAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_LAN
iptables - en OUTPUT -o $LAN -p udp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype--pkt-typ unicast -m addrtype--dst-typ UNICAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_LAN
iptables - en OUTPUT -o $LAN -p icmp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype--pkt-typ unicast -m addrtype--dst-typ UNICAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_LAN
# GATEWAY_BROADCAST
iptables - en OUTPUT -o $LAN -p tcp--ipv4 \
-s $RSS -m pkttype--pkt-typ broadcast -m addrtype--dst-typ BROADCAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_BROADCAST
iptables - en OUTPUT -o $LAN -p udp--ipv4 \
-s $RSS -m pkttype--pkt-typ broadcast -m addrtype--dst-typ BROADCAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_BROADCAST
iptables - en OUTPUT -o $LAN -p icmp--ipv4 \
-s $RSS -m pkttype--pkt-typ broadcast -m addrtype--dst-typ BROADCAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_BROADCAST
# GATEWAY_INTERNET
iptables - en OUTPUT -o $LAN -p tcp--ipv4 \
-s $RSS! -d $LAN_SUBNET -m pkttype--pkt-typ unicast -m addrtype--dst-typ UNICAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_INTERNET
iptables - en OUTPUT -o $LAN -p udp--ipv4 \
-s $RSS! -d $LAN_SUBNET -m pkttype--pkt-typ unicast -m addrtype--dst-typ UNICAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_INTERNET
iptables - en OUTPUT -o $LAN -p icmp--ipv4 \
-s $RSS! -d $LAN_SUBNET -m pkttype--pkt-typ unicast -m addrtype--dst-typ UNICAST\
-m state--state nya, etablerat sig, ANKNYTANDE -j GATEWAY_INTERNET
##############################################################################################
Nu skapar vi filtrering regler skriptet talade tidigare:
$ sudo vi /etc/firewall.advanced
#! / bin/bash
# "Datum augusti 2012
# "Författare: Guillaume Kaddouch
# "URL: http://networkfilter.blogspot.com
# "Version: avancerad 1.0
ECHO "Inställningen upp variabler"
# VARIABLER ATT ANPASSA ATT MATCHA DITT NÄTVERK
LAN = "eth0"
LAN_SUBNET="192.168.1.0/24"
DHCP_RANGE = "192.168.1.10-192.168.1.20"
DNS_SERVER1 = "8.8.8.8"
DNS_SERVER2 = "208.67.222.222"
RSS = "192.168.1.3"
MODEM_ROUTER = "192.168.1.1"
UNPRIV_PORTS = "1024:65535"
SSH = "15507"
NTP_SERVER = "65.55.21.22"
ECHO "Flushing befintliga kedjor och regler..."
# FLUSHING kedjor & regler
iptables -t filtrera -F
iptables -t filtrera -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangel -F
iptables -t mangel -X
ECHO "Inrätta standardprinciperna"
# STANDARD PRINCIPER
iptables -P INPUT släppa
iptables -P utgång släppa
iptables -P släppa fram
# LOOPBACK
iptables - A INPUT -i lo -j accepterar
iptables - en mata -o lo -j accepterar
ECHO "Skapa kedjor"
# KEDJOR
iptables -N FORWARD_OUT
iptables -N FORWARD_IN
iptables -N LAN_IN
iptables -N LAN_BROADCAST
iptables -N GATEWAY_LAN
iptables -N GATEWAY_BROADCAST
iptables -N GATEWAY_INTERNET
iptables -N INTERNET_GATEWAY
iptables -t nat -N NAT_OUT
# KEDJAN FÖR ATT KONTROLLERA, LOGGA IN OCH OPTIMERA
iptables -N CHECK_TCP_FLAGS
iptables -N LOGDROP_TCP_FLAGS
iptables -N LOGDROP_MALWARE
iptables -N LOGDROP_BADPORT
iptables -t mangel -N FAST_DNS
ECHO "Lastning regler"
#################################
# PROTOKOLL optimering & Kontrollera #
##############################################################################################
iptables - en framåt -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables - A INPUT -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables -t mangel - en OUTPUT -o $LAN -p tcp--ipv4 -s $RSS -m pkttype--pkt-typ unicast---dport domän -m \
statligt--staten nya, etablerat sig, ANKNYTANDE -j FAST_DNS
iptables -t mangel - en OUTPUT -o $LAN -p udp--ipv4 -s $RSS -m pkttype--pkt-typ unicast---dport domän -m \
statligt--staten nya, etablerat sig, ANKNYTANDE -j FAST_DNS
##############################################################################################
###################
# CHECK_TCP_FLAGS #
##############################################################################################
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor ACK, FIN FIN -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor ACK, PSH PSH -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor ACK, URG URG -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor FIN, RST FIN, RST -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor SYN, FIN SYN, FIN -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor SYN, RST SYN, RST -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor allt allt -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla NONE -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla SYN, FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla SYN, RST, ACK, FIN, URG -j LOGDROP_TCP_FLAGS
iptables - en LOGDROP_TCP_FLAGS -m gräns--limit 1/s - j Stock--log-tcp-alternativ--log-prefix \
"[IPTABLES: DÅLIG TCP FLAGGOR]"
iptables - en LOGDROP_TCP_FLAGS -j tappar
##############################################################################################
############
# FAST_DNS #
##############################################################################################
iptables -t mangel - en FAST_DNS -p udp -d $DNS_SERVER1 -j TOS--set-tos och minimera fördröjning
iptables -t mangel - en FAST_DNS -p udp -d $DNS_SERVER2 -j TOS--set-tos och minimera fördröjning
iptables -t mangel - en FAST_DNS -p tcp -d $DNS_SERVER1 -j TOS--set-tos och minimera fördröjning
iptables -t mangel - en FAST_DNS -p tcp -d $DNS_SERVER2 -j TOS--set-tos och minimera fördröjning
##############################################################################################
# FLÖDE ID #
Källa "/ etc/firewall.flows"
############
# NAT_OUT #
##############################################################################################
iptables -t nat - en NAT_OUT -j maskerad--random
##############################################################################################
###############
# FRAM UT #
##############################################################################################
# Potentiella Malware trafik
# Om inte sjunkit här, de skulle har blockerats av standardprincipen
# Dock passa vi på att spara dem i en "bad_traffic" tabell
# Den här tabellen ger oss möjlighet att blockera LAN värdar försöker komma åt för många malware portar
# Således vara potentiellt smittade (och som kräver en antivirus analys)
#
# Så snart en LAN värd har drabbat 5 gånger reglerna nedan inom 2mn, släpp alla framåt ut från värden
iptables - en FORWARD_OUT -p tcp -m senaste--namnge bad_traffic--rcheck--rttl--hitcount 5--sekunder 120 -j \
LOGDROP_MALWARE
iptables - en FORWARD_OUT -p tcp--dport 139 - m senaste--namnge bad_traffic--ange -j LOGDROP_BADPORT
iptables - en FORWARD_OUT -p tcp--dport 445 - m senaste--namnge bad_traffic--ange -j LOGDROP_BADPORT
iptables - en FORWARD_OUT -p tcp--dport 135 - m senaste--namnge bad_traffic--ange -j LOGDROP_BADPORT
iptables - en FORWARD_OUT -p tcp--dport 6667 - m senaste--namnge bad_traffic--ange -j LOGDROP_BADPORT
iptables - en FORWARD_OUT -p tcp--dport 1433:1434 -m senaste--namnge bad_traffic--ange -j LOGDROP_BADPORT
iptables - en FORWARD_OUT -p udp--dport 1433:1434 -m senaste--namnge bad_traffic--ange -j LOGDROP_BADPORT
iptables - en LOGDROP_BADPORT -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: dåliga PORT]"
iptables - en LOGDROP_BADPORT -j tappar
iptables - en LOGDROP_MALWARE -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: infekterade värd]"
iptables - en LOGDROP_MALWARE -j tappar
# Tillåtna portar
iptables - en FORWARD_OUT -p tcp--sport $UNPRIV_PORTS -m multiport--dports ftp, http, https, 8080 -j accepterar
# Tillåt etablerade och relaterade anslutningar till andra hamnar, exempelvis som krävs för FTP
iptables - en FORWARD_OUT -p tcp--sport $UNPRIV_PORTS--dport $UNPRIV_PORTS -m state--state \
ETABLERADE, relaterade -j accepterar
# NTP förfrågningar (ändra variabeln i början)
iptables - en FORWARD_OUT -p udp -d $NTP_SERVER--sport ntp--dport ntp -j accepterar
# Echo request
iptables - en FORWARD_OUT -p icmp -m icmp--icmp-typ echo-request - j accepterar
# Avvisa trafik vi inte vill, många alternativ nedan (skapa motsvarande variabler)
# iptables - en FORWARD_OUT -p tcp--dport $port_of_a_host_to_block -j AVVISA--avvisa-med \
# icmp-host-förbjuden
# iptables - en FORWARD_OUT -d $subnet_to_block -j AVVISA--avvisa-med icmp-net-förbjuden
# Blockera & logga allt annat
iptables - en FORWARD_OUT -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: FORWARD_OUT]"
iptables - en FORWARD_OUT -j tappar
##############################################################################################
##############
# FORWARD_IN #
##############################################################################################
# Tillåta vidarebefordran av inkommande etablerade eller relaterade flöden, med en TTL > 10
iptables - en FORWARD_IN -m ttl--ttl-gt 10 -j accepterar
# Blockera & logga allt annat
iptables - en FORWARD_IN -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: FORWARD_IN]"
iptables - en FORWARD_IN -j tappar
##############################################################################################
##########
# LAN_IN #
##############################################################################################
# Låt DHCP-sändningar från insidan
iptables - A LAN_IN -i $LAN -p udp--sport 67:68--dport 67:68 -j accepterar
# Tillåta DNS-frågor från LAN till hallon säkerhet Systema,
iptables - A LAN_IN -i $LAN -p udp--sport $UNPRIV_PORTS--dport 53 -j accepterar
iptables - A LAN_IN -i $LAN -p tcp--sport $UNPRIV_PORTS--dport 53 -j accepterar
# SSH-anslutningar
# (du kan lägga till en kontroll till den avlägsna OS)
iptables - A LAN_IN -i $LAN -p tcp--sport $UNPRIV_PORTS--dport $SSH -j accepterar
# ICMP LAN (typ 3 = onåbar [destination|port|protocol])
iptables - en LAN_IN -p icmp -m icmp--icmp-typ echo-request - j accepterar
iptables - en LAN_IN -p icmp -m icmp--icmp-typ 3 -j accepterar
# Blockera & logga allt annat
iptables - en LAN_IN -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: LAN_IN]"
iptables - en LAN_IN -j tappar
##############################################################################################
##################
# LAN_BROADCAST #
##############################################################################################
# Låt DHCP-sändningar från insidan
iptables - A LAN_BROADCAST -i $LAN -p udp--sport 67:68--dport 67:68 -j accepterar
# Blockera allt annat (bry dig inte att logga broadcast-trafik)
iptables - en LAN_BROADCAST -j tappar
##############################################################################################
###########################
# INTERNET_GATEWAY #
##############################################################################################
# Tillåta redan etablerade anslutningar från RSS till Internet att komma tillbaka till RSS
iptables - A INTERNET_GATEWAY -p alla -j accepterar
##############################################################################################
########################
# CHAINE GATEWAY_LAN #
##############################################################################################
# Block potentiella ICMP redirect skickas från oss (kan bero på en felkonfigurerad sysctl)
iptables - en GATEWAY_LAN -p icmp -m icmp--icmp-typ omdirigera -m gräns--limit 1/s - j Stock--log-prefix \
"[IPTABLES: ICMP REDIRECT]"
iptables - en GATEWAY_LAN -p icmp -m icmp--icmp-typ omdirigera -j tappar
# Tillåta LAN etablerade anslutningar till hallon att komma tillbaka till LAN
iptables - en GATEWAY_LAN -p tcp -m state--ange etablerat sig, ANKNYTANDE -j accepterar
iptables - en GATEWAY_LAN -p udp -m state--ange etablerat sig, ANKNYTANDE -j accepterar
iptables - en GATEWAY_LAN -p icmp -m state--ange etablerat sig, ANKNYTANDE -j accepterar
# Låt DHCP med trafik
iptables - en GATEWAY_LAN -p udp--sport 67:68--dport 67:68 -j accepterar
# Låt Raspi pinga LAN
iptables - ett GATEWAY_LAN -p icmp -m icmp--icmp-typ echo-request - m tillstånd--ny stat -j accepterar
# Blockera & logga allt annat
iptables - en GATEWAY_LAN -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: GATEWAY_LAN]"
iptables - en GATEWAY_LAN -j tappar
##############################################################################################
#####################
# GATEWAY_BROADCAST #
##############################################################################################
# Tillåta broadcast DHCP-svar från RSS
iptables - en GATEWAY_BROADCAST -p udp--sport 67:68--dport 67:68 -j accepterar
# Blockera & logga allt annat
iptables - en GATEWAY_BROADCAST -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: GATEWAY_BROADCAST]"
iptables - en GATEWAY_BROADCAST -j tappar
##############################################################################################
####################
# GATEWAY_INTERNET #
##############################################################################################
# Tillåta nya anslutningar från hallon (nödvändigt för uppdateringar, installerar paket, etc...)
# Jag inte kör uppdateringar natten, därför finns det inget behov för att regeln ska vara aktiv 24/24
iptables - en GATEWAY_INTERNET -p tcp -m multiport--dports ftp, http, https -m tid--timestart 09:00--tiden \
23:00 -j accepterar
# Résolutions DNS-
iptables - en GATEWAY_INTERNET -p udp--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domän -j accepterar
iptables - en GATEWAY_INTERNET -p udp--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domän -j accepterar
iptables - en GATEWAY_INTERNET -p tcp--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domän -j accepterar
iptables - en GATEWAY_INTERNET -p tcp--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domän -j accepterar
# Händer när omlastning brandväggsregler
iptables - en GATEWAY_INTERNET -p icmp -m icmp--icmp-typ port unreachable - d $DNS_SERVER1 -j tappar
iptables - en GATEWAY_INTERNET -p icmp -m icmp--icmp-typ port unreachable - d $DNS_SERVER2 -j tappar
# Låt NTP
iptables - en GATEWAY_INTERNET -p udp--dport ntp -j accepterar
# Blockera & logga allt annat
iptables - en GATEWAY_INTERNET -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: GATEWAY_INTERNET]"
iptables - en GATEWAY_INTERNET -j tappar
##############################################################################################
## REGLER SLUTET ##
rules_number = "egrep '\-j' /etc/firewall.advanced | WC -l '
flows_number = "egrep '\-j' /etc/firewall.flows | WC -l '
total_rules = $((rules_number + flows_number))
ECHO ""
ECHO "$total_rules regler laddade."
ECHO ""
B - grundläggande regeluppsättning
Detta skript i princip gör följande:
-Blockerar inkommande/utgående ogiltiga TCP flaggor (även från etablerade flöden)
-Optimerar DNS-frågor (IP TOS field)
-Lägger till slumpmässighet i NAT processen
-Droppar för inkommande paket med låg TTL (kan betyda en ttl utgången attack eller en traceroute)
Denna regeluppsättning kan allt från nätverket vidarebefordras på Internet, vilket teoretiskt inte kräver ändras efteråt. Om du vill lägga till ett extra lager av nätverkssäkerhet för din mormor eller föräldrar till exempel, men att man inte kan förvänta sig att ändra iptables rules(!), tror jag att denna regeluppsättning är lämpligare.
$ sudo vi /etc/firewall.simple
#! / bin/bash
# Datum augusti 2012
# Författare: Guillaume Kaddouch
# URL: http://networkfilter.blogspot.com
# Version: Standard 1,0
ECHO "Inställningen upp variabler"
# VARIABLER ATT ANPASSA ATT MATCHA DITT NÄTVERK
LAN = "eth0"
LAN_SUBNET="192.168.1.0/24"
DHCP_RANGE = "192.168.1.10-192.168.1.20"
DNS_SERVER1 = "8.8.8.8"
DNS_SERVER2 = "208.67.222.222"
RSS = "192.168.1.3"
MODEM_ROUTER = "192.168.1.1"
UNPRIV_PORTS = "1024:65535"
SSH = "15507"
NTP_SERVER = "65.55.21.22"
ECHO "Flushing befintliga kedjor och regler..."
# FLUSHING kedjor & regler
iptables -t filtrera -F
iptables -t filtrera -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangel -F
iptables -t mangel -X
ECHO "Inrätta standardprinciperna"
# STANDARD PRINCIPER
iptables -P INPUT släppa
iptables -P utgång släppa
iptables -P släppa fram
# LOOPBACK
iptables - A INPUT -i lo -j accepterar
iptables - en mata -o lo -j accepterar
ECHO "Skapa kedjor"
# KEDJAN FÖR ATT KONTROLLERA, LOGGA IN OCH OPTIMERA
iptables -N CHECK_TCP_FLAGS
iptables -N LOGDROP_TCP_FLAGS
iptables -t mangel -N FAST_DNS
ECHO "Lastning regler"
#################################
# PROTOKOLL optimering & Kontrollera #
##############################################################################################
iptables - en framåt -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables - A INPUT -i $LAN -p tcp--ipv4 -j CHECK_TCP_FLAGS
iptables -t mangel - en OUTPUT -o $LAN -p tcp--ipv4 -s $RSS -m pkttype--pkt-typ unicast---dport domän \
-m state--state nya, etablerat sig, ANKNYTANDE -j FAST_DNS
iptables -t mangel - en OUTPUT -o $LAN -p udp--ipv4 -s $RSS -m pkttype--pkt-typ unicast---dport domän \
-m state--state nya, etablerat sig, ANKNYTANDE -j FAST_DNS
##############################################################################################
###################
# CHECK_TCP_FLAGS #
##############################################################################################
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor ACK, FIN FIN -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor ACK, PSH PSH -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor ACK, URG URG -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor FIN, RST FIN, RST -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor SYN, FIN SYN, FIN -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor SYN, RST SYN, RST -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor allt allt -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla NONE -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla SYN, FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - en CHECK_TCP_FLAGS -p tcp--tcp-flaggor alla SYN, RST, ACK, FIN, URG -j LOGDROP_TCP_FLAGS
iptables - en LOGDROP_TCP_FLAGS -m gräns--limit 1/s - j Stock--log-tcp-alternativ--log-prefix \
"[IPTABLES: DÅLIG TCP FLAGGOR]"
iptables - en LOGDROP_TCP_FLAGS -j tappar
##############################################################################################
############
# FAST_DNS #
##############################################################################################
iptables -t mangel - en FAST_DNS -p udp -d $DNS_SERVER1 -j TOS--set-tos och minimera fördröjning
iptables -t mangel - en FAST_DNS -p udp -d $DNS_SERVER2 -j TOS--set-tos och minimera fördröjning
iptables -t mangel - en FAST_DNS -p tcp -d $DNS_SERVER1 -j TOS--set-tos och minimera fördröjning
iptables -t mangel - en FAST_DNS -p tcp -d $DNS_SERVER2 -j TOS--set-tos och minimera fördröjning
##############################################################################################
#######
# NAT #
##############################################################################################
iptables -t nat - en POSTROUTING -o $LAN! -d $LAN_SUBNET -m state--state nya, etablerade, ANKNYTANDE -j MASQUERADE\
--random
##############################################################################################
###########
# FRAMÅT #
##############################################################################################
# Tillåt utgående framåtriktat av något samband
iptables - en framåt -p tcp -i $LAN -s $LAN_SUBNET! -d $LAN_SUBNET -m state--state NEW, etablerade, besläktade med \
-j accepterar
iptables - en framåt -p udp -i $LAN -s $LAN_SUBNET! -d $LAN_SUBNET -m state--state NEW, etablerade, besläktade med \
-j accepterar
iptables - en framåt -p icmp -i $LAN -s $LAN_SUBNET! -d $LAN_SUBNET -m state--state NEW, etablerade, besläktade med \
-j accepterar
# Tillåta inkommande fram av etablerade eller relaterade anslutningar med TTL större än 10
iptables - en framåt -p tcp -i $LAN! -s $LAN_SUBNET -d $LAN_SUBNET -m state--ange etablerat sig, med -m \
TTL--ttl-gt 10 -j accepterar
iptables - en framåt -p udp -i $LAN! -s $LAN_SUBNET -d $LAN_SUBNET -m state--ange etablerat sig, med -m \
TTL--ttl-gt 10 -j accepterar
iptables - en framåt -p icmp -i $LAN! -s $LAN_SUBNET -d $LAN_SUBNET -m state--ange etablerat sig, med -m \
TTL--ttl-gt 10 -j accepterar
##############################################################################################
#########
# INPUT #
##############################################################################################
# Låt DHCP-sändningar från insidan
iptables - A INPUT -i $LAN -p udp -s $LAN_SUBNET--sport 67:68--dport 67:68 -j accepterar
# Tillåta DNS-frågor från LAN till hallon
iptables - A INPUT -i $LAN -p udp -s $LAN_SUBNET--sport $UNPRIV_PORTS -d $RSS--dport 53 -j accepterar
iptables - A INPUT -i $LAN -p tcp -s $LAN_SUBNET--sport $UNPRIV_PORTS -d $RSS--dport 53 -j accepterar
# SSH-anslutningar
iptables - A INPUT -i $LAN -p tcp -s $LAN_SUBNET--sport $UNPRIV_PORTS -d $RSS--dport $SSH -j accepterar
# ICMP LAN (typ 3 = onåbar [destination|port|protocol])
iptables - A INPUT -p icmp -m icmp--icmp-typ echo-request - $LAN_SUBNET -d $RSS -Svensson acceptera
iptables - A INPUT -p icmp -m icmp--icmp-typ 3 -s $LAN_SUBNET -d $RSS -j accepterar
# Tillåta redan etablerade anslutningar från hallon till Internet att komma tillbaka till itl
iptables - A INPUT -i $LAN! -s $LAN_SUBNET -d $RSS -p tcp -m state--ange etablerat sig, ANKNYTANDE -j accepterar
iptables - A INPUT -i $LAN! -s $LAN_SUBNET -d $RSS -p udp -m state--ange etablerat sig, ANKNYTANDE -j accepterar
iptables - A INPUT -i $LAN! -s $LAN_SUBNET -d $RSS -p icmp -m state--ange etablerat sig, ANKNYTANDE -j accepterar
##############################################################################################
###########
# UTGÅNG #
##############################################################################################
# Block potentiella ICMP redirect skickas från oss (kan bero på en felkonfigurerad sysctl)
iptables - en OUTPUT -o $LAN -p icmp -m icmp--icmp-typ omdirigera -m gräns--gräns 1/s - j Stock--log-prefix \
"[IPTABLES: ICMP REDIRECT]"
iptables - en mata -o $LAN -p icmp -m icmp--icmp-typ omdirigera -j tappar
# Tillåta LAN etablerade anslutningar till Raspi att komma tillbaka till LAN
iptables - en OUTPUT -o $LAN -p tcp -s $RSS -d $LAN_SUBNET -m state--medlemsstat som etablerat sig, relaterade -j accepterar
iptables - en OUTPUT -o $LAN -p udp -s $RSS -d $LAN_SUBNET -m state--medlemsstat som etablerat sig, relaterade -j accepterar
iptables - en OUTPUT -o $LAN -p icmp -s $RSS -d $LAN_SUBNET -m state--medlemsstat som etablerat sig, relaterade -j accepterar
# Låt DHCP med trafik
iptables - en OUTPUT -o $LAN -p udp -s $RSS -d $LAN_SUBNET--sport 67:68--dport 67:68 -j accepterar
# Låt hallon pinga LAN
iptables - en OUTPUT -o $LAN -p icmp -m icmp--icmp-typ ekobegäran -s $RSS -d $LAN_SUBNET -m state \
--Ange nya -j accepterar
# Tillåta nya anslutningar från hallon (nödvändigt för uppdateringar, installerar paket, etc...)
iptables - en mata -o $LAN -p tcp -s $RSS! -d $LAN_SUBNET -m state--state NEW, etablerade, besläktade med \
-j accepterar
iptables - en mata -o $LAN -p udp -s $RSS! -d $LAN_SUBNET -m state--state NEW, etablerade, besläktade med \
-j accepterar
iptables - en mata -o $LAN -p icmp -s $RSS! -d $LAN_SUBNET -m state--state NEW, etablerade, besläktade med \
-j accepterar
# DNS-förfrågningar
iptables - en OUTPUT -o $LAN -p udp -s $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domän -j accepterar
iptables - en OUTPUT -o $LAN -p udp -s $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domän -j accepterar
iptables - en OUTPUT -o $LAN -p tcp -s $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domän -j accepterar
iptables - en OUTPUT -o $LAN -p tcp -s $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domän -j accepterar
# Låt NTP
iptables - en mata -o $LAN -p udp--dport ntp -s $RSS -j accepterar
##############################################################################################
iptables - A INPUT -m gräns--gräns 1/s - j Stock--log-prefix "[IPTABLES: INPUT droppe]"
iptables - en mata in -j tappar
iptables - en OUTPUT -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: utdata droppe]"
iptables - en mata -j tappar
iptables - en framåt -m gräns--limit 1/s - j Stock--log-prefix "[IPTABLES: framåt droppe]"
iptables - en framåt -j tappar
## REGLER SLUTET ##
rules_number = "egrep '\-j' /etc/firewall.simple | WC -l '
ECHO ""
ECHO "$rules_number regler laddade."
ECHO ""
Dessa två regeluppsättningar är bara exempel, om du har en klar använda din egen.
För att ladda iptables regler vid start, är ett sätt att göra som följer:
$ sudo vi /etc/rc.local
ECHO "Lastning iptables regler"
etc/brandvägg. VERSION >> / dev/null
Ersätta versionen med "avancerade" eller "enkla", utan citationstecken, beroende på det skript som du använder.
Om du vill visa varningar i realtid, skriver du följande:
$ sudo tail -f /var/log/iptables.log