it-swarm-eu.dev

Tipy pro bezpečné iptables konfigurovat na obranu před útoky. (strana klienta!)

Vlastní příklady:

###############
# KERNEL PARAMETER CONFIGURATION

# PREVENT YOU SYSTEM FROM ANSWERING ICMP ECHO REQUESTS
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward

###############
# INPUT

# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j DROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j DROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j DROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

Můžeme shromáždit více skvělých nápadů souvisejících s iptables na ochranu klientů před útoky? Například: stolní počítač Ubuntu 11.04 „brání před útoky“ ~ laskavá pravidla.

Děkuju!

p.s .: samozřejmě:

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

p.s.2: na IPv4 i IPv6!

p.s.3: Nepotřebuju pravidla jako: povoluji pouze UDP a TCP na odchozím portu 53), chci jen "bránit" pravidla např .: portování, útoky atd.

p.s.4: PC je za routerem/NAT nebo připojeno „přímo k internetu“.

16
LanceBaynes

Uvědomuji si, že existují různé názory, ale jedním z hlavních postojů lidí, kteří skutečně vědí o vytváření sítí a zabezpečení, je to, že většina těchto pravidel iptables/sysctl je nadbytečná, ne-li škodlivá pro vás a síť. Někteří vás agresivně kritizují za porušení standardního chování bez důvodu. Nějaké příklady:

  • Standardní chování protokolu TCP/IP je ODMĚNIT, aby partner získal určitou radu o tom, co se děje. Možná někdo špatně zadal adresu URL nebo váš správce počítá hostitele nebo se někdo chce připojit k vašemu hernímu serveru, ale zadal nesprávný port. S DROP dostanou jen obskurní a nepříjemné timeouty.

  • Není třeba vyřazovat neplatné nebo chybně formátované pakety, všechny tyto útoky jsou staré deset let. Devs jádra Linuxu jsou mnohem aktuálnější než ty, které typy paketů jsou platné a které nikoli. "A co budoucí nedostatky", někteří by se mohli hádat. Jak víte, že budoucí chyba bude v manipulátoru TCP a nikoli v iptables TCP)?

  • Většina nastavení sysctl je výchozí. Pokud tomu tak není, obvykle existuje důvod. Například proč zakázat odesílání přesměrování? Považuji za velmi užitečné být informován kolegy o tom, že moje směrování je špatné, i když bych nikdy nereagoval ("accept_redirects", default = 0) automaticky.

  • S vašimi log_martians a dalšími pravidly protokolování doufám, že máte také kvótu na/var/log, nebo bude velkou zábavou vzdáleně zaplnit váš disk, obvykle zabíjet vaše služby/aplikace. Kromě toho byste měli použít rychlostní limit pro protokolování, jinak by někdo mohl tuto kvótu vyplnit, abyste zabránili tomu, aby se vám v auth.log nebo v jiných věcech zobrazovaly pokusy o SSH heslo. Čtete tyto protokoly na ploše? Doporučuji logcheck.

  • Zdá se, že blokujete ICMP. Kromě uvedeného problému DHCP to také zabraňuje objevu PMTU. Bez aplikace PMTUD získáte zvláštní chování při používání systému na místech s připojením DSL nebo jiným nastavením sítě. Některé pakety budou vypuštěny a nikdo vám neřekne proč.

  • Filtrování odchozích paketů je trochu nejasné. Nevěříte sami sobě? Obecně byste neměli spouštět žádné programy, kterým nemůžete věřit. Komoditní operační systémy většinou nejsou schopné izolovat tyto programy od odposlechu nebo dokonce manipulovat s daty jiných programů (např. Útoky načasování vyrovnávací paměti)

  • Chcete-li mít SYN, musíte NOVÉ pakety. Toto se přeruší, pokud bude připojení TCP) pokračovat i poté, co příslušný stav v iptables již vypršel. Nejste si jisti, jaké jsou výchozí časové limity, ale nějaký netfilter chlap na to varoval.

Kdy tedy má mít počítač firewall?

  • Pokud ve zprávě dojde k určitému útoku, na který je váš aktuální operační systém nebo servery zranitelné, a jednou z doporučených rychlých oprav je pravidlo brány firewall.

  • Musíte spouštět určité služby, které neumožňují bezpečnou konfiguraci. Většina z nich je a zbytek se nejlépe nahradí bezpečnými alternativami.

  • Máte složitější sítě s několika virtuálními počítači nebo rozhraními na ploše.

Prvním a nejdůležitějším nástrojem pro zabezpečení sítě je aktualizace systému. Za druhé, existuje netstat a nmap, které byste měli použít k vyhledání a potvrzení, jaké služby používáte. Pak jen deaktivujte ty, které nepotřebujete, nebo je omezte na 127.0.0.1.

Bonus, pokud si to přečtete tak daleko: Pakety jsou buď STANOVENÉ, SOUVISEJÍCÍ nebo NOVÉ, vše ostatní, co vyhodíte. Také vynecháte NOVÝ, pokud není nastaveno pouze SYN. Protože se zdá, že příznaky ZJIŠŤOVANÉ, SOUVISEJÍCÍ se kontrolují příznaky, jsou všechna pravidla --tcp-flags a také pravidla -f nadbytečná. Totéž platí pro OUTPUT, ale protože pro OUTPUT nejsou přijímány žádné pakety, na tom pravděpodobně nezáleží.

22
pepe

Byl bych opatrný při vytváření těchto součástí stejného souboru pravidel pro zařízení uvnitř důvěryhodné sítě a pro zařízení v DMZ. Použitím zde definovaných pravidel nebudete odpovídat na server DHCP a ptát se (ICMP echo), zda se vaše IP používá. To by mohlo vést k duplicitní situaci.

Vytvořil bych dvě různé sady pravidel, která se použijí na každý scénář. Něco jako to, co je uvedeno výše, je dobrým základem pro stroj DMZ), ale vytváří typické výzvy v typické síti LAN.

Také bych určitě doporučil přidat protokolování k Marťanům, odchozím kapkám, příchozím přerušeným spojům atd. To může být rozhodující pro řešení problémů a může to být užitečnější data pro vaše SIEM k jídlu.

6
Ori

Pro klientské PC připojené přímo k internetu pomocí ppp je dobrý start následující sada pravidel:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
ip6tables -A INPUT -j REJECT
  1. Umožňuje vše na interním lokálním rozhraní.
  2. Umožňuje jakýkoli paket, který je odpovědí na odeslaný paket. To zahrnuje pakety v rámci připojení TCP, odpovědi na pakety UDP, jako jsou malé dotazy DNS. U starého protokolu nezašifrovaného protokolu FTP to zahrnuje datové připojení, za předpokladu, že je načten ip_conntrack_ftp
  3. Odmítnout všechny pokusy o otevření tcp připojení zvnějšku
  4. Odmítněte všechny počáteční (neodpovídající) pakety udp.

Alternativně můžete použít -j DROP v posledních dvou pravidlech. Diskuze k tomuto tématu viz Odmítnout IP pakety s chybou ICMP nebo je prostě zrušit?

5

Takže pro rozpracování vaší otázky zde je to, co jsem běžel (a já budu používat vaše příklady s poznámkami, protože moje jsou do značné míry postrádány komentáře, které byly přeneseny na síťový fliter, protože IPCHAINS zemřel před všemi těmi lety.)

To by mohlo fungovat pro interní systém, ale často budete trávit čas konfigurací iptables pro nové aplikace, které nejsou brány v úvahu. Také jsem odstranil své pravidlo SSH, ale to je docela standardní pravidlo, které uvidíte (a v mnoha konfiguracích jediné, které uvidíte, abyste umožnili vstup).

###############
# VARIABLE DEFINITIONS
IPTABLES=/sbin/iptables

#Your DHCP Server for input of ICMP packets
DHCPSERVER=127.0.0.1
PUBIF=eth0

# KERNEL PARAMETER CONFIGURATION
#
# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#
# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#
# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
#
# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#
# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#
# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward
###############
$IPTABLES -F
###############
# LOGDROPPER
$IPTABLES -N LOGNDROP > /dev/null 2> /dev/null 
$IPTABLES -F LOGNDROP 
$IPTABLES -A LOGNDROP -j LOG --log-prefix "LOGNDROP: " 
$IPTABLES -A LOGNDROP -j DROP

###############
# LO allowance
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

###############
# Only bring what you need to survive
$IPTABLES -A INPUT -p icmp -s $DHCPSERVER -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p tcp --sport 68 --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p udp --sport 68 --dport 67 -j ACCEPT
###############
# INPUT
#
# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j LOGNDROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOGNDROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j LOGNDROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j LOGNDROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j LOGNDROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -j LOGNDROP
$IPTABLES -A FORWARD -j LOGNDROP

Pokud je vaše síť hlučná nebo pokud máte spoustu věcí, rychle se zaplní váš objem protokolu. Ale já jsem paranoidní a také mlátit chopy lidí, pokud vytvářejí konfigurace, které jsou zbytečně hlučné.

4
Ori