掘金 后端 ( ) • 2024-04-06 16:59

theme: qklhk-chocolate

一、防火墙种类及使用说明

硬件: 整个企业入口

  • 三层路由: H3C 华为 Cisco(思科)
  • 防火墙: 深信服,绿盟,奇安信.....

软件: 开源软件 网站内部

  • iptables 写入到Linux内核中,以后服务docker 工作在 4层(大部分)
  • firewalld C7
  • nftalbes C8
  • ufw (ubuntu firewall)

云防火墙(公有云)

  • 安全组 (封ip,封端口)
  • NAT网关(共享上网,端口映射....)
  • waf应用防火墙(应用防火墙,处理7层的攻击) SQL注入,XSS等攻击. 书写规则(描述攻击过程,关键提示,关键操作.)

二、iptables概述

1、名词解释

容器:瓶子 罐子 存放东西

表(table): 存放链的容器,防火墙最大概念

链(chain): 存放规则的容器

规则(policy):准许或拒绝规则 ,未来书写的防火墙条件就是各种防火墙规则

2、执行过程

  1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
  2. 如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。
  3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
  4. 防火墙的默认规则是所有规则都匹配完才会匹配的。

image-20240406120200209

三、表和链

1、概述

表(table)是对功能的分类,防火墙功能(filter表),共享上网,端口转发(nat表)

链对数据流进行处理,需要使用不同的链(数据流入(INPUT),数据流出(OUTPUT))

iptables 是4表伍链

4表: filter 表 nat表 raw表 mangle表

伍链: INPUT OUTPUT FORWARD PREROUTING POSTROUTING

2、每个表说明

1)filter表

是iptables默认的表,filter表示过滤.

实现防火墙功能:(对数据包的filter过滤)屏蔽或准许,端口,ip.

image-20240406120627479

2)nat表

实现nat功能

实现共享上网(内网服务器上外网)

端口映射和ip映射

image-20240406120830556

参考资料

四、环境准备和命令

yum install -y iptables-services
​
#防火墙相关模块 加载到内核中 
#临时 直接执行modprobe命令
#永久 写入到开机自启动 rc.local
cat >>/etc/rc.local<<EOF 
modprobe ip_tables 
modprobe iptable_filter 
modprobe iptable_nat 
modprobe ip_conntrack 
modprobe ip_conntrack_ftp 
modprobe ip_nat_ftp 
modprobe ipt_state
EOF
​
#因为firewalld与iptables有冲突,所以先关闭firewalld,在启动iptables
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables.service --now
​
#查看filter表中的规则 ,默认查看的是filter表
iptables -nL
​
#清空filter表中的规则
iptables -F
iptables命令及其选项 指定表 指定链 ip 具体要求(端口协议) 端口 动作 iptables -t filter -I AINPUT(规则追加到开头) -s -p tcp/udp/icmp --dprot 目的端口 -j DRDP -A (规则追加到末尾) -d --sport 源端口 -j REJECT -j ACCEPT

案例一:禁止22端口

#拒绝用户访问22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
#查看规则并加上序号
iptables -t filter -nL --line-number
#删除规则
iptables -t filter -D INPUT 1 #根据序号删除

案例二:屏蔽某一个IP

iptables -I INPUT -s 10.0.0.7 -j DROP

案例三:禁止网段连入

iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP

案例四:只允许指定网段连入

#只准许 10.0.0.0/24 访问 言外之意 除了 10.0.0.0/24 都拒绝
iptables -I INPUT ! -s 10.0.0.0/24 -j DROP

案例五:指定多个端口

iptables -I INPUT -p tcp --dport 8888 -j DROP 
iptables -I INPUT -p tcp --dport 9999 -j DROP
​
#指定多个端口 -m multiport 
iptables -A INPUT -m multiport -p tcp --dport 80,443  -j  ACCEPT
#如果是 连续的端口 可以不加上-m multiport 1:1024

案例六:防火墙规则的保存与恢复

  • iptables-save 进行备份,默认输出到屏幕
  • iptables-restore 进行恢复,加上文件
  • 写入到/etc/sysconfig/iptables
iptables-save >/etc/sysconfig/iptables
iptables-restore /etc/sysconfig/iptables

案例七:如何使在命令行执行的iptables规则永久生效

要使iptables规则永久生效,你需要将规则保存到配置文件中。

iptables-save > /etc/sysconfig/iptables
systemctl restart iptables

五、SNAT实现共享上网

初始:解决公网IP不足的问题。

底层原理:nat表用于实现nat功能. nat网络地址转换.

172.16.1.7 内网服务器实现通过iptables实现共享上网原理详解.

image-20240406153231181

实验环境准备

1、防火墙配置

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61
#防火墙上开启ip_forward功能(内核转发功能)
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

注意事项:公网ip不固定情况 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

2、web配置网卡

如果后端服务器有两张网卡,记得关闭公网网卡,只保留内网网卡。

例如:eth0 的ONBOOT=no,在把eth1的网卡网关改成防火墙地址。

记得重启网卡

systemctl restart network

案例一:实现把访问10.0.0.3:80的请求转到172.16.1.17:80

iptables -t nat -A PREROUTING -p tcp -d 10.0.0.3 --dport 80 -j DNAT --to-destination 172.16.1.17:80

案例二:实现172.16.1.0/24段所有主机通过124.32.54.26外网IP 共享上网

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 124.32.54.26

六、DNAT实现端口转发

端口映射为了解决用户进来的问题. 外部的用户访问内网的某个服务器,端口

但是出于安全考虑不建议这样做,你想访问可以使用CLB端口映射实现,或者你想登录可以用虚拟机或跳板机。

也是所谓的DNAT规则。

image-20240406155304569