Risk Management Frameworks
Risk Assessment should be considered separate from Application Threat modeling, although similar but Application Threat Modeling is more of a calculated approach.
Risk Management Activities
Application Threat Modeling
Application Threat modeling should be considered separate from Risk Assessment, although similar but Application Threat Modeling is more of a calculated approach.
Threat modeling allows you to systematically identify and rate the threats that are most likely to affect your system. By identifying and rating threats based on a solid understanding of the architecture and implementation of your application, you can address threats with appropriate countermeasures in a logical order, starting with the threats that present the greatest risk.
Threat modeling has a structured approach that is far more cost efficient and effective than applying security features in a haphazard manner without knowing precisely what threats each feature is supposed to address. With a random, “shotgun” approach to security, how do you know when your application is “secure enough,” and how do you know the areas where your application is still vulnerable? In short, until you know your threats, you cannot secure your system.
Basic terminology:
- Asset. A resource of value, such as the data in a database or on the file system. A system resource.
- Threat. A potential occurrence, malicious or otherwise, that might damage or compromise your assets.
- Vulnerability. A weakness in some aspect or feature of a system that makes a threat possible. Vulnerabilities might exist at the network, host, or application levels.
- Attack (or exploit). An action taken by someone or something that harms an asset. This could be someone following through on a threat or exploiting a vulnerability.
- Countermeasure. A safeguard that addresses a threat and mitigates risk.
Consider a simple house analogy: an item of jewelry in a house is an asset and a burglar is an attacker. A door is a feature of the house and an open door represents a vulnerability. The burglar can exploit the open door to gain access to the house and steal the jewelry. In other words, the attacker exploits a vulnerability to gain access to an asset. The appropriate countermeasure in this case is to close and lock the door.
Overview:
STRIDE Methodology
The STRIDE approach to threat modeling was introduced in 1999 at Microsoft, providing a mnemonic for developers to find ‘threats to our products’ [9] . STRIDE, Patterns and Practices, and Asset/entry point were amongst the threat modeling approaches developed and published by Microsoft. References to “the” Microsoft methodology commonly mean STRIDE.
P.A.S.T.A.
The Process for Attack Simulation and Threat Analysis (PASTA) is a seven-step, risk-centric methodology.[10] It provides a seven-step process for aligning business objectives and technical requirements, taking into account compliance issues and business analysis. The intent of the method is to provide a dynamic threat identification, enumeration, and scoring process. Once the threat model is completed security subject matter experts develop a detailed analysis of the identified threats. Finally, appropriate security controls can be enumerated. This methodology is intended to provide an attacker-centric view of the application and infrastructure from which defenders can develop an asset-centric mitigation strategy.
Trike
The focus of the Trike methodology[11] is using threat models as a risk-management tool. Within this framework, threat models are used to satisfy the security auditing process. Threat models are based on a “requirements model.” The requirements model establishes the stakeholder-defined “acceptable” level of risk assigned to each asset class. Analysis of the requirements model yields a threat model from which threats are enumerated and assigned risk values. The completed threat model is used to construct a risk model based on asset, roles, actions, and calculated risk exposure.
VAST
VAST is an acronym for Visual, Agile, and Simple Threat modeling.[12] The underlying principle of this methodology is the necessity of scaling the threat modeling process across the infrastructure and entire SDLC, and integrating it seamlessly into an Agile software development methodology. The methodology seeks to provide actionable outputs for the unique needs of various stakeholders: application architects and developers, cybersecurity personnel, and senior executives. The methodology provides a unique application and infrastructure visualization scheme such that the creation and use of threat models do not require specific security subject matter expertise.
DREAD and STRIDE
Application Threat Modeling using DREAD and STRIDE is an approach for analyzing the security of an application. It is a structured approach that enables you to identify, classify, rate, compare and prioritize the security risks associated with an application. DREAD methodology is used to rate, compare and prioritize the severity of risk presented by each threat that is classified using STRIDE.
Procedure
To perform Application Threat Risk Modeling use OWASP testing framework to identify, STRIDE methodology to Classify and DREAD methodology to rate, compare and prioritize risks, based on severity
STRIDE
- Spoofing
- Tampering
- Repudiation
- Information Disclosure
- Denial of Service
- Elevation of Privilege
Property | Threat | Definition | Example |
Authentication | Spoofing | Impersonating something or someone else. | Pretending to be any of billg, microsoft.com or ntdll.dll |
Integrity | Tampering | Modifying data or code | Modifying a DLL on disk or DVD, or a packet as it traverses the LAN. |
Non-repudiation | Repudiation | Claiming to have not performed an action. | “I didn’t send that email,” “I didn’t modify that file,” “Icertainly didn’t visit that web site, dear!” |
Confidentiality | Information Disclosure | Exposing information to someone not authorized to see it | Allowing someone to read the Windows source code; publishing a list of customers to a web site. |
Availability | Denial of Service | Deny or degrade service to users | Crashing Windows or a web site, sending a packet and absorbing seconds of CPU time, or routing packets into a black hole. |
Authorization | Elevation of Privilege | Gain capabilities without proper authorization | Allowing a remote internet user to run commands is the classic example, but going from a limited user to admin is also EoP. |
DREAD
- Reproduciblity
- Exploitability
- Affected Users
- Discoverability
DREAD Risk = (Damage + Reproduciblity + Exploitability + Affected Users + Discoverability) / 5. Calculation always produces a number between 10. Higher the number means more serious the risk is.
Threat Modeling Tools
There are currently five tools available for organizational threat modeling:
- Microsoft’s free threat modeling tool – the Threat Modeling Tool (formerly SDL Threat Modeling Tool).[15] This tool also utilizes the Microsoft threat modeling methodology, is DFD-based, and identifies threats based on the STRIDE threat classification scheme. It is intended primarily for general use.
- MyAppSecurity offers the first commercially available threat modeling tool – ThreatModeler[16] It utilizes the VAST methodology, is PFD-based, and identifies threats based on a customizable comprehensive threat library.[17] It is intended for collaborative use across all organizational stakeholders.
- IriusRisk offers both a community and a commercial version of the tool. This tool focus on the creation and maintenance of a live Threat Model through the entire SDLC. It drives the process by using fully customizable questionnaires and Risk Pattern Libraries, and connects with other several different tools (OWASP ZAP, BDD-Security, Threadfix…) to empower automation.[18]
- securiCAD is a threat modelling and risk management tool by the Scandinavian company foreseeti. It is intended for company cyber security management, from CISO, to security engineer, to technician. securiCAD conducts automated attack simulations to current and future IT architectures, identifies and quantifies risks holistically including structural vulnerabilities, and provides decision support based on the findings. securiCAD is offered in both commercial and community editions. [19]
- SD Elements by Security Compass is a software security requirements management platform that includes automated threat modeling capabilities. A set of threats is generated by completing a short questionnaire about the technical details and compliance drivers of the application. Countermeasures are included in the form of actionable tasks for developers that can be tracked and managed throughout the entire SDLC.[20]
Further Methodologies
- Intel Threat Agent Risk Assessment (TARA)
- Factor Analysis of Information Risk (FAIR)
- OCTAVE® (Operationally Critical Threat, Asset, and Vulnerability EvaluationSM)
- NIST Risk Management Framework (RMF)
- OWASP Threat Risk Modeling
Related Work
General Approach
To check what setting your system is using, use ‘sysctl name’ (e.g.: ‘sysctl net.ipv4.tcp_rmem’). To change a setting use ‘sysctl -w’. To make the setting permanent add the setting to the file ‘sysctl.conf’.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
cho > /etc/sysctl.conf echo -e "\ # /etc/sysctl.conf \r # ---------------- BEGIN ---------------- \r # to load new settings \r # sysctl --load /etc/sysctl.conf \r # \r ### TCP tuning \r # \r # For hosts with 10G NIC optimized for network paths up to 200ms RTT, or a 40G NIC up on paths up to 50ms RTT \r # allow testing with 512MB buffers \r net.core.rmem_max = 536870912 \r net.core.wmem_max = 536870912 \r # \r # increase Linux autotuning TCP buffer limits \r # min, default, and max number of bytes to use \r # allow auto-tuning up to 128MB buffers \r net.ipv4.tcp_rmem = 4096 87380 268435456 \ net.ipv4.tcp_wmem = 4096 65536 268435456 \r # \r # recommended to increase this for CentOS6 with 10G NICS or higher \r net.core.netdev_max_backlog = 250000 \r # \r # don't cache ssthresh from previous connection \r net.ipv4.tcp_no_metrics_save = 1 \r # \r # recommended default congestion control is htcp \r # test with 'sysctl net.ipv4.tcp_available_congestion_control' net.ipv4.tcp_congestion_control = reno \r # \r # recommended for hosts with jumbo frames enabled \r net.ipv4.tcp_mtu_probing = 1 \r # \r # recommended for CentOS7/Debian8 hosts \r net.core.default_qdisc = fq \r # \r fs.inotify.max_user_watches = 100000 \r #\r # --------------- END ------------------" \ > /etc/sysctl.conf cat /etc/sysctl.conf sysctl --load /etc/sysctl.conf sysctl -p |
More Reading:
package-cleanup:
Using package-cleanup
command which is a part of yum-utils
package we can uninstall any number of old kernels automatically. As an example using --oldkernels --count=2
option with package-cleanup
command the command will remove all unused kernel while keeping last three most recent kernel versions installed.
1 |
package-cleanup --oldkernels --count=1 |
yum:
list installed kernels
1 |
run rpm -q kernel |
remove kernels no longer needed; listed above
1 |
yum remove kernel |
automated:
By default CentOS will keep last 5 kernels installed on your system. This behavior is defined by installonly_limit=5
line within /etc/yum.conf
file. Update the /etc/yum.conf
configuration file appropriately to keep desired number of old kernels on your system after update. The minimum value to be set is 2
.
Example of /etc/yum.conf
configuration file to keep only last two kernel versions:
1 2 3 4 5 6 7 8 9 10 11 12 |
[main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=2 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release |
read more: linuxconfig.org
ZFS – Downgrade Commands for Centos:
To do the downgrade/re-install dance:
1 2 |
sudo yum remove zfs zfs-kmod spl spl-kmod libzfs2 libnvpair1 libuutil1 libzpool2 zfs-release sudo yum install http://download.zfsonlinux.org/epel/zfs-release.el7_6.noarch.rpm |
1 2 3 4 5 6 |
nano /etc/yum.repos.d/zfs.repo [zfs] enabled=0 [zfs-kmod] enabled=1 |
1 2 3 |
sudo yum search zfs* --show-duplicates sudo yum list --showduplicates zfs sudo yum install kmod-spl-0.7.9-1.el7_5.x86_64 kmod-zfs-0.7.9-1.el7_5.x86_64 |
ZFS tuning for SAS3 Storage Tank
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#### # ZFS tuning ### echo > /etc/modprobe.d/zfs.conf echo -e "\ # ---------------- BEGIN ---------------- \r # ZFS tuning for SAS3 12GE Storage Tank \r # tank-a Total Memory: 327680 MB # tank-b Total Memory: 393216 MB # total arc size limited to 90% of free -m - factor is 1024 \r # zfs_arc_max={{ '%d' | format(memtotal_mb*1024*1024*0.9) }} \r options zfs zfs_arc_min=262144000000 \r options zfs zfs_arc_max=314572800000 \r options zfs zfs_compressed_arc_enabled=0 \r ###\r # txg timeout \r options zfs zfs_txg_timeout=5 \r ###\r # disable prefetch \r options zfs zfs_prefetch_disable=1 \r ###\r # tune l2arc \r # max write speed to l2arc \r # default : 8 * 1024 * 1024 \r # setting here : 500 * 1024 * 1024 \r options zfs l2arc_write_max=524288000 \r options zfs l2arc_write_boost=524288000 \r options zfs l2arc_noprefetch=0 \r options zfs l2arc_headroom=24 \r ###\r # dirty pages \r options zfs zfs_dirty_data_max_percent=40 \r ###\r # sync zfs_vdev_* \r # increase them so scrub/resilver is more quickly at the cost of other work \r options zfs zfs_vdev_scrub_min_active=24 \r options zfs zfs_vdev_scrub_max_active=64 \r # sync write \r options zfs zfs_vdev_sync_write_min_active=8 \r options zfs zfs_vdev_sync_write_max_active=32 \r # sync reads (normal) \r options zfs zfs_vdev_sync_read_min_active=8 \r options zfs zfs_vdev_sync_read_max_active=32 \r # async reads : prefetcher \r options zfs zfs_vdev_async_read_min_active=8 \r options zfs zfs_vdev_async_read_max_active=32 \r # async write : bulk writes \r options zfs zfs_vdev_async_write_min_active=8 \r options zfs zfs_vdev_async_write_max_active=32 \r ###\r # scrub \r options zfs zfs_top_maxinflight=320 \r options zfs zfs_resilver_delay=0 \r options zfs zfs_scrub_delay=0 \r options zfs zfs_resilver_min_time_ms=5000 \r ###\r # scheduler \r options zfs zfs_vdev_scheduler=deadline \r ###\r # cpu limits \r options zfs zio_taskq_batch_pct=85 \r options zfs zfs_sync_taskq_batch_pct=85 \r ###\r # history \r options zfs zfs_read_history=100 \r options zfs zfs_read_history_hits=100 \r options zfs zfs_txg_history=10 \r ###\r # other tuning\r options zfs zfs_nocacheflush=1 \r ###\r # --------------- END ------------------" \ > /etc/modprobe.d/zfs.conf cat /etc/modprobe.d/zfs.conf /sbin/modprobe zfs cat /proc/spl/kstat/zfs/arcstats |
ZFS tuning for SAS3 ALL SSD + nVME Storage Tank
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
#### # ZFS tuning # https://www.svennd.be/tuning-of-zfs-module/ ### echo > /etc/modprobe.d/zfs.conf echo -e "\ # ---------------- BEGIN ---------------- \r # ZFS tuning for SAS3 ALL SSD + nVME Storage Tank \r # total arc size limited to 90% of free -m - factor is 1024 \r # zfs_arc_max={{ '%d' | format(memtotal_mb*1024*1024*0.9) }} \r options zfs zfs_arc_min=262144000000 \r options zfs zfs_arc_max=283115520000 \r options zfs zfs_compressed_arc_enabled=0 \r ###\r # txg timeout \r options zfs zfs_txg_timeout=5 \r ###\r # disable prefetch \r options zfs zfs_prefetch_disable=1 \r ###\r # tune l2arc \r # max write speed to l2arc \r # default : 8 * 1024 * 1024 \r # setting here : 500 * 1024 * 1024 \r options zfs l2arc_write_max=524288000 \r options zfs l2arc_write_boost=524288000 \r options zfs l2arc_noprefetch=0 \r options zfs l2arc_headroom=24 \r ###\r # dirty pages \r options zfs zfs_dirty_data_max_percent=40 \r ###\r # sync zfs_vdev_* \r # increase them so scrub/resilver is more quickly at the cost of other work \r options zfs zfs_vdev_scrub_min_active=24 \r options zfs zfs_vdev_scrub_max_active=64 \r # sync write \r options zfs zfs_vdev_sync_write_min_active=8 \r options zfs zfs_vdev_sync_write_max_active=32 \r # sync reads (normal) \r options zfs zfs_vdev_sync_read_min_active=8 \r options zfs zfs_vdev_sync_read_max_active=32 \r # async reads : prefetcher \r options zfs zfs_vdev_async_read_min_active=8 \r options zfs zfs_vdev_async_read_max_active=32 \r # async write : bulk writes \r options zfs zfs_vdev_async_write_min_active=8 \r options zfs zfs_vdev_async_write_max_active=32 \r ###\r # scrub \r options zfs zfs_top_maxinflight=320 \r options zfs zfs_resilver_delay=0 \r options zfs zfs_scrub_delay=0 \r options zfs zfs_resilver_min_time_ms=5000 \r ###\r # scheduler \r options zfs zfs_vdev_scheduler=deadline \r ###\r # cpu limits \r options zfs zio_taskq_batch_pct=85 \r options zfs zfs_sync_taskq_batch_pct=85 \r ###\r # history \r options zfs zfs_read_history=100 \r options zfs zfs_read_history_hits=100 \r options zfs zfs_txg_history=10 \r ###\r # other tuning\r options zfs zfs_nocacheflush=1 \r ###\r # --------------- END ------------------" \ > /etc/modprobe.d/zfs.conf cat /etc/modprobe.d/zfs.conf /sbin/modprobe zfs cat /proc/spl/kstat/zfs/arcstats |
Some more good advice:
ZFS – SNMP Extend Commands:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#Zpool Usage extend .1.3.6.1.4.1.2021.88 zpool_name /bin/bash -c "sudo zpool list -H -o name" extend .1.3.6.1.4.1.2021.88 zpool_snap /bin/bash -c "sudo zpool list -Ho name|for strzpool in `xargs`;do sudo zfs get -rHp -o value usedbysnapshots $strzpool|awk -F: '{sum+=$1} END{print sum}';done" extend .1.3.6.1.4.1.2021.88 zpool_used /bin/bash -c "sudo zpool list -Ho name|xargs sudo zfs get -Hp -o value used" extend .1.3.6.1.4.1.2021.88 zpool_data_used /bin/bash -c "sudo zpool list -Ho name|for strzpool in `xargs`;do snap=`sudo zfs get -rHp -o value usedbysnapshots $strzpool|awk -F: '{sum+=$1} END{print sum}'`;pool=`sudo zfs get -Hp -o value used $zpool`; echo $pool $snap|awk '{print (\$1-\$2);}';done" extend .1.3.6.1.4.1.2021.88 zpool_available /bin/bash -c "sudo zpool list -Ho name|xargs sudo zfs get -Hp -o value available" extend .1.3.6.1.4.1.2021.88 zpool_capacity /bin/bash -c "sudo zpool list -H -o capacity" #ARC Usage extend .1.3.6.1.4.1.2021.85 arc_meta_max /bin/bash -c "sudo grep arc_meta_max /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" extend .1.3.6.1.4.1.2021.85 arc_meta_used /bin/bash -c "sudo grep arc_meta_used /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" extend .1.3.6.1.4.1.2021.85 arc_size /bin/bash -c "sudo grep -m 1 size /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" extend .1.3.6.1.4.1.2021.85 arc_meta_limit /bin/bash -c "sudo grep arc_meta_limit /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" extend .1.3.6.1.4.1.2021.85 arc_meta_c_max /bin/bash -c "sudo grep c_max /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" #ARC Stats extend .1.3.6.1.4.1.2021.89 arc_hits /bin/bash -c "sudo grep -m 1 hits /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" extend .1.3.6.1.4.1.2021.89 arc_misses /bin/bash -c "sudo grep misses /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" #L2ARC Stats extend .1.3.6.1.4.1.2021.89 arc_l2_hits /bin/bash -c "sudo grep l2_hits /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" extend .1.3.6.1.4.1.2021.89 arc_l2_misses /bin/bash -c "sudo grep l2_misses /proc/spl/kstat/zfs/arcstats |awk -F' ' '{print $(NF)}'" #VFS IOPS extend .1.3.6.1.4.1.2021.90 vopstats_zfs_nread /bin/bash -c "humnum=$(sudo zpool iostat | tail -n 1 | awk -F' ' '{print $4}') ; case ${humnum: -1:1} in [0-9]) echo $humnum | tr -d ' ' ;; 'K') bc -p ${humnum: 0:-1}*1024**1 | tr -d ' ' ;; 'M') bc -p ${humnum: 0:-1}*1024**2 | tr -d ' ' ;; 'G') bc -p ${humnum: 0:-1}*1024**3 | tr -d ' ' ;; 'T') bc -p ${humnum: 0:-1}*1024**4 | tr -d ' ' ;; 'P') bc -p ${humnum: 0:-1}*1024**5 ;; esac" extend .1.3.6.1.4.1.2021.90 vopstats_zfs_nwrite /bin/bash -c "humnum=$(sudo zpool iostat | tail -n 1 | awk -F' ' '{print $5}') ; case ${humnum: -1:1} in [0-9]) echo $humnum | tr -d ' ' ;; 'K') bc -p ${humnum: 0:-1}*1024**1 | tr -d ' ' ;; 'M') bc -p ${humnum: 0:-1}*1024**2 | tr -d ' ' ;; 'G') bc -p ${humnum: 0:-1}*1024**3 | tr -d ' ' ;; 'T') bc -p ${humnum: 0:-1}*1024**4 | tr -d ' ' ;; 'P') bc -p ${humnum: 0:-1}*1024**5 ;; esac" #VFS Throughput extend .1.3.6.1.4.1.2021.90 vopstats_zfs_read_bytes /bin/bash -c "humnum=$(sudo zpool iostat | tail -n 1 | awk -F' ' '{print $6}') ; case ${humnum: -1:1} in [0-9]) echo $humnum | tr -d ' ' ;; 'K') bc -p ${humnum: 0:-1}*1024**1 | tr -d ' ' ;; 'M') bc -p ${humnum: 0:-1}*1024**2 | tr -d ' ' ;; 'G') calc -p ${humnum: 0:-1}*1024**3 | tr -d ' ' ;; 'T') calc -p ${humnum: 0:-1}*1024**4 | tr -d ' ' ;; 'P') calc -p ${humnum: 0:-1}*1024**5 ;; esac" extend .1.3.6.1.4.1.2021.90 vopstats_zfs_write_bytes /bin/bash -c "humnum=$(sudo zpool iostat | tail -n 1 | awk -F' ' '{print $7}') ; case ${humnum: -1:1} in [0-9]) echo $humnum | tr -d ' ' ;; 'K') bc -p ${humnum: 0:-1}*1024**1 | tr -d ' ' ;; 'M') bc -p ${humnum: 0:-1}*1024**2 | tr -d ' ' ;; 'G') bc -p ${humnum: 0:-1}*1024**3 | tr -d ' ' ;; 'T') bc -p ${humnum: 0:-1}*1024**4 | tr -d ' ' ;; 'P') bc -p ${humnum: 0:-1}*1024**5 ;; esac" #DeDupe Ratio extend .1.3.6.1.4.1.2021.91 zfs_dedup_ratio /bin/bash -c "zpool list | grep vol | cut -d \" \" -f 13 | tr -cd '[:digit:]'" |
LibreNMS:
https://community.librenms.org/t/zfs-support/1839
https://docs.librenms.org/#Extensions/Applications/#zfs
A Comparison of Features in Bonding and Team
Feature | Bonding | Team |
---|---|---|
broadcast Tx policy | Yes | Yes |
round-robin Tx policy | Yes | Yes |
active-backup Tx policy | Yes | Yes |
LACP (802.3ad) support | Yes (active only) | Yes |
Hash-based Tx policy | Yes | Yes |
User can set hash function | No | Yes |
Tx load-balancing support (TLB) | Yes | Yes |
LACP hash port select | Yes | Yes |
load-balancing for LACP support | No | Yes |
Ethtool link monitoring | Yes | Yes |
ARP link monitoring | Yes | Yes |
NS/NA (IPv6) link monitoring | No | Yes |
ports up/down delays | Yes | Yes |
port priorities and stickiness (“primary” option enhancement) | No | Yes |
separate per-port link monitoring setup | No | Yes |
multiple link monitoring setup | Limited | Yes |
lockless Tx/Rx path | No (rwlock) | Yes (RCU) |
VLAN support | Yes | Yes |
user-space runtime control | Limited | Full |
Logic in user-space | No | Yes |
Extensibility | Hard | Easy |
Modular design | No | Yes |
Performance overhead | Low | Very Low |
D-Bus interface | No | Yes |
multiple device stacking | Yes | Yes |
zero config using LLDP | No | (in planning) |
NetworkManager support | Yes | Yes |
Read More: RHEL
Config Snippets:
- CentOS 7
- No NetworkManager
NEXUS vPC Switch A:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
! interface port-channel223 description LACP: to nas-a switchport access vlan 161 spanning-tree port type edge logging event port link-status logging event port trunk-status bandwidth 80000000 vpc 223 ! interface Ethernet2/3 description NAS: nas-a UCS-C240M4-A-A no lldp transmit no lldp receive switchport access vlan 161 spanning-tree port type edge logging event port link-status logging event port trunk-status channel-group 223 mode active ! |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
! interface port-channel224 description LACP: to nas-b switchport access vlan 162 spanning-tree port type edge logging event port link-status logging event port trunk-status bandwidth 80000000 vpc 224 ! interface Ethernet2/4 description NAS: nas-b UCS-C240M4-B-A no lldp transmit no lldp receive switchport access vlan 162 spanning-tree port type edge logging event port link-status logging event port trunk-status channel-group 224 mode active ! |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
core-A# sh vpc 223 vPC status ---------------------------------------------------------------------------- id Port Status Consistency Reason Active vlans ------ ----------- ------ ----------- -------------------------- ----------- 223 Po223 up success success 161 core-A# sh vpc 224 vPC status ---------------------------------------------------------------------------- id Port Status Consistency Reason Active vlans ------ ----------- ------ ----------- -------------------------- ----------- 224 Po224 up success success 162 |
NEXUS vPC Switch B:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
! interface port-channel223 description LACP: to nas-a switchport access vlan 161 spanning-tree port type edge logging event port link-status logging event port trunk-status bandwidth 80000000 vpc 223 ! interface Ethernet2/3 description NAS: nas-a UCS-C240M4-A-B no lldp transmit no lldp receive switchport access vlan 161 spanning-tree port type edge logging event port link-status logging event port trunk-status channel-group 223 mode active ! |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
! interface port-channel224 description LACP: to nas-b switchport access vlan 162 spanning-tree port type edge logging event port link-status logging event port trunk-status bandwidth 80000000 vpc 224 ! interface Ethernet2/4 description NAS: nas-b UCS-C240M4-B-B no lldp transmit no lldp receive switchport access vlan 162 spanning-tree port type edge logging event port link-status logging event port trunk-status channel-group 224 mode active ! |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
core-B# sh vpc 223 vPC status ---------------------------------------------------------------------------- id Port Status Consistency Reason Active vlans ------ ----------- ------ ----------- -------------------------- ----------- 223 Po223 up success success 161 core-B# sh vpc 224 vPC status ---------------------------------------------------------------------------- id Port Status Consistency Reason Active vlans ------ ----------- ------ ----------- -------------------------- ----------- 224 Po224 up success success 162 |
CentOS 7 Server – Config: nas-a:
1 2 3 4 5 6 7 8 9 |
[root@nas-a network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-enp6s0 NM_CONTROLLED=no DEVICETYPE=TeamPort MTU=9000 ONBOOT=no TYPE=Ethernet TEAM_MASTER=team0 DEVICE=enp6s0 HWADDR=28:AC:9E:E8:60:F0 |
1 2 3 4 5 6 7 8 9 |
[root@nas-a network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-enp7s0 NM_CONTROLLED=no DEVICETYPE=TeamPort MTU=9000 ONBOOT=no TYPE=Ethernet TEAM_MASTER=team0 DEVICE=enp7s0 HWADDR=28:AC:9E:E8:60:F1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
[root@nas-a network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-team0 NM_CONTROLLED=no DEVICE=team0 DEVICETYPE=Team MTU=9000 BOOTPROTO=none ONBOOT=yes # LACP TEAM_CONFIG='{"runner": {"name": "lacp", "active": true, "fast_rate": true, "tx_hash": ["eth", "ipv4", "ipv6"]},"link_watch": {"name": "ethtool"},"ports": {"enp6s0": {}, "enp7s0": {}}}' # IPv4 IPADDR=192.168.161.231 PREFIX=24 GATEWAY=192.168.161.254 DNS1=192.168.167.244 DNS2=192.168.168.244 DOMAIN=toocoolforyou.net DEFROUTE=yes # IPv6 IPV6INIT=yes IPV6_PRIVACY=no IPV6_AUTOCONF=no IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6ADDR=2001:67c:21b0:4161:192:168:161:231/64 IPV6_DEFAULTGW=2001:67c:21b0:4161:192:168:161:254 # Firewall Zone ZONE=public |
CentOS 7 Server – Config: nas-a:
1 2 3 4 5 6 7 8 9 |
[root@nas-b network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-enp6s0 NM_CONTROLLED=no DEVICETYPE=TeamPort MTU=9000 ONBOOT=no TYPE=Ethernet TEAM_MASTER=team0 DEVICE=enp6s0 HWADDR=84:3D:C6:77:62:2A |
1 2 3 4 5 6 7 8 9 |
[root@nas-b network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-enp7s0 NM_CONTROLLED=no DEVICETYPE=TeamPort MTU=9000 ONBOOT=no TYPE=Ethernet TEAM_MASTER=team0 DEVICE=enp7s0 HWADDR=84:3D:C6:77:62:2B |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
[root@nas-b network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-team0 NM_CONTROLLED=no DEVICE=team0 DEVICETYPE=Team MTU=9000 BOOTPROTO=none ONBOOT=yes # LACP TEAM_CONFIG='{"runner": {"name": "lacp", "active": true, "fast_rate": true, "tx_hash": ["eth", "ipv4", "ipv6"]},"link_watch": {"name": "ethtool"},"ports": {"enp6s0": {}, "enp7s0": {}}}' # IPv4 IPADDR=192.168.162.231 PREFIX=24 GATEWAY=192.168.162.254 DNS1=192.168.167.244 DNS2=192.168.168.244 DOMAIN=toocoolforyou.net DEFROUTE=yes # IPv6 IPV6INIT=yes IPV6_PRIVACY=no IPV6_AUTOCONF=no IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6ADDR=2001:67c:21b0:8162:192:168:162:231/64 IPV6_DEFAULTGW=2001:67c:21b0:8162:192:168:162:254 # Firewall Zone ZONE=public |
CentOS 7 Server – Show Commands:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
[root@nas-a /]# teamdctl team0 state view -v setup: runner: lacp kernel team mode: loadbalance D-BUS enabled: yes ZeroMQ enabled: no debug level: 0 daemonized: no PID: 5029 PID file: /var/run/teamd/team0.pid ports: enp6s0 ifindex: 2 addr: 28:ac:9e:e8:60:f0 ethtool link: 40000mbit/fullduplex/up link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 link up delay: 0 link down delay: 0 runner: aggregator ID: 3, Selected selected: yes state: current key: 0 priority: 255 actor LACPDU info: system priority: 65535 system: 28:ac:9e:e8:60:f0 key: 0 port_priority: 255 port: 2 state: 0x3f partner LACPDU info: system priority: 32667 system: 00:23:04:ee:be:a0 key: 32991 port_priority: 32768 port: 16899 state: 0x3d enp7s0 ifindex: 3 addr: 28:ac:9e:e8:60:f0 ethtool link: 40000mbit/fullduplex/up link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 link up delay: 0 link down delay: 0 runner: aggregator ID: 3, Selected selected: yes state: current key: 0 priority: 255 actor LACPDU info: system priority: 65535 system: 28:ac:9e:e8:60:f0 key: 0 port_priority: 255 port: 3 state: 0x3f partner LACPDU info: system priority: 32667 system: 00:23:04:ee:be:a0 key: 32991 port_priority: 32768 port: 515 state: 0x3d runner: active: yes fast rate: yes system priority: 65535 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@nas-a /]# teamdctl team0 config dump -v { "device": "team0", "link_watch": { "name": "ethtool" }, "ports": { "enp6s0": {}, "enp7s0": {} }, "runner": { "active": true, "fast_rate": true, "name": "lacp", "tx_hash": [ "eth", "ipv4", "ipv6" ] } } |
1 2 3 4 5 |
[root@nas-a /]# ls -la /sys/class/net/ lrwxrwxrwx. 1 root root 0 Sep 8 12:01 enp6s0 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/net/enp6s0 lrwxrwxrwx. 1 root root 0 Sep 8 12:01 enp7s0 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:04:00.0/0000:05:01.0/0000:07:00.0/net/enp7s0 lrwxrwxrwx. 1 root root 0 Sep 8 12:01 lo -> ../../devices/virtual/net/lo lrwxrwxrwx. 1 root root 0 Sep 8 12:01 team0 -> ../../devices/virtual/net/team0 |
Meet with us
Where to find us
Am Leitenbruennlein 22
91056 Erlangen
Germany
Get in touch with us
Phone: +49-9131-610-310
Fax: +49-9131-610-333
Email: info@f1-consult.com