前言:
1.本文将详细描述让读者了解Linux操作系统安全管理的概述和SELinux安全上下文以及基础操作命令;
2.本文将让读者掌握Linux操作系统防火墙firewall的结构和命令使用方法;
3.了解Iptables防火墙配置的结构与特点以及数据包过滤的匹配流程和相关iptables命令的使用方法。
目录
一、SELinux安全上下文
1.SELinux 简介
2.基础操作命令
(1)查看SELinux状态
(2)切换工作模式
案例:
3.安全上下文(Security Context)
(1)查看上下文
(2)修改上下文
3.1chcon命令
3.2semanage 命令
4.日志分析与故障排除
(1) 查看SELinux日志
(2)生成解决方案建议
常见问题与解决方案
场景1:Web服务器无法访问文件
场景2:服务无法绑定非标准端口
5.注意事项
二、Linux防火墙-Firewalld
1. 概述
2. Linux防火墙
防火墙结构
firewalld防火墙
区域分类
区域功能
firewall-cmd命令用法
三、Linux防火墙-Iptables
1. Iptables概述
2、 Iptables 组成
表(Table)
链(Chain)
链表对应关系
数据包过滤的匹配流程
规则匹配策略
3. Iptables防火墙配置
iptables命令
常用管理选项
总结
一、SELinux安全上下文
1.SELinux 简介
(1) SELinux(Security-Enhanced Linux)是Linux内核的强制访问控制(MAC)安全子系统,提供更细粒度的权限控制,防止进程或用户越权操作。
(2)核心思想
最小权限原则:进程/用户只能访问其明确需要的资源。
基于标签的访问控制:所有资源(文件、端口、进程)被赋予安全上下文(Security Context)。
(3)工作模式
模式 | 描述 |
---|---|
Enforcing | 强制执行策略,拒绝非法操作并记录日志。 |
Permissive | 仅记录违规操作,不阻止(用于调试)。 |
Disabled | 完全关闭SELinux(需重启生效)。 |
2.基础操作命令
(1)查看SELinux状态
getenforce# 查看当前模式
sestatus# 详细状态(模式/策略类型)
(2)切换工作模式
setenforce 0# 切换到Permissive模式
setenforce 1# 切换到Enforcing模式
注意:setenforce仅临时生效,永久修改需编辑 /etc/selinux/config 文件。
案例:
[root@ding ~]# setenforce 0
[root@ding ~]# getenforce
Permissive
[root@ding ~]# setenforce 1
[root@ding ~]# getenforce
Enforcing
3.安全上下文(Security Context)
(1)查看上下文
ls -Z /var/www/html # 查看文件/目录的上下文
ps -Z -C httpd# 查看进程的上下文
(2)修改上下文
3.1chcon命令
选项 | 说明 | 示例消息 |
---|---|---|
-t, --type TYPE | 设置安全上下文的类型部分 | 已将 file.txt 的类型更改为 httpd_sys_content_t |
-u, --user USER | 设置安全上下文的用户部分 | 已将 file.txt 的用户更改为 system_u |
-r, --role ROLE | 设置安全上下文的角色部分 | 已将 file.txt 的角色更改为 object_r |
--reference=FILE | 使用指定文件的安全上下文 | 已从 ref_file 复制上下文到 target_file |
-R, --recursive | 递归处理文件和目录 | 已递归更改 dir/ 及其内容的上下文 |
-h, --help | 显示帮助信息 | 显示帮助菜单 |
-v, --verbose | 显示操作详情 | 正在更改 file.txt 的安全上下文 |
--version | 显示版本信息 | chcon (GNU coreutils) 8.32 |
选项使用案例
-
设置文件类型 将 /var/www/html/index.html 的上下文类型设为 httpd_sys_content_t:
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
-
设置用户部分 将 /etc/nginx/nginx.conf 的用户部分设为 system_u:
sudo chcon -u system_u /etc/nginx/nginx.conf
-
设置角色部分 将 /home/user/file.txt 的角色部分设为 object_r:
sudo chcon -r object_r /home/user/file.txt
-
参照文件上下文 将 file2 的上下文设置为与 file1 一致:
实验:[root@ding html]# ls -Z system_u:object_r:httpd_sys_content_t:s0 404.html system_u:object_r:httpd_sys_content_t:s0 50x.html system_u:object_r:httpd_sys_content_t:s0 icons system_u:object_r:httpd_sys_content_t:s0 index.html system_u:object_r:httpd_sys_content_t:s0 nginx-logo.png system_u:object_r:httpd_sys_content_t:s0 poweredby.png system_u:object_r:httpd_sys_content_t:s0 system_noindex_logo.png [root@ding html]# ls -Z /etc/nginx/nginx.conf system_u:object_r:httpd_config_t:s0 /etc/nginx/nginx.conf [root@ding html]# chcon --reference /etc/nginx/nginx.conf ./index.html [root@ding html]# ls -Z system_u:object_r:httpd_sys_content_t:s0 404.html system_u:object_r:httpd_sys_content_t:s0 50x.html system_u:object_r:httpd_sys_content_t:s0 icons system_u:object_r:httpd_sys_content_t:s0 index.html system_u:object_r:httpd_sys_content_t:s0 nginx-logo.png system_u:object_r:httpd_sys_content_t:s0 poweredby.png system_u:object_r:httpd_sys_content_t:s0 system_noindex_logo.png
sudo chcon --reference=file1 file2
-
递归操作目录 递归修改 /var/www/html/ 目录下所有文件的上下文类型:
sudo chcon -R -t httpd_sys_content_t /var/www/html/
-
显示帮助信息
chcon --help
-
显示版本信息
chcon --version
-
详细模式操作 启用详细输出,修改 ~/.ssh/config 的上下文类型:
sudo chcon -v -t ssh_home_t ~/.ssh/config
说明:
-
实际执行时,若未添加 -v 参数,chcon 默认不输出成功信息,仅在出错时显示错误。
-
使用 -v 参数可查看操作详情(如上述表格中的“示例消息”)。
chcon -t httpd_sys_content_t /var/www/html/index.html # 临时修改文件类型
restorecon -v /var/www/html/index.html # 恢复默认上下文
3.2semanage 命令
子命令/选项 | 用途说明 | 常用选项 | 示例消息/操作 |
---|---|---|---|
semanage login | 管理SELinux用户与Linux账户的映射关系 | -a (添加)、-d (删除)、-m (修改) | 将用户 user1 映射到 SELinux 用户 staff_u |
semanage user | 管理SELinux用户及其角色和权限 | -a、-d、-R (角色)、-L (限制) | 创建新SELinux用户 web_user 并分配角色 httpd_role |
semanage port | 管理网络端口与SELinux类型的绑定关系 | -a、-d、-t (类型)、-p (协议) | 将TCP端口 8080 绑定到 http_port_t 类型 |
semanage interface | 管理网络接口与SELinux类型的绑定关系 | -a、-d、-t | 将接口 eth1 绑定到 netif_t 类型 |
semanage module | 管理SELinux策略模块(启用/禁用) | -a、-d、-e (启用)、-D (禁用) | 启用策略模块 my_custom_module |
semanage fcontext | 管理文件/目录的默认SELinux上下文规则 | -a、-d、-t、-s (范围) | 添加规则:/webapps(/.*)? 的上下文类型为 httpd_sys_content_t |
semanage boolean | 管理SELinux布尔值(开关策略功能) | -1 (查看)、--on、--off | 启用布尔值 httpd_can_network_connect |
semanage dontaudit | 管理dontaudit规则(是否记录特定访问拒绝事件) | --on、--off | 关闭对 sshd 的 dontaudit 规则 |
-h / --help | 显示帮助信息 | - | 显示子命令的帮助菜单 |
-v / --verbose | 显示详细操作信息 | - | 显示添加端口 8080 的详细过程 |
-n / --noheading | 输出时隐藏列标题 | - | 仅显示端口列表数据,无标题行 |
选项使用案例
1)管理端口绑定
将TCP端口 8080 标记为HTTP服务端口:
sudo semanage port -a -t http_port_t -p tcp 8080
说明:允许Apache等HTTP服务使用8080端口。
2)管理文件上下文规则
为自定义Web目录 /opt/webapps 设置默认上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/webapps(/.*)?"
sudo restorecon -Rv /opt/webapps
说明:添加规则后需运行 restorecon 立即生效。
3)管理SELinux用户映射
将Linux用户 dev_user 映射到SELinux用户 user_u:
sudo semanage login -a -s user_u dev_user
说明:限制用户 dev_user 的SELinux权限。
4)管理策略模块
禁用自定义策略模块 mymodule:
sudo semanage module -D mymodule
说明:禁用后相关规则不再生效。
5)查看当前端口绑定
列出所有HTTP相关端口:
semanage port -l | grep http_port_t
输出示例:
http_port_t tcp 80, 443, 8080
6)删除文件上下文规则
移除对 /tmp/custom_dir 的上下文规则:
sudo semanage fcontext -d "/tmp/custom_dir(/.*)?"
注意事项
权限要求:大多数操作需 sudo 或 root 权限。持久化存储:semanage 修改的规则会保存到策略库(默认路径 /etc/selinux/targeted),重启后仍有效。结合工具使用:修改文件上下文后,需运行 restorecon 或重启服务使更改生效。
7)
4.日志分析与故障排除
(1) 查看SELinux日志
tail -f /var/log/audit/audit.log # 直接查看原始日志
ausearch -m AVC -ts recent# 使用工具过滤日志
(2)生成解决方案建议
grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp# 编译并加载自定义策略
常见问题与解决方案
场景1:Web服务器无法访问文件
-
现象:Apache返回403错误,但文件权限正常。
-
解决:
1.检查文件上下文:ls -Z /var/www/html
2.修复上下文:restorecon -Rv /var/www/html
场景2:服务无法绑定非标准端口
-
现象:Nginx无法监听8080端口。
-
解决:
semanage port -a -t http_port_t -p tcp 8080# 添加端口到SELinux策略
5.注意事项
(1)不要随意禁用SELinux:优先使用Permissive模式调试。
(2)谨慎使用chcon:错误修改上下文可能导致系统不稳定。
(3)备份策略:修改策略前备份 /etc/selinux 目录。
二、Linux防火墙-Firewalld
1. 概述
按表现形式划分:
软件防火墙: 集成在系统内部,Linux系统: iptables、firewalld、ufw; windows系统下: windows defender
硬件防火墙: 华为防火墙、思科防火墙、奇安信防火墙、深信服防火墙等
按技术划分:
包过滤防火墙: 检查数据包的源IP、目的IP、源端口、目的端口、TCP的syn控制位、MAC
七层防火墙:除了上述检查外,还会检查数据内容
防火墙的作用:
阻止来自网络外部的攻击、进行流量控制
2. Linux防火墙
防火墙结构
用户态:
iptables: 使用iptables命令对防火墙规则进行管理,必须深度理解网络技术和四表五链,对于初学者或者网络技术不达标的人员不友好
firewalld:使用firewall-cmd命令对防火墙进行管理,采用的是区域划分的形式。不需要连接底层的四表五链,对于初学者比较友好
ufw: 使用ufw命令对防火墙进行管理,命令简单易懂。
内核态:
四表: 从内核->用户的顺序: raw -> mangle -> nat -> filter
五链: input、output、forward、prerouting、postrouting
firewalld防火墙
区域分类
九大区域: block、dmz、drop、external、home、internal、public、trusted、work
区域功能
public:公共区域,默认区域
public (active)
target: default #区域类型规则
icmp-block-inversion: no
interfaces: ens33 #属于该区域的接口
sources:#来源
services: dhcpv6-client ssh #放行服务的名称
ports:#放行端口号
protocols:#放行协议
masquerade: no#NAT地址转换
forward-ports:#转发端口
source-ports:#源端口
icmp-blocks:#ICMP的阻塞类型,ping的阻塞
rich rules:#富规则
home: 家庭区域
home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
work: 工作区域
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted: 完全信任区域
trusted
target: ACCEPT#不采用默认规则,放行一切
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
internal: 内部区域 (连接内部网络)
internal
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
external: 外部区域 (连接外部网络,例如: internet网络)
external
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: yes#默认进行NAT地址转换
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz: 非军事化管理区域(内部的服务器放于该区域)
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
drop: 丢弃区域(丢弃一切流量,不给出任何回应)
drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
block: 阻塞区域 (拒绝任何流量,但给出回应)
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
firewall-cmd命令用法
关键字:
--list-*
--get-*
--set-*
--add-*
--remove-*
--change-*
--zone=
查看:
#查看所有区域的详细信息
[root@ding ~]# firewall-cmd --list-all-zones
#查看指定区域的详细信息
[root@ding ~]# firewall-cmd --list-all --zone=public
#查看指定区域的放行服务
[root@ding ~]# firewall-cmd --list-services --zone=public
#查看指定区域的放行端口
[root@ding ~]# firewall-cmd --list-ports --zone=public
#查看指定区域包含的网络接口
[root@ding ~]# firewall-cmd --list-interfaces --zone=public
#查看指定区域的放心协议
[root@ding ~]# firewall-cmd --list-protocols --zone=public
#查看指定区域的ICMP阻塞类型
[root@ding ~]# firewall-cmd --list-icmp-blocks --zone=public
#查看指定区域的放行源地址
[root@ding ~]# firewall-cmd --list-sources --zone=public
#查看指定区域的源端口
[root@ding ~]# firewall-cmd --list-source-ports --zone=public
#查看指定区域的富规则
[root@ding ~]# firewall-cmd --list-rich-rules --zone=public
#查看指定区域的转发端口
[root@ding ~]# firewall-cmd --list-forward-ports --zone=public
#查看firewalld支持的服务类型
[root@ding ~]# firewall-cmd --get-services
#查看firewalld的默认区域
[root@ding ~]# firewall-cmd--get-default-zone
#查看firewalld支持的ICMP的阻塞类型
[root@ding ~]# firewall-cmd--get-icmptypes
#查看firewalld所有的活动区域
[root@ding ~]# firewall-cmd --get-active-zones
#查看指定网络接口所属区域
[root@ding ~]# firewall-cmd --get-zone-of-interface=ens33
#查看所有区域名称
[root@ding ~]# firewall-cmd --get-zones
添加:
#添加指定服务到指定区域
[root@ding ~]# firewall-cmd --add-service=http --zone=public
success
#添加端口到指定区域
[root@ding ~]# firewall-cmd --add-port=80/tcp --zone=public
success
#添加指定协议到指定区域
[root@ding ~]# firewall-cmd --add-protocol=ah --zone=public
success
#添加ICMP阻塞类型到指定区域
[root@ding ~]# firewall-cmd --add-icmp-block=echo-request --zone=public
success
#windows端验证
C:\Users\ding>ping 192.168.115.129
正在 Ping 192.168.115.129 具有 32 字节的数据:
来自 192.168.115.129 的回复: 无法访问目标主机。
来自 192.168.115.129 的回复: 无法访问目标主机。
来自 192.168.115.129 的回复: 无法访问目标主机。
#添加指定网络接口到指定区域
[root@ding ~]# firewall-cmd --add-interface=ens33 --zone=work
success
#添加指定区域的放行源地址
[root@ding ~]# firewall-cmd --add-source=192.168.1.0/24 --zone=work
success
#添加指定区域的放行源端口
[root@ding ~]# firewall-cmd --add-source-port=999/tcp --zone=work
success
#添加转发端口到指定区域
[root@ding ~]# firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.115.115 --zone=work
success
#添加地址转换功能到指定区域
[root@ding ~]# firewall-cmd --add-masquerade --zone=work
success
#验证添加
[root@ding ~]# firewall-cmd --list-all --zone=public
修改:
#修改默认区域
[root@ding ~]# firewall-cmd --set-default-zone=work
success
#修改网络接口所属区域
[root@ding ~]# firewall-cmd --change-interface=ens33 --zone=internal
success
[root@ding ~]# firewall-cmd --change-zone=ens33 --zone=external
success
#追加指定区域的放行源地址
[root@ding ~]# firewall-cmd --change-source=192.168.2.0/24 --zone=work
success
删除:
#删除指定服务到指定区域
[root@ding ~]# firewall-cmd --remove-service=http --zone=public
success
#删除端口到指定区域
[root@ding ~]# firewall-cmd --remove-port=80/tcp --zone=public
success
#删除指定协议到指定区域
[root@ding ~]# firewall-cmd --remove-protocol=ah --zone=public
success
#删除ICMP阻塞类型到指定区域
[root@ding ~]# firewall-cmd --remove-icmp-block=echo-request --zone=public
success
#删除指定网络接口到指定区域
[root@ding ~]# firewall-cmd --remove-interface=ens33 --zone=work
success
#删除指定区域的放行源地址
[root@ding ~]# firewall-cmd --remove-source=192.168.1.0/24 --zone=work
success
#删除指定区域的放行源端口
[root@ding ~]# firewall-cmd --remove-source-port=999/tcp --zone=work
success
#删除转发端口到指定区域
[root@ding ~]# firewall-cmd --remove-forward-port=port=8080:proto=tcp:toport=80:toremover=192.168.115.115 --zone=work
success
#删除地址转换功能到指定区域
[root@ding ~]# firewall-cmd --remove-masquerade --zone=work
success
#验证删除
[root@ding ~]# firewall-cmd --list-all --zone=public
保存规则:
#逐行规则保存
[root@ding ~]# firewall-cmd --remove-masquerade --zone=work --permanent
#一次性保存所有规则
[root@ding zones]# firewall-cmd --runtime-to-permanent
success
#保存的规则存储路径
/etc/firewalld/zones
案例:
禁止外部主机ping本机
#本机IP:192.168.115.129 ens33 NAT
#外部IP:192.168.115.128
#防火墙配置
[root@ding ~]# firewall-cmd --add-interface=ens33 --zone=work
success
[root@ding ~]# firewall-cmd --add-icmp-block=echo-request --zone=work
success
#验证
[root@localhost ~]# ping -c 4 192.168.115.129
PING 192.168.115.129 (192.168.115.129) 56(84) bytes of data.
From 192.168.115.129 icmp_seq=1 Destination Host Prohibited
From 192.168.115.129 icmp_seq=2 Destination Host Prohibited
From 192.168.115.129 icmp_seq=3 Destination Host Prohibited
From 192.168.115.129 icmp_seq=4 Destination Host Prohibited
--- 192.168.115.129 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms
允许外部主机访问本机的http服务
#本机IP:192.168.80.128 ens34 vmnet3
#外部IP:192.168.80.129
#######环境配置 开始#########
##本机安装httpd服务
#改变SElinux的规则
[root@ding ~]# setenforce 0
[root@ding ~]# yum install -y httpd
##启动httpd服务
[root@ding ~]# systemctl start httpd
##修改httpd服务的监听IP
[root@ding ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.80.128:80
##重启httpd服务
[root@ding ~]# systemctl restart httpd
##验证服务监听状态
[root@ding ~]# netstat -naptu | grep :80
tcp00 192.168.80.128:800.0.0.0:* LISTEN5884/httpd
#######环境配置 结束#########
#防火墙配置
[root@ding ~]# firewall-cmd --change-interface=ens34 --zone=dmz
success
##客户端验证访问##
[root@ding ~]# curl 192.168.80.128
curl: (7) Failed connect to 192.168.80.128:80; 拒绝连接
##发现无法访问###
#服务端查看dmz区域信息
[root@ding ~]# firewall-cmd --list-all --zone=dmz
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens34
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#发现没有放心http服务
#配置dmz区域http服务放行策略
[root@ding ~]# firewall-cmd --add-service=http --zone=dmz
success
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens34
sources:
services: http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
允许外部主机访问本机的某个端口号
#前置环境如上
#防火墙配置
[root@ding ~]# firewall-cmd --add-port=801/tcp --zone=dmz
success
#放行服务的本质实际上是放行了该服务的默认端口号
#假如服务改变了监听端口号,只需放行对应的端口号即可
#客户端验证
[root@ding ~]# curl 192.168.80.128:801
三、Linux防火墙-Iptables
1. Iptables概述
Iptables 是一个用户空间程序,可以用于设置和管理 Linux 操作系统的内核级防火墙。
iptables 具有以下特点:
Iptables 作为内核级别的防火墙,具有高效、稳定、安全等优点。
Iptables 的表、链、规则结构非常灵活,可适应各种不同的网络环境和应用场景。
Iptables 相对于其他防火墙工具而言比较容易学习和掌握,并且拓展性非常强。
2、 Iptables 组成
Iptables 的核心是由表(table)、链(chain)和规则(rule)三部分组成的。
表(Table)
在 iptables 中,表是一个规则的集合,每个表都包含若干个链和一些相关的规则。常用的五种 table 如下:
raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。
mangle表:修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。
表之间的优先级
数据包到达防火墙时,规则表之间的优先顺序 raw > mangle > nat > filter
链(Chain)
在 iptables 中,链是一个规则的集合,每个链都包含一些相关联的规则。
INPUT链: 当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。
OUTPUT链: 当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
FORWARD链: 当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。
PREROUTING链: 在对数据包作路由选择之前,应用此链中的规则,用来修改目的地址,如DNAT。
POSTROUTING链: 在对数据包作路由选择之后,应用此链中的规则,用来修改源地址,如SNAT。
链表对应关系
数据包过滤的匹配流程
-
入站
入站数据包从A网络发到B网络,首先发到防火墙,先后顺序经过有PREROUTING链的三个表(raw、mangle、nat),如果都是放通状态的会经过路由选择,然后根据目的地址一层一层往上送,经过有INPUT的两个表(mangle、filter),一直送到应用程序。
-
转发
目的地不是本机,数据包先从A网络过滤,经过PREROUTING链,看是否是自己的目的地址,如果是外网到内网需要用nat转换成内网IP,找到内网用户,经过FORWARD链进行过滤,允许放通的到达POSTROUING链,再把内网地址转换成公网,这样数据包才能回去;如果是内网往外网发顺序就是反过来。
-
出站
从本机的应用程序发出来, 经过路由选择,让路由知道从哪里发,先后顺序经过有OUTPUT链的四个表(raw、mangle、nat、filter),都放通后到达POSTROUING链的两个表(mangle、nat),如果没有什么转换地址,就出站。
-
总结
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
如果数据包是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后发送出去。
如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
规则匹配策略
自上而下进行顺序匹配,匹配到即停止,不会再去查看下面的规则,然后根据允许或者丢弃或者拒绝等规则进行数据包的处理!!!
3. Iptables防火墙配置
iptables命令
语法 iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
注意:链名必须大写;控制类型必须大写
选项 | 作用 |
---|---|
-t | 指定表名(raw、mangle、nat、filter) |
-j | 指定控制类型 |
常用管理选项
选项 | 作用 |
---|---|
-A (--append) | 在指定链的末尾追加一条新的规则 |
-I (--insert) | 在指定链的开头插入一条新的规则;未指定序号时默认作为第一条规则 |
-R (--replace) | 修改、替换指定链中的某一条规则,可指定规则序号或具体内容 |
-P (--policy) | 设置指定链的默认策略 |
-D (--delete) | 删除指定链中的某一条规则,可指定规则序号或具体内容 |
-F (--flush) | 清空指定链中的所有规则;若未指定链名,则清空表中的所有链 |
-L (--list) | 列出指定链中所有的规则;若未指定链名,则列出表中的所有链 |
-n (--numeric) | (搭配-L使用)使用数字形式显示输出结果,如显示IP地址而不是主机名 |
-v | (搭配-L使用)显示详细信息,包括每条规则的匹配包数量和匹配字节数 |
--line-numbers | (搭配-L使用)查看规则时,显示规则的序号 |