1. 总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。
1)安全加固:
# 建议使用非默认端口
# 禁止使用protocol version 1
# 限制可登录用户
# 设定空闲会话超时时长
# 利用防火墙设置ssh访问策略
# 仅监听特定的IP地址
# 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
# 使用基于密钥的认证
# 禁止使用空密码
# 禁止root用户直接登录
# 限制ssh的访问频度和并发在线数
# 经常分析日志
2)openssh免密认证原理
1. 首先在客户端生成一对密钥(ssh-keygen)
2. 并将客户端的公钥ssh-copy-id 拷贝到服务端
3. 当客户端再次发送一个连接请求,包括ip、用户名
4. 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:magedu
5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
3)rocky免密认证实现
第一步:生成自己的公钥私钥对
ssh-keygen
ll .ssh
第二步:把自己的公钥复制到对方的服务器的家目录下的authorized.keys文件中
[08:41:44root@rucky6 ~]#ssh-copy-id 10.0.0.30
ll .ssh
[root@ubuntu2204 ~]#ls .ssh
ls .ssh
cat .ssh/authorized_keys
第三步:再次连接,或者后续的一切操作,就不需要输入密码了
ssh 10.0.0.30
2. 总结sudo配置文件格式,总结相关示例。
sudo的配置文件位于 /etc/sudoers 或者 /etc/sudoers.d/ 目录下,其格式是基于特定语法的。
/etc/sudoers通常使用visudo命令进行编辑。
格式:
# 每行包含一个条目。
# 条目由四个字段组成:user(s) host=(runas) command(s)
# 字段之间使用空格或制表符隔开。
范例: root ALL=(ALL) ALL
# user: 运行命令者的身份
# host: 通过哪些主机
# (runas):以哪个用户的身份
# command: 运行哪些命令
可通过export EDITOR=vim修改visudo默认编辑器为vim
长久保存:echo export EDITOR=vim >> ~/.bashrc
1) 允许tang用户执行所有命令 ![](https://img-blog.csdnimg.cn/direct/04bd58f8d55d457281b16a6d76e2a570.png)
![](https://img-blog.csdnimg.cn/direct/b0b81d4c9b6f4b839db1a299015309bb.png)
2) 修改验证密码间隔为2分钟![](https://img-blog.csdnimg.cn/direct/09a006a0bd0b4d94b5ec16482eed536a.png)
3) 修改ubuntu的visudo的默认编辑器![](https://img-blog.csdnimg.cn/direct/c8204017b475408b8b64fece36e986b0.png)
4) 修改sudo 提示符格式![](https://img-blog.csdnimg.cn/direct/455308bf58a84d6ab84001c0d3660ddd.png)
3. 总结PAM架构及工作原理
1) PAM架构
# 应用程序:需要进行用户认证的程序。如本地登录,远程登录,如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序
可通过ldd命令查看。如 ldd /usr/sbin/sshd | grep libpam
![](https://img-blog.csdnimg.cn/direct/497bd3430b54460a872b0d5c2005674c.png)
# PAM 库:提供与 PAM 模块进行交互的接口,使应用程序能够使用 PAM 进行认证。
# PAM 配置文件:定义了在特定的认证阶段加载哪些 PAM 模块以及如何进行认证。
主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME注意:如/etc/pam.d存在,/etc/pam.conf将失效
# 认证模块:执行实际的认证操作,例如密码验证、指纹识别等
2) PAM工作原理
# 应用程序调用 PAM 库来进行用户认证,传递用户名和密码等认证信息。
# PAM 库根据 PAM 配置文件中指定的顺序加载相应的认证模块。
# 加载的认证模块按照指定的顺序依次执行。
# 每个认证模块执行相应的认证操作,例如验证密码、检查双因素身份验证等。
# 认证模块根据认证结果返回成功或失败状态给 PAM 库。
# PAM 库将最终的认证结果返回给应用程序,应用程序根据结果决定是否允许用户访问。
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证
文件(位于/lib64/security下)进行安全认证
如//usr/bin/passwd 程序
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个
设置文件一般是在/etc/pam.d/里边的与程序同名的文件,
即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个
动作(重新输入密码或者通过验证)
4. 总结PAM配置文件格式,总结相关示例, nologin.so, limits,等模块的使用。
1) PAM配置文件格式:
# 通用配置文件格式,此格式不使用:
application type control module-path arguments
# 专用配置文件/etc/pam.d/ 格式:
* PAM 的配置文件通常位于 /etc/pam.d/ 目录下,并按照不同服务或应用程序进行命名。
* 每个配置文件由一系列模块组成,每个模块执行特定的认证或授权任务。
每行由四个字段组成,字段之间使用空格分隔:
type control module-path arguments
一、application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确
配置的其它服务
二、type:指模块类型(module-type),即功能
三、control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
四、module-path: 用来指明本模块对应的程序文件的路径名
五、Arguments: 用来传递给该模块的参数
2) pam_nologin.so 模块
功能:如果/etc/nologin文件存在,将导致非root用户不能登录。当该用户登录时,会显示/etc/nologin文件内容,并拒绝登录。
默认此模块可以对ssh等登录有效,但不影响su登录
3) pam_limits.so 模块
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间
可通过ulimit -a
命令显示当前所有的资源限制
配置文件格式:
#每行一个定义
<domain> <type> <item> <value>
格式说明:
应用于哪些对象
Username 单个用户
@group 组内所有用户
* 所有用户
% 仅用于限制 maxlogins limit , 可以使用 %group 语法. 只用 % 相当于 * 对所有用户
maxsyslogins limit限制. %group 表示限制此组中的所有用户总的最大登录数
限制的类型
Soft 软限制,普通用户自己可以修改
Hard 硬限制,由root用户设定,且通过kernel强制生效
- 二者同时限定
限制的资源
nofile 所能够同时打开的最大文件数量,默认为1024
nproc 所能够同时运行的进程的最大数量,默认为1024
指定具体值
注意:systemd 的service 资源设置需要单独配置
cat /proc/进程PID号/limits
查看进程具体限制
![](https://img-blog.csdnimg.cn/direct/6a92165c186e4a84b397204b642d25ce.png)
5. 实现私有时间服务器
1)服务器10.0.0.36 配置
yum install chrony -y # 安装chrony软件包
systemctl enable --now chronyd.service #开机并自动启动chrony服务
vim /etc/chrony.conf # 编辑时间同步文件
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
#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 #删除此行注释,当互联网无法连接,仍然可以为客户端提供时间同步服务
systemctl restart chronyd
#服务启动后会打开端口123/udp
客户端10.0.0.6 配置
yum install chrony -y # 安装chrony软件包
vim /etc/chrony.conf # 编辑时间同步文件
# pool 2.pool.ntp.org iburst 注释这一行
server 10.0.0.36 iburst 加上这一行,指定允许同步的网段
systemctl enable --now chronyd.service #开机并自动启动chrony服务
chronyc sources -v #确认同步成功
2)在服务器10.0.0.36机器上执行
3) 在客户端10.0.0.6机器上执行
yum -y update # 安装数据库
yum install chrony -y # 安装chrony软件包
6. 总结DNS域名三级结构
根域名位于树状结构的最顶层,用“.”表示。
顶级域名一般代表一种类型的组织机构或国家地区,例如.net(网络供应商)、.com(工商企业)、.org(团体组织)、.edu(教育结构)、.gov(政府部门)、.cn(中国国家域名)等。每个顶级域名有一个托管商,托管商负责管理该顶级域名的所有事项。
二级域名用来标明顶级域内的一个特定的组织或国家,国家顶级域下面的二级域名由国家部门统一管理。
此外,在二级域名下,各个组织或用户可以自由申请注册自己的子域名。子域是二级域下所创建的各级域的统称。
7. 总结DNS服务工作原理,涉及递归和迭代查询原理
1) DNS服务工作原理
当DNS服务器接收到查询请求的时候,DNS服务器先查询本地缓存是否存在对应查询的结果,如果有则直接返回结果。
如果没有,则根据查询域名进行迭代查询,从根域开始逐级迭代查询,最后查询到权威DNS,迭代查询得到结果后,DNS服务器把结果返回给
DNS客户端,同时缓存一份结果在本地。
本地主机向本地DNS查询时候,本地DNS服务器使用递归查询;当DNS服务器进行向其它根域名 服务器继续发出查询请求时,使用迭代查询。
2) 递归查询原理
- 当主机向本地域名服务器查询域名时,如果本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就会以DNS客户的身份,向其它根域名 服务器继续发出查询请求报文(即替主机继续查询),直到返回结果或者报错
3) 迭代查询原理
- 一般发生在DNS服务器之间,如果一个DNS服务器不能响应另一个DNS服务器的请求,那么它会将另一个DNS服务器的IP给另一个,以便其再向另一个 发出请求。
8. 实现私有DNS, 供本地网络主机作DNS递归查询。
yum install bind bind-utils 安装bind bind-utils,安装时输入y,安装好后自动生成named账户
systemctl enable --now named 开机并自动启动named 服务
vim /etc/named.conf 修改bind 配置文件
# 注释这三行监听所有IP,并允许所有IP请求DNS解析
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
// listen-on-v6 port 53 { ::1; };
关闭dnssec,启用转发
vim /etc/named.conf
dnssec-enable no;
dnssec-validation no;
forward first;
forwarders {115.115.115.15;119.29.29.29;};
重启服务 systemctl restart named
完成
配置自定义域
vim /etc/named.rfc1912.zones
# 文件最后增加
zone "smith.local" IN {
type master;
file "smith.local.zone";
};
#如果没有加-p选项,需要修改所有者或权限。chgrp named wang.org.zone
cp -p /var/named/named.localhost /var/named/smith.local.zone
# named-checkconf
named-checkzone smith.local /var/named/smith.local.zone
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
9. 总结DNS服务器类型,解析答案,正反解析域,资源记录定义
-
DNS服务器类型:
- 根域名服务器(Root Name Server):负责解析顶级域名,将请求路由到相应的顶级域名服务器。
- 顶级域名服务器(Top Level Domain Name Server):负责管理一个顶级域名的所有域名服务器,将请求路由到相应的二级域名服务器。
- 二级域名服务器(Second Level Domain Name Server):负责管理一个二级域名的所有域名服务器,将请求路由到相应的三级域名服务器。
- 三级域名服务器(Third Level Domain Name Server):负责管理一个三级域名的所有域名服务器,将请求路由到相应的主机。
-
解析答案:
- 权威解析答案:由负责管理某个域名的域名服务器返回的解析结果,具有最高的权威性。
- 非权威解析答案:由其他域名服务器返回的解析结果,不具有权威性。
-
正反向解析域:
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树- 正向解析:(FQDN --> IP 正向解析)根据主机名解析对应的IP地址。
- 反向解析:(IP --> FQDN 反向解析)根据IP地址解析对应的主机名。
-
资源记录定义:
资源记录(Resource Record,简称RR)是DNS数据库中的基本单位,用于描述域名与IP地址之间的映射关系以及其他相关的信息。资源记录包括以下字段:- 名称(Name):域名,表示要查询的名称。
- 类型(Type):资源记录的类型,如A、MX、NS、SOA、AAAA等。
- 类(Class):指定查询的类别,通常为IN,表示Internet。
- TTL(Time To Live):指定资源记录在缓存中保留的时间。
- 资源数据(RDATA):包含与域名相关的数据,如IP地址、邮件交换记录、主机名等。
10. 实现DNS主从同步
主服务器端 10.0.0.8 配置:
yum install -y bind bind-utils
systemctl start named.service
#在主配置文件中定义区域
vim /etc/named.conf
# 注释掉下面两行
//listen-on port 53 { 127.0.0.1; };
//allow-query { localhosts; };
#允许从服务器进行区域传输
allow-transfer { 10.0.0.18 };
vim /etc/named.rfc1912.zones
zone "mage.org" {
type master;
file "mage.org.zone";
};
vim /etc/named/mage.org.zone
$TTL 1D
@ IN SOA master admin.mage.org (100 1D 1H 3D 3H)
NS master
NS slave
master A 10.0.0.8
slave A 10.0.0.18
#
chown -R named /var/named/mage.org.zone
#修改/var/named/mage.org.zone 文件属组为named
named-checkconf
# 解析库文件检查语法无误
named-checkzone mage.org /var/named/mage.org.zone
systemctl restart named.service
从服务器端 10.0.0.18 配置:
yum install -y bind bind-utils
systemctl start named.service
vim /etc/named.conf
//listen-on port 53 { 127.0.0.1; };
//allow-query { localhosts; };
allow-transfer { none; };
# 不允许其它主机进行区域传输
vim /etc/named.rfc1912.zones
zone "mage.org" {
type slave;
masters { 10.0.0.8; };
file "slaves/mage.org.slave";
};
# 解析库文件检查语法无误
named-checkconf
named-checkzone mage.org /var/named/slaves/mage.org.slave
systemctl restart named.service
ls /var/named/slaves/wang.org.slave # 查看区域数据库文件是否生成
客户端 10.0.0.6 测试主从DNS服务架构
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1 = 10.0.0.8
DNS2 = 10.0.0.18
# 生效
nmcli connection reload
nmcli connection up eth0
# 验证从 DNS 服务器是否可以查询
dig www.mage.org
curl www.mage.org
# 在主服务器上停止 DNS 服务
systemctl stop named
# 验证从 DNS 服务器仍然可以查询
dig www.mage.org
curl www.mage.org
11. 实现DNS子域授权
主域DNS服务器10.0.0.8 把子域guangzhou.tang.com委派授权给10.0.0.6 这台DNS服务器
1) 在父域DNS服务器上实现主wang.org域的主DNS服务 10.0.0.8
[root@rocky8 ~] yum install bind -y
[root@rocky8 ~] vim /etc/named.conf
# 注释掉下面两行
// listen-on port 53 { 127 .0.0.1; };
// allow-query { localhost; };
# 只允许从服务器进行区域传输
allow-transfer { 10.0.0.6;};
# 建议关闭加密验证
dnssec-enable no;
dnssec-validation no;
vim /etc/named.rfc1912.zones
# 加上这段
zone "tang.com" {
type master;
file "tang.com.zone";
};
cp -p /var/named/named.localhost /var/named/tang.com.zone
# 如果没有 -p ,需要改权限。chgrp named huang.com.zone
vim /var/named/tang.com.zone
$TTL 1D
@ IN SOA master admin.tang.com. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
guangzhou NS guangzhouns
master A 10.0.0.8
guangzhouns A 10.0.0.6
www A 10.0.0.26
named-checkconf
named-checkzone tang.com /var/named/tang.com.zone
systemctl start named # 第一次启动服务
rndc reload # 不是第一次启动服务
2) 实现子域的DNS服务器10.0.0.6
[root@rocky8 ~] yum install bind -y
[root@rocky8 ~] vim /etc/named.conf
# 注释掉下面两行
// listen-on port 53 { 127 .0.0.1; };
// allow-query { localhost; };
allow-transfer { none;};
vim /etc/named.rfc1912.zones
zone "guangzhou.tang.com" {
type master;
file "guangzhou.tang.com.zone" ;
};
cp -p /var/named/named.localhost /var/named/guangzhou.tang.com.zone
# 如果没有 -p ,需要改权限。chgrp named huang.com.zone
vim /var/named/guangzhou.tang.com.zone
$TTL 1D
@ IN SOA master admin.tang.com . (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
www A 10.0.0.26
named-checkconf
named-checkzone guangzhou.tang.com /var/named/guangzhou.tang.com.zone
systemctl start named # 第一次启动服务
rndc reload # 不是第一次启动服务
通过域名网络访问:guangzhou.tang.com
12. 基于acl实现智能DNS
#DNS服务器10.0.0.6 配置两个IP地址
#eth0:10.0.0.8
#eth1: 10.0.0.26
主DNS服务端配置文件实现 view
yum install bind bind-utils
vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
10,0,0,8/24;
};
acl shanghainet {
10.0.0.26/24;
};
acl othernet {
any;
};
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };
// allow-query { localhost; };
# 创建view
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
view otherview {
match-clients { othernet;};
include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";
实现区域配置文件
vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "smith.local" {
type master;
file "smith.local.zone.bj";
};
vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "smith.local" {
type master;
file "smith.local.zone.sh";
};
vim /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "smith.local" {
type master;
file "smith.local.zone.other";
};
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.sh
chgrp named /etc/named.rfc1912.zones.other
创建区域数据库文件
vim /var/named/smith.local.zone.bj
$TTL 1D
@ IN SOA master admin.smith.local. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 10.0.0.18
www CNAME websrv
vim /var/named/smith.local.zone.sh
$TTL 1D
@ IN SOA master admin.smith.local. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.26
websrv A 10.0.0.36
www CNAME websrv
vim /var/named/smith.local.zone.other
$TTL 1D
@ IN SOA master admin.smith.local. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 127.0.0.1
www CNAME websrv
systemctl restart named
13. 总结防火墙分类
-
按保护范围划分:
- 主机防火墙:服务范围为当前一台主机
- 网络防火墙:服务范围为防火墙一侧的局域网
-
按实现方式划分:
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为,
山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet飞塔, Cisco, Checkpoint,NetScreen(2004年被 Juniper 用40亿美元收购)等 - 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> ForefrontTMG
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为,
-
按网络协议划分:
- 网络层防火墙:OSI模型下四层,又称为包过滤防火墙
- 应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层
-
包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等 -
应用层防火墙
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段内外网用户的访问都是通过代理服务器上的“链接”来实现
优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用
层去检查
14. 总结iptable 5表5链, 基本使用,扩展模块
1)五个内置链 :INPUT、PREROUTING、FORWARD、OUT、PORTROUTING
-
INPUT:处理进入网络接口的数据包。在 FILTER 表中,INPUT 链用于过滤进入系统的数据包。在 NAT 表中,INPUT 链用于处理进入网络接口的数据包。
-
OUTPUT:处理从本地系统发出的数据包。在 FILTER 表中,OUTPUT 链用于过滤从系统发出的数据包。
-
FORWARD:处理转发数据包。在 FILTER 表中,FORWARD 链用于过滤转发数据包。在 NAT 表中,FORWARD 链用于处理转发数据包。
-
PREROUTING:在数据包进入网络接口之前进行处理。在 NAT 和 MANGLE 表中,PREROUTING 链用于修改或转换数据包的头部信息。
-
POSTROUTING:在数据包离开网络接口之后进行处理。在 NAT 和 MANGLE 表中,POSTROUTING 链用于修改或转换数据包的头部信息。
-
三种报文流向
- 流入本机:PREROUTING --> INPUT–>用户空间进程
- 流出本机:用户空间进程 -->OUTPUT–> POSTROUTING
- 转发:PREROUTING --> FORWARD --> POSTROUTING
2)五个表table:filter、nat、mangle、raw、securit
- filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表。它提供了三个内置链:INPUT、OUTPUT 和 FORWARD。这些链用于处理进入、离开和转发的数据包。
- nat:network address translation 地址转换规则表。它提供了三个内置链:PREROUTING、POSTROUTING 和 INPUT。这些链用于在数据包进入或离开网络接口时执行地址转换。
- mangle:修改数据标记位规则表。它提供了两个内置链:PREROUTING 和 POSTROUTING。这些链用于修改数据包的头部信息,例如 TTL、TTL 和校验和等。
- raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度。它没有内置链,但可以自定义链来处理数据包。
- security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux。它提供了两个内置链:INPUT 和 OUTPUT。这些链用于执行安全策略,例如基于安全级别的过滤。
优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter
3)基本使用
-
查看 iptables 规则:使用命令
iptables -L
可以列出当前的防火墙规则。 -
添加规则:使用命令
iptables -A <chain> -p <protocol> --<source/destination> <address> --<port/dport> <port> -j <action>
来添加一条规则。例如,iptables -A INPUT -p tcp --192.168.0.1 --80 -j ACCEPT 表示接受来自 IP 地址为 192.168.0.1 的主机的 TCP 流量,目标端口为 80 的请求。 -
删除规则:使用命令
iptables [-t table] -D <chain> <rule-num>
来删除一条规则。例如,iptables -D INPUT 1
表示删除 INPUT 链中的第一条规则。iptables -t nat -D PREROUTING 1
表示删除nat表下PREROUTING链中第一条规则。 -
替换规则
# 查看表中对应的规则编号
iptables -t filter --line-numbers -nvL
# 查看到需要替换的规则编号为1
# 使用-R 参数,替换INPUT链中编号为1的规则
iptables -t filter -R INPUT 1 -p tcp -m multiport --destination-ports 80,8080 -j DROP -
重载防火墙规则:使用命令 iptables -F [-t table] 可以清空对应表所有链中的规则,并使用默认的策略。使用 iptables -X 可以清空自定义链中的规则,但不会影响默认的策略链。
-
# 新增目标端口80重定向到90
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 90
# 修改目标端口80重定向到8080
iptables -t nat -R PREROUTING 1 -p tcp --dport 80 -j REDIRECT --to-ports 8080
4)扩展模块
- 扩展匹配条件:
- 隐式扩展
iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
如:不响应pingiptables -t filter -A INPUT -p ICMP -j DROP
,使用了-p参数指明协议是ICMP - 显式扩展
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块[-m matchname [per-match-options]]
- 隐式扩展
# 使用multiport扩展禁止访问tcp 80,8080,90端口
iptables -t filter -R INPUT 1 -p tcp -m multiport --destination-ports 80,8080 -j DROP
15. 总结iptables规则优化实践,规则保存和恢复。
1)规则优化最佳实践
- 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高
- 谨慎放行入站的新请求
- 有特殊目的限制访问功能,要在放行规则之前加以拒绝
- 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理
- 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高
-s 10.0.0.6 -p tcp --dport 3306 -j REJECT
-s 172.16.0.0/16 -p tcp --dport 80 -j REJECT
- 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率
- 设置默认策略,建议白名单(只放行特定连接)
iptables -P(-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:ACCEPT:接受, DROP:丢弃),不建议,容易出现“自杀现象”
规则的最后定义规则做为默认策略,推荐使用,放在最后一条
2)规则保存和恢复![](https://img-blog.csdnimg.cn/direct/e5acc5fbac3e4b6cba549ea9a6c8c55f.png)
iptables-restore选项
3)开机自动重载规则
方法一:
用脚本保存各个iptables命令;让此脚本开机后自动运行
/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
用规则文件保存各个规则,开机时自动载入此规则文件中的规则
在/etc/rc.d/rc.local文件添加iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
方法二:
定义Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service
范例: CentOS 7,8 使用 iptables-services
16. 总结NAT转换原理, DNAT/SDNAT原理,并自行设计架构实现DNAT/SNAT。
1)NAT转换原理, DNAT/SDNAT原理
2)设计架构实现DNAT/SNAT
SNAT实现给内网其他机器充当网关
网关机器:
接外网eth0:192.168.3.9/24
接内网eth1:10.1.1.1/24
内网机器:10.1.1.10/24
网关10.1.1.1
网关机器操作:
开启内核转发:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
# 检查是否生效
sysctl -a | grep net.ipv4.ip_forward
#配置SNAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
网关机器
内网机器
配置DNAT访问10.1.1.10上的web服务
10.1.1.10上的web服务
网关配置DNAT
# 配置从eth0进来的目标端口是tcp 80的都DNAT转发到10.1.1.10:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.10:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 10.1.1.10:80
测试访问10.1.1.10上的web服务
17. 使用REDIRECT将90端口重定向80,并可以访问到80端口的服务
# 安装iptables-services
yum install -y iptables-services
# 启动iptables
systemctl enable iptables
systemctl start iptables
# 打开防火墙:
service iptables start
# 查看防火墙状态:
service iptables status
可以使用以下命令将90端口重定向到80端口:
iptables -t nat -A PREROUTING -p tcp --dport 90 -j REDIRECT --to-port 80
请注意:为了使这个规则生效,您需要确保iptables服务正在运行,并且规则没有被其它的iptables规则覆盖或禁用。
18. firewalld常见区域总结。
firewalld的常见区域包括以下几种:
- public:默认区域,不信任网络内的任何计算机,只有选择接受的网络连接才会被接受。
- home:类似于public,用于家庭网络,可以接受家庭网络内的连接。
- internal:用于内部网络,可以基本信任网络内的其他计算机不会损害计算机,仅仅接受经过选择的连接。
- dmz:非军事区,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
- trusted:所有的网络连接都可以接受。
- block:拒绝所有外部连接,允许内部发起的连接,任何接受的网络连接都被IPV4的icmp-host-prohibited信息和ipv6的icmp6-adm-prohibited信息所拒绝。
- drop:丢弃区域,任何传入的网络连接都被拒绝。
- work:工作区域,相信网络上的其他计算机不会损害你的计算机。
- home:家庭区域,相信网络上的其他计算机不会损害你的计算机。
firewall-cmd --list-all-zones
# 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如果无--区域=选项,使用默认区域
19. 通过ntftable来实现暴露本机80/443/ssh服务端口给指定网络访问
vim /etc/nftables.conf
nft -f /etc/nftables.conf 查看规则