diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/firewall.py | 39 | ||||
| -rwxr-xr-x | src/conf_mode/system_conntrack.py | 2 | ||||
| -rwxr-xr-x | src/migration-scripts/firewall/15-to-16 | 55 | 
3 files changed, 61 insertions, 35 deletions
| diff --git a/src/conf_mode/firewall.py b/src/conf_mode/firewall.py index acf3805d2..4c289b921 100755 --- a/src/conf_mode/firewall.py +++ b/src/conf_mode/firewall.py @@ -33,6 +33,7 @@ from vyos.template import render  from vyos.utils.dict import dict_search_args  from vyos.utils.dict import dict_search_recursive  from vyos.utils.process import call +from vyos.utils.process import cmd  from vyos.utils.process import rc_cmd  from vyos import ConfigError  from vyos import airbag @@ -40,20 +41,7 @@ from vyos import airbag  airbag.enable()  nftables_conf = '/run/nftables.conf' - -sysfs_config = { -    'all_ping': {'sysfs': '/proc/sys/net/ipv4/icmp_echo_ignore_all', 'enable': '0', 'disable': '1'}, -    'broadcast_ping': {'sysfs': '/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts', 'enable': '0', 'disable': '1'}, -    'directed_broadcast' : {'sysfs': '/proc/sys/net/ipv4/conf/all/bc_forwarding', 'enable': '1', 'disable': '0'}, -    'ip_src_route': {'sysfs': '/proc/sys/net/ipv4/conf/*/accept_source_route'}, -    'ipv6_receive_redirects': {'sysfs': '/proc/sys/net/ipv6/conf/*/accept_redirects'}, -    'ipv6_src_route': {'sysfs': '/proc/sys/net/ipv6/conf/*/accept_source_route', 'enable': '0', 'disable': '-1'}, -    'log_martians': {'sysfs': '/proc/sys/net/ipv4/conf/all/log_martians'}, -    'receive_redirects': {'sysfs': '/proc/sys/net/ipv4/conf/*/accept_redirects'}, -    'send_redirects': {'sysfs': '/proc/sys/net/ipv4/conf/*/send_redirects'}, -    'syn_cookies': {'sysfs': '/proc/sys/net/ipv4/tcp_syncookies'}, -    'twa_hazards_protection': {'sysfs': '/proc/sys/net/ipv4/tcp_rfc1337'} -} +sysctl_file = r'/run/sysctl/10-vyos-firewall.conf'  valid_groups = [      'address_group', @@ -467,33 +455,16 @@ def generate(firewall):                      local_zone_conf['from_local'][zone] = zone_conf['from'][local_zone]      render(nftables_conf, 'firewall/nftables.j2', firewall) +    render(sysctl_file, 'firewall/sysctl-firewall.conf.j2', firewall)      return None -def apply_sysfs(firewall): -    for name, conf in sysfs_config.items(): -        paths = glob(conf['sysfs']) -        value = None - -        if name in firewall['global_options']: -            conf_value = firewall['global_options'][name] -            if conf_value in conf: -                value = conf[conf_value] -            elif conf_value == 'enable': -                value = '1' -            elif conf_value == 'disable': -                value = '0' - -        if value: -            for path in paths: -                with open(path, 'w') as f: -                    f.write(value) -  def apply(firewall):      install_result, output = rc_cmd(f'nft --file {nftables_conf}')      if install_result == 1:          raise ConfigError(f'Failed to apply firewall: {output}') -    apply_sysfs(firewall) +    # Apply firewall global-options sysctl settings +    cmd(f'sysctl -f {sysctl_file}')      call_dependents() diff --git a/src/conf_mode/system_conntrack.py b/src/conf_mode/system_conntrack.py index d9c38fd95..aa290788c 100755 --- a/src/conf_mode/system_conntrack.py +++ b/src/conf_mode/system_conntrack.py @@ -166,7 +166,7 @@ def verify(conntrack):                                      if not group_obj:                                          Warning(f'{error_group} "{group_name}" has no members!') -            Warning(f'It is prefered to defined {inet} conntrack ignore rules in the <firewall {inet} prerouting raw> section') +            Warning(f'It is prefered to define {inet} conntrack ignore rules in <firewall {inet} prerouting raw> section')          if dict_search_args(conntrack, 'timeout', 'custom', inet, 'rule') != None:              for rule, rule_config in conntrack['timeout']['custom'][inet]['rule'].items(): diff --git a/src/migration-scripts/firewall/15-to-16 b/src/migration-scripts/firewall/15-to-16 new file mode 100755 index 000000000..7c8d38fe6 --- /dev/null +++ b/src/migration-scripts/firewall/15-to-16 @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2022-2024 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + +# T6394: Migrate conntrack timeout options to firewall global-options +    # from: set system conntrack timeout .. +    # to: set firewall global-options timeout ... + +from sys import argv +from sys import exit + +from vyos.configtree import ConfigTree + +if len(argv) < 2: +    print("Must specify file name!") +    exit(1) + +file_name = argv[1] + +with open(file_name, 'r') as f: +    config_file = f.read() + +firewall_base = ['firewall', 'global-options'] +conntrack_base = ['system', 'conntrack', 'timeout'] +config = ConfigTree(config_file) + +if not config.exists(conntrack_base): +    # Nothing to do +    exit(0) + +for protocol in ['icmp', 'tcp', 'udp', 'other']: +    if config.exists(conntrack_base + [protocol]): +        if not config.exists(firewall_base): +            config.set(firewall_base + ['timeout']) +        config.copy(conntrack_base + [protocol], firewall_base + ['timeout', protocol]) +        config.delete(conntrack_base + [protocol]) + +try: +    with open(file_name, 'w') as f: +        f.write(config.to_string()) +except OSError as e: +    print("Failed to save the modified config: {}".format(e)) +    exit(1)
\ No newline at end of file | 
