@@ -80,6 +80,7 @@ ENV VPNSP=pia \
|
|||||||
# Firewall
|
# Firewall
|
||||||
FIREWALL=on \
|
FIREWALL=on \
|
||||||
EXTRA_SUBNETS= \
|
EXTRA_SUBNETS= \
|
||||||
|
FIREWALL_DEBUG=off \
|
||||||
# Tinyproxy
|
# Tinyproxy
|
||||||
TINYPROXY=off \
|
TINYPROXY=off \
|
||||||
TINYPROXY_LOG=Info \
|
TINYPROXY_LOG=Info \
|
||||||
|
|||||||
@@ -231,6 +231,7 @@ That one is important if you want to connect to the container from your LAN for
|
|||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `FIREWALL` | `on` | `on` or `off` | Turn on or off the container built-in firewall. You should use it for **debugging purposes** only. |
|
| `FIREWALL` | `on` | `on` or `off` | Turn on or off the container built-in firewall. You should use it for **debugging purposes** only. |
|
||||||
| `EXTRA_SUBNETS` | | i.e. `192.168.1.0/24,192.168.10.121,10.0.0.5/28` | Comma separated subnets allowed in the container firewall |
|
| `EXTRA_SUBNETS` | | i.e. `192.168.1.0/24,192.168.10.121,10.0.0.5/28` | Comma separated subnets allowed in the container firewall |
|
||||||
|
| `FIREWALL_DEBUG` | `off` | `on` or `off` | Prints every firewall related command. You should use it for **debugging purposes** only. |
|
||||||
|
|
||||||
### Shadowsocks
|
### Shadowsocks
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,11 @@ func _main(background context.Context, args []string) int {
|
|||||||
err = fileManager.SetOwnership("/etc/tinyproxy", uid, gid)
|
err = fileManager.SetOwnership("/etc/tinyproxy", uid, gid)
|
||||||
fatalOnError(err)
|
fatalOnError(err)
|
||||||
|
|
||||||
|
if allSettings.Firewall.Debug {
|
||||||
|
firewallConf.SetDebug()
|
||||||
|
routingConf.SetDebug()
|
||||||
|
}
|
||||||
|
|
||||||
if err := ovpnConf.CheckTUN(); err != nil {
|
if err := ovpnConf.CheckTUN(); err != nil {
|
||||||
logger.Warn(err)
|
logger.Warn(err)
|
||||||
err = ovpnConf.CreateTUN()
|
err = ovpnConf.CreateTUN()
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ type Configurator interface {
|
|||||||
SetAllowedPort(ctx context.Context, port uint16) error
|
SetAllowedPort(ctx context.Context, port uint16) error
|
||||||
RemoveAllowedPort(ctx context.Context, port uint16) (err error)
|
RemoveAllowedPort(ctx context.Context, port uint16) (err error)
|
||||||
SetPortForward(ctx context.Context, port uint16) (err error)
|
SetPortForward(ctx context.Context, port uint16) (err error)
|
||||||
|
SetDebug()
|
||||||
}
|
}
|
||||||
|
|
||||||
type configurator struct { //nolint:maligned
|
type configurator struct { //nolint:maligned
|
||||||
@@ -29,6 +30,7 @@ type configurator struct { //nolint:maligned
|
|||||||
routing routing.Routing
|
routing routing.Routing
|
||||||
fileManager files.FileManager // for custom iptables rules
|
fileManager files.FileManager // for custom iptables rules
|
||||||
iptablesMutex sync.Mutex
|
iptablesMutex sync.Mutex
|
||||||
|
debug bool
|
||||||
|
|
||||||
// State
|
// State
|
||||||
enabled bool
|
enabled bool
|
||||||
@@ -49,3 +51,7 @@ func NewConfigurator(logger logging.Logger, routing routing.Routing, fileManager
|
|||||||
allowedPorts: make(map[uint16]struct{}),
|
allowedPorts: make(map[uint16]struct{}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *configurator) SetDebug() {
|
||||||
|
c.debug = true
|
||||||
|
}
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ func (c *configurator) runIptablesInstructions(ctx context.Context, instructions
|
|||||||
func (c *configurator) runIptablesInstruction(ctx context.Context, instruction string) error {
|
func (c *configurator) runIptablesInstruction(ctx context.Context, instruction string) error {
|
||||||
c.iptablesMutex.Lock() // only one iptables command at once
|
c.iptablesMutex.Lock() // only one iptables command at once
|
||||||
defer c.iptablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
|
if c.debug {
|
||||||
|
fmt.Printf("iptables %s\n", instruction)
|
||||||
|
}
|
||||||
flags := strings.Fields(instruction)
|
flags := strings.Fields(instruction)
|
||||||
if output, err := c.commander.Run(ctx, "iptables", flags...); err != nil {
|
if output, err := c.commander.Run(ctx, "iptables", flags...); err != nil {
|
||||||
return fmt.Errorf("failed executing \"iptables %s\": %s: %w", instruction, output, err)
|
return fmt.Errorf("failed executing \"iptables %s\": %s: %w", instruction, output, err)
|
||||||
|
|||||||
@@ -34,3 +34,8 @@ func (r *reader) GetExtraSubnets() (extraSubnets []net.IPNet, err error) {
|
|||||||
}
|
}
|
||||||
return extraSubnets, nil
|
return extraSubnets, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetFirewallDebug obtains if the firewall should run in debug verbose mode from the environment variable FIREWALL_DEBUG
|
||||||
|
func (r *reader) GetFirewallDebug() (debug bool, err error) {
|
||||||
|
return r.envParams.GetOnOff("FIREWALL_DEBUG", libparams.Default("off"))
|
||||||
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ type Reader interface {
|
|||||||
// Firewall getters
|
// Firewall getters
|
||||||
GetFirewall() (enabled bool, err error)
|
GetFirewall() (enabled bool, err error)
|
||||||
GetExtraSubnets() (extraSubnets []net.IPNet, err error)
|
GetExtraSubnets() (extraSubnets []net.IPNet, err error)
|
||||||
|
GetFirewallDebug() (debug bool, err error)
|
||||||
|
|
||||||
// VPN getters
|
// VPN getters
|
||||||
GetUser() (s string, err error)
|
GetUser() (s string, err error)
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ func (r *routing) AddRouteVia(ctx context.Context, subnet net.IPNet, defaultGate
|
|||||||
} else if exists {
|
} else if exists {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if r.debug {
|
||||||
|
fmt.Printf("ip route add %s via %s dev %s\n", subnetStr, defaultGateway, defaultInterface)
|
||||||
|
}
|
||||||
output, err := r.commander.Run(ctx, "ip", "route", "add", subnetStr, "via", defaultGateway.String(), "dev", defaultInterface)
|
output, err := r.commander.Run(ctx, "ip", "route", "add", subnetStr, "via", defaultGateway.String(), "dev", defaultInterface)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot add route for %s via %s %s %s: %s: %w", subnetStr, defaultGateway, "dev", defaultInterface, output, err)
|
return fmt.Errorf("cannot add route for %s via %s %s %s: %s: %w", subnetStr, defaultGateway, "dev", defaultInterface, output, err)
|
||||||
@@ -32,6 +35,9 @@ func (r *routing) DeleteRouteVia(ctx context.Context, subnet net.IPNet) (err err
|
|||||||
} else if !exists { // thanks to @npawelek https://github.com/npawelek
|
} else if !exists { // thanks to @npawelek https://github.com/npawelek
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if r.debug {
|
||||||
|
fmt.Printf("ip route del %s\n", subnetStr)
|
||||||
|
}
|
||||||
output, err := r.commander.Run(ctx, "ip", "route", "del", subnetStr)
|
output, err := r.commander.Run(ctx, "ip", "route", "del", subnetStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot delete route for %s: %s: %w", subnetStr, output, err)
|
return fmt.Errorf("cannot delete route for %s: %s: %w", subnetStr, output, err)
|
||||||
|
|||||||
@@ -15,12 +15,14 @@ type Routing interface {
|
|||||||
DefaultRoute() (defaultInterface string, defaultGateway net.IP, err error)
|
DefaultRoute() (defaultInterface string, defaultGateway net.IP, err error)
|
||||||
LocalSubnet() (defaultSubnet net.IPNet, err error)
|
LocalSubnet() (defaultSubnet net.IPNet, err error)
|
||||||
VPNGatewayIP(defaultInterface string) (ip net.IP, err error)
|
VPNGatewayIP(defaultInterface string) (ip net.IP, err error)
|
||||||
|
SetDebug()
|
||||||
}
|
}
|
||||||
|
|
||||||
type routing struct {
|
type routing struct {
|
||||||
commander command.Commander
|
commander command.Commander
|
||||||
logger logging.Logger
|
logger logging.Logger
|
||||||
fileManager files.FileManager
|
fileManager files.FileManager
|
||||||
|
debug bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConfigurator creates a new Configurator instance
|
// NewConfigurator creates a new Configurator instance
|
||||||
@@ -31,3 +33,7 @@ func NewRouting(logger logging.Logger, fileManager files.FileManager) Routing {
|
|||||||
fileManager: fileManager,
|
fileManager: fileManager,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *routing) SetDebug() {
|
||||||
|
c.debug = true
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
type Firewall struct {
|
type Firewall struct {
|
||||||
AllowedSubnets []net.IPNet
|
AllowedSubnets []net.IPNet
|
||||||
Enabled bool
|
Enabled bool
|
||||||
|
Debug bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Firewall) String() string {
|
func (f *Firewall) String() string {
|
||||||
@@ -25,6 +26,9 @@ func (f *Firewall) String() string {
|
|||||||
"Firewall settings:",
|
"Firewall settings:",
|
||||||
"Allowed subnets: " + strings.Join(allowedSubnets, ", "),
|
"Allowed subnets: " + strings.Join(allowedSubnets, ", "),
|
||||||
}
|
}
|
||||||
|
if f.Debug {
|
||||||
|
settingsList = append(settingsList, "Debug: on")
|
||||||
|
}
|
||||||
return strings.Join(settingsList, "\n |--")
|
return strings.Join(settingsList, "\n |--")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,5 +42,9 @@ func GetFirewallSettings(paramsReader params.Reader) (settings Firewall, err err
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return settings, err
|
return settings, err
|
||||||
}
|
}
|
||||||
|
settings.Debug, err = paramsReader.GetFirewallDebug()
|
||||||
|
if err != nil {
|
||||||
|
return settings, err
|
||||||
|
}
|
||||||
return settings, nil
|
return settings, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user