11package nftables
22
33import (
4- "bytes"
54 "context"
65 "fmt"
76 "net"
@@ -207,44 +206,11 @@ func (m *Manager) AllowNetbird() error {
207206 m .mutex .Lock ()
208207 defer m .mutex .Unlock ()
209208
210- err := m .aclManager .createDefaultAllowRules ()
211- if err != nil {
212- return fmt .Errorf ("failed to create default allow rules: %v" , err )
213- }
214-
215- chains , err := m .rConn .ListChainsOfTableFamily (nftables .TableFamilyIPv4 )
216- if err != nil {
217- return fmt .Errorf ("list of chains: %w" , err )
218- }
219-
220- var chain * nftables.Chain
221- for _ , c := range chains {
222- if c .Table .Name == tableNameFilter && c .Name == chainNameInput {
223- chain = c
224- break
225- }
226- }
227-
228- if chain == nil {
229- log .Debugf ("chain INPUT not found. Skipping add allow netbird rule" )
230- return nil
231- }
232-
233- rules , err := m .rConn .GetRules (chain .Table , chain )
234- if err != nil {
235- return fmt .Errorf ("failed to get rules for the INPUT chain: %v" , err )
209+ if err := m .aclManager .createDefaultAllowRules (); err != nil {
210+ return fmt .Errorf ("create default allow rules: %w" , err )
236211 }
237-
238- if rule := m .detectAllowNetbirdRule (rules ); rule != nil {
239- log .Debugf ("allow netbird rule already exists: %v" , rule )
240- return nil
241- }
242-
243- m .applyAllowNetbirdRules (chain )
244-
245- err = m .rConn .Flush ()
246- if err != nil {
247- return fmt .Errorf ("failed to flush allow input netbird rules: %v" , err )
212+ if err := m .rConn .Flush (); err != nil {
213+ return fmt .Errorf ("flush allow input netbird rules: %w" , err )
248214 }
249215
250216 return nil
@@ -260,10 +226,6 @@ func (m *Manager) Close(stateManager *statemanager.Manager) error {
260226 m .mutex .Lock ()
261227 defer m .mutex .Unlock ()
262228
263- if err := m .resetNetbirdInputRules (); err != nil {
264- return fmt .Errorf ("reset netbird input rules: %v" , err )
265- }
266-
267229 if err := m .router .Reset (); err != nil {
268230 return fmt .Errorf ("reset router: %v" , err )
269231 }
@@ -283,41 +245,6 @@ func (m *Manager) Close(stateManager *statemanager.Manager) error {
283245 return nil
284246}
285247
286- func (m * Manager ) resetNetbirdInputRules () error {
287- chains , err := m .rConn .ListChains ()
288- if err != nil {
289- return fmt .Errorf ("list chains: %w" , err )
290- }
291-
292- m .deleteNetbirdInputRules (chains )
293-
294- return nil
295- }
296-
297- func (m * Manager ) deleteNetbirdInputRules (chains []* nftables.Chain ) {
298- for _ , c := range chains {
299- if c .Table .Name == tableNameFilter && c .Name == chainNameInput {
300- rules , err := m .rConn .GetRules (c .Table , c )
301- if err != nil {
302- log .Errorf ("get rules for chain %q: %v" , c .Name , err )
303- continue
304- }
305-
306- m .deleteMatchingRules (rules )
307- }
308- }
309- }
310-
311- func (m * Manager ) deleteMatchingRules (rules []* nftables.Rule ) {
312- for _ , r := range rules {
313- if bytes .Equal (r .UserData , []byte (allowNetbirdInputRuleID )) {
314- if err := m .rConn .DelRule (r ); err != nil {
315- log .Errorf ("delete rule: %v" , err )
316- }
317- }
318- }
319- }
320-
321248func (m * Manager ) cleanupNetbirdTables () error {
322249 tables , err := m .rConn .ListTables ()
323250 if err != nil {
@@ -421,44 +348,6 @@ func (m *Manager) createWorkTable() (*nftables.Table, error) {
421348 return table , err
422349}
423350
424- func (m * Manager ) applyAllowNetbirdRules (chain * nftables.Chain ) {
425- rule := & nftables.Rule {
426- Table : chain .Table ,
427- Chain : chain ,
428- Exprs : []expr.Any {
429- & expr.Meta {Key : expr .MetaKeyIIFNAME , Register : 1 },
430- & expr.Cmp {
431- Op : expr .CmpOpEq ,
432- Register : 1 ,
433- Data : ifname (m .wgIface .Name ()),
434- },
435- & expr.Verdict {
436- Kind : expr .VerdictAccept ,
437- },
438- },
439- UserData : []byte (allowNetbirdInputRuleID ),
440- }
441- _ = m .rConn .InsertRule (rule )
442- }
443-
444- func (m * Manager ) detectAllowNetbirdRule (existedRules []* nftables.Rule ) * nftables.Rule {
445- ifName := ifname (m .wgIface .Name ())
446- for _ , rule := range existedRules {
447- if rule .Table .Name == tableNameFilter && rule .Chain .Name == chainNameInput {
448- if len (rule .Exprs ) < 4 {
449- if e , ok := rule .Exprs [0 ].(* expr.Meta ); ! ok || e .Key != expr .MetaKeyIIFNAME {
450- continue
451- }
452- if e , ok := rule .Exprs [1 ].(* expr.Cmp ); ! ok || e .Op != expr .CmpOpEq || ! bytes .Equal (e .Data , ifName ) {
453- continue
454- }
455- return rule
456- }
457- }
458- }
459- return nil
460- }
461-
462351func insertReturnTrafficRule (conn * nftables.Conn , table * nftables.Table , chain * nftables.Chain ) {
463352 rule := & nftables.Rule {
464353 Table : table ,
0 commit comments