N86第五周作业

一、openssh服务相关

1.1、openssh安全加固

OpenSSH服务安全加固总结

OpenSSH服务安全加固是确保远程登录安全性的重要步骤。以下是关于OpenSSH服务安全加固的一些主要措施:

  1. 禁止root登录:在/etc/ssh/sshd_config配置文件中,将PermitRootLogin设置为no,以防止root用户直接通过SSH登录系统。
  2. 禁止使用密码登录:同样在/etc/ssh/sshd_config配置文件中,将PasswordAuthentication设置为no,并启用公钥认证(PubkeyAuthentication yes),这样用户必须使用密钥对进行登录,而不是密码。
  3. 修改默认端口:为了避免常见的SSH扫描攻击,可以修改SSH的默认端口(默认为22)。在/etc/ssh/sshd_config配置文件中,将Port设置为一个不常用的端口号。
  4. 限制访问来源:使用TCP Wrappers(/etc/hosts.allow/etc/hosts.deny)或防火墙(如iptables)来限制可以访问OpenSSH服务器的IP地址或地址范围。
  5. 定期更新密钥:定期更换用户的SSH密钥对,以增加安全性。
  6. 使用PAM:Pluggable Authentication Modules (PAM) 是一种用于身份验证的框架,可以通过PAM来配置更复杂的身份验证策略。
  7. 保持更新:确保OpenSSH服务器及其依赖的软件包都保持最新状态,以利用最新的安全修复和改进。

1.2、openssh免密认证原理

OpenSSH免密认证原理及实现过程

OpenSSH免密认证主要基于公钥/私钥对进行。以下是其原理和实现过程:

原理

  • 用户在自己的计算机上生成一个公钥/私钥对。公钥用于加密数据,而私钥用于解密数据。
  • 用户将公钥上传到远程服务器上的~/.ssh/authorized_keys文件中。
  • 当用户尝试通过SSH连接到远程服务器时,服务器会生成一个随机数,并使用用户的公钥进行加密,然后发送给用户。
  • 用户使用自己的私钥解密这个随机数,并将解密后的结果发送回服务器。
  • 服务器验证解密后的随机数是否与它最初生成的随机数相匹配。如果匹配,则允许用户登录。

1.3、免认证实现过程

实现过程

  1. 生成密钥对:在用户的计算机上,使用ssh-keygen命令生成一个公钥/私钥对。例如,运行ssh-keygen -t rsa将生成一个RSA类型的密钥对。
  2. 复制公钥:将生成的公钥(通常位于~/.ssh/id_rsa.pub)复制到远程服务器上的~/.ssh/authorized_keys文件中。可以使用ssh-copy-id命令来自动完成此过程。
  3. 配置SSH服务器:确保SSH服务器已启用公钥认证(在/etc/ssh/sshd_config中设置PubkeyAuthentication yes)。
  4. 测试连接:现在,用户应该能够使用私钥(通常位于~/.ssh/id_rsa)通过SSH连接到远程服务器,而无需输入密码。只需运行ssh user@hostname即可,其中user是远程服务器上的用户名,hostname是远程服务器的地址或主机名。

二、sudo配置文件格式

2.1、sudo配置文件格式总结

sudo配置文件格式总结

sudo的配置文件主要位于/etc/sudoers中,该文件定义了哪些用户可以执行哪些命令,以及以什么用户的身份来执行这些命令。/etc/sudoers文件是一个只读文件,通常不能直接使用文本编辑器(如vi或vim)进行编辑,而是使用visudo命令来编辑,以确保语法正确并避免配置错误。

sudo配置文件的基本格式由多个条目组成,每个条目都定义了一个或多个用户(或用户组)可以执行的命令。每个条目都遵循以下格式:

user_or_group_alias host_alias=(runas_alias) command_list
其中:user_or_group_alias 是用户或用户组的别名(可选),也可以直接使用用户名或用户组名。
host_alias 是主机别名(可选),定义了哪些主机上的用户可以使用此条目。默认为ALL,表示任何主机。
(runas_alias) 定义了命令将以什么用户的身份来执行。如果省略,则默认为root用户。
command_list 是用户可以执行的命令列表。可以使用ALL表示所有命令,或者使用具体的命令路径。

2.2、相关示例总结

相关示例

允许所有用户以root身份执行所有命令
这是/etc/sudoers文件的默认设置之一,通常位于文件的末尾:

root    ALL=(ALL:ALL) ALL
这表示root用户可以在任何主机上以任何用户的身份执行任何命令。

允许特定用户执行特定命令
假设我们想要允许用户john以root身份执行/usr/bin/reboot命令来重启系统:

john    ALL=(root) /usr/bin/reboot
允许用户组执行命令
假设我们有一个名为admins的用户组,并且我们希望该组中的所有用户都可以以root身份执行/usr/bin/apt-get命令来安装软件包:

%admins ALL=(root) /usr/bin/apt-get
注意:在指定用户组时,需要在组名前加%符号。

使用别名
为了简化配置和增强可读性,我们可以使用别名。例如,我们可以创建一个名为DEVELOPERS的用户别名,并为其指定一系列用户:

User_Alias DEVELOPERS = john, mary, bob  
DEVELOPERS ALL=(root) /usr/bin/apt-get
这样,john、mary和bob这三位开发者就都可以以root身份执行apt-get命令了。

最后,请记住,在编辑/etc/sudoers文件时,始终使用visudo命令,以确保语法的正确性,并避免潜在的安全风险。

三、总结PAM架构及工作原理

3.1、PAM架构

PAM架构的组成

  1. PAM应用程序(也称为消费方):这是需要使用身份验证功能的程序或服务。它们通过调用PAM库中的函数来请求身份验证服务。
  2. PAM库(libpam):这是PAM架构中的核心组件,它提供了与PAM服务模块进行交互的API。应用程序通过PAM库与PAM服务模块进行通信,以请求身份验证服务。
  3. PAM配置文件(如pam.conf或pam.d目录下的配置文件):这些文件定义了PAM服务模块的行为和参数。系统管理员可以通过编辑这些文件来配置不同的身份验证策略。
  4. PAM服务模块(也称为提供者):这些模块实现了具体的身份验证逻辑。它们可以是系统自带的模块,也可以是第三方开发的模块。PAM服务模块根据PAM配置文件中的指令执行身份验证操作,并将结果返回给PAM库。

3.2、工作原理

PAM的工作原理

  1. 当一个PAM应用程序需要执行身份验证时,它会调用PAM库中的相关函数。
  2. PAM库根据PAM配置文件中的指令加载相应的PAM服务模块。
  3. PAM服务模块执行身份验证操作,这可能包括检查用户名和密码、查询LDAP或Kerberos服务器等。
  4. PAM服务模块将身份验证结果返回给PAM库。
  5. PAM库将结果传递给PAM应用程序,应用程序根据结果执行相应的操作(如允许用户登录或拒绝访问)。

四、PAM配置文件格式

4.1、PAM配置文件格式

基本格式

  • 每行定义一个指令,用于指定模块、控制标志、模块参数等。
  • 指令通常由以下部分组成:service-name module-type control-flag module-path module-options
    • service-name:服务的名称,例如ftp、login、passwd等。
    • module-type:服务类型,包括auth(认证)、account(账户)、session(会话)或password(密码)。
    • control-flag:控制标志,用于指明在确定服务的集成成败值的过程中模块所起的作用。常见的控制标志有required、requisite、sufficient、optional等。
    • module-path:模块的路径。
    • module-options:模块的选项或参数。

4.2、相关示例

# 认证模块

login auth required pam_unix.so nullok_secure

# 账户模块

login account required pam_unix.so

# 密码模块

login password required pam_unix.so obscure sha512

# 会话模块

login session required pam_unix.so

login session optional pam_mktemp.so

4.3、nologin.so, limits,等模块的使用

nologin.so

  • pam_nologin.so模块用于检查/etc/nologin文件是否存在。如果存在,该模块会阻止用户登录。
  • 示例:在/etc/pam.d/login文件中,你可能会看到类似这样的条目:auth required pam_nologin.so。这意味着在尝试登录之前,系统会检查/etc/nologin文件。

limits

  • limits通常与pam_limits.so模块相关,但它实际上并不直接在PAM配置文件中定义。limits的配置通常在/etc/security/limits.conf文件中进行。
  • pam_limits.so模块用于加载并应用/etc/security/limits.conf中定义的用户和系统限制。
  • 示例:在/etc/security/limits.conf文件中,你可能会看到类似这样的条目:* soft nproc 4096,这表示所有用户(*)可以拥有的最大进程数为4096。

五、实现私有时间服务器

//安装chrony
root@hb-cj-rocky:~# yum -y install chrony 
root@hb-cj-rocky:~# systemctl restart chronyd.service
root@hb-cj-rocky:~# ps
    PID TTY          TIME CMD
   1647 pts/0    00:00:00 bash
   1687 pts/0    00:00:00 ps
root@hb-cj-rocky:~# ps aux | grep chronyd
chrony      1685  0.0  0.4  84168  3020 ?        S    10:33   0:00 /usr/sbin/chronyd -F 2
root        1699  0.0  0.2   6408  2184 pts/0    S+   10:34   0:00 grep --color=auto chronyd
root@hb-cj-rocky:~# vim /etc/chrony.conf //服务器端配置
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
pool 2.rocky.pool.ntp.org iburst
server cn.ntp.org.cn iburst
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
server time.windows.com iburst
# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 0.0.0.0/0
# Serve time even if not synchronized to a time source.
local stratum 10

root@hb-cj-rocky:~# systemctl restart chronyd //重启服务
//客户端
[root@rocky8 ~]# vim /etc/chrony.conf
#pool 2.rocky.pool.ntp.org iburst
server ntp.aliyun.com iburst
[root@rocky8 ~]# systemctl restart chronyd
[root@rocky8 ~]# date
Fri Nov 10 22:26:04 CST 2023

六、DNS域名三级结构

总结DNS域名三级结构

1、顶级域名(Top-Level Domain,TLD):顶级域名是一个域名的最高层次,通常表示一个国家、地区或组织类型。例如,.com表示商业组织,.org表示非赢利组织,.edu表示教育机构,.cn表示中国等。顶级域名还可以分为两种类型:国家顶级域名(Country-Code Top-Level Domain,ccTLD)和通用顶级域名(Generic Top-Level Domain,gTLD)。
2、二级域名(Second-Level Domain,SLD):二级域名是紧接在顶级域名后面的域名部分,用于区分不同的组织或实体。例如,在“.com”顶级域名下,“baidu”就是一个二级域名,“baidu.com”就是一个完整的域名。
3、三级域名(Third-Level Domain):三级域名是紧接在二级域名后面的域名部分,通常用于进一步区分不同的部门、区域或主机名。例如,在“baidu.com”二级域名下,“www”可以是一个三级域名,“www.baidu.com”就是一个完整的域名。
DNS域名的三级结构可以提供更加灵活和可扩展的命名系统,使得不同的组织和实体可以通过自定义域名来展示自己的品牌和身份。同时,DNS域名的三级结构也提高了命名系统的可读性和易用性,使得用户可以更加方便地记忆和使用域名。

七、DNS服务工作原理

1、用户在浏览器中输入域名,如www.baidu.com。
2、浏览器向本地DNS服务器发送DNS查询请求。
3、如果本地DNS服务器已经缓存了该域名对应的IP地址,则直接返回给浏览器。
4、如果本地DNS服务器没有缓存该域名对应的IP地址,则向根域名服务器发送递归查询请求。
5、根域名服务器返回给本地DNS服务器该域名对应的顶级域名服务器的IP地址。
6、本地DNS服务器向顶级域名服务器发送迭代查询请求。
7、顶级域名服务器返回给本地DNS服务器该域名对应的二级域名服务器的IP地址。
8、本地DNS服务器向二级域名服务器发送迭代查询请求。
9、二级域名服务器返回给本地DNS服务器该域名对应的主机名的IP地址。
10、本地DNS服务器将IP地址返回给浏览器,并将该域名和IP地址缓存起来。

递归查询和迭代查询是DNS服务中的两种查询方式。递归查询是指DNS服务器向其他DNS服务器发出查询请求,并要求对方返回查询结果,如果对方不能返回结果,则向更高级别的DNS服务器发出查询请求,直到获取到查询结果为止。在上述工作原理中,本地DNS服务器向根域名服务器发出的查询请求就是一种递归查询。

迭代查询是指DNS服务器向其他DNS服务器发出查询请求,对方返回自己所知道的信息,如果对方不能返回查询结果,则DNS服务器需要向其他DNS服务器继续发出查询请求,直到获取到查询结果为止。在上述工作原理中,本地DNS服务器向顶级域名服务器和二级域名服务器发出的查询请求就是一种迭代查询。

八、实现私有DNS

 

配置自定义域
vim /etc/named.rfc1912.zones

文件最后增加

zone “liu.org” IN {
type master;
file “liu.org.zone”;
};

root@rocky:~# dig liu.org

; <<>> DiG 9.16.23-RH <<>> liu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18341
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;liu.org.				IN	A

;; ANSWER SECTION:
liu.org.			5	IN	A	208.91.197.128

;; Query time: 2521 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Sun May 12 12:27:40 UTC 2024
;; MSG SIZE  rcvd: 40

九、实现DNS主从同步

vim /etc/named.rfc1912.zones

zone “liu.org” IN {
type slave;
masters {10.0.0.11}
file “slaves/liu.org.zone”;
};

vim /var/named/smith.local.zone
增加slave dns的解析
slave A 10.0.0.11

[root@Slave ~]# yum install bind bind-utils -y
[root@Slave ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
 
options {
    listen-on port 53 { 192.168.41.191; };
    listen-on-v6 port 53 { ::1; };
    directory   "/var/named";
    dump-file   "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { 192.168.41.0/24; };
 
    /*
     - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
     - If you are building a RECURSIVE (caching) DNS server, you need to enable
       recursion.
     - If your recursive DNS server has a public IP address, you MUST enable access
       control to limit queries to your legitimate users. Failing to do so will
       cause your server to become part of large scale DNS amplification
       attacks. Implementing BCP38 within your network would greatly
       reduce such attack surface
    */
    recursion yes;
 
    dnssec-enable yes;
    dnssec-validation yes;
 
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.root.key";
 
    managed-keys-directory "/var/named/dynamic";
 
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};
 
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
zone "cui.com" IN {
    type slave;
    file "slaves/cui.zone";
        masters { 192.168.41.148; };
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
 
[root@Slave ~]# systemctl enable named && systemctl start named
[root@Slave ~]# ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 517 Mar 22 10:32 cui.zone


named-checkconf
named-checkzone smith.local /var/named/smith.local.zone
systemctl restart named
rndc reload

实现DNS子域授权

root@rocky:yum install bind bind-utils -y
root@rocky:vim /etc/named.conf

十、基于acl实现智能DNS

[root@localhost ~]# yum install bind bind-utils -y
[root@localhost ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
acl "smartdns" {
     192.168.41.0/24;
};
 
options {
    listen-on port 53 { 192.168.41.191; };
    listen-on-v6 port 53 { ::1; };
    directory   "/var/named";
    dump-file   "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { smartdns; };
        allow-recursion { smartdns; };
 
    /*
     - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
     - If you are building a RECURSIVE (caching) DNS server, you need to enable
       recursion.
     - If your recursive DNS server has a public IP address, you MUST enable access
       control to limit queries to your legitimate users. Failing to do so will
       cause your server to become part of large scale DNS amplification
       attacks. Implementing BCP38 within your network would greatly
       reduce such attack surface
    */
    recursion yes;
 
    dnssec-enable yes;
    dnssec-validation yes;
 
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.root.key";
 
    managed-keys-directory "/var/named/dynamic";
 
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};
 
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
zone "." IN {
    type hint;
    file "named.ca";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
 
[root@localhost ~]# touch /var/named/cui.com.zone
[root@localhost ~]# vim /var/named/cui.com.zone
$TTL 86400
@   IN  SOA ns1.cui.com. admin.cui.com. (
                2021071501  ; Serial
                3600        ; Refresh
                1800        ; Retry
                604800      ; Expire
                86400       ; Minimum TTL
)
@   IN  NS  ns1.cui.com.
ns1 IN  A   192.168.41.191
www IN  A   192.168.41.148
 
[root@localhost ~]# systemctl enable named && systemctl restart named

十一、总结防火墙分类

防火墙是一种计算机网络安全设备,用于监视和控制进出网络的数据流。防火墙通常分为以下几类:
1、包过滤型防火墙
包过滤型防火墙是最早的防火墙之一,它基于网络数据包的源地址、目标地址、协议类型、端口号等信息来决定是否允许通过。包过滤型防火墙具有高效率、低延迟和低成本等优点,但它只能检查数据包的头部信息,而无法深入检查数据包的内容,容易被攻击者绕过。
2、应用层网关型防火墙
应用层网关型防火墙是一种基于应用层协议的防火墙,它可以深入检查数据包的内容,并根据应用层协议进行过滤和控制。应用层网关型防火墙具有高度的灵活性和安全性,但也存在效率较低和复杂度较高的问题。
3、状态检测型防火墙
状态检测型防火墙是一种基于连接状态的防火墙,它可以检测数据包的连接状态,如建立连接、保持连接和关闭连接等,并根据连接状态决定是否允许通过。状态检测型防火墙可以有效地防止一些特定的攻击,如拒绝服务攻击和网络蠕虫攻击等。
4、混合型防火墙
混合型防火墙将多种防火墙技术进行组合,以提高安全性和灵活性。混合型防火墙通常包括包过滤型防火墙、应用层网关型防火墙和状态检测型防火墙等多种技术,可以根据实际需求进行灵活配置。
总之,不同类型的防火墙各有优缺点,应根据实际需求和安全性要求选择适合的防火墙技术进行配置和使用。

十二、IPtables 5表5链

1、五个表
filter表:默认使用该表,用于过滤数据包;
nat表:用于网络地址转换,如端口转发、源地址转换等;
mangle表:用于修改数据包的特定字段,如TTL、TOS、标记等;
raw表:用于禁止某些特定的数据包被进一步处理;
security表:用于安全框架SELinux的规则过滤。

优先级由高到低的顺序为
security -->raw–>mangle–>nat–>filter

2、五个链
INPUT链:用于处理输入数据包;
OUTPUT链:用于处理输出数据包;
FORWARD链:用于处理转发数据包;
PREROUTING链:用于处理数据包进入路由之前的工作;
POSTROUTING链:用于处理数据包离开路由之后的工作。
3、基本使用
查看iptables规则:iptables -L
清除iptables规则:iptables -F
设置默认规则:iptables -P [CHAIN] [target]
添加规则:iptables -A [CHAIN] [OPTIONS] [target]
删除规则:iptables -D [CHAIN] [OPTIONS] [target]
4、扩展模块
conntrack模块:用于跟踪连接状态;
limit模块:用于限制数据包流量;
mark模块:用于标记数据包;
REJECT模块:用于拒绝数据包;
LOG模块:用于记录数据包信息。

十三、IPtables规则实践、保存和恢复。

规则保存和恢复可以使用以下命令:
保存规则:iptables-save > /etc/sysconfig/iptables
恢复规则:iptables-restore < /etc/sysconfig/iptables
永久保存规则:service iptables save

十四、NAT转换原理, DNAT/SDNAT原理

NAT(Network Address Translation)是一种网络地址转换技术,可以将私有IP地址转换为公共IP地址,以实现内部网络和外部网络的通信。NAT转换原理如下:
1、SNAT(Source NAT):将私有IP地址转换为公共IP地址,以便内部网络能够访问外部网络。SNAT会修改数据包的源IP地址和源端口号,同时在NAT表中记录转换规则。
2、DNAT(Destination NAT):将公共IP地址转换为私有IP地址,以便外部网络能够访问内部网络。DNAT会修改数据包的目标IP地址和目标端口号,同时在NAT表中记录转换规则。DNAT和SNAT的原理是类似的,都是通过修改数据包的源或目标IP地址来实现网络地址转换。具体实现流程如下:
3、数据包到达NAT设备时,根据目标IP地址和目标端口号匹配NAT表中的转换规则。
4、如果匹配成功,NAT设备会根据转换规则修改数据包的源或目标IP地址和端口号。
5、如果匹配失败,NAT设备会将数据包转发到下一个设备。

自行设计架构实现DNAT/SNAT可以采取以下步骤:
1、配置NAT设备的网络接口,如内部网络的接口和外部网络的接口。
2、配置NAT表,包括DNAT表和SNAT表,根据转换规则来修改数据包的源或目标IP地址。
3、配置转发规则,将符合条件的数据包转发到相应的网络接口。
4、测试NAT设备的功能,并根据需要进行优化和调整。

十五、REDIRECT重定向

使用REDIRECT将90端口重定向80,并可以访问到80端口的服务

可以使用以下命令将90端口重定向到80端口:
iptables -t nat -A PREROUTING -p tcp --dport 90 -j REDIRECT --to-port 80

十六、Firewalld常见区域

public区域:适用于公共网络,如Internet。在这个区域中,所有入站流量都被禁止,除非在规则中添加显式允许的规则。
internal区域:适用于内部网络,如公司的局域网。在这个区域中,所有入站连接都是默认允许的,因此需要谨慎地添加规则以限制访问。
dmz区域:适用于半信任网络区域,通常用于放置Web服务器、邮件服务器等。在这个区域中,入站流量是允许的,但需要添加规则限制流量的范围和目的。
work区域:适用于工作场所网络,如办公室网络。该区域中入站流量默认是允许的,但需要添加规则限制访问。
home区域:适用于家庭网络,入站流量默认情况下是允许的,但需要添加规则限制访问。
trusted区域:适用于完全信任的网络。在这个区域中,所有入站和出站连接都是默认允许的,但还是需要添加规则以限制访问。

十七、ntftable

通过ntftable来实现暴露本机80/443/ssh服务端口给指定网络访问

ntftables是Linux内核中的一个防火墙框架,它可以使用类似iptables的规则来控制网络流量。如果您想暴露本机80、443和SSH服务端口给指定网络访问,可以按照以下步骤操作:

创建一个名为“allow_port”的ntftables表格,并在该表格中添加三个链:tcp80、tcp443和ssh。
ntfctable create allow_port nftables
nft add chain inet allow_port tcp80 { type filter hook input priority 0 ; }
nft add chain inet allow_port tcp443 { type filter hook input priority 0 ; }
nft add chain inet allow_port ssh { type filter hook input priority 0 ; }

分别在这三个链中添加规则,以允许来自指定IP地址或网络的流量通过。例如,假设您想允许来自192.168.0.0/24网络的流量,可以使用以下命令添加规则:
nft add rule inet allow_port tcp80 ip saddr 192.168.0.0/24 tcp dport 80 accept
nft add rule inet allow_port tcp443 ip saddr 192.168.0.0/24 tcp dport 443 accept
nft add rule inet allow_port ssh ip saddr 192.168.0.0/24 tcp dport 22 accept

最后,将默认的INPUT策略设置为DROP,以阻止所有其他未明确允许的流量通过。可以使用以下命令来完成此操作:
nft add rule inet filter INPUT ct state invalid drop
nft add rule inet filter INPUT ct state { established, related } accept
nft add rule inet filter INPUT iifname lo accept
nft add rule inet filter INPUT ip protocol icmp accept
nft add rule inet filter INPUT tcp flags & (fin | syn | rst | ack) == ack drop
nft add rule inet filter INPUT tcp dport 22 ct state new,untracked jump allow_port ssh
nft add rule inet filter INPUT tcp dport 80 ct state new,untracked jump allow_port tcp80
nft add rule inet filter INPUT tcp dport 443 ct state new,untracked jump allow_port tcp443
nft add rule inet filter INPUT icmp type { echo-request, echo-reply } icmpv6 type { echo-request, echo-reply } drop
nft add rule inet filter INPUT drop

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值