mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-01 16:01:55 +03:00
Merge pull request #252 from 9seconds/broken-whitelist
Fix broken ip lists
This commit is contained in:
@@ -110,6 +110,8 @@ func makeIPBlocklist(conf config.ListConfig, logger mtglib.Logger, ntw mtglib.Ne
|
|||||||
return nil, fmt.Errorf("incorrect parameters for firehol: %w", err)
|
return nil, fmt.Errorf("incorrect parameters for firehol: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go firehol.Run(conf.UpdateEach.Get(ipblocklist.DefaultFireholUpdateEach))
|
||||||
|
|
||||||
return firehol, nil
|
return firehol, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +164,7 @@ func runProxy(conf *config.Config, version string) error { // nolint: funlen
|
|||||||
return fmt.Errorf("cannot build network: %w", err)
|
return fmt.Errorf("cannot build network: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
blocklist, err := makeIPBlocklist(conf.Defense.Blocklist, logger, ntw)
|
blocklist, err := makeIPBlocklist(conf.Defense.Blocklist, logger.Named("blocklist"), ntw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot build ip blocklist: %w", err)
|
return fmt.Errorf("cannot build ip blocklist: %w", err)
|
||||||
}
|
}
|
||||||
@@ -170,9 +172,9 @@ func runProxy(conf *config.Config, version string) error { // nolint: funlen
|
|||||||
var whitelist mtglib.IPBlocklist
|
var whitelist mtglib.IPBlocklist
|
||||||
|
|
||||||
if conf.Defense.Allowlist.Enabled.Get(false) {
|
if conf.Defense.Allowlist.Enabled.Get(false) {
|
||||||
whlist, err := makeIPBlocklist(conf.Defense.Allowlist, logger, ntw)
|
whlist, err := makeIPBlocklist(conf.Defense.Allowlist, logger.Named("allowlist"), ntw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot build ip blocklist: %w", err)
|
return fmt.Errorf("cannot build ip allowlist: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
whitelist = whlist
|
whitelist = whlist
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ func (f *Firehol) update() {
|
|||||||
f.treeV4 = v4tree
|
f.treeV4 = v4tree
|
||||||
f.treeV6 = v6tree
|
f.treeV6 = v6tree
|
||||||
|
|
||||||
f.logger.Info("blocklist was updated")
|
f.logger.Info("ip list was updated")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Firehol) updateFromFile(mutex sync.Locker,
|
func (f *Firehol) updateFromFile(mutex sync.Locker,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package ipblocklist
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/9seconds/mtg/v2/mtglib"
|
"github.com/9seconds/mtg/v2/mtglib"
|
||||||
)
|
)
|
||||||
@@ -9,6 +10,8 @@ import (
|
|||||||
type noop struct{}
|
type noop struct{}
|
||||||
|
|
||||||
func (n noop) Contains(ip net.IP) bool { return false }
|
func (n noop) Contains(ip net.IP) bool { return false }
|
||||||
|
func (n noop) Run(updateEach time.Duration) {}
|
||||||
|
func (n noop) Shutdown() {}
|
||||||
|
|
||||||
// NewNoop returns a dummy ipblocklist which allows all incoming
|
// NewNoop returns a dummy ipblocklist which allows all incoming
|
||||||
// connections.
|
// connections.
|
||||||
|
|||||||
@@ -17,6 +17,13 @@ func (suite *NoopTestSuite) TestOp() {
|
|||||||
suite.False(ipblocklist.NewNoop().Contains(net.ParseIP("10.0.0.10")))
|
suite.False(ipblocklist.NewNoop().Contains(net.ParseIP("10.0.0.10")))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (suite *NoopTestSuite) TestRun() {
|
||||||
|
blocklist := ipblocklist.NewNoop()
|
||||||
|
|
||||||
|
blocklist.Run(0)
|
||||||
|
blocklist.Shutdown()
|
||||||
|
}
|
||||||
|
|
||||||
func TestNoop(t *testing.T) {
|
func TestNoop(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
suite.Run(t, &NoopTestSuite{})
|
suite.Run(t, &NoopTestSuite{})
|
||||||
|
|||||||
@@ -176,6 +176,12 @@ type IPBlocklist interface {
|
|||||||
// Contains checks if given IP address belongs to this blocklist If.
|
// Contains checks if given IP address belongs to this blocklist If.
|
||||||
// it is, a connection is terminated .
|
// it is, a connection is terminated .
|
||||||
Contains(net.IP) bool
|
Contains(net.IP) bool
|
||||||
|
|
||||||
|
// Run starts a background update procedure for a blocklist
|
||||||
|
Run(time.Duration)
|
||||||
|
|
||||||
|
// Shutdown stops a blocklist. It is assumed that none will access it after.
|
||||||
|
Shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Event is a data structure which is populated during mtg request
|
// Event is a data structure which is populated during mtg request
|
||||||
|
|||||||
@@ -144,6 +144,12 @@ func (p *Proxy) Shutdown() {
|
|||||||
p.ctxCancel()
|
p.ctxCancel()
|
||||||
p.streamWaitGroup.Wait()
|
p.streamWaitGroup.Wait()
|
||||||
p.workerPool.Release()
|
p.workerPool.Release()
|
||||||
|
|
||||||
|
if p.whitelist != nil {
|
||||||
|
p.whitelist.Shutdown()
|
||||||
|
}
|
||||||
|
|
||||||
|
p.blocklist.Shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Proxy) doFakeTLSHandshake(ctx *streamContext) bool {
|
func (p *Proxy) doFakeTLSHandshake(ctx *streamContext) bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user