ಅಭಿವೃದ್ಧಿಯ ಒಂದು ವರ್ಷದ ನಂತರ
ಕರ್ನಲ್ ಮಟ್ಟವು ಪ್ಯಾಕೆಟ್ಗಳಿಂದ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯಲು, ಡೇಟಾ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಹರಿವಿನ ನಿಯಂತ್ರಣಕ್ಕೆ ಮೂಲಭೂತ ಕಾರ್ಯಗಳನ್ನು ಒದಗಿಸುವ ಸಾಮಾನ್ಯ ಪ್ರೋಟೋಕಾಲ್-ಸ್ವತಂತ್ರ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಮಾತ್ರ ಒದಗಿಸುತ್ತದೆ.
ಫಿಲ್ಟರಿಂಗ್ ಲಾಜಿಕ್ ಮತ್ತು ಪ್ರೋಟೋಕಾಲ್-ನಿರ್ದಿಷ್ಟ ಹ್ಯಾಂಡ್ಲರ್ಗಳನ್ನು ಬಳಕೆದಾರರ ಜಾಗದಲ್ಲಿ ಬೈಟ್ಕೋಡ್ಗೆ ಸಂಕಲಿಸಲಾಗುತ್ತದೆ, ನಂತರ ಈ ಬೈಟ್ಕೋಡ್ ಅನ್ನು ನೆಟ್ಲಿಂಕ್ ಇಂಟರ್ಫೇಸ್ ಬಳಸಿ ಕರ್ನಲ್ಗೆ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು BPF (ಬರ್ಕ್ಲಿ ಪ್ಯಾಕೆಟ್ ಫಿಲ್ಟರ್ಗಳು) ಅನ್ನು ನೆನಪಿಸುವ ವಿಶೇಷ ವರ್ಚುವಲ್ ಯಂತ್ರದಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಈ ವಿಧಾನವು ಕರ್ನಲ್ ಮಟ್ಟದಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಫಿಲ್ಟರಿಂಗ್ ಕೋಡ್ನ ಗಾತ್ರವನ್ನು ಗಣನೀಯವಾಗಿ ಕಡಿಮೆ ಮಾಡಲು ಮತ್ತು ಬಳಕೆದಾರರ ಜಾಗಕ್ಕೆ ಪ್ರೋಟೋಕಾಲ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಪಾರ್ಸಿಂಗ್ ನಿಯಮಗಳು ಮತ್ತು ತರ್ಕದ ಎಲ್ಲಾ ಕಾರ್ಯಗಳನ್ನು ಸರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
ಮುಖ್ಯ ಆವಿಷ್ಕಾರಗಳು:
- IPsec ಬೆಂಬಲ, ಪ್ಯಾಕೆಟ್, IPsec ವಿನಂತಿ ID, ಮತ್ತು SPI (ಸೆಕ್ಯುರಿಟಿ ಪ್ಯಾರಾಮೀಟರ್ ಇಂಡೆಕ್ಸ್) ಟ್ಯಾಗ್ ಅನ್ನು ಆಧರಿಸಿ ಸುರಂಗ ವಿಳಾಸಗಳ ಹೊಂದಾಣಿಕೆಯನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ,
... ipsec in ip saddr 192.168.1.0/24
... ipsec in spi 1-65536ಒಂದು ಮಾರ್ಗವು IPsec ಸುರಂಗದ ಮೂಲಕ ಹಾದುಹೋಗುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಲು ಸಹ ಸಾಧ್ಯವಿದೆ. ಉದಾಹರಣೆಗೆ, IPSec ಮೂಲಕ ಅಲ್ಲ ಸಂಚಾರವನ್ನು ನಿರ್ಬಂಧಿಸಲು:
… ಫಿಲ್ಟರ್ ಔಟ್ಪುಟ್ RT ipsec ಡ್ರಾಪ್ ಕಾಣೆಯಾಗಿದೆ
- IGMP (ಇಂಟರ್ನೆಟ್ ಗ್ರೂಪ್ ಮ್ಯಾನೇಜ್ಮೆಂಟ್ ಪ್ರೋಟೋಕಾಲ್) ಗೆ ಬೆಂಬಲ. ಉದಾಹರಣೆಗೆ, ಒಳಬರುವ IGMP ಗುಂಪಿನ ಸದಸ್ಯತ್ವ ವಿನಂತಿಗಳನ್ನು ತಿರಸ್ಕರಿಸಲು ನೀವು ನಿಯಮವನ್ನು ಬಳಸಬಹುದು
nft ನಿಯಮವನ್ನು ಸೇರಿಸಿ netdev foo bar igmp ಪ್ರಕಾರ ಸದಸ್ಯತ್ವ-ಪ್ರಶ್ನೆ ಕೌಂಟರ್ ಡ್ರಾಪ್
- ಪರಿವರ್ತನೆ ಸರಪಳಿಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಅಸ್ಥಿರಗಳನ್ನು ಬಳಸುವ ಸಾಧ್ಯತೆ (ಜಂಪ್ / ಗೊಟೊ). ಉದಾಹರಣೆಗೆ:
ಡೆಸ್ಟ್ = ಬೆರ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ
ನಿಯಮವನ್ನು ಸೇರಿಸಿ ip foo ಬಾರ್ ಜಂಪ್ $dest - ಹೆಡರ್ನಲ್ಲಿನ TTL ಮೌಲ್ಯಗಳ ಆಧಾರದ ಮೇಲೆ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ಗಳನ್ನು (OS ಫಿಂಗರ್ಪ್ರಿಂಟ್) ಗುರುತಿಸಲು ಮುಖವಾಡಗಳಿಗೆ ಬೆಂಬಲ. ಉದಾಹರಣೆಗೆ, ಕಳುಹಿಸುವವರ OS ಅನ್ನು ಆಧರಿಸಿ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಗುರುತಿಸಲು, ನೀವು ಆಜ್ಞೆಯನ್ನು ಬಳಸಬಹುದು:
... ಮೆಟಾ ಮಾರ್ಕ್ ಸೆಟ್ osf ttl ಹೆಸರು ನಕ್ಷೆಯನ್ನು ಬಿಟ್ಟುಬಿಡಿ { "Linux" : 0x1,
"ವಿಂಡೋಸ್": 0x2,
"MacOS": 0x3,
"ಅಪರಿಚಿತ" : 0x0 }
... osf ttl ಸ್ಕಿಪ್ ಆವೃತ್ತಿ "Linux:4.20" - ಕಳುಹಿಸುವವರ ARP ವಿಳಾಸ ಮತ್ತು ಗುರಿ ವ್ಯವಸ್ಥೆಯ IPv4 ವಿಳಾಸವನ್ನು ಹೊಂದಿಸುವ ಸಾಮರ್ಥ್ಯ. ಉದಾಹರಣೆಗೆ, 192.168.2.1 ವಿಳಾಸದಿಂದ ಕಳುಹಿಸಿದ ARP ಪ್ಯಾಕೆಟ್ಗಳ ಕೌಂಟರ್ ಅನ್ನು ಹೆಚ್ಚಿಸಲು, ನೀವು ಈ ಕೆಳಗಿನ ನಿಯಮವನ್ನು ಬಳಸಬಹುದು:
ಟೇಬಲ್ ಆರ್ಪ್ x {
ಚೈನ್ y {
ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಇನ್ಪುಟ್ ಆದ್ಯತೆಯ ಫಿಲ್ಟರ್; ನೀತಿ ಸ್ವೀಕರಿಸಿ;
arp saddr ip 192.168.2.1 ಕೌಂಟರ್ ಪ್ಯಾಕೆಟ್ಗಳು 1 ಬೈಟ್ಗಳು 46
}
} - ಪ್ರಾಕ್ಸಿ (tproxy) ಮೂಲಕ ವಿನಂತಿಗಳ ಪಾರದರ್ಶಕ ಫಾರ್ವರ್ಡ್ಗೆ ಬೆಂಬಲ ಉದಾಹರಣೆಗೆ, ಪೋರ್ಟ್ 80 ಗೆ ಪ್ರಾಕ್ಸಿ ಪೋರ್ಟ್ 8080 ಗೆ ಕರೆಗಳನ್ನು ಮರುನಿರ್ದೇಶಿಸಲು:
ಟೇಬಲ್ ip x {
ಚೈನ್ y {
ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಪ್ರಿರೌಟಿಂಗ್ ಆದ್ಯತೆ -150; ನೀತಿ ಸ್ವೀಕರಿಸಿ;
tcp dport 80 tproxy to :8080
}
} - SO_MARK ಮೋಡ್ನಲ್ಲಿ setsockopt() ಮೂಲಕ ಸೆಟ್ ಮಾರ್ಕ್ ಅನ್ನು ಮತ್ತಷ್ಟು ಪಡೆಯುವ ಸಾಮರ್ಥ್ಯದೊಂದಿಗೆ ಗುರುತಿಸುವ ಸಾಕೆಟ್ಗಳಿಗೆ ಬೆಂಬಲ. ಉದಾಹರಣೆಗೆ:
ಟೇಬಲ್ inet x {
ಚೈನ್ y {
ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಪ್ರಿರೌಟಿಂಗ್ ಆದ್ಯತೆ -150; ನೀತಿ ಸ್ವೀಕರಿಸಿ;
tcp dport 8080 ಮಾರ್ಕ್ ಸೆಟ್ ಸಾಕೆಟ್ ಮಾರ್ಕ್
}
} - ಸರಪಳಿಗಳಿಗೆ ಆದ್ಯತೆಯ ಪಠ್ಯ ಹೆಸರುಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ಬೆಂಬಲ. ಉದಾಹರಣೆಗೆ:
nft ಆಡ್ ಚೈನ್ ಐಪಿ x ರಾ {ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಪೂರ್ವನಿರ್ಧರಿತ ಆದ್ಯತೆಯ ಕಚ್ಚಾ; }
nft ಆಡ್ ಚೈನ್ ಐಪಿ x ಫಿಲ್ಟರ್ {ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಪ್ರಿರೌಟಿಂಗ್ ಆದ್ಯತಾ ಫಿಲ್ಟರ್; }
nft ಆಡ್ ಚೈನ್ ip x filter_later {ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಪ್ರಿರೂಟಿಂಗ್ ಆದ್ಯತಾ ಫಿಲ್ಟರ್ + 10; } - SELinux ಟ್ಯಾಗ್ಗಳಿಗೆ ಬೆಂಬಲ (Secmark). ಉದಾಹರಣೆಗೆ, SELinux ಸಂದರ್ಭದಲ್ಲಿ "sshtag" ಟ್ಯಾಗ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು, ನೀವು ಚಲಾಯಿಸಬಹುದು:
nft ಸೆಕ್ಮಾರ್ಕ್ inet ಫಿಲ್ಟರ್ sshtag "system_u:object_r:ssh_server_packet_t:s0" ಸೇರಿಸಿ
ತದನಂತರ ನಿಯಮಗಳಲ್ಲಿ ಈ ಲೇಬಲ್ ಅನ್ನು ಬಳಸಿ:
nft ಆಡ್ ರೂಲ್ inet ಫಿಲ್ಟರ್ ಇನ್ಪುಟ್ tcp dport 22 ಮೆಟಾ ಸೆಕ್ಮಾರ್ಕ್ ಸೆಟ್ “sshtag”
nft ನಕ್ಷೆಯನ್ನು ಸೇರಿಸಿ inet ಫಿಲ್ಟರ್ ಸೆಕ್ಮ್ಯಾಪಿಂಗ್ {ಟೈಪ್ inet_service : ಸೆಕ್ಮಾರ್ಕ್; }
nft ಆಡ್ ಎಲಿಮೆಂಟ್ inet ಫಿಲ್ಟರ್ ಸೆಕ್ಮ್ಯಾಪಿಂಗ್ {22 : "sshtag"}
nft ಆಡ್ ರೂಲ್ inet ಫಿಲ್ಟರ್ ಇನ್ಪುಟ್ ಮೆಟಾ ಸೆಕ್ಮಾರ್ಕ್ ಸೆಟ್ tcp dport ನಕ್ಷೆ @secmapping - ಪಠ್ಯ ರೂಪದಲ್ಲಿ ಪ್ರೋಟೋಕಾಲ್ಗಳಿಗೆ ನಿಯೋಜಿಸಲಾದ ಪೋರ್ಟ್ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಸಾಮರ್ಥ್ಯ, ಅವುಗಳನ್ನು /etc/services ಫೈಲ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. ಉದಾಹರಣೆಗೆ:
nft ಆಡ್ ರೂಲ್ xy tcp dport "ssh"
nft ಪಟ್ಟಿ ನಿಯಮಗಳು -l
ಟೇಬಲ್ x {
ಚೈನ್ y {
...
tcp dport "ssh"
}
} - ನೆಟ್ವರ್ಕ್ ಇಂಟರ್ಫೇಸ್ ಪ್ರಕಾರವನ್ನು ಪರಿಶೀಲಿಸುವ ಸಾಮರ್ಥ್ಯ. ಉದಾಹರಣೆಗೆ:
ಮೆಟಾ iifkind "vrf" ಸಮ್ಮತಿಸುವ ನಿಯಮವನ್ನು ಸೇರಿಸು inet ಕಚ್ಚಾ prerouting
- "ಡೈನಾಮಿಕ್" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಮೂಲಕ ಸೆಟ್ಗಳ ವಿಷಯಗಳನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ನವೀಕರಿಸಲು ಸುಧಾರಿತ ಬೆಂಬಲ. ಉದಾಹರಣೆಗೆ, ಮೂಲ ವಿಳಾಸವನ್ನು ಸೇರಿಸಲು "s" ಸೆಟ್ ಅನ್ನು ನವೀಕರಿಸಲು ಮತ್ತು 30 ಸೆಕೆಂಡುಗಳವರೆಗೆ ಯಾವುದೇ ಪ್ಯಾಕೆಟ್ಗಳಿಲ್ಲದಿದ್ದರೆ ನಮೂದನ್ನು ಮರುಹೊಂದಿಸಿ:
ಟೇಬಲ್ x ಸೇರಿಸಿ
ಸೆಟ್ xs ಸೇರಿಸಿ {ಟೈಪ್ ipv4_addr; ಗಾತ್ರ 128; ಕಾಲಾವಧಿ 30ಸೆ; ಧ್ವಜಗಳು ಕ್ರಿಯಾತ್ಮಕ; }
ಚೈನ್ xy ಸೇರಿಸಿ {ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಇನ್ಪುಟ್ ಆದ್ಯತೆ 0; }
ನಿಯಮ xy ನವೀಕರಣ @s { ip saddr } ಸೇರಿಸಿ - ಪ್ರತ್ಯೇಕ ಅವಧಿ ಮೀರುವ ಸ್ಥಿತಿಯನ್ನು ಹೊಂದಿಸುವ ಸಾಮರ್ಥ್ಯ. ಉದಾಹರಣೆಗೆ, ಪೋರ್ಟ್ 8888 ನಲ್ಲಿ ಬರುವ ಪ್ಯಾಕೆಟ್ಗಳ ಡೀಫಾಲ್ಟ್ ಸಮಯ ಮೀರುವಿಕೆಯನ್ನು ಅತಿಕ್ರಮಿಸಲು, ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು:
ಟೇಬಲ್ ಐಪಿ ಫಿಲ್ಟರ್ {
ct ಸಮಯ ಮೀರುವಿಕೆ ಆಕ್ರಮಣಕಾರಿ-tcp {
ಪ್ರೋಟೋಕಾಲ್ tcp;
ಎಲ್ 3 ಪ್ರೊಟೊ ಐಪಿ;
ನೀತಿ = {ಸ್ಥಾಪಿತ: 100, ಕ್ಲೋಸ್_ವೇಟ್: 4, ಕ್ಲೋಸ್: 4}
}
ಚೈನ್ ಔಟ್ಪುಟ್ {
...
tcp dport 8888 ct ಟೈಮ್ಔಟ್ ಸೆಟ್ "ಆಕ್ರಮಣಕಾರಿ-tcp"
}
} - inet ಕುಟುಂಬಕ್ಕೆ NAT ಬೆಂಬಲ:
ಟೇಬಲ್ ಇನೆಟ್ ನ್ಯಾಟ್ {
...
ip6 ತಂದೆ ಸತ್ತರು::2::1 dnat to dead:2::99
} - ಮುದ್ರಣದೋಷಗಳಿಂದಾಗಿ ಸುಧಾರಿತ ದೋಷ ವರದಿ ಸಾಮರ್ಥ್ಯಗಳು:
nft ಚೈನ್ ಫಿಲ್ಟರ್ ಪರೀಕ್ಷೆಯನ್ನು ಸೇರಿಸಿ
ದೋಷ: ಅಂತಹ ಫೈಲ್ ಅಥವಾ ಡೈರೆಕ್ಟರಿ ಇಲ್ಲ; ಫ್ಯಾಮಿಲಿ ಐಪಿಯಲ್ಲಿ ಟೇಬಲ್ "ಫಿಲ್ಟರ್" ಎಂದರ್ಥವೇ?
ಚೈನ್ ಫಿಲ್ಟರ್ ಪರೀಕ್ಷೆಯನ್ನು ಸೇರಿಸಿ
^^^^^^ - ಸೆಟ್ಗಳಲ್ಲಿ ಇಂಟರ್ಫೇಸ್ ಹೆಸರುಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಸಾಮರ್ಥ್ಯ:
sc { ಹೊಂದಿಸಿ
inet_service ಎಂದು ಟೈಪ್ ಮಾಡಿ. ಹೆಸರು
ಅಂಶಗಳು = { "ssh" . "eth0"}
} - ಫ್ಲೋಟೇಬಲ್ ನಿಯಮಗಳ ಸಿಂಟ್ಯಾಕ್ಸ್ ಅನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ:
nft ಟೇಬಲ್ x ಸೇರಿಸಿ
nft ಫ್ಲೋಟೇಬಲ್ x ಅಡಿ ಸೇರಿಸಿ {ಹುಕ್ ಪ್ರವೇಶದ ಆದ್ಯತೆ 0; ಸಾಧನಗಳು = { eth0, wlan0 }; }
...
nft ಆಡ್ ರೂಲ್ x ಫಾರ್ವರ್ಡ್ ಐಪಿ ಪ್ರೋಟೋಕಾಲ್ {tcp, udp } ಫ್ಲೋ ಸೇರಿಸಿ @ft - ಸುಧಾರಿತ JSON ಬೆಂಬಲ.
ಮೂಲ: opennet.ru