Linux火墙管理及优化

网络环境配置

使用3个新的虚拟机【配置好软件仓库和网络的】

|----|-------------------------------|-----------------------|
| F1 | 192.168.150.133 | NAT |
| F2 | 192.168.150.134 192.168.10.20 | NAT HOST-ONLY 网络适配仅主机 |
| F3 | 192.168.10.30 | HOST-ONLY 网络适配仅主机 |

1 ~]# hostnamectl hostname d ouble 1****.timinglee.org**** 【更改虚拟机姓名】

root@double2 \~\]****# hostnamectl hostname d**** ****ouble**** 2****.timinglee.org**** \[root@double3 \~\]****# hostnamectl hostname d**** ****ouble**** 3****.timinglee.org**** 2 \~\]****# vmset.sh**** ****ens**** ****192 192.168.10.20**** 【使用****#**** ****ip a**** 查看地址****ens****后面数字再更改】 3 \~\]****# vmset.sh ens1**** ****60**** ****192.168.10.**** ****30**** ****# vim /etc/NetworkManager/system-connections/ens160.nmconnection**** 【修改网关】 ****# nmcli connection reload**** 【重启】 ****# nmcli connection up ens160**** 【启动ens160】 ****# route -n**** ****查看结果:**** ![](https://i-blog.csdnimg.cn/direct/640103332c6a44f0b41faeaa84c9420c.png)

什么是防火墙

从功能角度来讲

防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出

从功能实现角度来讲,

火墙是系统内核上的一个模块netfilter(数据包过滤机制)

通过netfiler来管理kernelspace中的策略

netfilter简介

Netfilter是Linux2.4.x引入的一个子系统

它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪等等

netfilter分析OSI七层协议的2、3、4层

onetfiler可以直接分析数据包头部数据,包括硬件地址,软件地址、TCP、UDP、ICMP等数据包的信息都可以进行过滤分析

oInux的netfilter机制可以进行的工作有:

。拒绝让Internet的数据包进入主机的某些端口

。拒绝让某些来源ip的数据包进入

。拒绝让带有某些特殊标志(flag)数据包进入,最常拒绝的是带SYN主动连接标志的包

。分析硬件地址(MAC)来决定连接与否

。地址转换

防火墙并不能有效阻挡病毒或木马程序,并且防火墙对于内部LAN的攻击无能为力

netfiler策略管理工具

onetfilter这个内核网络栈过滤框架的使用需要通过iptables或nftables来进行与netfilter进行交互工具常用种类

oiptables服务使用iptables交互RHEL6之前系统默认使用此服务,管理手段丰富,配置比较复杂

ofirewalld服务使用nftables交互RHEL6及之后的版本中默认使用此服务,配置类似windows火墙,功能模块度高,使用简单。

netfilter的五类hook函数及iptables的默认表和链

NF_IP_PRE_ROUTING【将要进入的】:位于路由之前,报文一致性检查之后(报文一致性检查包括:报文版本、报文长度和checksum

NF_IP_LOCAL_IN【进入主机的数据包】:位于报文经过路由之后,并且目的是本机的

NF_IP_FORWARD【经过的数据包】:位于在报文路由之后,目的地非本机的。

NF_IP_LOCAL_OUT【进入主机的数据包】:由本机发出去的报文,并且在路由之前。

NF_IP_POST_ROUTING【将要离开的】:所有即将离开本机的报文

内核空间的iptables

oIptables是基于Netfilter框架实现的报文选择系统

oiptables用于报文的过滤、网络地址转换和报文修改等功能

oIptables本质上是包含了5个规则表,而规则表则包含了一些列的报文的匹配规则以及操作目标

1、raw表:

第一优先级的表,设置raw表规则后,不会对数据包进行链接跟踪和NAT转换,使用于

PREROUTING和OUTPUT链,对应的动作为NOTRACK。

2、mangle表:

第二优先级的表,根据规则,修改数据包的TOS(Typeofservice,服务类型)、TTL(TimeToLive,生存周期)以及设置Mark标记,以实现Qos以及策略路由等。

3、nat表:

第三优先级的表,网络地址转换表,用于修改源和目的的地址,分SNAT(源目的地址转换)和DNAT(目的地址转换)。

4、filter表:

第四优先级的表,用于控制到达链(forward链、input链、output链)上的数据包,是放行(accepte)、丢弃(drop)或者拒绝(reject)。

5、security表:

最不常用的表(通常,我们说iptables只有4张表,security表是新加入的特性),用于在数据包上应用SELinuxo

iptables服务

iptables服务是用户管理内核空间的iptables的管理工具,通过iptables书写内核空间的iptables策略。

iptables的规则是至上而下的读取方式,遇到与数据包信息匹配的规则后直接采用。

iptables的规则默认保存在内存中,如果需要永久保存需要把策略以字符的形式保存 到/etc/sysconfig/iptables中。

启动iptables 服务

2 ~]# dnf install iptables-nft-services.noarch -y 【下载】

# systemctl disable --now firewalld 【开火墙】

# systemctl mask firewalld

# systemctl enable --now iptables.service

# iptables -L 【列出iptables表】

# iptables - F 【刷新iptables表】

再次 # iptables -L 刷新结果:

# cat /etc/sysconfig/iptables 【查看iptables文件内容】

# service iptables save 【保存当前火墙状态】

# cat /etc/sysconfig/iptables 运行结果:


iptables命令参数

2 ~]# systemctl enable --now nginx

1/3 ~]****# curl 192.168.(150/10).(134/20)****可以访问到F2了

-t 对指定的表进行操作,table必须是raw,nat,filter,mangle中的一个。默认是filter表。

-p 指定要匹配的数据包协议类型

-s --source address/mask:把指定的一个或者一组地址作为源地址,按此规则进行过滤。当后面没有mask时,address是一个地址,比如:192.168.1.1;当mask指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0

-d --destination address/mask:地址格式同上,但指定地址为目的地址,按此进行过滤

-i --in-interface name:指定数据包的来自来自网络接口,比如最常见的etho。注意:它只对INPUT,FORWARD,PREROUTING这三个链起作用。如果没有指定此选项,说明可以来自任何一个网络接口。同前面类似,"!"表示取反

2 ~]# iptables -A INPUT -i lo -j ACCEPT 【允许本机环回接口访问】

-O --out-interface name:指定数据包出去的网络接口。只对OUTPUT,FORWARD,POSTROUTNG三个链起作用

-L --list[chain]列出链chain上的所有规则,如果没有指定链,列出表上所有链的所有规则

-A --append chain rule-specification:在指定链chain的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定INPUT【限制对方进来】 FORWARD OUTPUT【限制对方出去】

2 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.150.133 -j REJECT

【不允许80接口被133访问】

# iptables -t filter -A INPUT -p tcp --dport 80 ! -s 192.168.10.1 28 -j REJECT

【仅允许128访问80接口】

# i ptables -nL 查看结果:

-I --insert chain [rulenum] rule-specification:在链chain中的指定位置插入条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号

注意:火墙读取策略是从第一条开始读取的

# iptables -I INPUT 1 -i lo -j ACCEPT 【添加到第一条,允许本机环回接口访问】

-D --delete chain rule-specification-D,--delete chain rulenum:在指定的链chain中删除一个或多个指定规则

# iptables -D INPUT 1 【删除第一条规则】

-R Replays替换/修改第几条规则

# iptables -R INPUT 1 -p tcp --dport 22 -s 192.168.150.133 -j ACCEPT 【替换端口为22】

-P --policy chain target:为指定的链chain设置策略target。注意,只有内置的链才允许有策略,用户自定义的是不允许的

-F --flush [chain]清空指定链chain上面的所有规则。如果没有指定链,清空该表上所有链的所有规则

-N --new-chain chain用指定的名字创建一个新的链

# iptables -N lee 【新建链表lee】

-E --rename-chain old-chain new-chain:用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响

# iptables -E lee LEE 【更改lee链表名字】

-X --delete-chain [chain]:删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链

# iptables -X LEE 【删除链表LEE】

-Z --zero [chain]:把指定链,或者表中的所有链上的所有计数器清零

-j --jump target<指定目标>:即满足某条件时该执行什么样的动作。target可以是内置的目标,比如ACCEPT,也可以是用户自定义的链

-h 显示帮助信息
snat地址转换

2 ~]# iptables -F 【删除所有策略】

# iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168. 150.134

【将所有从ens160 出去的网址都把地址改为2 ~]的150.134 ,用# ip a 查看自身ens的号码】

# iptables -t nat -nL 查看结果:

3 ~]# ip route add default via 192.168.10.20 【添加网关】

# route -n 查看结果:

在做nat实验时需要开启双网卡主机的内核路由功能,否则双网卡主机的两个网卡如果不在同一个洪范范围是无法通信的。

2 ~]# vim /etc/sysctl.conf 【配置内核路由功能】

# sysctl -p 查看结果:

现在3 ~]10.128可以访问到1 ~]150.133了


dnat地址转换

2 ~]# iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 192.168. 10.128

【将所有从ens160 进入(访问)的网址都把地址改为3 ~]的10.128

# iptables -t nat -nL 查看结果:

1 ~]# ssh -l root 192.168.150.134 访问结果:

firewalld管理

frewallid服务管理万式与iptables的管理方式区別

• iptables是基于Linux内核的Netfiten子系统构建的,直接操作Netfilter;

libnftables库与Netfilter交互,提供了一个更高的抽象层

• iptables使用基于表的规则集,包括filter、nat、mangle、raw及securty五个表;firewalld采用基于区域的规则集,包括default、public、internal、external和dmz五个区域

• iptables的配置较为复杂,需要用户掌握特定的命令行语法;firewalld提供了更直观和灵活的配置方式,支持命令行和图形界面

• 由于firewalld通过libnftables库与Netfilter交互,其性能相对于直接操作Netfilter的iptables来说较低

firewalld域

2 ~]# iptables -t nat -F 【清空指定nat表策略】

# systemctl disable --now iptables.service 【火墙】

# systemctl mask iptables.service

# systemctl unmask firewalld.service

# systemctl enable --now firewalld

# firewall-cmd --list-all 查看结果:


环境配置

2 ~]# vim /etc/firewalld/firewalld.conf 【修改firewalld默认管理底层】

# systemctl restart firewalld 【重启】

firewalld中默认使用的域是pubic

firewalld默认提供的九个zones的调用文件都保存在"/usr/lib/firewalld/zones/"目录下

firewall-cmd命令

2 ~]# firewall-cmd --get-default-zone 【查询默认区域】

# firewall-cmd -- s et-default-zone =trusted 【更改默认区域为trusted

# firewall-cmd --state 【查看当前状态】

# firewall-cmd --reload 【刷新】

# firewall-cmd --list-all 【查看默认区域】

# firewall-cmd --set-default-zone=public

# firewall-cmd --get-services 【查看可执行服务】

# firewall-cmd --add-service=dns 【临时添加允许dns访问】

# firewall-cmd --list-all 查看结果:

# firewall-cmd --permanent --add-service=dns 【永久更改】

# cat /etc/firewalld/zones/public.xml 查看结果:

# firewall-cmd --remove-service=dns

# firewall-cmd --reload 【重启才会有效】

# firewall-cmd --permanent --remove-service=dns 【删除dns访问】

# firewall-cmd --reload

# firewall-cmd --list-all 查看结果:

# firewall-cmd --add-source=192.168.10.128/24 --zone=trusted 【默认允许10.128访问】

# firewall-cmd -- remove -source=192.168.10.128/24 --zone=trusted 【删除访问策略】

# firewall-cmd --get- active-zones【查看活跃域】

# firewall-cmd --list-all-zones 【显示所有网卡配置】

# vim /etc/nginx/nginx.conf 【配置网站端口】

# nginx -s reload 【重启】

# netstat -antlupe | grep nginx 查看修改:

# firewall-cmd --add-service= http 【开启http也无法生效】

# firewall-cmd --add-port=8080/tcp 【允许8080端口访问】

# firewall-cmd -- remove - port=8080/tcp 【删除端口】

firewalllld高级规则

Direct Rules

通过 firewall-cmd 工具,可以使用--direct选项在运行时间里增加或者移除链。如果不熟悉 iptables,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵。

I直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。

2 ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 ! -s 192.168.10.128/24 -j ACCEPT 【禁止10.128访问】

# firewall-cmd --direct --get-all-rules 【查看规则】

地址伪装与端口转发

3 ~]# ip route add default via 192.168.10.20

# route -n 查看结果:

2 ~]# firewall-cmd --permanent --add-masquerade 【开启双网卡主机路由器】

# firewall-cmd --reload 【reload完后F3就可以访问F1了】


2 ~]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=

192.168.1 0 .128 【访问22端口都转到10.128】

# firewall-cmd --reload

1 ~]# ssh -l root 192.168.150.134 访问结果:

相关推荐
岑梓铭5 分钟前
408提示
笔记·考研
Stringzhua1 小时前
Linux Docker下安装tomcat
linux·docker·tomcat
wanhengidc2 小时前
怎样判断服务器网络质量的状态?
运维·服务器
luckyext2 小时前
SQL的RAND用法和指定生成随机数的范围
运维·服务器·数据库·sql·sqlserver·运维开发·mssql
与籍同行2 小时前
20200201工作笔记常用命令要整理
android·笔记
文牧之2 小时前
Oracle 的 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令
运维·数据库·oracle
@ chen2 小时前
Win11上安装docker
运维·docker·容器
IT英语写作研习社3 小时前
英语写作中“假设”suppose, assume, presume 的用法
笔记
炫酷的伊莉娜3 小时前
【Linux cmd】查看 CPU 使用率的几个命令
linux
rosemary5124 小时前
Ubuntu 20.04 postgresql
linux·ubuntu·postgresql