1.netfilter
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
2.iptables
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易
3.iptables|firewalld
iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理,相较于iptabels防火墙来说,firewalld支持动态更新技术并加入了区域的概念,即不同的防火墙策略集合,用户可以根据生产场景的不同而选择合适的测率集合,从而实现防火墙策略之间的快速切换
firewalld和iptables只能有一个打开==
在 rhel8 中默认使用的是 firewalld
firewalld----->iptables 打开iptables ,关闭firewalld
dnf install iptables-services 安装iptables-services systemctl stop firewalld ###关闭火墙 systemctl disable firewalld systemctl mask firewalld ##锁住 systemctl enable --now iptables ####打开iptables
[root@lzy Desktop]# dnf search iptables
iptables-services.x86_64
[root@lzy Desktop]# dnf install iptables-services.x86_64 -y ###安装iptables服务
[root@lzy Desktop]# systemctl stop firewalld ###关闭火墙
[root@lzy Desktop]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@lzy Desktop]# systemctl mask firewalld ###锁住火墙
Created symlink /etc/systemd/system/firewalld.service → /dev/null.
[root@lzy Desktop]# systemctl enable --now iptables.service ##打开iptables
Created symlink /etc/systemd/system/basic.target.wants/iptables.service → /usr/lib/systemd/system/iptables.service.
iptales -------> fiewalld 关闭iptables.打开firewalld
dnf install firewalld -y
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl enable --now firewalld
________________
[root@lzy Desktop]# systemctl stop iptables.service ##先关闭iptables
[root@lzy Desktop]# systemctl disable iptables.service
Removed /etc/systemd/system/basic.target.wants/iptables.service.
[root@lzy Desktop]# systemctl mask iptables.service ###锁住iptables
Created symlink /etc/systemd/system/iptables.service → /dev/null.
[root@lzy Desktop]# systemctl enable --now firewalld ###打开不了,显示锁住
Failed to enable unit: Unit file /etc/systemd/system/firewalld.service is masked.
[root@lzy Desktop]# systemctl unmask firewalld.service ####解锁
Removed /etc/systemd/system/firewalld.service.
[root@lzy Desktop]# systemctl enable --now firewalld ###打开火墙
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
____________________________________
Cockpit 是红帽开发的网页版图像化服务管理工具,优点是无需中间层,且可以管理多种服务。
根据其项目主站描述,Cockpit 有如下特点:
从易用性考虑设计,方便管理人员使用,而不是仅仅的终端命令按钮化。
不会打乱已有终端或脚本服务配置,通过 Cockpit 启用的服务可以在终端停止,脚本运行的错误亦会被 Cockpit 捕获。
支持一次性管理多个服务,实现自动化和批处理。
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl unmask firewalld
systemctl enable --now firewalld
trusted | 接受所有的网络连接 |
---|---|
home | ##用于家庭网络,允许接受 ssh mdns ipp-client samba-client dhcp-client |
work | ##工作网络 ssh ipp-client dhcp-client |
public | ##公共网络 ssh dhcp-client |
dmz | ##军级网络 ssh |
block | ##拒绝所有 |
drop | ##丢弃 所有数据全部丢弃无任何回复 |
internal | ##内部网络 ssh mdns ipp-client samba-client dhcp-client |
external | ##ipv4 网络地址伪装转发 sshd |
.
/etc/firewalld ##火墙配置目录
/lib/firewalld ##火墙模块目录
firewall-cmd --state | 查看火墙状态 |
---|---|
firewall-cmd --get-active-zones | ##查看当前火墙中生效的域 |
firewall-cmd --get-default-zone | ##查看默认域 |
firewall-cmd --list-all | ##查看默认域中的火墙策略 |
firewall-cmd --list-all --zone=work | ##查看指定域的火墙策略 |
firewall-cmd --set-default-zone=trusted | ##设定默认域 |
firewall-cmd --get-services | ##查看所有可以设定的服务 |
firewall-cmd --permanent --remove-service=cockpit | ##移除服务 |
firewall-cmd --reload | |
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block |
指定数据来源访问指定域
firewall-cmd --reload
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block ##删除自定域中的数
据来源
firewall-cmd --permanent --remove-interface=ens224 --zone=public ##删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens224 --zone=block ##添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens224 --zone=public ##更改网络接口到指定域
firewalld-cmd --state ###查看火墙状态
firewall-cmd --list-all ###查看默认域中的火墙策略
firewall-cmd --get-active-zones ###查看当前火墙中生效的域
firewall-cmd --get-default-zone ##查看默认域
firewall-cmd --set-default-zone=public 设定默认域
firewall-cmd permanent --remove/add-service=cockpit ##添加,删除服务
firewall-cmd --reload ####reload之后才会生效
firewall-cmd --get-services ##查看所有可以设定的服务
firewall-cmd --list-all --zone=work ####查看指定域的火墙策略
firewall-cmd --add(remove/change)-interface=enp7s0 --zone=public ##删除,添加,改变指定域的网络接口
firewall-cmd --reload
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block ##指定数据来源访问指定域
block:拒绝所有
无法ping通
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block ##删除数据来源访问指定域
firewall-cmd --direct --get-all-rules##查看高级规则 firewall-cmd --direct --add-rule ipv4 filter INPUT 0 ! -s 172.25.254.0/24 -p tcp --dport 22 -j REJECT ##除了设定的ip,其他主机均无法连接本机
双网卡主机中
防火墙开着
[root@lzy network-scripts]# firewall-cmd --get-active-zones ##查看当前火墙生效的域
libvirt
interfaces: virbr0
public
interfaces: enp1s0 enp7s0 1;172.25.254.117 7:1.1.1.117
[root@lzy network-scripts]# firewall-cmd --direct --get-all-rules ##查看高级规则
[root@lzy network-scripts]# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 ! -s 172.25.254.17 -p tcp --dport 22 -j REJECT ##设定只有172.25.254.17主机可以连接本机。
[root@lzy network-scripts]# firewall-cmd --direct --get-all-rules ##查看高级规则
ipv4 filter INPUT 0 '!' -s 172.25.254.17 -p tcp --dport 22 -j REJECT
[root@lzy network-scripts]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- !172.25.254.17 0.0.0.0/0 tcp dpt:22 reject-with icmp-port-unreachable
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68
测试:172.25.254.17主机中
··
17主机可以连接本机
··
[root@localhost Desktop]# ssh [email protected]
[email protected]'s password:
Web console: https://lzy.westos.com:9090/ or https://172.25.254.117:9090/
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register
Last login: Tue Aug 11 02:56:07 2020 from 172.25.254.104
[root@lzy ~]#
测试:172.25.254.104,:无法连接117主机
[root@localhost Desktop]# ssh [email protected] ## 主机104 不能连接
ssh: connect to host 172.25.254.117 port 22: No route to host
firewall-cmd --permanent --add-masquerade ###打开源地址伪装功能
firewall-cmd --reload
双网卡主机中打开源地址伪装功能
测试:不同网段的IP可以ping通
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toaddr=172.25.254.117 117主机是伪装的目的地地址
firewall-cmd --reload
双网卡主机lzy 1.1.1.17 172.25.254.17
单网卡主机172.25.254.117:
单网卡1.1.1.117主机
在双网卡主机中打开目的地址伪装功能;伪装为172.25.254.117
测试:
#火墙策略的永久保存#
/etc/sysconfig/iptables ##iptables 策略记录文件
永久保存策略
iptales-save > /etc/sysconfig/iptables
service iptables save
安装iptables
input | 输入 |
---|---|
output | 输出 |
forward | 转发 |
postrouting | 路由之后 |
prerouting | 路由之前 |
filter | 经过本机内核的数据(input output forward) |
---|---|
nat | 不经过内核的数据(postrouting,prerouting,input,output) |
mangle | 当 filter 和 nat 表不够用时使用(input output forwardpostrouting,prerouting,) |
iptables 参数 | 含义 |
---|---|
-t | 指定表名称 |
-n | 不做解析 |
-L | 查看 |
-A | 添加策略 |
-p | 协议 |
–dport | 目的地端口 |
-s | 来源 |
-j | 动作 |
ACCEPT | 允许 |
DROP | 丢弃 |
REJECT | 拒绝 |
SNAT | 源地址转换 |
DNAT | 目的地地址转换 |
-N | 新建链 |
-E | 更改链名称 |
-X | 删除链 |
-D | 删除规则 |
-I | 插入规则 |
-R | 更改规则 |
-P | 更改默认规则 |
关闭火墙。打开iptables
-nL -n:不做解析 -L:查看
-t指定表类型
-F 刷新
-A:添加策略 -p:协议,–dport:端口 -s:来源 -j:动作
-D:删除规则
-I:插入规则:插入到之前设定规则的之前
为了解决掉在传输数据包时由于火墙策略所导致的的延迟问题。可以让检测过的数据包再次传输时直接通过火墙策略。
数据包状态 | 注解 |
---|---|
RELATED | 建立过连接的 |
ESTABLISHED | 正在连接的 |
NEW | 新的 |
1.设定建立和正在连接的数据包的火墙策略为允许
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
2.设定本机的回环接口允许新的数据包
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
3.对于新的指定服务的数据包添加火墙策略:设定为允许
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
4.添加火墙策略。设定除指定ip的所有主机都可以进行的服务
iptables -A INPUT -m state --state NEW ! -s 172.25.254.11 -p tcp --dport 22 -j ACCEPT (!表示非)
5.永久保存火墙策略
service iptables save
nat 表中的 dnat snat
snat
iptable -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.0.20
源地址伪装为172网段
测试:172.25.254.117主机可以连接双网卡主机中的1网段ip
dnat
iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 172.25.254.30