Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
it:server:firewall-routovani [2022/11/18 22:13] – [Editace /etc/ufw/before.rules] Petr Nosek | it:server:firewall-routovani [2025/02/05 15:58] (aktuální) – Petr Nosek | ||
---|---|---|---|
Řádek 60: | Řádek 60: | ||
DEFAULT_FORWARD_POLICY=" | DEFAULT_FORWARD_POLICY=" | ||
IPT_MODULES=" | IPT_MODULES=" | ||
+ | </ | ||
+ | |||
+ | Pokud bych chtěl vypnout IPV6, tak v souboru nastavím: | ||
+ | <code bash> | ||
+ | IPV6=no | ||
</ | </ | ||
Řádek 96: | Řádek 101: | ||
</ | </ | ||
+ | Dále jsem mezi filtry přidal filtr **: | ||
+ | |||
+ | <code bash> | ||
+ | # Don't delete these required lines, otherwise there will be errors | ||
+ | *filter | ||
+ | : | ||
+ | : | ||
+ | : | ||
+ | : | ||
+ | :port-scan - [0:0] | ||
+ | # End required lines | ||
+ | </ | ||
+ | |||
+ | A za pravidla | ||
+ | |||
+ | <code bash> | ||
+ | # allow all on loopback | ||
+ | -A ufw-before-input -i lo -j ACCEPT | ||
+ | -A ufw-before-output -o lo -j ACCEPT | ||
+ | </ | ||
+ | |||
+ | jsem přidával další pravidla. | ||
+ | |||
+ | <code bash> | ||
+ | # Blacklisting IP | ||
+ | #-I INPUT -m set --match-set blacklist src -j DROP | ||
+ | #-I INPUT -m set --match-set blacklist src -j LOG --log-prefix "IP Blacklisted: | ||
+ | -A ufw-before-input -m set --match-set blacklist src -j LOG --log-prefix "[IP BLACKLISTED] " | ||
+ | -A ufw-before-input -m set --match-set blacklist src -j DROP | ||
+ | </ | ||
+ | |||
+ | |||
+ | Tímto nastavením jsem se inspiroval pro webserver. V pravidlech je důležité změnit vstupní interface, který je uveden jako **wan**. | ||
+ | <code bash> | ||
+ | # Start CUSTOM UFW added by clusterednetworks 2020-10-20 | ||
+ | # https:// | ||
+ | # Limit to 20 concurrent connections on port 80/443 per IP | ||
+ | -A ufw-before-input -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP | ||
+ | -A ufw-before-input -p tcp --syn --dport 443 -m connlimit --connlimit-above 20 -j DROP | ||
+ | |||
+ | # Limit to 20 connections on port 80/443 per 2 seconds per IP | ||
+ | -A ufw-before-input -p tcp --dport 80 -i wan -m state --state NEW -m recent --set | ||
+ | -A ufw-before-input -p tcp --dport 80 -i wan -m state --state NEW -m recent --update --seconds 2 --hitcount 20 -j DROP | ||
+ | -A ufw-before-input -p tcp --dport 443 -i wan -m state --state NEW -m recent --set | ||
+ | -A ufw-before-input -p tcp --dport 443 -i wan -m state --state NEW -m recent --update --seconds 2 --hitcount 20 -j DROP | ||
+ | # End Custom UFW by clusterednetworks | ||
+ | </ | ||
+ | |||
+ | Ochrana proti ping flood | ||
+ | |||
+ | <code bash> | ||
+ | # Prevent ping flood | ||
+ | # https:// | ||
+ | -A ufw-before-input -p icmp -m limit --limit 6/s --limit-burst 1 -j ACCEPT | ||
+ | -A ufw-before-input -p icmp -j DROP | ||
+ | </ | ||
+ | |||
+ | Omezení skenování portů | ||
+ | <code bash> | ||
+ | # block port scan | ||
+ | -A ufw-before-input -p tcp --tcp-flags SYN, | ||
+ | -A port-scan -p tcp --tcp-flags SYN, | ||
+ | -A port-scan -p tcp --tcp-flags SYN, | ||
+ | -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, | ||
+ | -A port-scan -j DROP | ||
+ | </ | ||
==== Spuštění firewallu ==== | ==== Spuštění firewallu ==== | ||
Řádek 105: | Řádek 178: | ||
</ | </ | ||
+ | |||
+ | ===== 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ě | ||
+ | drwxr-xr-x 2 root root 4096 28. led | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | # " | ||
+ | |||
+ | IP_TMP=/ | ||
+ | IP_BLACKLIST=/ | ||
+ | IP_BLACKLIST_TMP=/ | ||
+ | IP_BLACKLIST_CUSTOM=/ | ||
+ | LISTS_FOLDER=/ | ||
+ | |||
+ | # | ||
+ | list=" | ||
+ | |||
+ | BLACKLISTS=( | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ) | ||
+ | |||
+ | |||
+ | #cd $LISTS_FOLDER && rm $LISTS_FOLDER/ | ||
+ | |||
+ | |||
+ | for i in " | ||
+ | do | ||
+ | curl -s " | ||
+ | grep -Po ' | ||
+ | done | ||
+ | |||
+ | #for i in `echo $list`; do | ||
+ | # Download | ||
+ | # wget --quiet http:// | ||
+ | # 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 | ||
+ | </ | ||
+ | |||
+ | 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=/ | ||
+ | |||
+ | IPSET=/ | ||
+ | |||
+ | $IPSET list blacklist | ||
+ | |||
+ | if [ $? -ne 0 ] | ||
+ | then $IPSET create blacklist hash:net | ||
+ | fi | ||
+ | |||
+ | $IPSET flush blacklist | ||
+ | egrep -v " | ||
+ | do | ||
+ | $IPSET add blacklist $ip | ||
+ | done | ||
+ | |||
+ | </ | ||
+ | |||
+ | Poslední co zbývá je zajistit, aby se oba skripty spouštěli alespoň 1x týdně. K tomu vytvořím skript **/ | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | SCRIPT_FOLDER=/ | ||
+ | |||
+ | cd $SCRIPT_FOLDER | ||
+ | |||
+ | su - neprivilegovany_user -c " | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== 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 **/ | ||
+ | |||
+ | < | ||
+ | # Blocking forwarded communication | ||
+ | -A ufw-before-forward -s 192.168.1.80 -p tcp --dport 8080 -j LOG --log-prefix " | ||
+ | -A ufw-before-forward -s 192.168.1.80 -p tcp -j LOG --log-prefix " | ||
+ | -A ufw-before-forward -s 192.168.1.80 -p udp -j LOG --log-prefix " | ||
+ | -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 | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | </ | ||