综合架构-iptables防火墙

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

硬件: 整个企业入口

  • 三层路由: 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. 防火墙的默认规则是所有规则都匹配完才会匹配的。

三、表和链

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.

2)nat表

实现nat功能

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

端口映射和ip映射

参考资料

四、环境准备和命令

bash 复制代码
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端口

css 复制代码
#拒绝用户访问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

css 复制代码
iptables -I INPUT -s 10.0.0.7 -j DROP

案例三:禁止网段连入

css 复制代码
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP

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

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

案例五:指定多个端口

css 复制代码
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
ruby 复制代码
iptables-save >/etc/sysconfig/iptables
iptables-restore /etc/sysconfig/iptables

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

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

javascript 复制代码
iptables-save > /etc/sysconfig/iptables
systemctl restart iptables

五、SNAT实现共享上网

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

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

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

实验环境准备

1、防火墙配置

bash 复制代码
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

css 复制代码
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 共享上网

css 复制代码
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 124.32.54.26

六、DNAT实现端口转发

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

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

也是所谓的DNAT规则。

相关推荐
程序员 _孜然5 小时前
Ubuntu/Debian修改网卡名字enP3p49s0为eth0
linux·运维·驱动开发·嵌入式硬件·ubuntu·debian
IDIOT___IDIOT5 小时前
Linux mount 命令
linux·运维·服务器
CTRA王大大6 小时前
【golang】制作linux环境+golang的Dockerfile | 如何下载golang镜像源
linux·开发语言·docker·golang
小张程序人生6 小时前
《VMware 安装 CentOS 7.9 虚拟机详细教程(含图解步骤)》
linux·centos
泡沫冰@8 小时前
管理 SELinux 安全性
linux
展信佳_daydayup9 小时前
03 基础篇-润和开发板连接过程
linux·开源·嵌入式
两张不够花9 小时前
Shell脚本源码安装Redis、MySQL、Mongodb、PostgreSQL(无报错版)
linux·数据库·redis·mysql·mongodb·postgresql·云计算
tan77º10 小时前
【Linux网络编程】分布式Json-RPC框架 - 项目设计
linux·服务器·网络·分布式·网络协议·rpc·json
Ray Song10 小时前
【Linux】 wget、curl 用法区别
linux·运维·服务器·curl·wget
一乐小哥12 小时前
五分钟就能搭好的socks5为啥我装了一个小时😭 进来看小丑
linux·后端