Skip to content
Eternal Center

Eternal Center

  • Single-Node (单节点)
    • System (系统)
    • Service (服务)
    • Database (数据库)
    • Container (容器)
    • Virtualization (虚拟化)
  • Multi-Node (多节点)
    • Cluster (集群)
    • Big Data (大数据)
    • Cloud Computing (云计算)
    • Batch Processing (批量处理)
  • Approach (方式方法)
    • Languages (语言)
    • Ideas (思路)
    • Programing (编程)
    • Project (项目)
  • Eternity (永恒)
    • News (消息)
    • Creations (创作)
    • Classics (经典)
    • Legends (传说)
    • Chronicle (编年史)
    • FNIOS (宇宙公民开源学院)

Category: System Login Security (系统登录安全)

Posted on February 22, 2021June 3, 2024

[工具] Shell 自动化部署 GRUB2 Bootloader 密码 (openSUSE & SLES 版)

介绍

基本信息

作者:朱明宇
名称:自动化部署 GRUB2 Bootloader 密码(openSUSE & SLES 版)
作用:自动化部署 GRUB2 Bootloader 密码(openSUSE & SLES 版)

使用方法

1. 给此脚本添加执行权限
2. 执行此脚本
3. 当启动系统时,左下角出现以下内容时按下 “E”:
C: Command Line E: Edit Entry

注意

1. 登录的账号是 root
2. 登录的密码是 eternalcenter

脚本

#!/bin/bash

echo "#!/bin/sh
exec tail -n +3 \$0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
set superusers=\"root\"
password_pbkdf2 root grub.pbkdf2.sha512.10000.B857B79D02FF55CA3A69B8485C1A4A427424630C804CC8A89134520A34E056D7882A778F6BC8AD856CB95DF8B99BE25F9FEAD899D826BB3915FB20BAD682D10A.4A1CF49B7F815A0578031CCA2CE98C66BDFBEAB0AE2721531BB54AFC6CFFA990FBD9062F41C006376C283B717FEC1BD9BB1AFB882AF91B5F4A812459D7974D1F
export superusers
set unrestricted_menu=\"y\"
export unrestricted_menu" > /etc/grub.d/40_custom

grep "rd.shell=0" /etc/default/grub
if [ $? -ne 0 ];then
        sed -i '/GRUB_CMDLINE_LINUX_DEFAULT="/s/"$/ rd.shell=0"/' /etc/default/grub
fi

grep "showopts" /etc/default/grub
if [ $? -ne 0 ];then
        sed -i '/GRUB_CMDLINE_LINUX_DEFAULT="/s/"$/ showopts"/' /etc/default/grub
fi

grep "LANG=C" /etc/default/grub
if [ $? -ne 0 ];then
        sed -i '/GRUB_CMDLINE_LINUX_DEFAULT="/s/"$/ LANG=C"/' /etc/default/grub
fi

grub2-mkconfig -o /boot/grub2/grub.cfg
Posted on February 4, 2021July 9, 2023

[实验] Linux SSH 内网穿透

步骤一:规划拓扑

1.1 服务器列表

客户端电脑
外网服务器
内网服务器

1.2 拓扑图

客户端电脑 外网服务器 内网服务器

1.3 拓扑图简介

内网服务器建立到外网服务器的 SSH 通道
客户端电脑通过 SSH 外网服务器连接到内网服务器
内网服务器就算没有公网 IP 地址也能被 SSH 上

步骤二:系统环境要求

1) 所有服务器的系统都需要是 Linux 版本
2) 所有服务器都要关闭防火墙
3) 内网服务器要能够 ping 通外网服务器
4) 客户端电脑要能够 ping 通外网服务器

步骤三:创建用于 SSH 内网穿透的用户

3.1 创建用于 SSH 内网穿透的用户

(分别在内网服务器和外网服务器上执行以下步骤)

# useradd <user for intranet penetration>

3.2 给用于 SSH 内网穿透的用户设置密码

(分别在内网服务器和外网服务器上执行以下步骤)

# passwd <user for intranet penetration>

步骤四:创建用于内 SSH 内网穿透的 SSH 密钥

4.1 进入到用户

(分别在内网服务器和外网服务器上执行以下步骤)

# su - <user for intranet penetration>

4.2 创建用于内 SSH 内网穿透的 SSH 密钥

(分别在内网服务器和外网服务器上执行以下步骤)

$ ssh-keygen

4.3 退出用户

(分别在内网服务器和外网服务器上执行以下步骤)

$ exit

步骤五:让内网服务器可以无密码访问外网服务器

5.1 进入到用户

(只在内网服务器上执行以下步骤)

# su - <user for intranet penetration>

5.2 将内网服务器的公钥拷贝到外网服务器

(只在内网服务器上执行以下步骤)

$ ssh-copy-id <IP address of Internet server>

5.3 退出用户

(只在内网服务器上执行以下步骤)

$ exit

步骤六:让外网服务器可以无密码访问自己

6.1 进入到用户

(只在外网服务器上执行以下步骤)

# su - <user for intranet penetration>

6.2 将内网服务器的公钥拷贝到外网服务器

(只在外网服务器上执行以下步骤)

$ ssh-copy-id 127.0.0.1

6.3 退出用户

(只在外网服务器上执行以下步骤)

$ exit

步骤七:实现内网服务器到外网服务器的 SSH 内网穿透

7.1 实现内网服务器到外网服务器的 SSH 通道

# su - <user for intranet penetration>
$ ssh -X -fCNR 11000:localhost:22 <IP address of Internet server>

(补充:这里以使用用于内网穿透的用户将内网服务器的 22 端口影射到外网服务器的 11000 端口为例)

(
注意:如果在内网服务器和外网服务器上创建的用于 SSH 内网穿透的用户名称不一样,则需要在最后 SSH 时添加上外网服务器上用于 SSH 的用户名

# su - <user for intranet penetration>
$ ssh -X -fCNR 11000:localhost:22 <user for intranet penetration>@<IP address of Internet server>

)

或者:

# ps -aux | grep -v grep | grep "11000:localhost:22 <IP address of Internet server>" &> /dev/null || su - <user for intranet penetration> -c 'ssh -X -fCNR 11000:localhost:22 <IP address of Internet server>'

(
注意:如果在内网服务器和外网服务器上创建的用于 SSH 内网穿透的用户名称不一样,则需要在最后 SSH 时添加上外网服务器上用于 SSH 的用户名

# ps -aux | grep -v grep | grep "11000:localhost:22 <IP address of Internet server>" &> /dev/null || su - <user for intranet penetration> -c 'ssh -X -fCNR 11000:localhost:22 <user for intranet penetration>@<IP address of Internet server>'

)

(补充:这里以使用用于内网穿透的用户将内网服务器的 22 端口影射到外网服务器的 11000 端口为例)

7.2 实现外网服务器 SSH 端口的影射

# su - <user for intranet penetration>
$ ssh -X -fCNL *:10000:localhost:11000 localhost

或者:

# ps -aux | grep -v grep | grep "*:10000:localhost:11000 localhost" || su - <user for intranet penetration> -c 'ssh -X -fCNL *:10000:localhost:11000 localhost'

(补充:这里以使用用于内网穿透的用户将外网服务器的 10000 端口影射到外网服务器的 11000 端口为例)

步骤八:客户端电脑使用 SSH 外网穿透

# ssh -p 10000 <user for intranet penetration>@<IP address of Internet server>

(补充:SSH 成功后,客户端电脑就可以直接 SSH 到内网服务器中了)

Posted on January 15, 2021July 9, 2023

[命令] Linux 命令 sshpass (密码非交互式 ssh) (转载)

sshpass的安装使用
 
1:sshpass下载与安装
     yum安装:

    yum install sshpass

     若yum安装不上,则用下面方法

        https://sourceforge.net/projects/sshpass/files/
          or
        https://pan.baidu.com/s/1pLNxeLd
         or
        wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz



 
2:下载后,解压,安装

      

        tar -zxvf sshpass-1.06.tar.gz
        cd sshpass-1.06
        ./configure
        make
        make install


3:使用命令

         

    sshpass -p 123456 scp /home/file.txt root@10.0.0.37:/home/copy



      后面这个是 “Are you sure you want to continue connecting (yes/no)”使得这个自动接受,若不加,则成功不了
 
4:脚本

    复制代码

          #!/bin/bash
            password=123456
            user=root
            ip=10.0.0.37
            file=/home/file.txt
           sshpass -p $password scp file $user@$ip:/home/copy/


————————————————
版权声明:本文为CSDN博主「totoroKing」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30553235/article/details/78711491

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z
Posted on December 30, 2020November 22, 2024

[步骤] GRUB2 Bootloader 密码的设置 (openSUSE & SLES 版)

步骤一:生成密码的 GRUB2 密码的 SHA512 值

# grub2-mkpasswd-pbkdf2
Enter password: 
Reenter password: 
PBKDF2 hash of your password is 
grub.pbkdf2.sha512.10000.
B857B79D02FF55CA3A69B8485C1A4A427424630C804CC8A89134520A34E056D7882A778F6BC8AD856CB95DF8B99BE25F9FEAD899D826BB3915FB20BAD682D10A.4A1CF49B7F815A0578031CCA2CE98C66BDFBEAB0AE2721531BB54AFC6CFFA990FBD9062F41C006376C283B717FEC1BD9BB1AFB882AF91B5F4A812459D7974D1F

(补充:这里以生成 eternalcenter 的 GRUB2 SHA512 值为例)

(注意:grub.pbkdf2.sha512.10000……. 后面的一长串字母和数字其实是 1 行,这里因为是显示问题所以看上去是多行)

步骤二:创建 GRUB2 密码文件

# vim /etc/grub.d/40_custom

创建以下内容:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.
B857B79D02FF55CA3A69B8485C1A4A427424630C804CC8A89134520A34E056D7882A778F6BC8AD856CB95DF8B99BE25F9FEAD899D826BB3915FB20BAD682D10A.4A1CF49B7F815A0578031CCA2CE98C66BDFBEAB0AE2721531BB54AFC6CFFA990FBD9062F41C006376C283B717FEC1BD9BB1AFB882AF91B5F4A812459D7974D1F
export superusers
set unrestricted_menu="y"
export unrestricted_menu

(
补充:
1) 登录用户 root
2) 登录密码 eternalcenter
3) 这里的 grub.pbkdf2.sha512.10000.B857B…… 是由步骤一生成的
)

(
注意:
1) password_pbkdf2 root 和 grub.pbkdf2.sha512.10000…… 其实是 1 行,中间只有 1 个空格,应该写成 password_pbkdf2 root grub.pbkdf2.sha512.10000……,这里因为是显示问题所以看上去是 2 行
2) password_pbkdf2 root grub.pbkdf2.sha512.10000……. 后面的一长串字母和数字其实是 1 行,从 export superusers 开始才是独立的 1 行,这里因为是显示问题所以看上去是多行
)

步骤三:修改 /etc/default/grub 参数

# vim /etc/default/grub

在这一行里:

GRUB_CMDLINE_LINUX_DEFAULT="......"

添加:

GRUB_CMDLINE_LINUX_DEFAULT="...... rd.shell=0 showopts LANG=C/g"

步骤四:让刚刚创建的 GRUB2 密码文件生效

# grub2-mkconfig -o /boot/grub2/grub.cfg

步骤五:测试 GRUB2 Bootloader 密码

5.1 重启系统

5.2 进入到 GRUB2 Bootloader 模式

当启动系统时,左下角出现以下内容时按下 “E” 键

    C: Command Line    E: Edit Entry

参考文献:

https://www.suse.com/support/kb/doc/?id=000019331

Posted on November 12, 2020October 26, 2022

[命令] Linux 命令 nftables (设置防火墙) (转载)

nftables脚本例子:过滤和NAT

#! /bin/bash
 
#清空当前规则集:
nft flush ruleset
#查询当前规则集:
nft list ruleset
#添加一个表:
nft add table inet filter
 
#添加input、forward和output三个基本链。input和forward的默认策略是drop。output的默认策略是accept。
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }
nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }
 
#添加两个与TCP和UDP关联的常规链:
nft add chain inet filter TCP
nft add chain inet filter UDP
#related和established的流量会accept:
nft add rule inet filter input ct state related,established accept
#loopback接口的流量会accept:
nft add rule inet filter input iif lo accept
#无效的流量会drop:
nft add rule inet filter input ct state invalid drop
#新的echo请求(ping)会accept:
nft add rule inet filter input ip protocol icmp icmp type echo-request ct state new accept
#新的UDP流量跳转到UDP链:
nft add rule inet filter input ip protocol udp ct state new jump UDP
#新的TCP流量跳转到TCP链:
nft add rule inet filter input ip protocol tcp tcp flags \& \(fin\|syn\|rst\|ack\) == syn ct state new jump TCP
 
#未由其他规则处理的所有通信会reject:
nft add rule inet filter input ip protocol udp reject
nft add rule inet filter input ip protocol tcp reject with tcp reset
nft add rule inet filter input counter reject with icmp type prot-unreachable
 
#web服务器的连接端口80:
nft add rule inet filter TCP tcp dport 80 accept
#打开web服务器HTTPS连接端口443:
nft add rule inet filter TCP tcp dport 443 accept
#允许SSH连接端口22:
nft add rule inet filter TCP tcp dport 22 accept
 
 
 
#NAT
#删除规则表 dnat1
#nft delete table ip dnat1 
 
#增加规则表 dnat1
nft add table ip dnat1 
 
#在表dnat1中增加一条链 prerouting [SNAT]
nft add chain dnat1 prerouting { type nat hook prerouting priority 0 \;}
 
#在表dnat1中增加一条链 postrouting [DNAT]
nft add chain dnat1 postrouting { type nat hook postrouting priority 100 \; }
 
#
nft add rule dnat1 prerouting ip daddr 192.168.1.1 tcp dport 80 counter dnat 172.16.1.2:80
nft add fule dnat1 postrouting ip daddr 172.16.1.2 tcp dport 80 counter snat to 172.16.1.1 
#
nft add rule dnat1 prerouting ip saddr 172.16.1.2 tcp sport 80 counter dnat 192.168.1.2
nft add rule dnat1 postrouting ip saddr 172.16.1.2 tcp sport 80 counter snat to 192.168.1.1

————————————————
版权声明:本文为CSDN博主「linranguo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangcg123/article/details/108739367

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z

站主补充:

补充目录:
站主补充一:开启 nft 防火墙的方法
1.1 清空 iptables 防火墙
1.1.1 清空 iptables 防火墙
1.1.2 清空 ip6tables 防火墙
1.2 关闭 firewalld 防火墙
1.2.1 取消 firewalld 防火墙的开机自启
1.2.2 关闭 firewalld 防火墙
1.3 启动 nfttables 防火墙
1.3.1 将 nfttables 防火墙设置为开机自启
1.3.2 启动 nftables 防火墙
1.3.3 情况 nfttables 防火墙

站主补充二:添加 nft 防火墙规则
2.1 创建 nft 防火墙的表、链和测试规则
2.2 在 nft 防火墙开头添加一条规则
2.3 在 nft 防火墙结尾追加一条规则
2.4 在 nft 防火墙中间增加规则
2.4.1 使用 index 索引作为位置参考添加规则
2.4.1.1 在 nft 防火前中间插入一条规则
2.4.1.2 在 nft 防火墙中间追加一条规则
2.4.1.3 查看刚刚创建的 nft 表、链和规则
2.4.2 使用 handle 句柄作为位置参考添加规则
2.4.2.1 查看 handle 句柄
2.4.2.2 在 nft 防火前中间插入一条规则
2.4.2.3 在 nft 防火墙中间追加一条规则
2.4.2.4 查看刚刚创建的 nft 表、链和规则
2.4.2.5 在添加规则的同时显示 handle 值

站主补充三:在 nft 防火墙中间删除规则
3.1 查看 handle 句柄
3.2 删除规则
3.3 查看删除后的表和链

站主补充四:列出 nft 规则
4.1 列出某张表里的所有规则
4.2 列出某张表里某个链里的所有规则

站主补充五:一次性给 nft 防火墙设置多 IP 地址或多端口
5.1 直接一次性给 nft 防火墙设置多个 IP 地址或多端口
5.1.1 直接一次性给 nft 防火墙设置多个 IP 地址
5.1.2 直接一次性给 nft 防火墙设置多个端口
5.1.3 直接一次性给某个 IP 地址添加某个端口为例
5.1.4 查看添加后的表和链
5.2 将多个 IP 地址或多端口放到一个组里再设置
5.2.1 nft 创建组
5.2.1.1 nft 创建组的格式
5.2.1.1.1 nft 创建不支持 IP 地址区间组的格式
5.2.1.1.2 nft 创建支持 IP 地址区间组的格式
5.2.1.2 nft 创建组的数据类型
5.2.2 将多个 IP 地址或多端口放到一个组里再设置(不支持 IP 区间)
5.2.2.1 创建一个组
5.2.2.1.1 创建一个组
5.2.2.1.2 查看刚刚创建的组
5.2.2.2 设置组的默认属性
5.2.2.3 给组里添加元素
5.2.2.4 查看刚刚创建的组
5.2.3 将多个 IP 地址或多端口放到一个组里再设置(支持 IP 区间)
5.2.3.1 创建一个组
5.2.3.2 给组里添加元素
5.2.3.3 查看刚刚创建的组
5.2.4 将多个 IP 地址或多端口放到一个组里再设置(同时使用多个数据类型)
5.2.4.1 创建一个组
5.2.4.2 查看刚刚创建的组
5.2.4.3 给组里添加元素
5.2.4.4 将同时使用多个数据类型的组引用到链中

站主补充六:nft 字典
6.1 nft 无名字典
6.1.1 创建表
6.1.2 创建要使用链
6.1.3 创建和 TCP 协议相关的链
6.1.4 创建和 UDP 协议相关的链
6.1.5 给要使用的链设置字典
6.1.6 查看字典
6.2 nft 有名字典
6.2.1 创建表
6.2.2 创建要使用链
6.2.3 创建字典
6.2.4 给字典添加元素
6.2.5 将字典引用到链中

站主补充七:备份和恢复 nft 规则
7.1 备份 nft 规则
7.2 恢复 nft 规则

站主补充八:nftiptables 的使用案例
8.1 前期准备工作
8.1.1 查看已有的 nftiptables 策略
8.1.2 清除所有 nftiptables 策略
8.2 nftiptables 的使用案例
8.2.1 创建 nftiptables 表的案例
8.2.2 创建 nftiptables 链的案例
8.2.2.1 案例一:创建 input 链
8.2.2.2 案例二:创建 output 链
8.2.2.3 案例三:创建 forward 链
8.2.2.4 案例四:创建 TCP 链
8.2.2.5 案例五:创建 UPD 链
8.2.3 nftiptables 规则的案例
8.2.3.1 案例一:允许正在连接的连接连入
8.2.3.2 案例二:允许本地可以连入
8.2.3.3 案例三:丢掉无效的流量
8.2.3.4 案例四:允许被 ping
8.2.3.5 案例五:允许新的 UDP 流量跳到 UDP 链
8.2.3.6 案例六:允许新的 TCP 流量跳到 TCP 链
8.2.3.7 案例七:没有其它规则处理的 UDP 流量都会被拒绝
8.2.3.8 案例八:没有其它规则处理的 TCP 流量都会被拒绝
8.2.3.9 案例九:没有其它规则处理的 ICMP 流量都会被拒绝
8.2.3.10 案例十:对所有访问者开放某一个端口
8.2.3.11 案例十一:拒绝某一个 IP 地址访问某一个端口
8.2.3.12 案例十二:某一个端口除了某一个 IP 地址以外的所有禁止访问
8.2.3.13 案例十三:将朝向某一个 IP 地址的某一个端口指向另一个 IP 地址的某一个端口
8.2.3.14 案例十四:将朝向某一个 IP 地址的流量指向另一个 IP 地址
8.2.4 nftiptables 备份和恢复的案例
8.2.4.1 备份 nft 规则
8.2.4.2 恢复 nft 规则

具体的补充:
站主补充一:开启 nft 防火墙的方法
1.1 清空 iptables 防火墙
1.1.1 清空 iptables 防火墙
# iptables -F

1.1.2 清空 ip6tables 防火墙
# ip6tables -F

1.2 关闭 firewalld 防火墙
1.2.1 取消 firewalld 防火墙的开机自启
# systemctl disable firewalld

1.2.2 关闭 firewalld 防火墙
# systemctl stop firewalld

1.3 启动 nfttables 防火墙
1.3.1 将 nfttables 防火墙设置为开机自启
# systemctl enable nftables

1.3.2 启动 nftables 防火墙
# systemctl start nftables

1.3.3 清空 nfttables 防火墙规则
# nft flush ruleset

站主补充二:添加 nft 防火墙规则
2.1 创建 nft 防火墙的表、链和测试规则
# nft flush ruleset
# nft add table inet filter
# nft add chain inet filter input { type filter hook forward priority 0 \; policy accept \; }
# nft add rule inet filter input tcp dport 1000 accept
# nft add rule inet filter input tcp dport 1001 accept
# nft add rule inet filter input tcp dport 1002 accept

(
补充:
(1)添加 filter 表
(2)添加默认允许所有连接都进入的 input 链
(3)添加允许 TCP 1000 端口、TCP 1001 端口 和 TCP 1002 的规则
)

2.2 在 nft 防火墙开头添加一条规则
# nft insert rule inet filter input tcp dport 999 accept

(补充:这里以在 filter 表 input 链的开头添加允许 TCP 999 端口进入为例)

2.3 在 nft 防火墙结尾追加一条规则
# nft add rule inet filter input tcp dport 1003 accept

(补充:这里以在 filter 表 input 链的结尾添加允许 TCP 1003 端口进入为例)

2.4 在 nft 防火墙中间增加规则
2.4.1 使用 index 索引作为位置参考添加规则
2.4.1.1 在 nft 防火前中间插入一条规则
# nft insert rule inet filter input index 0 tcp dport 997 accept

(补充:这里以在 filter 表 input 链的第一个位置插入允许 TCP 1003 端口进入为例)

2.4.1.2 在 nft 防火墙中间追加一条规则
# nft add rule inet filter input index 0 tcp dport 998 accept

(补充:这里以在 filter 表 input 链的第一个位置追加允许 TCP 998 端口进入为例)

2.4.1.3 查看刚刚创建的 nft 表、链和规则
# nft list ruleset
table inet filter {
	chain input {
		type filter hook forward priority filter; policy accept;
		tcp dport 997 accept
		tcp dport 999 accept
		tcp dport 998 accept
		tcp dport 1000 accept
		tcp dport 1001 accept
		tcp dport 1002 accept
		tcp dport 1003 accept
	}
}

2.4.2 使用 handle 句柄作为位置参考添加规则
2.4.2.1 查看 handle 句柄
# nft --handle list ruleset
table inet filter { # handle 5
	chain input { # handle 1
		type filter hook forward priority filter; policy accept;
		tcp dport 997 accept # handle 8
		tcp dport 999 accept # handle 6
		tcp dport 998 accept # handle 7
		tcp dport 1000 accept # handle 2
		tcp dport 1001 accept # handle 3
		tcp dport 1002 accept # handle 4
		tcp dport 1003 accept # handle 5
	}
}

(补充:这里是接着前面的步骤在继续)

2.4.2.2 在 nft 防火前中间插入一条规则
# nft insert rule inet filter input handle 7 tcp dport 101 accept

(补充:这里以在 filter 表 input 链的 handle 7 位置插入允许 TCP 101 端口进入为例)

2.4.2.3 在 nft 防火墙中间追加一条规则
# nft add rule inet filter input handle 3 tcp dport 101 accept

(补充:这里以在 filter 表 input 链的 handle 3 位置追加允许 TCP 101 端口进入为例)

2.4.2.4 查看刚刚创建的 nft 表、链和规则
# nft --handle list ruleset
table inet filter { # handle 5
	chain input { # handle 1
		type filter hook forward priority filter; policy accept;
		tcp dport 997 accept # handle 8
		tcp dport 999 accept # handle 6
		tcp dport 101 accept # handle 9
		tcp dport 998 accept # handle 7
		tcp dport 1000 accept # handle 2
		tcp dport 1001 accept # handle 3
		tcp dport 101 accept # handle 10
		tcp dport 1002 accept # handle 4
		tcp dport 1003 accept # handle 5
	}
}

(补充:这里是接着前面的步骤在继续)

2.4.2.5 在添加规则的同时显示 handle 值
# nft --echo --handle add rule inet filter input tcp dport 10000 accept
add rule inet filter input tcp dport 10000 accept # handle 11

(补充:这里以在 filter 表 input 链的结尾添加允许 TCP 10000 端口进入并显示 handle 编号为例)

站主补充三:在 nft 防火墙中间删除规则
3.1 查看 handle 句柄
# nft --handle list ruleset
table inet filter { # handle 5
	chain input { # handle 1
		type filter hook forward priority filter; policy accept;
		tcp dport 997 accept # handle 8
		tcp dport 999 accept # handle 6
		tcp dport 101 accept # handle 9
		tcp dport 998 accept # handle 7
		tcp dport 1000 accept # handle 2
		tcp dport 1001 accept # handle 3
		tcp dport 101 accept # handle 10
		tcp dport 1002 accept # handle 4
		tcp dport 1003 accept # handle 5
		tcp dport 10000 accept # handle 11
	}
}

(补充:这里是接着前面的步骤在继续)

3.2 删除规则
# nft delete rule inet filter input handle 2

(补充:这里以在 filter 表 input 链中删除编号为 handle 2 的规则为例)

3.3 查看删除后的表和链
# nft --handle list ruleset
table inet filter { # handle 5
	chain input { # handle 1
		type filter hook forward priority filter; policy accept;
		tcp dport 997 accept # handle 8
		tcp dport 999 accept # handle 6
		tcp dport 101 accept # handle 9
		tcp dport 998 accept # handle 7
		tcp dport 1001 accept # handle 3
		tcp dport 101 accept # handle 10
		tcp dport 1002 accept # handle 4
		tcp dport 1003 accept # handle 5
		tcp dport 10000 accept # handle 11
	}
}

(补充:这里是接着前面的步骤在继续)

站主补充四:列出 nft 规则
4.1 列出某张表里的所有规则
# nft list table inet filter

4.2 列出某张表里某个链里的所有规则
# nft list chain inet filter input
table inet filter {
	chain input {
		type filter hook forward priority filter; policy accept;
		tcp dport 997 accept
		tcp dport 999 accept
		tcp dport 101 accept
		tcp dport 998 accept
		tcp dport 1001 accept
		tcp dport 101 accept
		tcp dport 1002 accept
		tcp dport 1003 accept
		tcp dport 10000 accept
	}
}

(补充:这里是接着前面的步骤在继续)

站主补充五:一次性给 nft 防火墙设置多 IP 地址或多端口
5.1 直接一次性给 nft 防火墙设置多个 IP 地址或多端口
5.1.1 直接一次性给 nft 防火墙设置多个 IP 地址
# nft add rule inet filter input ip saddr { 172.16.0.1, 172.16.0.2, 172.16.0.3 } accept

(补充:这里以在 filter 表 input 链的开头添加允许 172.16.0.1、172.16.0.2、172.16.0.3 IP 地址进入为例)

5.1.2 直接一次性给 nft 防火墙设置多个端口
# nft add rule inet filter input tcp dport { http, nfs, ssh } accept

(补充:这里以在 filter 表 input 链的开头添加允许 http、nfs、ssh 端口进入为例)

5.1.3 直接一次性给某个 IP 地址添加某个端口为例
# nft add rule inet filter input ip saddr . meta l4proto . tcp dport { 172.16.1.200 . tcp . 443 } accept

(补充:这里以在 filter 表 input 链的开头添加允许 172.16.1.200 IP 地址 TCP 443 端口进入为例)

5.1.4 查看添加后的表和链
# nft list ruleset

5.2 将多个 IP 地址或多端口放到一个组里再设置
5.2.1 nft 创建组
5.2.1.1 nft 创建组的格式
5.2.1.1.1 nft 创建不支持 IP 地址区间组的格式
# nft add set inet <表名> <组名> { type <数据类型> \;}

5.2.1.1.2 nft 创建支持 IP 地址区间组的格式
# nft add set inet <表名> <组名> { type <数据类型> \; flags interval \; }

5.2.1.2 nft 创建组的数据类型
ipv4_addr ipv4 地址
ipv4_addr ipv6 地址
ether_addr:网卡的 MAC 地址
inet_proto:网络协议
inet_service:网络服务
mark:标记

5.2.2 将多个 IP 地址或多端口放到一个组里再设置(不支持 IP 区间)
5.2.2.1 创建一个组
5.2.2.1.1 创建一个组
# nft add set inet filter one { type ipv4_addr \; }

(补充:这里以在 filter 表中创建使用 ipv4_addr 数据类型名为 one 的组为例)

5.2.2.1.2 查看刚刚创建的组
# nft list sets
table inet filter {
	set one {
		type ipv4_addr
	}
}

5.2.2.2 设置组的默认属性
# nft insert rule inet filter input ip saddr @one drop

(补充:这里以将 one 组设置为黑名单的性质为例)

# nft list chain inet filter input
table inet filter {
	chain input {
		type filter hook forward priority filter; policy accept;
		ip saddr @one drop
		tcp dport 997 accept
		tcp dport 999 accept
		tcp dport 101 accept
		tcp dport 998 accept
		tcp dport 1001 accept
		tcp dport 101 accept
		tcp dport 1002 accept
		tcp dport 1003 accept
		tcp dport 10000 accept
		ip saddr { 172.16.0.1, 172.16.0.2, 172.16.0.3 } accept
		tcp dport { 22, 80, 2049 } accept
	}
}

5.2.2.3 给组里添加元素
# nft add element inet filter one { 172.16.0.10, 172.16.0.11, 172.16.0.12}

(补充:这里以在 filter 表 one 组里添加 172.16.0.10, 172.16.0.11, 172.16.0.12 IP 地址元素为例)

5.2.2.4 查看刚刚创建的组
# nft list set inet filter one
table inet filter {
	set one {
		type ipv4_addr
		elements = { 172.16.0.10, 172.16.0.11,
			     172.16.0.12 }
	}
}

5.2.3 将多个 IP 地址或多端口放到一个组里再设置(支持 IP 区间)
5.2.3.1 创建一个组
# nft add set inet filter two { type ipv4_addr \; flags interval \; }

(补充:这里以在 filter 表中创建使用 ipv4_addr 数据类型名为 two 的组同时使用 flags interval 标签为例)

5.2.3.2 给组里添加元素
# nft add element inet filter two { 172.16.1.0/24 }

或者:

# nft add element inet filter two { 172.16.1.0-172.16.1.255 }

(补充:这里以在 filter 表 one 组里添加 172.16.1.0/24 IP 地址段元素为例)

5.2.3.3 查看刚刚创建的组
# nft list set inet filter two
table inet filter {
	set two {
		type ipv4_addr
		flags interval
		elements = { 172.16.1.0/24 }
	}
}

5.2.4 将多个 IP 地址或多端口放到一个组里再设置(同时使用多个数据类型)
5.2.4.1 创建一个组
# nft add set inet filter three { type ipv4_addr . inet_proto . inet_service \; }

(补充:这里以在 filter 表中创建使用 ipv4_addr、inet_proto、inet_service 数据类型名为 three 的组为例)

5.2.4.2 查看刚刚创建的组
# nft list set inet filter three
table inet filter {
	set three {
		type ipv4_addr . inet_proto . inet_service
	}
}

5.2.4.3 给组里添加元素
# nft add element inet filter three { 172.16.0.200 . tcp . ssh }
# nft add element inet filter three { 172.16.0.201 . tcp . ssh }

(补充:这里以在 filter 表 three 组里添加 172.16.1.0.200、172.16.0.201 IP 地址 tcp ssh 端口元素为例)

5.2.4.4 将同时使用多个数据类型的组引用到链中
# nft add rule inet filter input ip saddr . meta l4proto . tcp dport @three

(补充:这里以在 filter 表 input 链中引入 three 组为例)

站主补充六:nft 字典
6.1 nft 无名字典
6.1.1 创建表
# nft add table inet filter

(补充:这里以创建名为 filter 的表为例)

6.1.2 创建要使用链
# nft add chain inet filter input

(补充:这里以创建名为 input 的链为例)

6.1.3 创建和 TCP 协议相关的链
# nft add chain inet filter tcp_chain

(补充:这里以创建名为 tcp_chain 的链为例)

6.1.4 创建和 UDP 协议相关的链
# nft add chain inet filter udp_chain

(补充:这里以创建名为 udp_chain 的链为例)

6.1.5 给要使用的链设置字典
# nft add rule inet filter input meta l4proto vmap { tcp : jump tcp_chain, udp : jump udp_chain }

(补充:这里以在 filter 表 input 链里设置将 tcp_chain 链作为 TCP 协议将 udp_chain 链作为 UDP 协议的字典为例)

6.1.6 查看字典
# nft list chain inet filter input
table inet filter {
	chain input {
		meta l4proto vmap { tcp : jump tcp_chain, udp : jump udp_chain }
	}
}

6.2 nft 有名字典
6.2.1 创建表
# nft add table inet filter

(补充:这里以创建名为 filter 的表为例)

6.2.2 创建要使用链
# nft add chain inet filter input

(补充:这里以创建名为 input 的链为例)

6.2.3 创建字典
# nft add map inet filter new { type inet_proto : verdict \; }

(补充:这里以在 filter 表里创建名为 new 字典为例)

6.2.4 给字典添加元素
# nft add element inet filter new { 172.16.3.10 : drop, 172.16.3.15 :accept }

(补充:这里以在 new 字典中添加拒绝 172.16.3.10 IP 地址和接收 172.16.3.15 IP 地址的规则为例)

6.2.5 将字典引用到链中
# nft add rule inet filter input ip saddr vmap @new

(补充:这里以在 filter 表 input 链中引用 new 字典为例)

站主补充七:备份和恢复 nft 规则
7.1 备份 nft 规则
# nft list ruleset > /root/nftables

(补充:这里以将 ruleset 规则备份到 /root/nfttables 文件为例)

7.2 恢复 nft 规则
# nft -f /root/nftables

(补充:这里以恢复 /root/nftables 文件里的 nft 规则为例)

站主补充八:nftiptables 的使用案例
8.1 前期准备工作
8.1.1 查看已有的 nftiptables 策略
# nft list ruleset

8.1.2 清除所有 nftiptables 策略
# nft flush ruleset

8.2 nftiptables 的使用案例
8.2.1 创建 nftiptables 表的案例
# nft add table inet filter

(补充:这里以创建 filter 表为例)

8.2.2 创建 nftiptables 链的案例
8.2.2.1 案例一:创建 input 链
# nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }

(补充:这里以在 filter 表中创建默认拒绝所有数据的 input 链为例)

8.2.2.2 案例二:创建 output 链
# nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }

(补充:这里以在 filter 表中创建默认允许所有数据的 output 链为例)

8.2.2.3 案例三:创建 forward 链
# nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }

(补充:这里以在 filter 表中创建默认允许所有数据的 forward 链为例)

8.2.2.4 案例四:创建 TCP 链
# nft add chain inet filter TCP

(补充:这里以在 filter 表中创建 TCP 链为例)

8.2.2.5 案例五:创建 UPD 链
# nft add chain inet filter UDP

(补充:这里以在 filter 表中创建 UDP 链为例)

8.2.3 nftiptables 规则的案例
8.2.3.1 案例一:允许正在连接的连接连入
# nft add rule inet filter input ct state related,established accept

8.2.3.2 案例二:允许本地可以连入
# nft add rule inet filter input iif lo accept

8.2.3.3 案例三:丢掉无效的流量
# nft add rule inet filter input ct state invalid drop

8.2.3.4 案例四:允许被 ping
# nft add rule inet filter input ip protocol icmp icmp type echo-request accept

8.2.3.5 案例五:允许新的 UDP 流量跳到 UDP 链
# nft add rule inet filter input ip protocol udp ct state new jump UDP

8.2.3.6 案例六:允许新的 TCP 流量跳到 TCP 链
# nft add rule inet filter input ip protocol tcp tcp flags \& \(fin\|syn\|rst\|ack\) == syn ct state new jump TCP

8.2.3.7 案例七:没有其它规则处理的 UDP 流量都会被拒绝
# nft add rule inet filter input ip protocol udp reject

8.2.3.8 案例八:没有其它规则处理的 TCP 流量都会被拒绝
# nft add rule inet filter input ip protocol tcp reject with tcp reset

8.2.3.9 案例九:没有其它规则处理的 ICMP 流量都会被拒绝
# nft add rule inet filter input counter reject with icmp type prot-unreachable

8.2.3.10 案例十:对所有访问者开放某一个端口
# nft add rule inet filter TCP tcp dport 80 accept

(补充:这里以对所有访问者开放 80 端口为例)

8.2.3.11 案例十一:拒绝某一个 IP 地址访问某一个端口
# nft add rule inet filter input ip saddr 172.16.0.6 tcp dport 22 drop

(补充:这里以拒绝 172.16.0.6 的 TCP 22 端口为例)

8.2.3.12 案例十二:某一个端口除了某一个 IP 地址以外的所有禁止访问
# nft add rule inet filter input ip saddr 172.16.0.1 tcp dport 22 accept
# nft add rule inet filter input tcp dport 22 drop

(补充:这里以拒绝除 172.16.0.1 以外的所有 IP 地址访问 TCP 22 端口为例)

8.2.3.13 案例十三:将朝向某一个 IP 地址的某一个端口指向另一个 IP 地址的某一个端口
# nft add rule filter input ip daddr 172.16.1.1 tcp dport 80 counter dnat 172.16.1.2:80

(补充:这里以将访问 172.16.1.1 的 80 端口指向 172.16.1.2 的 80 端口为例)

8.2.3.14 案例十四:将朝向某一个 IP 地址的流量指向另一个 IP 地址
# nft add rule filter input ip saddr 172.16.1.2 tcp sport 80 counter dnat 192.168.1.2

(补充:这里以将访问 172.16.1.2 的所有流量指向 172.16.1.2 为例)

8.2.4 nftiptables 备份和恢复的案例
8.2.4.1 备份 nft 规则
# nft list ruleset > /root/nftables

(补充:这里以将 ruleset 规则备份到 /root/nfttables 文件为例)

8.2.4.2 恢复 nft 规则
# nft -f /root/nftables
(补充:这里以恢复 /root/nftables 文件里的 nft 规则为例)

Posts pagination

Previous page Page 1 … Page 17 Page 18 Page 19 … Page 24 Next page

Aspiration (愿景):

Everyone can achieve self-achievement and self-happiness fairly

每个人都能公平地实现自我成就和自我幸福

Logo (徽标):

Additional Information (其他信息):

About     Manual     Clone     Contact
Disclaimer     Friendly Links     Donation

关于     手册     克隆     联系
免责声明     友情链接     捐赠

Search Inside Website (站内搜索)

Search Outside Website (站外搜索):

Google         Wikipedia         Bing

Eternal URL (永恒网址):

https://eternity.eternalcenter.com Will be last access method / 将是最后的访问方式

Proudly powered by LNMP Proudly powered by WordPress