网络环境配置
使用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 double1.timinglee.org 【更改虚拟机姓名】
[root@double2 ~]# hostnamectl hostname double2.timinglee.org
[root@double3 ~]# hostnamectl hostname double3.timinglee.org
2 ~]# vmset.sh ens192 192.168.10.20 【使用# ip a查看地址ens后面数字再更改】
3 ~]# vmset.sh ens160 192.168.10.30
# vim /etc/NetworkManager/system-connections/ens160.nmconnection 【修改网关】
# nmcli connection reload 【重启】
# nmcli connection up ens160 【启动ens160】
# route -n 查看结果:
什么是防火墙
从功能角度来讲
防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出
从功能实现角度来讲,
火墙是系统内核上的一个模块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.128 -j REJECT
【仅允许128访问80接口】
# iptables -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 --set-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.10.128 【访问22端口都转到10.128】
# firewall-cmd --reload
1 ~]# ssh -l root 192.168.150.134 访问结果: