Linux中的火墙策略优化

一. 火墙定义

火墙是位于内部网和外部网之间的一个屏障,按照系统管理员预先设定好的规则,管理数据的输出。火墙属于系统的第一道防线,目的是为了防止非法用户进入
一般netfilter=火墙

管理火墙有两种工具: iptables , firewal

#### 二.火墙管理工具切换 ####
在rhel8中默认使用的是firewalld


firewalld----->iptables
dnf install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
systemctl enable --now iptables


iptales -------> fiewalld
dnf install firewalld -y
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl enable --now firewalld

三.  firewalld

1.配置实验环境


两个虚拟机 一个单网卡 一个双网卡
nodea:双网卡 172.25.243.173/1.1.1.73
node:单网卡 1.1.1.73
主机:172.25.254.73
#westos-vmctl reset nodea
#westos-vmctl reset nodeb

配置nodea为双网卡

配置nodea网络----------------------

#ifconfig
#cd /etc/sysconfig/network-scripts
#ls
#vim ifcfg-ens3
-------------
DEVICE=ens3
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.25.254.173
NETMASK=255.255.255.0
---------------
#cp ifcfg-ens3 ifcfg-ens11      
#vim ifcfg-ens11   ---配置第二个网卡
------------
DEVICE=ens11
ONBOOT=yes
BOOTPROTO=none
IPADDR=1.1.1.173
NETMASK=255.255.255.0
-----------------
#nmcli connection reload
#nmcli connection up System\ ens3  ---(up后按两下tab键补气)
#nmcli connection up System\ ens11
#ifconfig   ---配置成功
#nmcli connection delete Wired\ connection\ 1  
#nmcli connection delete Wired\ connection\ 2 ---删除多余的
#nmcli connection show
#ifconfig
#ping 172.25.254.73
#ping 1.1.1.73                ---都可ping通  配置成功

下图标注的是需要留下的


 

-配置nodeb网络--------

#ifconfig
#cd /etc/sysconfig/network-scripts
#vim ifcfg-ens3
---------
DEVICE=ens3
ONBOOT=yes
BOOTPROTO=none
IPADDR=1.1.1.73
NETMASK=255.255.255.0
-------------
#nmcli connection reload
#nmcli connection up ens3
#ifconfig
#ping 1.1.1.173  ---ping通 配置成功

##2.关于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

##3.关于firewalld的设定原理及数据存储 ##


/etc/firewalld     ##火墙配置目录
/lib/firewalld     ##火墙模块目录

##4. 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 ##更改网络接口到指定域

实验:命令操作

----173 nodea里面做实验——---

##查看火墙状态

#firewall-cmd --state   

##火墙状态可视化

#dnf search firewall-config ---火墙状态图形化
#dnf install firewall-config-0.8.0-4.el8.noarch   
#firewall-config  ---查看火墙状态

-##火墙模块目录

#cd /usr/lib/firewalld/  
#ls  

#cd services
#ls                     ---查看支持的服务

#vim http.xml      ---查看http xml文件

##火墙配置目录

#ls /etc/firewalld/
#ls /etc/firewalld/services
#ls /etc/firewalld/zones

##查看火墙策略

#firewall-cmd --list-all      --默认域的火墙策略

#cd /etc/firewalld/zones
#cat public.xml               ---public域支持的服务


#firewall-cmd --permanent --add-service=http         --默认情况下不支持apache 需要手动添加
#cat public.xml
#firewall-cmd --reload

##域的查看和设定

#firewall-cmd --get-default-zone
#firewall-cmd --get-active-zone
#firewall-cmd --set-default-zone=trusted
#firewall-cmd --get-default-zone

#dnf install httpd
#systemctl enable --now httpd
#firewall-cmd --set-default-zone=public
#firewall-cmd --list-all
#firewall-cmd --remove-service=http        ---删除http服务做实验
##firewall-cmd --reload

现在火墙域为默认public  是不支持apache服务的

 测试
-------73火狐 输入 172.25.254.173  不能打开 因为public默认情况下 是不支持apache服务的---------

#firewall-cmd --set-default-zone=trusted         --信任网络 所有网络均可连接
#firewall-cmd --reload

 测试

-------73火狐 输入 172.25.254.173  可以打开 显示默认界面 因为火墙策略已经改为trusted 支持所有服务-------

 
#firewall-cmd --set-default-zone=block    --拒绝所有

测试

-----73火狐 输入 172.25.254.173  不能打开

------nodeb  输入:curl http://1.1.1.73   也无法连接

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

测试

-----172.25.254.73火狐 输入 172.25.254.173  不能打开 一直转圈

------73nodea  ssh 也无法连接 但是也不拒绝 没有反应

 


#firewall-cmd --set-default-zone=public  --设置回public

#firewall-cmd --list-all--zone=trusted   --查看指定域的策略

#firewall-cmd --list-service       --查看默认域支持那些服务

#firewall-cmd --get-services   ---查看所有服务
#firewall-cmd --get-services | sed 's/ /\n/g'  --自动换行

指定数据来源

#firewall-cmd --permanent --add-source=172.25.254.73--zone=trusted  

172.25.254.73网络被信任  任意访问
#firewall-cmd --reload

 测试

172.25.254.73 火狐访问172.25.254.173 访问成功

1.1.1.73访问http://1.1.1.173   访问失败  因为默认域是public不支持apache

#firewall-cmd --permanent --remove-source=172.25.254.73--zone=trusted  --删除指定来源

#firewall-cmd --reload

指定端口
ens3---172.25.254.173   ens11---1.1.1.173


#firewall-cmd -get-active-zone  
#firewall-cmd --remove-interface=ens11 --zone=public
#firewall-cmd -get-active-zone
##firewall-cmd --add-interface=ens11 --zone=trusted --11端口添加到trusted域上
#firewall-cmd -get-active-zone

测试:

-----172.25.254.73火狐 输入 172.25.254.173  访问失败

---nodeb  输入:curl http://1.1.1.73 连接成功 因为11端口是trusted支持apache

###firewall-cmd --change-interface=ens11 --zone=public   --恢复设置

#firewall-cmd -get-active-zone

测试

---nodeb  输入:curl http://1.1.1.73 连接失败 因为11端口恢复了public不支持apache

 

5.firewalld的高级规则

实验:firewall的高级规则
允许某个ip访问 别的都拒绝 怎么设置呢? 可以设置高级规则


-----------173--------

高级规则的建立

#firewall-cmd --direct --get-all-rules   ---查看高级规则
#firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.73 -p tcp --dport 80 -j REJECT        
除了172.25.254.73可以访问 其他都被拒绝

#firewall-cmd --direct --get-all-rules --规则设置成功

测试:172.25.254.73可以访问 172.25.254.173  


   1.1.1.73 不能访问1.1.1.173

 

 高级规则的删除

#firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 ! -s 172.25.254.73 -p tcp --dport 80 -j REJECT      --删除高级规则
#firewall-cmd --direct --get-all-rules   ---查看高级规则 删除成功

试:172.25.254.73可以访问 172.25.254.173  
   1.1.1.73 可以访问1.1.1.173

四.iptables

#####1. iptables 的使用 ####


#火墙策略的永久保存#
/etc/sysconfig/iptables           ##iptables 策略记录文件
永久保存策略
iptales-save > /etc/sysconfig/iptables
service iptables save

####2.火墙默认策略####  [三张表     五条链】


默认策略中的5条链
input                                              ##输入
output                                           ##输出
forward                                        ##经过
postrouting                                 ##路由之后
prerouting                                   ##路由之前


默认的3张表
filter                                                 ##经过本机内核的数据(input output forward)
nat                                                   ##不经过内核的数据(postrouting,prerouting,input,output)
mangle                        ##当filter和nat表不够用时使用(input output forward                       prerouting,input,output)

###3.iptables命令管理##

实验:iptable命令管理操作

1.安装iptables-service服务及开启

dnf search iptables
dnf install iptables-services -y    [搜索后复制即可】
systemctl disable --now firewalld   --关闭火墙
systemctl mask firewalld  --锁住火墙
systemctl unmask iptables.service    --iptables解锁
systemctl enable --now iptables.service    ---开启iptables服务

2.命令管理

1)iptables   -L         查看   ---地址已经全部解析过

 2)iptables  -nL      查看 ---地址不做解析  ---速度快

 3)iptables   -F      清除

清除后重启 策略还在

systemctl restart iptables.service

 如果要永久保存策略

4)service iptables save 

iptables-save > /etc/sysconfig/iptables

 监控 : watch -n 1 "iptables -nL"

5)iptables -t filter -A INPUT -j ACCEPT

-t  指定表名称 默认是filter表

-A 添加策略

-j 动作

ACCEPT 允许

 此时172.25.254.73 也可访问172.25.254.173

 6)iptables   -A  INPUT -s  172.25.254.73  -j  REJECT

没有写 -t  filter   因为默认就是filter表  

-s    来源

REJECT  拒绝

  此时172.25.254.73 仍然可访问172.25.254.173   为什么?已经设置了不可访问

因为火墙策略严格按照顺序执行 第一个允许所有人访问 就不再执行第二个

我们可以插入    默认设置为第一个

7)iptables   -I  INPUT  1   -s  172.25.254.73  -j  REJECT

-I    插入   “1” 不写也可以   默认插入到第一个

  此时172.25.254.73 不可访问172.25.254.173

 8)iptables    -D   INPUT  1

-D  删除   INPUT第一个策略

 9)iptables  -R  INPUT 1   -j   REJECT

-R   更改规则 

把INPUT 第一个策略 改为REJECT

 iptables  -R  INPUT 1   -j   ACCEPT             恢复默认值

10)iptables  -N  westos

-N  新建链

 11)iptables  -E  westos  WESTOS

-E   更改链名称

 12)iptables  -X  WESTOS

-X  删除链

13)iptables  -P  INPUT  DROP

-P  更改默认规则

 注意  默认规则 不能改为REJECT  

 iptables  -P  INPUT  ACCEPT -恢复默认设置

4.火墙优化策略

iptables火墙读取策略严格按照顺序 读取速度慢也不方便  所以我们可以优化iptables火墙策略

1)优化思路

数据包状态
RELATED          ##建立过连接的
ESTABLISHED           ##正在连接的
NEW                             ##新的
建立过连接和正在连接的数据包 直接允许连接

新的数据包 拒绝连接   添加后才可允许连接
 

2)优化代码

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
ptables -A INPUT -m state --state NEW -j REJECT
service iptables save

 完成后 永久保存下来  火墙优化策略即完成

5.iptables的nat表

1)实验环境

 

 2)nodeb 访问 主机  【正向访问】

当nodeb 想要访问主机时 我们需要设定nodea的nat表  因为不经过nodea的内核

配置nat表

 注意:

iptables  -t  nat    -A    POSTROUTING    -o   ens3   -j     SNAT     --to-source    172.25.254.173

POSTROUTING  路由后

  -o  输出

ens3   网卡是ens3

SNAT  源地址转换

--to-source  源地址转换

172.25.254.173  源地址转换为172.25.254.173

sysctl -a | grep ip_forward    内核路由功能   “1”是开启 如果等于“0”

vim /etc/sysctl.conf

开启后需要保存

sysctl -p

查看nat表设置是否成功 下图即为成功

 测试:nodeb可以ping通主机:172.25.254.73   也可ssh 主机 172.25.254.13

登陆主机后  发现连接自己的是 172.25.254.173   而不是nodeb:1.1.1.73 

即为成功

 3)主机172.25.254.73访问nodeb:1.1.1.73

配置nodea nat表并查看

 注意:

iptables    -t   nat   -A  PREROUTING   -i    ens3   -j    DANT   --to-dest   1.1.1.73

PREROUTING   路由之前

-i    输入

DANT    目的地址转换

--to-dest    目的地址转换

1.1.1.73   目的地址转换为1.1.1.73   ps:1.1.1.73是nodeb的地址  不是双网卡主机nodea的地址

测试:主机172.25.254.73连接172.25.254.173时    ifconfig查看

显示 ens3网卡 ip变为 1.1.1.73

即为成功

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值