it:server:firewall-routovani

Toto je starší verze dokumentu!


Nastavení firewallu a routování

Popis nastavení pro router, kdy se budou z vnitřní sítě routovat packety do internetu.

Povolení forwardování ipv4 a v tuto chvíli vypnut ipv6

net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Reload systemd:

sysctl -p
ufw logging on
ufw logging medium
 
ufw allow 53 comment "open DNS port"
ufw allow 67,68/udp comment "open DHCP ports"
ufw allow 5555/tcp comment "open SoftEther"
ufw allow 500/udp comment "SoftEther"
ufw allow 4500/udp comment "SoftEther"
ufw allow 443/tcp comment "open SoftEther over HTTPS"
ufw limit 22/tcp comment "limited connection to ssh. Allows 6 connection per 30 sec"

Pokud na serveru spustím služby jako nextcloudpi, http server nebo monit, je potřeba to ve firewallu povolit.

ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 80 proto tcp comment "Open port 80 from internal network"
ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 443 proto tcp comment "Open port 443 from internal network"
ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 4443 proto tcp comment "Open port 4443 from internal network"
ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 2812 proto tcp comment "Open MONIT port 2812 from internal network"

Pro povolení sdílení Windows (Samba) je potřeba na firewallu povolit na interní síti následující porty:

ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 137 proto udp comment "Samba port 137/udp"
ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 138 proto udp comment "Samba port 138/udp"
ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 139 proto tcp comment "Samba port 139/tcp"
ufw allow in on br0 from 192.168.0.1/24 to 192.168.0.1/32 port 445 proto tcp comment "Samba port 445/tcp"

Zajisti, aby v souboru bylo následující nastavení:

DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="ACCEPT"
DEFAULT_FORWARD_POLICY="ACCEPT"
IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"

Pokud bych chtěl vypnout IPV6, tak v souboru nastavím:

IPV6=no

Zajisti, aby v souboru bylo následující nastavení:

net/ipv4/ip_forward=1

Na začátek souboru přidat:

*nat
:POSTROUTING ACCEPT [0:0]
 
# Forward traffic through eth0 - Change to match you out-interface
-A POSTROUTING -s 192.168.0.0/24 -o wan -j MASQUERADE
COMMIT

Na jiném serveru mám OpenVPN službu a pro tu bylo nutné v tomto souboru před všechna pravidla zase přidat následující kód:

# START OPENVPN RULES                                                                                                                                                                                              
# NAT table rules                                                                                                                                                                                                  
*nat                                                                                                                                                                                                               
:POSTROUTING ACCEPT [0:0]                                                                                                                                                                                          
# Allow traffic from OpenVPN client to eth0                                                                                                                                                                        
-A POSTROUTING -s 10.9.0.0/8 -o ens3 -j MASQUERADE                                                                                                                                                                 
COMMIT                                                                                                                                                                                                             
# END OPENVPN RULES 

Dále jsem mezi filtry přidal filtr :port-scan, výsledek pak vypadá takto:

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
:port-scan - [0:0]
# End required lines

A za pravidla

# 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.

# 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.

# Start CUSTOM UFW added by clusterednetworks 2020-10-20
# https://github.com/clusterednetworks/ufw-rate-limit-http-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

# 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

Omezení skenování portů

# 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

Nakonec zapnout firewall a pokud je všechno ok, tak snížit úroveň logování:

ufw enable
ufw logging medium
  • it/server/firewall-routovani.1668878194.txt.gz
  • Poslední úprava: 2022/11/19 17:16
  • autor: Petr Nosek