NFTables.Sysctl.Network (NFTables v0.8.2)

View Source

Convenience functions for common network sysctl operations.

This module provides high-level helpers for frequently-used network configuration tasks, wrapping the low-level NFTables.Sysctl API.

Examples

# Enable IP forwarding (for routers)
:ok = NFTables.Sysctl.Network.enable_ipv4_forwarding(pid)

# Configure router settings
:ok = NFTables.Sysctl.Network.configure_router(pid,
  ipv4_forwarding: true,
  ipv6_forwarding: true,
  syncookies: true
)

# Harden security settings
:ok = NFTables.Sysctl.Network.harden_security(pid)

Summary

Functions

Allow ICMP ping requests.

Configure router settings.

Disable IPv4 forwarding.

Disable IPv6 forwarding.

Disable TCP SYN cookies.

Enable IPv4 forwarding.

Enable IPv6 forwarding.

Enable TCP SYN cookies for DDoS protection.

Get current connection tracking max.

Harden network security settings for both IPv4 and IPv6.

Harden IPv4 network security settings.

Harden IPv6 network security settings.

Ignore all ICMP ping requests (stealth mode).

Check if IPv4 forwarding is enabled.

Set maximum connection tracking entries.

Functions

allow_ping(pid_or_opts)

@spec allow_ping(pid() | keyword()) :: :ok | {:error, term()}

Allow ICMP ping requests.

Example

:ok = NFTables.Sysctl.Network.allow_ping(pid)

configure_router(pid_or_opts, opts \\ [])

@spec configure_router(
  pid() | keyword(),
  keyword()
) :: :ok | {:error, term()}

Configure router settings.

Applies common settings for a router/gateway.

Options

  • :ipv4_forwarding - Enable IPv4 forwarding (default: false)
  • :ipv6_forwarding - Enable IPv6 forwarding (default: false)
  • :syncookies - Enable SYN cookies (default: false)
  • :send_redirects - Enable ICMP redirects (default: false)

Example

:ok = NFTables.Sysctl.Network.configure_router(pid,
  ipv4_forwarding: true,
  ipv6_forwarding: true,
  syncookies: true,
  send_redirects: false
)

disable_ipv4_forwarding(pid_or_opts)

@spec disable_ipv4_forwarding(pid() | keyword()) :: :ok | {:error, term()}

Disable IPv4 forwarding.

Example

:ok = NFTables.Sysctl.Network.disable_ipv4_forwarding(pid)

disable_ipv6_forwarding(pid_or_opts)

@spec disable_ipv6_forwarding(pid() | keyword()) :: :ok | {:error, term()}

Disable IPv6 forwarding.

Example

:ok = NFTables.Sysctl.Network.disable_ipv6_forwarding(pid)

disable_syncookies(pid_or_opts)

@spec disable_syncookies(pid() | keyword()) :: :ok | {:error, term()}

Disable TCP SYN cookies.

Example

:ok = NFTables.Sysctl.Network.disable_syncookies(pid)

enable_ipv4_forwarding(pid_or_opts)

@spec enable_ipv4_forwarding(pid() | keyword()) :: :ok | {:error, term()}

Enable IPv4 forwarding.

Enables IP forwarding on all interfaces. Required for routers and NAT gateways.

Example

:ok = NFTables.Sysctl.Network.enable_ipv4_forwarding(pid)

enable_ipv6_forwarding(pid_or_opts)

@spec enable_ipv6_forwarding(pid() | keyword()) :: :ok | {:error, term()}

Enable IPv6 forwarding.

Example

:ok = NFTables.Sysctl.Network.enable_ipv6_forwarding(pid)

enable_syncookies(pid_or_opts)

@spec enable_syncookies(pid() | keyword()) :: :ok | {:error, term()}

Enable TCP SYN cookies for DDoS protection.

SYN cookies help protect against SYN flood attacks.

Example

:ok = NFTables.Sysctl.Network.enable_syncookies(pid)

get_conntrack_max(pid_or_opts)

@spec get_conntrack_max(pid() | keyword()) :: {:ok, pos_integer()} | {:error, term()}

Get current connection tracking max.

Example

{:ok, 65536} = NFTables.Sysctl.Network.get_conntrack_max(pid)

harden_security(pid_or_opts)

@spec harden_security(pid() | keyword()) :: :ok | {:error, term()}

Harden network security settings for both IPv4 and IPv6.

Applies security-focused sysctl settings by calling both harden_security_ipv4/1 and harden_security_ipv6/1.

Example

:ok = NFTables.Sysctl.Network.harden_security(pid)

harden_security_ipv4(pid_or_opts)

@spec harden_security_ipv4(pid() | keyword()) :: :ok | {:error, term()}

Harden IPv4 network security settings.

Applies IPv4 security-focused sysctl settings:

  • Enable reverse path filtering (anti-spoofing)
  • Disable source routing
  • Disable ICMP redirects
  • Disable send redirects
  • Enable SYN cookies (SYN flood protection)

Example

:ok = NFTables.Sysctl.Network.harden_security_ipv4(pid)

harden_security_ipv6(pid_or_opts)

@spec harden_security_ipv6(pid() | keyword()) :: :ok | {:error, term()}

Harden IPv6 network security settings.

Applies IPv6 security-focused sysctl settings:

  • Disable source routing
  • Disable ICMP redirects
  • Disable Router Advertisements (prevents RA-based attacks)
  • Disable RA default router
  • Disable RA prefix information

Example

:ok = NFTables.Sysctl.Network.harden_security_ipv6(pid)

ignore_ping(pid_or_opts)

@spec ignore_ping(pid() | keyword()) :: :ok | {:error, term()}

Ignore all ICMP ping requests (stealth mode).

Example

:ok = NFTables.Sysctl.Network.ignore_ping(pid)

ipv4_forwarding_enabled?(pid_or_opts)

@spec ipv4_forwarding_enabled?(pid() | keyword()) ::
  {:ok, boolean()} | {:error, term()}

Check if IPv4 forwarding is enabled.

Returns {:ok, true} if enabled, {:ok, false} if disabled.

Example

{:ok, true} = NFTables.Sysctl.Network.ipv4_forwarding_enabled?(pid)

set_conntrack_max(pid_or_opts, max)

@spec set_conntrack_max(pid() | keyword(), pos_integer()) :: :ok | {:error, term()}

Set maximum connection tracking entries.

Higher values allow more concurrent connections but use more memory.

Example

:ok = NFTables.Sysctl.Network.set_conntrack_max(pid, 131072)