๐ง 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. ๆฅ็่ฆๅ
| iptables | nftables | Firewalld |
|---|---|---|
iptables -L -n -v |
nft list ruleset |
firewall-cmd --list-all |
2. ๆฐๅข่ฆๅ
| iptables | nftables | Firewalld |
|---|---|---|
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 ๆๆฏ็้。
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ