it:server:firewall-routovani

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:server:firewall-routovani [2022/11/18 22:32] Petr Nosekit:server:firewall-routovani [2025/02/05 15:58] (aktuální) Petr Nosek
Řádek 60: Řádek 60:
 DEFAULT_FORWARD_POLICY="ACCEPT" DEFAULT_FORWARD_POLICY="ACCEPT"
 IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns" IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"
 +</code>
 +
 +Pokud bych chtěl vypnout IPV6, tak v souboru nastavím:
 +<code bash>
 +IPV6=no
 </code> </code>
  
Řádek 144: Řádek 149:
 </code> </code>
  
 +Ochrana proti ping flood
 +
 +<code bash>
 +# Prevent ping flood
 +# https://bookofzeus.com/harden-ubuntu/hardening/protect-ddos-attacks/
 +-A ufw-before-input -p icmp -m limit --limit 6/s --limit-burst 1 -j ACCEPT
 +-A ufw-before-input -p icmp -j DROP
 +</code>
 +
 +Omezení skenování portů
 +<code bash>
 +# block port scan
 +-A ufw-before-input -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
 +-A port-scan -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j LOG --log-prefix "[PORT SCAN] "
 +-A port-scan -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
 +-A port-scan -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "XMAS scan: "
 +-A port-scan -p tcp --tcp-flags ALL FIN,PSH,URG -j LOG --log-prefix "XMAS B: "
 +-A port-scan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-prefix "XMAS C: "
 +-A port-scan -j DROP
 +</code>
 ==== Spuštění firewallu ==== ==== Spuštění firewallu ====
  
Řádek 153: Řádek 178:
 </code> </code>
  
 +
 +===== IP blacklist pomocí ipset =====
 +
 +Nejprve jsem vytvořil si v libovolné složce vytvořím tuto strukturu:
 +
 +<code bash>
 +-rwxrwx--- 1 root root   1771 21. kvě 11.52 ip-blacklist
 +-rw-r--r-- 1 root root 520806 18. lis 23.04 ip-blacklist.conf
 +-rw-r--r-- 1 root root     16 18. lis 23.04 ip-blacklist-custom.conf
 +-rw-r-xr-x 1 root root    289 20. kvě  2022 ipset-blacklist
 +drwxr-xr-x 2 root root   4096 28. led  2019 lists
 +</code>
 +
 +Obsah souboru **ip-blacklist**. Je vidět, že některé věci mám pro nefunkčnost zakomentované. Soubor má nastavena práva na spouštění. Skript stáhne z internetu z různých blocklistů problematické IP adresy a zkoncentruje je do jednoho souboru.
 +<code bash>
 +#!/bin/bash
 +
 +# you can ban country
 +# "http://ipverse.net/ipblocks/data/countries/xx.zone" # Ban an entire country, see http://ipverse.net/ipblocks/data/countries/
 +
 +IP_TMP=/tmp/ip.tmp
 +IP_BLACKLIST=/root/scripts/ip-blacklist/ip-blacklist.conf
 +IP_BLACKLIST_TMP=/tmp/ip-blacklist.tmp
 +IP_BLACKLIST_CUSTOM=/root/scripts/ip-blacklist/ip-blacklist-custom.conf # optional
 +LISTS_FOLDER=/root/scripts/ip-blacklist/lists
 +
 +#list="chinese nigerian russian lacnic exploited-servers" 
 +list="chinese nigerian lacnic" 
 +
 +BLACKLISTS=(
 +"http://www.projecthoneypot.org/list_of_ips.php?t=d&amp;rss=1" # Project Honey Pot Directory of Dictionary Attacker IPs
 +"http://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1" # TOR Exit Nodes
 +"http://www.maxmind.com/en/anonymous_proxies" # MaxMind GeoIP Anonymous Proxies
 +"http://danger.rulez.sk/projects/bruteforceblocker/blist.php" # BruteForceBlocker IP List
 +"http://www.spamhaus.org/drop/drop.lasso" # Spamhaus Don't Route Or Peer List (DROP)
 +"http://cinsscore.com/list/ci-badguys.txt" # C.I. Army Malicious IP List
 +"http://lists.blocklist.de/lists/all.txt" # blocklist.de attackers
 +)
 +
 +
 +#cd $LISTS_FOLDER && rm $LISTS_FOLDER/*
 +
 +
 +for i in "${BLACKLISTS[@]}"
 +do
 + curl -s "$i" > $IP_TMP
 + grep -Po '(?:\d{1,3}\.){3}\d{1,3}(?:/\d{1,2})?' $IP_TMP >> $IP_BLACKLIST_TMP
 +done
 +
 +#for i in `echo $list`; do
 + # Download
 +# wget --quiet http://www.wizcrafts.net/$i-iptables-blocklist.html
 + # Grep out all but ip blocks
 +# cat $i-iptables-blocklist.html | grep -v \< | grep -v \: | grep -v \; | grep -v \# | grep -v \" | grep [0-9] > $i.txt
 + # Consolidate blocks into master list
 +# cat $i.txt >> $IP_BLACKLIST_TMP
 +#done
 +
 +cat $IP_BLACKLIST_CUSTOM >> $IP_BLACKLIST_TMP
 +
 +sort $IP_BLACKLIST_TMP -n | uniq > $IP_BLACKLIST
 +rm $IP_BLACKLIST_TMP
 +wc -l $IP_BLACKLIST
 +</code>
 +
 +Zároveň jsem vytvořil soubor **ip-blacklist_custom.conf** do kterého uvádím IP adresy, které chci trvale blokovat. Ještě je potřeba vytvořit skript **ipset_blacklist**:
 +
 +<code bash>
 +#!/bin/bash
 +
 +IP_BLACKLIST=/root/scripts/ip-blacklist/ip-blacklist.conf
 +
 +IPSET=/usr/sbin/ipset
 +
 +$IPSET list blacklist
 +
 +if [ $? -ne 0 ]
 +        then $IPSET create blacklist hash:net
 +fi
 +
 +$IPSET flush blacklist
 +egrep -v "^#|^$" $IP_BLACKLIST | while IFS= read -r ip
 +do
 +  $IPSET add blacklist $ip
 +done
 +
 +</code>
 +
 +Poslední co zbývá je zajistit, aby se oba skripty spouštěli alespoň 1x týdně. K tomu vytvořím skript **/etc/cron.weekly/blacklistip-update**. Zároveň musí být skript spustitelný - spuštěním je dobré ho také otestovat. Zároveň stahování blacklistu z internetu chci spouštět jako neprivilegovaný uživatel. Zbytek musí spouštět root.
 +
 +<code bash>
 +#!/bin/bash
 +
 +SCRIPT_FOLDER=/etc/scripts/ip-blacklist
 +
 +cd $SCRIPT_FOLDER
 +
 +su - neprivilegovany_user -c "$SCRIPT_FOLDER/ip-blacklist" 2>&1 >/dev/null && ./ipset-blacklist  2>&1 >/dev/null
 +
 +</code>
 +
 +
 +===== Blokování vybrané komunikace =====
 +
 +Chtěl jsem zablokovat část komunikace, která přichází z vnitřní sítě do internetu. Trochu jsem si naběhnul, protože tam se musí pracovat s blokování forwardowané komunikace. 
 +
 +Editoval jsem soubor **/etc/ufw/before.rules** a přidal tato pravidla:
 +
 +<code>
 +# Blocking forwarded communication
 +-A ufw-before-forward -s 192.168.1.80 -p tcp --dport 8080 -j LOG --log-prefix "[BLOCKED] "
 +-A ufw-before-forward -s 192.168.1.80 -p tcp -j LOG --log-prefix "[BLOCKED] "
 +-A ufw-before-forward -s 192.168.1.80 -p udp -j LOG --log-prefix "[BLOCKED] "
 +-A ufw-before-forward -s 192.168.1.80 -p tcp --dport 8080 -j DROP
 +-A ufw-before-forward -s 192.168.1.80 -p tcp -j DROP
 +-A ufw-before-forward -s 192.168.1.80 -p udp -j DROP
 +</code>
 +
 +Nejprve jsem zkoušel blokovat konkrétní port a nakonec jsem zablokoval všechno. Samozřejmě je možné si vybrat - nemusí se to kombinovat.
 +
 +Pokud je nějaké spojení již navázané, tak reload firewallu nemusí hned pomoct. Proto jsem ukončil navázaná připojení na dané IP adrese:
 +
 +<code bash>
 +conntrack -D -s 192.168.1.80
 +</code>
  
  • it/server/firewall-routovani.1668810760.txt.gz
  • Poslední úprava: 2022/11/18 22:32
  • autor: Petr Nosek