็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿง Linux Firewalld / iptables / nftables ๆทฑๅบฆๆฏ”่ผƒ่ˆ‡ๆœ€ไฝณๅฏฆๅ‹™

    ๐Ÿง Linux Firewalld / iptables / nftables ๆทฑๅบฆๆฏ”่ผƒ่ˆ‡ๆœ€ไฝณๅฏฆๅ‹™

    Linux ้˜ฒ็ซ็‰†ๆŠ€่ก“้šจ่‘— Kernel Netfilter ๆžถๆง‹ๅคšๅนดๆผ”้€ฒ,็›ฎๅ‰ไธป่ฆๅญ˜ๅœจไธ‰็จฎๅฑค็ดš่ˆ‡่ง’่‰ฒ:

    • iptables — ๅ‚ณ็ตฑ Netfilter API,20 ๅนดๆญทๅฒ(้€ๆญฅ่ขซๅ–ไปฃ)
    • nftables — ๆ–ฐไธ–ไปฃ้˜ฒ็ซ็‰†ๆก†ๆžถ(ๅฎ˜ๆ–นๆœชไพ†ๆ–นๅ‘)
    • Firewalld — ็ฎก็†ๅทฅๅ…ท/ๅ‰็ซฏไป‹้ข(้ž้˜ฒ็ซ็‰†ๆœฌ้ซ”)

    ่จฑๅคšไฝฟ็”จ่€…ๅฎนๆ˜“่ชค่งฃ Firewalld ่ˆ‡ nftables、iptables ็š„้—œไฟ‚,ๅ› ๆญคๆœฌ็ฏ‡ๅ…งๅฎนๆœƒไปฅ「ๆžถๆง‹ → ๆฆ‚ๅฟต → ๆŒ‡ไปค → ๅฏฆๅ‹™ → ๆœ€ไฝณๅฏฆๅ‹™」ๆ–นๅผไธ€ๆฌก่ฌ›ๆธ…ๆฅš。


    ๐Ÿ”ฅ ไธ€、ไธ‰่€…็š„ๆ ธๅฟƒๅฎšไฝ(ไธ่ฆๅ†ๆžๆทท)

    ๅ็จฑๅฑค็ดš็”จ้€”ๆ˜ฏๅฆๅปบ่ญฐๆœชไพ†ไฝฟ็”จ
    iptables Kernel Netfilter API ๅ‚ณ็ตฑๅฐๅŒ…้Žๆฟพ่ˆ‡ NAT ❌ ้€ๆญฅๆท˜ๆฑฐ
    nftables ๆ–ฐไธ€ไปฃ Netfilter API ๆ›ด้ซ˜ๆ•ˆ็š„้˜ฒ็ซ็‰†่ˆ‡ NAT ๆจกๅž‹ ✅ ๆ˜ฏๆœชไพ†ไธปๅŠ›
    Firewalld ็ฎก็†ๅ‰็ซฏ(้ž้˜ฒ็ซ็‰†) ไปฅ Zone / Service ็ฎก็†่ฆๅ‰‡ ✅ ๆกŒ้ข / Server ๆŽจ่–ฆ

    ้‡้ปž:Firewalld ไธๆ˜ฏ Kernel Firewall,ๆœฌ่ณชไธŠๅชๆ˜ฏ「ๆŽงๅˆถๅพŒ็ซฏ」็š„ๅทฅๅ…ท。

    RHEL8 / CentOS 8 / Rocky 8、RHEL9 ้–‹ๅง‹:

    • Firewalld → ้ ่จญๅพŒ็ซฏไฝฟ็”จ nftables
    • iptables → ไฝฟ็”จ iptables-nft ๆจกๅผ(ๅทฒ่ฝ‰่ญฏ็‚บ nftables)

    ๅ› ๆญคๅคงๅคšๆ•ธ็พไปฃ็ณป็ตฑๅณไฝฟไฝ ่ผธๅ…ฅ iptables -L,ๅฏฆ้š›ไธŠไนŸๆ˜ฏ็”ฑ nftables ๆŽฅๆ‰‹。


    ๐Ÿง ไบŒ、iptables ่ˆ‡ nftables ็š„ๆžถๆง‹ๅทฎ็•ฐ

    1. iptables ๆžถๆง‹(ๅ‚ณ็ตฑ)

    • ๅŸบๆ–ผ「ๅ››ๅผต่กจ + ไบ”ๅ€‹้ˆ」
    • ๅคง้‡่ฆๅ‰‡ๆœƒๆ˜Ž้กฏๆ‹–ๆ…ขๆ•ˆ่ƒฝ(็ทšๆ€งๆœๅฐ‹)
    • IPv4 ่ˆ‡ IPv6 ้œ€ๅˆ†้–‹็ฎก็†
    • NAT ่ˆ‡ Filter ๅฝผๆญค็จ็ซ‹,็ถญ่ญทๆˆๆœฌ้ซ˜

    2. nftables ๆžถๆง‹(ๆ–ฐไธ€ไปฃ)

    • ๆ‰€ๆœ‰ๅŠŸ่ƒฝ็ตฑไธ€ๅœจ「table → chain → rule」ๆจกๅž‹ๅ…ง
    • ๆŽก็”จ B-Tree ๆ–นๅผๆœๅฐ‹,ๅคง้‡่ฆๅ‰‡ๆ•ˆ่ƒฝ้ ้ซ˜ๆ–ผ iptables
    • IPv4/IPv6 ๅŒๆ™‚่™•็†(ไธ้œ€ iptables/ip6tables ๅˆ†้–‹)
    • ๆ”ฏๆด「set / map」้ซ˜้šŽ่ชžๆณ•,ๅคงๅน…้™ไฝŽ rule ๆ•ธ้‡

    ็ฐกๅ–ฎ่ฌ›:iptables ๅคช่€่ˆŠ,ๅช้ฉๅˆๅ…ผๅฎน;nftables ๆ‰ๆ˜ฏ็พไปฃๆžถๆง‹。


    ๐Ÿงฉ ไธ‰、Firewalld ่ˆ‡ nftables ็š„้—œไฟ‚

    Firewalld ๆœฌ่บซไธๆ˜ฏ้˜ฒ็ซ็‰†,่€Œๆ˜ฏ:

    • Zone ็ฎก็†ๆจกๅž‹(public、dmz、work …)
    • Service ไบ‹ๅ…ˆๅฎš็พฉ port/protocol
    • Rich rule ้กžไผผ iptables ็š„่ชžๆณ•
    • ๅพŒ็ซฏๅฏๅˆ‡ๆ›:iptables ๆˆ– nftables

    RHEL8 ไน‹ๅพŒ Firewalld 80% ไปฅไธŠ็š„้ƒจ็ฝฒ้ƒฝไฝฟ็”จ:

    Firewalld → nftables → Kernel Netfilter

    ๅ› ๆญค Firewalld ๆœ€ๅคงๆ„็พฉๆ˜ฏ:

    • ็ฐกๅŒ–็ฎก็†
    • ๆธ›ๅฐ‘่ชžๆณ•้Œฏ่ชค
    • ๅคง้‡ไฝฟ็”จ่€…ไธ้œ€็ขฐ nftables ๅŽŸๅง‹่ชžๆณ•

    ⚙️ ๅ››、ๅธธ็”จๆŒ‡ไปคๅฐ็…ง่กจ

    1. ๆŸฅ็œ‹่ฆๅ‰‡

    iptablesnftablesFirewalld
    iptables -L -n -v nft list ruleset firewall-cmd --list-all

    2. ๆ–ฐๅขž่ฆๅ‰‡

    iptablesnftablesFirewalld
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT nft add rule inet filter input tcp dport 22 accept firewall-cmd --add-service=ssh --permanent

    ๐Ÿ“˜ ไบ”、Firewalld ๆœ€ไฝณๅฏฆๅ‹™(ไผๆฅญ 100% ้€š็”จ)

    1. ๅƒ…ไฝฟ็”จ permanent + reload(ไธ่ฆ็”จ runtime-only)

    firewall-cmd --add-service=https --permanent
    firewall-cmd --reload
    

    2. ๅฆ‚ๆžœ่ฆๅฏซ่ค‡้›œ่ฆๅ‰‡ → ็”จ rich rule

    firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 port port=22 protocol=tcp accept'
    

    3. ๅคงๅž‹ไผๆฅญ็’ฐๅขƒ → ๅปบ่ญฐ็›ดๆŽฅๅฏซ nftables policy

    ็†็”ฑ:
    • ๅฏ่ฎ€ๆ€งๆ›ดๅฅฝ
    • ๆ•ˆ่ƒฝๆ›ดๅผท
    • ๆ”ฏๆด set/map ่กจ้”ๅผ,่ฆๅ‰‡ๆ›ดๅฐ‘

    ๐Ÿ”ง ๅ…ญ、nftables ๆœ€ไฝณๅฏฆๅ‹™(้ซ˜้šŽ็’ฐๅขƒๅปบ่ญฐ็›ดๆŽฅๆŽก็”จ)

    1. ๅŸบ็คŽๆžถๆง‹

    table inet filter {
      chain input {
        type filter hook input priority 0;
    
        ct state established,related accept
        iif lo accept
        ip saddr 192.168.1.0/24 tcp dport { 22, 80, 443 } accept
        drop
      }
    }
    

    2. ไฝฟ็”จ้›†ๅˆ(set)ไธ€ๆฌก่™•็†ๅคš IP

    set admin_hosts {
      type ipv4_addr;
      elements = { 192.168.1.10, 192.168.1.20 }
    }
    
    tcp dport 22 ip saddr @admin_hosts accept
    

    3. IPv4/IPv6 ๅŒๆ™‚็ฎก็†(inet table)

    ้€™ๆ˜ฏ iptables ๅšไธๅˆฐ็š„,ไนŸๆ˜ฏ nftables ๆœ€ๅคงๅ„ชๅ‹ขไน‹ไธ€。


    ๐Ÿ’ก ไธƒ、iptables ๆ˜ฏๅฆไป้œ€่ฆ?

    ๆƒ…ๅขƒๅปบ่ญฐ
    ่ˆŠ็‰ˆ็ณป็ตฑ(CentOS 6/7、Debian 8) ๅช่ƒฝไฝฟ็”จ iptables
    ๆ–ฐ็‰ˆ็ณป็ตฑ(RHEL8+、Debian 12、Ubuntu 22.04) ๆ”น็”จ nftables(ๆˆ– Firewalld)
    ๅฎนๅ™จ(Docker、Kubernetes) ไปๆœƒ็œ‹ๅˆฐ iptables,ไฝ†ๅ…งๆ ธๅฏ่ƒฝๅทฒ็ถ“็”จ nftables

    ็ต่ซ–:iptables ไธๆœƒ็ซ‹ๅณๆถˆๅคฑ,ไฝ†ๅทฒ่ขซ่ฆ–็‚บ legacy ๆŠ€่ก“。


    ๐Ÿ ๅ…ซ、ๅปบ่ญฐไฝ ่ฉฒ็”จๅ“ชไธ€ๅ€‹?(ๅฟซ้€Ÿๆฑบ็ญ–)

    • ไธ€่ˆฌ Linux Server → Firewalld
    • ไผๆฅญ、ๅฎข่ฃฝ้œ€ๆฑ‚、ๆ•ˆ่ƒฝ่ฆๆฑ‚ → nftables
    • ่ˆŠ็’ฐๅขƒ → iptables(็„กๆณ•้ฟๅ…)

    ่‹ฅไฝ ๅชๆœ‰ไธ€ๅฐไผบๆœๅ™จ:็”จ Firewalld ๆœ€็œๆ™‚。 ่‹ฅไฝ ่ฆๅšๅฎ‰ๅ…จๅฏฉ่จˆ、SIEM、ๆ”ฟๆฒปๅคงๅญธ่ณ‡ๅฎ‰็ ”็ฉถ:็”จ nftables ๆ‰ๆ˜ฏ็Ž‹้“。


    ๐Ÿ“š ๅปถไผธ้–ฑ่ฎ€(่‡ชๅ‹•ๆŒ‘้ธ A)

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš