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 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 规则为例)
Posted on November 9, 2020November 22, 2024

[内容] Linux 用户登录的超时时间的设置

内容一:临时设置用户登录的超时时间

# TMOUT=900

或者:

# export TMOUT=0

(
补充:
1) 这里以设置超过 900 秒用户就会超时为例
2) 如果 TMOUT=0 则用户永不会超时
)

内容二:永久设置用户登录的超时时间

2.1 通过 /etc/profile 文件实现

2.1.1 修改 /etc/profile 文件
# vim /etc/profile

添加以下内容:

......
TMOUT=900

(
补充:
1) 这里以设置超过 900 秒用户就会超时为例
2) 如果 TMOUT=0 则用户永不会超时
3) 补充 /etc/bashrc 文件会比 /etc/profile 文件更有优先级
)

2.1.2 使刚刚的设置生效
# source /etc/profile

2.2 通过 /etc/bashrc 文件实现

2.2.1 修改 /etc/bashrc 文件
# vim /etc/bashrc

添加以下内容:

......
TMOUT=900

(
补充:
1) 这里以设置超过 900 秒用户就会超时为例
2) 如果 TMOUT=0 则用户永不会超时
3) 补充 /etc/bashrc 文件会比 /etc/profile 文件更有优先级
)

2.2.2 使刚刚的设置生效
# source /etc/bashrc

内容三:显示现在用户登录的超时时间

# echo $TMOUT

补充:

当通过以上设置造成用户登录超时时,系统会输出以下内容:

# timed out waiting for input: auto-logout
Posted on September 21, 2020June 19, 2022

[内容] VNC 数据的加密 (通过 SSH 实现)

内容一:直接通过 SSH 对 VNC 进行加密

1.1 直接通过 SSH 对 VNC 进行加密的格式

# vncviewer -via <SSH user of VNC server>@<IP address of VNC server> localhost :<VNC service number>

1.2 直接通过 SSH 对 VNC 进行加密的案例

# vncviewer -via zhumingyu@eternalcenter.com localhost :1

(补充:这里以使用 eternalcenter.com 服务器上的 zhumingyu 用户访问编号为 1 的 VNC 服务为例)

内容二:通过非标准端口的 SSH 对 VNC 进行加密

2.1 通过 SSH 对 VNC 进行加密,同时使用 SSH 隧道的格式

# ssh -p <SSH non standard port number> -L <Port number of VNC service>:localhost:<Port number of VNC service> -l  <SSH user of VNC server> <IP address of VNC server>

另开启一个命令行终端:

# vncviewer localhost :<VNC service number>

2.2 通过 SSH 对 VNC 进行加密,同时使用 SSH 隧道的案例

# ssh -p 1000 -L 5901:localhost:5901 -l zhumingyu eternalcenter.com

另开启一个命令行终端:

# vncviewer localhost :1

(补充:这里以使用 eternalcenter.com 服务器上的 zhumingyu 用户通过 1000 端口号 的 SSH 访问编号为 1 的 VNC 服务为例)

Posted on August 6, 2020November 22, 2024

[步骤] Linux 密码的安全 (设置密码复杂度和加密算法) (CentOS Linux 8 & RHEL 8 版)

步骤一:设置密码必须包含大小写字母等策略

# vim /etc/security/pwquality.conf

将部分内容修改如下:

......
minlen = 15
......
dcredit = -1
......
ucredit = -1
......
lcredit = -1
......
ocredit = -1
......
dictcheck = 1
......
usercheck = 1
......

(
补充:这里以
1) 密码最小长度为 15 个字符 (minlen = 15)
2) 密码必须包含数字的个数 (dcredit = -1)
3) 密码必须包含大写字母的个数 (ucredit = -1)
4) 密码必须包含小写字母的个数 (lcredit = -1)
5) 密码必须包含特殊字符的个数 (ocredit = -1)
6) 密码不能包含字典 (dictcheck = 1)
7) 密码不能包含用户 (usercheck = 1)
为例
)

步骤二:设置新密码不能和旧密码重复的策略以及加密算法

2.1 配置 authselect 自定义认证

2.1.1 检查是否选择了 authselect 自定义认证
# authselect current | awk 'NR == 1 {print $3}' | grep custom/
custom/password-policy

(
补充:
(1)如果这条命令里没有输出则代表没有选择自定义认证
(2)从这里的输出结果可以看出这里选择的自定义认证是 custom/password-policy
)

2.1.2 如果 authselect 自定义认证存在
2.1.2.1 修改 /etc/authselect/custom/password-policy/system-auth 配置文件
# vim /etc/authselect/custom/password-policy/system-auth

将以下内容:

......
password    requisite     pam_pwquality.so ......
......
password    sufficient    pam_unix.so ......
......

修改为:

...... 
password    requisite     pam_pwhistory.so try_first_pass local_users_only enforce-for-root remember=5 use_authtok ......
......
password    sufficient    pam_unix.so sha512 shadow try_first_pass use_authtok remember=24 use_authtok ......
......

(
补充:这里以
1) 新密码不能和前 5 个旧密码重复
2) 使用 SHA512 哈希算法加密密码
为例
)

2.1.2.2 修改 /etc/authselect/custom/password-policy/password-auth 配置文件
# vim /etc/authselect/custom/password-policy/password-auth

将以下内容:

......
password    requisite     pam_pwquality.so ......
......
password    sufficient    pam_unix.so ......
......

修改为:

...... 
password    requisite     pam_pwhistory.so try_first_pass local_users_only enforce-for-root remember=5 use_authtok ......
......
password    sufficient    pam_unix.so sha512 shadow try_first_pass use_authtok remember=24 use_authtok ......
......

(
补充:这里以
1) 新密码不能和前 5 个旧密码重复
2) 使用 SHA512 哈希算法加密密码
为例
)

2.1.3 如果 authselect 自定义认证不存在
2.1.3.1 生成新的 authselect 自定义认证
2.1.3.1.1 备份当前的 authselect 自定义认证
# authselect apply-changes -b --backup=sssd.backup

(补充:这里以创建 sssd.backup 备份文件为例)

2.1.3.1.2 创建新的 authselect 自定义认证
# authselect create-profile password-policy -b sssd --symlink-meta --symlink-pam

(补充:这里以生成名为 password-policy 的自定义认证为例)

2.1.3.1.3 选择新的 authselect 自定义认证
2.1.3.1.3.1 选择新的 authselect 自定义认证
# authselect select custom/password-policy with-sudo with-faillock without-nullok with-mkhomedir --force

(
补充:
1) 这里以选择名为 password-policy 的自定义认证为例
2) 这里设置了 with-sudo、with-faillock、without-nullok 和 with-mkhomedir 参数
)

(注意:使用了 with-mkhomedir 参数后,会提示需要开启 oddjobd)

2.1.3.1.3.2 满足选择新的 authselect 自定义认证时 with-mkhomedir 参数的要求
# dnf install oddjob ; systemctl enable --now oddjobd.service
2.1.3.1.4 显示当前选择的 authselect 自定义认证
# authselect current

(补充:这里以生成并选择名为 password-policy 的自定义认证为例)

2.1.3.2 修改 authselect 自定义认证
2.1.3.2.1 修改 /etc/authselect/custom/password-policy/system-auth 配置文件
# vim /etc/authselect/custom/password-policy/system-auth

将以下内容:

......
password    requisite     pam_pwquality.so ......
......
password    sufficient    pam_unix.so ......
......

修改为:

...... 
password    requisite     pam_pwhistory.so try_first_pass local_users_only enforce-for-root remember=5 use_authtok ......
......
password    sufficient    pam_unix.so sha512 shadow try_first_pass use_authtok remember=24 use_authtok ......
......

(
补充:这里以
1) 新密码不能和前 5 个旧密码重复
2) 使用 SHA512 哈希算法加密密码
为例
)

2.1.3.2.2 修改 /etc/authselect/custom/password-policy/password-auth 配置文件
# vim /etc/authselect/custom/password-policy/password-auth

将以下内容:

......
password    requisite     pam_pwquality.so ......
......
password    sufficient    pam_unix.so ......
......

修改为:

...... 
password    requisite     pam_pwhistory.so try_first_pass local_users_only enforce-for-root remember=5 use_authtok ......
......
password    sufficient    pam_unix.so sha512 shadow try_first_pass use_authtok remember=24 use_authtok ......
......

(
补充:这里以
1) 新密码不能和前 5 个旧密码重复
2) 使用 SHA512 哈希算法加密密码
为例
)

2.2 让配置的 authselect 自定义配置认证生效

# authselect apply-changes

(注意:此步骤会刷新 /etc/authselect/system-auth 配置文件和 /etc/authselect/password-auth 配置文件)

步骤三:设置加密算法

# vim /etc/login.defs

将以下内容:

......
ENCRYPT_METHOD ......
......

修改为:

......
ENCRYPT_METHOD SHA512
......

(补充:这里以使用 SHA512 哈希算法加密密码为例)

Posted on July 28, 2020October 19, 2022

[命令] Linux 命令 iptables (设置防火墙日志)

内容一:iptables 防火墙开启日志的案例

1.1 案例一:让日志记录未匹配任何规则的 TCP 数据包,之后再将其丢弃的方法

在所有规则后面添加以下两条规则:

......
# iptables -A INPUT -i -p tcp -j LOG --log-prefix "IPTABLES TCP IN: " 
# iptables -A INPUT -i -p tcp -j DROP

(补充:这里以记录进来的数据并将 IPTABLES TCP IN: 作为前缀保存日志为例)

1.2 案例二:让日志记录未匹配任何规则的 UDP 数据包,之后再将其丢弃的方法

在所有规则后面添加以下两条规则:

...... 
# iptables -A INPUT -i -p tcp -j LOG --log-prefix "IPTABLES TCP OUT: " 
# iptables -A INPUT -i -p tcp -j DROP

(补充:这里以记录进来的数据并将 IPTABLES TCP OUT: 作为前缀保存日志为例)

1.3 案例三:让日志记录未匹配任何规则的 ICMP 数据包,之后再将其丢弃的方法

在所有规则后面添加以下两条规则:

...... 
# iptables -A INPUT -i -p tcp -j LOG --log-prefix "IPTABLES TCP ICMP: " 
# iptables -A INPUT -i -p tcp -j DROP

(补充:这里以记录进来的数据并将 IPTABLES TCP ICMP: 作为前缀保存日志为例)

内容二:显示 iptables 防火墙日志的方法

# cat /log/var/message

Posts pagination

Previous page Page 1 … Page 18 Page 19 Page 20 … 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