如何配置IPTABLE的NFTABLES CAPEROR

时间:2020-03-05 15:26:19  来源:igfitidea点击:

本文将展示如何在Linux盒上安装nftables,以作为防火墙和互联网网关。
如何构建带有nftables的Linux内核,如何安装Nftables使用空间以及IT的依赖关系以及NFT实用程序来执行网络过滤和IP地址转换。

nftables项目旨在通过更新的一个和用户空间工具,nft,替换当前的NetFilter工具,例如iptables,Eptables,Agptable和内核空间基础设施,NFT具有简化和清洁的语法,但保持了本质我们现在使用的工具。

检查你的内核

nftables自内核3.13以来在Linux内核树上,我们只需使用通常的内核配置工具和构建它来启用相对于NFTABLE的符号。
但是,Masquerade和重定向网络地址转换目标分别在内核3.18和3.19中引入,并且期望NAT。

使用以下命令获取内核发布号码

uname -r

要检查是否已编译NF_Tables模块,请尝试此操作

modinfo nf_tables

我们应该查看与模块相关的信息,但如果我们收到错误,则需要另一个内核。

构建一个兼容的内核的nftables

让我们编译内核4.2,它是我写这个的最新稳定内核,并拥有我们所需要的nftables。

输入/usr/src

cd /usr/src

从kernel.org下载Linux内核的XZ包

wget --no-check-certificate https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.tar.xz

提取XZ包上的源

tar Jxvf linux-4.2.tar.xz

移动旧Linux内核树

mv linux linux-old

创建新的Linux树的链接

ln -s linux-4.2 linux

将旧的.config复制到新内核树

cp linux-old/.config linux/.config

然后输入Linux内核树

cd linux

现在使用OldDefConfig目标为新内核进行准备,为新内核进行准备,这维护了当前的内核设置并将新符号设置为默认值。

make olddefconfig

现在,使用menuconfig选项浏览校舍的菜单并遵循与nftables相关的选项

make menuconfig

网络支持

网络选项

网络数据包过滤框架(NetFilter)

核心NetFilter配置

启用NetFilter NF_Tables支持和相关模块

启用NFTABLE和相关模块

现在上升一个级别,返回主要的NetFilter设置并输入IP:NetFilter配置

输入IPv4 NetFilter设置

在那里,我们可以为NF_Tables和伪装和重定向目标启用NAT链。

为IPv4启用NFTABLE NAT支持

我们现在已经使用了Nftables,记得检查是否有关特定需求的任何内核设置不会丢失并保存.config

然后制作并制作模块

make && make modules

手动将内核安装到/启动,因此如果我们错过了一些问题,我们可以使用旧内核。

cp arch/x86_64/boot/bzImage /boot/vmlinuz-4.2
cp system.map /boot/system.map-4.2
cp .config /boot/config-4.2

安装内核模块

make modules_install

boot子

有些设置可能需要初始ramdisk启动,因此如果根分区位于LVM下,RAID或者根文件系统的模块未构建内核。

以下示例创建压缩的ramdisk文件/boot/initrd-4.2gz,这将等待8秒钟在vGroup逻辑卷组的rootfs分区上引导,它将加载来自内核4.2.0的XFS和Ext4文件系统的模块

mkinitrd -w 8 -c-c -f ext4-m ext4:xfs -l -r/dev/vgroup/rootfs -k 4.2.0 -o /boot/initrd-4.2.gz

如果我们有一个,请为引导加载程序添加一个新选项,如果我们有一个,请指向内核和ramdisk;在lilo上,我们应该在/etc/lilo.conf中添加这样的内容

image     = /boot/vmlinuz-4.2
root     = /dev/vgroup/rootfs
label     = linux-4.2
initrd     = /boot/initrd-4.2.gz
read-only

系统重新启动后,再次检查模块。

modinfo nf_tables

ModInfo NF_Tables.

我们应该看到类似于上面的图像的内容,否则,尝试查看上面的步骤并尝试将所有NetFilter相关符号标记为模块。

之后,制作和安装这些模块

make modules && make modules install

安装NFT工具

现在是时候安装nftables用户空间实用程序,nft,更换传统的iptables及其朋友,但在我们做到之前,我们需要安装所需的共享库来构建NFT本身。

GMP - GNU多重精度算术库下载并提取包

wget https://gmplib.org/download/gmp/gmp-6.0.0a.tar.xz tar Jxvf gmp-*

构建和安装

cd gmp* && ./configure && make && make install

Libreadline - GNU Readline库

如果我们计划在交互模式下使用NFT,我们将需要此库,这是可选的未在此处介绍。

下载,提取和输入源树。

wget ftp://ftp.gnu.org/gnu/readline/readline-6.3.tar.gz && tar zxvf readline * && cd Readline *

配置它以使用NCURSES,然后进行制作并安装。

./configure --with-curses && make && make安装

用于网络链接开发人员的libmnl minimalistic用户空间库

下载,扩展和输入源树

wget http://www.netfilter.org/projects/libmnl/files/libmnl-1.0.3.tar.bz2 && tar jxvf libmnl- * && cd libmnl- *

配置,制作和安装

./configure && make && make install

libnftnl.

下载,提取和输入源树

wget http://www.netfilter.org/projects/libnftnl/files/libnftnl-1.0.3.tar.bz2 && tar jxvf libnftnl* && cd libnftnl*

配置制作和安装。

./configure && make && make install

建立并安装nft

下载,提取并输入源树。

wget http://www.netfilter.org/projects/nftables/files/nftables-0.4.tar.bz2 && tar jxvf nftables*

然后配置,制作和安装

./configure && make && make install

请注意,我们可以使用 - 配置脚本--without-cli标志,它将禁用交互式命令行界面和Readline库的需要。

使用nftables.

首先,你可以做的,是加载IPv4网络的基本模板表,可以在NFT工具源树上找到,当然你可以用手做,但请记住,这总是一个好主意确实开始简单。

加载IPv4过滤表定义

nft -f files/nftables/ipv4-filter

加载NAT表

nft -f files/nftables/ipv4-nat

加载也是一个好主意

nft -f files/nftables/ipv4-mangle

现在列出你的表

nft list tables

将任何新数据包放在此机器上

nft add rule filter input ct state new drop

接受来自与既定连接相关的数据包

nft add rule filter input ct state related,established accept

大多数Linux系统运行openssh,它是一个好主意接受与TCP端口22的连接,因此我们可以访问SSH服务。

nft insert rule filter input tcp port 22 accept

现在列出表,并查看事物的方式

nft list table filter

执行网络地址转换(NAT)

创建规则以翻译来自网络的IP地址192.168.1.0/24并在发送之前计算。

nft add rule nat postrouting ip saddr 192.168.1.0/24 counter masquerade

看看你的规则,这次追加'-a'标志来获得更多细节,你会看到

nft list table nat -a

启用转发

我们还需要在内核上启用IP转发

sysctl -w net.ipv4.ip_forward=1

要在启动时启用转发,请将以下句子放在/etc/sysctl.conf文件中,这可能需要在某些发行版上创建。

net.ipv4.ip_forward=1

我们还可以通过proc文件系统启用转发,运行以下命令执行此操作,并将其放在RC脚本的末尾,如RC.local,以在启动时启用转发

echo 1 > /proc/sys/net/ipv4/ip_forward

保存表格

要保存设置,请将列表命令的输出重定向到文件

保存过滤表

nft list table filter -a > /etc/firewall.tables

现在添加NAT表,请注意我们使用">"两次。

nft list table nat -a >> /etc/firewall.tables

然后添加剪辑表

nft list table mangle -a >> /etc/firewall.tables

现在我们只需要在系统启动时加载此文件

nft -f /etc/firewall.tables