Squid nftable rules

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Squid nftable rules

Beitrag von joe2017 » 27.09.2019 11:06:13

Hallo zusammen,

mein Squid Server läuft soweit. Jetzt wollte ich die Firewall schließen und die benötigten Ports öffnen.
An meinem Client ist hierfür lediglich der Port 3128 offen.

Code: Alles auswählen

table ip filter {
	chain input {
		type filter hook input priority 0; policy drop;
		tcp dport 3128 ip saddr SquidServerIP accept comment "Squid Proxy"
	}
	chain output {
		type filter hook output priority 0; policy drop;
		tcp dport 3128 ip daddr SquidServerIP accept comment "Squid Proxy"
	}
Wenn ich an meinem Squid Server alle Regeln lösche (sudo nft flush ruleset) funktioniert alles bestens.
Wenn ich am Suid Server jetzt meine Regeln anlege, bekommt mein Client keine Webseite mehr angezeigt. Ich habe hier aktuell nur die Squid Regeln angegeben.

Code: Alles auswählen

table ip filter {
	chain input {
		type filter hook input priority 0; policy drop;
		tcp dport 3128 ip saddr 192.168.1.0/24 accept comment "Squid Proxy"
	}
	chain forward {
		type filter hook forward priority 0; policy drop;
	}
	chain output {
		type filter hook output priority 0; policy drop;
		tcp dport 3128 accept comment "Squid Proxy"
		tcp dport 80 accept comment "HTTP"
		tcp dport 443 accept comment "HTTPS"
	}
table ip6 filter {
	chain input {
		type filter hook input priority 0; policy drop;
	}
	chain forward {
		type filter hook forward priority 0; policy drop;
	}
	chain output {
		type filter hook output priority 0; policy drop;
	}
}
table ip nat {
	chain prerouting {
		type nat hook prerouting priority 0; policy drop;
		redirect
	}
	chain postrouting { 
		type nat hook postrouting priority 100; policy drop;
		masquerade
	}
Selbst wenn ich alle vorhandenen chains auf "policy accept" konfiguriere, funktioniert es nicht.
Hat jemand eine Idee wo ich etwas übersehen habe?

TomL

Re: Squid nftable rules

Beitrag von TomL » 27.09.2019 12:27:21

Port 53 ?

Und ausserdem fehlen auf dem squid-Server passende Inbound-Regeln. Wenn nicht mal established-Connects zugelassen sind, kann das auch nicht funktionieren. Schau mal nach "conntrack".

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: Squid nftable rules

Beitrag von joe2017 » 27.09.2019 12:43:49

Hallo Tom,

ich dachte mir schon das ich alle Ports Posten muss. Also hier noch einmal die komplette Konfiguration.

Code: Alles auswählen

table ip filter {
	chain input {
		type filter hook input priority 0; policy drop;
		ct state related, established accept
		icmp type echo-request ip saddr 192.168.1.0/24 accept comment "Ping"
		tcp dport 3128 ip saddr 192.168.1.0/24 accept comment "Squid Proxy"
	}
	chain forward {
		type filter hook forward priority 0; policy drop;
	}
	chain output {
		type filter hook output priority 0; policy drop;
		ct state related, established accept
		icmp type echo-request ip daddr 192.168.1.0/24 accept comment "Ping"
		udp dport 53 ip daddr DNS-ServerIP accept comment "DNS"
		udp dport 123 accept comment "NTP"
		tcp dport 389 ip daddr LDAP-ServerIP accept comment "LDAP"
		udp dport 389 ip daddr LDAP-ServerIP accept comment "LDAP"
		tcp dport 636 ip daddr LDAP-ServerIP accept comment "LDAPS"
		udp dport 636 ip daddr LDAP-ServerIP accept comment "LDAPS"
		tcp dport 3268 ip daddr LDAP-ServerIP accept comment "LDAP GC"
		udp dport 3268 ip daddr LDAP-ServerIP accept comment "LDAP GC"
		tcp dport 3269 ip daddr LDAP-ServerIP accept comment "LDAPS GC"
		udp dport 3269 ip daddr LDAP-ServerIP accept comment "LDAPS GC"
		tcp dport 88 ip daddr LDAP-ServerIP accept comment "Kerberos"
		udp dport 88 ip daddr LDAP-ServerIP accept comment "Kerberos"
		tcp dport 464 ip daddr LDAP-ServerIP accept comment "Kerberos"
		udp dport 464 ip daddr LDAP-ServerIP accept comment "Kerberos"
		tcp dport 749 ip daddr LDAP-ServerIP accept comment "Kerberos admin/changepw"
		tcp dport 3128 accept comment "Squid Proxy"
		tcp dport 80 accept comment "HTTP"
		tcp dport 443 accept comment "HTTPS"
	}
table ip6 filter {
	chain input {
		type filter hook input priority 0; policy drop;
	}
	chain forward {
		type filter hook forward priority 0; policy drop;
	}
	chain output {
		type filter hook output priority 0; policy drop;
	}
}
table ip nat {
	chain prerouting {
		type nat hook prerouting priority 0; policy drop;
		redirect
	}
	chain postrouting { 
		type nat hook postrouting priority 100; policy drop;
		masquerade
	}

TomL

Re: Squid nftable rules

Beitrag von TomL » 27.09.2019 15:24:05

DNS benötigt UDP und TCP. Und es fehlt das Loop-Device inbound.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: Squid nftable rules

Beitrag von joe2017 » 27.09.2019 15:50:06

Für DNS sollte mein UDP 53 ausreichen. So funktioniert das im gesamten Netzwerk.
Was genau meinst du mit Loop inbound? Welche Regel verwendest du hier?

Was aber seltsam ist, wenn ich alle chains (inbound, forward, outbound) für den ip filter und ip nat filter auf accept stelle (... priority 0; policy accept) funktioniert das auch nicht.
Somit kann es doch nicht an einer dieser Regeln liegen oder? Hier muss es noch an einer anderen Stelle hängen.

TomL

Re: Squid nftable rules

Beitrag von TomL » 27.09.2019 17:44:37

joe2017 hat geschrieben: ↑ zum Beitrag ↑
27.09.2019 15:50:06
Was aber seltsam ist, wenn ich alle chains (inbound, forward, outbound) für den ip filter und ip nat filter auf accept stelle (... priority 0; policy accept) funktioniert das auch nicht.
Für mich ist damit eigentlich erwiesen, dass Du es kaputt gefiltert hast. Was sollen eigentlich die IPv6-Regeln darin? Wenn Du kein IPv6 haben willst, solltest Du es komplett deaktivieren. Wenn Du kein IPv6 hast, brauchst Du diese Regeln nicht. Wenn Du IPv6 hast, muss das im Filter hinsichtlich ICMP ³ auch passend erlaubt werden. Zu den anderen Fragen, steht alles im WWW ¹ ² :wink:

¹ https://serverfault.com/questions/40484 ... ead-of-udp
² https://unix.stackexchange.com/question ... web-access
³ https://www.heise.de/netze/rfc/rfcs/rfc4890.shtml

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: Squid nftable rules

Beitrag von joe2017 » 30.09.2019 09:37:08

TomL hat geschrieben: ↑ zum Beitrag ↑
27.09.2019 17:44:37
Für mich ist damit eigentlich erwiesen, dass Du es kaputt gefiltert hast. Was sollen eigentlich die IPv6-Regeln darin? Wenn Du kein IPv6 haben willst, solltest Du es komplett deaktivieren. Wenn Du kein IPv6 hast, brauchst Du diese Regeln nicht. Wenn Du IPv6 hast, muss das im Filter hinsichtlich ICMP ³ auch passend erlaubt werden. Zu den anderen Fragen, steht alles im WWW ¹ ² :wink:
Hallo TomL,

den accept Eintrag (priority 0; policy accept) hab ich nur Testweise angegeben. Ich wollte somit nur herausfinden an welchem Filter es liegen könnte.
Standardmäßig steht dies natürlich auf "drop". Jedoch funktioniert es auch dann nicht wenn alle angegebenen Filter auf "accept" stehen.

IPv6 ist bei mir komplett deaktiviert. Hier gehe ich nur auf Nummer sicher, falls mal etwas schief geht ist dies zusätzlich durch die FW deaktiviert.

Deine Links schau ich mir trotzdem gleich mal an.
Zuletzt geändert von joe2017 am 30.09.2019 11:05:19, insgesamt 1-mal geändert.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: Squid nftable rules

Beitrag von joe2017 » 30.09.2019 11:05:05

Ich bin soeben ein Stück weiter gekommen.

Wenn ich in meiner input und output Regel das "new" im ct state zulasse funktioniert es.

Code: Alles auswählen

table ip filter {
        chain input {
                type filter hook input priority 0; policy drop;
                ct state new, related, established accept
        }

        chain output {
                type filter hook output priority 0; policy drop;
                ct state new, related, established accept
        }
}

Aber dadurch lasse ich ja einfach alles zu. Somit fehlt anscheinend noch eine Regel? Mit den Logs konnte ich leider nichts herausfinden.

@TomL
Den Loopback habe ich nun hinzugefügt und jetzt funktioniert es teilweise.
input

Code: Alles auswählen

iifname lo accept comment "loopback interface"
output

Code: Alles auswählen

oifname lo accept comment "loopback interface"
Es scheitert noch am postrouting. Wenn ich hier alles zulasse funktioniert es.

Code: Alles auswählen

table ip nat {
        chain postrouting {
                type nat hook postrouting priority 0; policy accept;
        }
}
Wenn ich es schließe und ein masquerade eintrage funktioniert es nicht.

Code: Alles auswählen

table ip nat {
        chain postrouting {
                type nat hook postrouting priority 0; policy drop;
                masquerade
        }
}

mat6937
Beiträge: 2946
Registriert: 09.12.2014 10:44:00

Re: Squid nftable rules

Beitrag von mat6937 » 30.09.2019 13:34:49

joe2017 hat geschrieben: ↑ zum Beitrag ↑
30.09.2019 11:05:05
Wenn ich es schließe und ein masquerade eintrage funktioniert es nicht.

Code: Alles auswählen

table ip nat {
        chain postrouting {
                type nat hook postrouting priority 0; policy drop;
                masquerade
        }
}
Versuch mal statt mit masquerade, mit einerm Source-NAT.in dem das richtige output-Interface und die richtige source-IP-Adresse genau definiert bzw. festgelegt sind.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: Squid nftable rules

Beitrag von joe2017 » 30.09.2019 16:08:07

Hi mat6937,

ich meine zu wissen was du meinst, hab jedoch etwas Probleme bei der Umsetzung. Ich bin jetzt kein nftables experte. Hierzu finde ich auch immer nur iptables Beiträge.
Du sprichst schon von so etwas oder?
Beispiel:

Code: Alles auswählen

iptables -t nat -A POSTROUTING  -o eth0 -d 192.168.1.x -p tcp --dport 12345 -j SNAT --to-source 192.168.1.x
Sollte das dann so in der Art aussehen? Keines dieser Beispiele funktioniert. Mit Source IP ist sicherlich die IP meines Squid Servers gemeint.

Code: Alles auswählen

oif eth0 masquerade
ip saddr 192.168.1.0/24 oif eth0 snat 192.168.1.x
ip saddr 192.168.1.0/24 masquerade
ip saddr 192.168.1.0/24 snat 192.168.1.x

mat6937
Beiträge: 2946
Registriert: 09.12.2014 10:44:00

Re: Squid nftable rules

Beitrag von mat6937 » 30.09.2019 21:04:10

joe2017 hat geschrieben: ↑ zum Beitrag ↑
30.09.2019 16:08:07
Du sprichst schon von so etwas oder?
Beispiel:

Code: Alles auswählen

iptables -t nat -A POSTROUTING  -o eth0 -d 192.168.1.x -p tcp --dport 12345 -j SNAT --to-source 192.168.1.x
Sollte das dann so in der Art aussehen? Keines dieser Beispiele funktioniert. Mit Source IP ist sicherlich die IP meines Squid Servers gemeint.
Masquerade ist ja ein Spezialfall von source-NAT, bei dem die IP-Adresse des output-Interface als source-IP-Adresse verwendet wird. Hat das eth0-Interface die IP-Adresse deines Squid-Servers? Hast Du in der POSTROUTING chain/nat-table auch noch andere Regeln? Wie ist die Ausgabe von:

Code: Alles auswählen

iptables -nvx -L POSTROUTING -t nat
(oder gleichwertig für nftables)? Zeigt der counter der Regel einen Traffic an?

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: Squid nftable rules

Beitrag von joe2017 » 01.10.2019 09:17:59

Guten Morgen,

Mein eth0 Interface besitzt die Squid Server IP (Beispiel 192.168.1.10).
Aktuell habe ich keine nat postrouting Regel angelegt. Alle Versuche haben kein Ergebnis gebracht.
Hier tappe ich noch etwas im Dunkeln was den Eingetrag angeht.

Folgendes wird zur nat chain ausgegeben:

Code: Alles auswählen

table ip nat {
	chain prerouting {
		type nat hook prerouting priority 0; policy drop;
		redirect
	}
	chain postrouting {
		type nat hook postrouting priority 0; policy drop;
	}
}

Antworten