nftables
我正在使用(v0.9.6)设置防火墙 + NAT 。该工具提供集合和映射以避免大量规则重复。
我想使用一种通用的数据结构(集或映射)来配置 DNAT 和过滤规则(转发)。
当我尝试 ( nft --check -f example.conf
) 时,总是会出现错误。你知道有什么方法可以做到这一点吗无需重复NAT 映射到 2 个数据结构(一个映射和一组)?
这是我使用的示例(请参阅大写注释)。
这些是地图和设置:
table inet filter {
map mymap {
type inet_service : ipv4_addr
elements = {
12345 : 192.168.0.66,
4321 : 192.168.0.77
}
}
set myset {
type ipv4_addr . inet_service
elements = {
192.168.0.66 . 12345,
192.168.0.77 . 4321
}
}
这些是规则:
chain natprerouting {
type nat hook prerouting priority dstnat; # =-100
# ACCEPTED:
dnat ip to tcp dport map @mymap
# ERROR AT PARSING (unexpected string: @myset):
dnat ip addr . port to @myset
}
chain forward {
type filter hook forward priority filter; # =0
# ERROR AT PARSING (unexpected dport):
ip daddr tcp dport map @mymap accept
# ACCEPTED:
ip daddr . tcp dport @myset accept
}
}
dnat to
如果可以接受的话,它会起作用放。我可以转换一个地图变成一个放(或相反亦然)?有办法吗?
答案1
无需显式接受每个 DNATed 连接在前向链中,因为连接跟踪已经了解 DNAT。
ct status dnat accept
只需像这样使用:
table inet filter {
chain forward {
type filter hook forward priority filter; # =0
# THIS ONE AUTOMATICALLY ACCEPTS ALL OUR DNATed PACKETS
ct status dnat accept
}
}