Linux中级之firewalld防火墙(iptables)
一、什么是防火墙?
防火墙其实就是一个隔离工具:工作于主机或者网络的边缘
对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测
对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬件,也可以是软件)
种类:
主机防火墙、网络防火墙
硬件防火墙、软件防火墙
硬件防火墙:思科(AIR-CT5508-300-K9)、华为(USG6670)
报文:报文也是网络传输的单位,传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据。比如里面有报文类型,报文版本,报文长度,报文实体等等信息。
报文就是在各个系统之间进行请求和响应时用来交换信息的,还需要遵守规定好的格式。另外,应用报文多是多个系统之间需要通信的时候,比如银行的ESB系统到网关系统再到银联系统。在这中间报文就承担了装载数据,运输数据的功能,可能在这三个系统中报文的格式互不相同,但是承载的数据都是一样的。
套接字:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
二、四表五链:
1、、功能(表)
filter:过滤,防火墙
nat:network address translation,网络地址转换
mangle:拆分报文,做出修改,封装报文
raw:关闭nat表上启用的连接追踪机制
2、链(内置)chain
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
3、应用优先级
表:filter nat mangle raw
策略应用优先级:raw > mangle > nat > filter
策略常用优先级:filter > nat > mangle > raw
链:prerouting input forward output postrouting
4、表中的链:(各功能可以在哪些链上实现)
filter:INPUT,FORWARD,OUTPUT
nat:PREROUTING(DNAT),OUTPUT,INPUT,POSTROUTING(SNAT)
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw:PREROUTING,OUTPUT
5、数据报文的流向:
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
6、路由发生的时刻(PREROUTING,POSTROUTING)
报文进入本机后:判断目标主机
报文发出之前:判断经由哪个借口送往下一跳
7、添加规则时的考量点:
(1)要实现什么功能:判断添加在哪张表上;
(2)报文流经的路径:判断添加在哪个链上;
三、工具
规则管理工具,就是负责在5个钩子函数中添加删除修改等操作
在6中管理防火墙工具:iptables/netfilter
在7中管理防火墙工具:firewalld
常用选项:
1、链管理
-F: flush,清空规则链:省略链,表示清空指定表上的所有的链
-N: new, 创建新的自定义规则链:
-X: drop, 删除用户自定义的空的规则链
-P: Policy, 为指定链这是默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;
2、规则管理
-A:append,将新规则追加于指定链的尾部
-I:insert,将新规则插入至指定链的指定位置
-D:delete,删除指定链上的指定规则:
3、查看防火墙策略
-L:list, 列出指定链上的所有规则:
-n:number,以数字格式显示地址和端口号
-v:verbose,显示详细信息
-vv,-vvv
--line-numbers:显示规则编号:
4、匹配条件
-s, source:检查报文中源ip地址是否符合此处指定的地址范围
-d, destination:检查报文中ip地址是否符合此处指定的地址范围
-p, protocol(udp|tcp|icmp):检查报文中的协议
-i, input-interface:数据报文的流入接口:仅能用于PREROUTING,INPUT,FORWARD链上(从指定网卡流入的报文)
-o, out-interface:数据报文的流出接口:仅能用于POSTROUTING,OUTPUT,FORWARD链上(从指定网卡流出的报文)
-j target:jump至指定的target
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
....
自定义链:由自定义链中的的规则进行匹配
--dport:指定目标端口
--sport:指定源端口
-m:multiport PORT,PORT,[PORT] 设置多个端口
iprange --src-range 192.168.1.1-192.168.1.254
string --algo bm --string 'STRING'
保存防火墙配置:iptables-save > filename
恢复防火墙配置:iptables-restore < filename
四、例子:
1、拒绝访问本主机的web服务(80端口)
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
iptables -t filter -I OUTPUT -p tcp --sport 80 -j DROP
2、限制所有主机拒绝ping本主机
iptables -t filter -A INPUT -s 192.168.254.0/24 -d 192.168.254.13 -p icmp -j REJECT
iptables -t filter -A INPUT -s 192.168.254.1 -d 192.168.254.13 -p icmp -j REJECT
3、拒绝192.168.254.1这个主机发送icmp协议的报文流入本主机的ens33网卡
iptables -t filter -A INPUT -s 192.168.254.1 -i ens33 -p icmp -j REJECT
iptables -t filter -A OUTPUT -d 192.168.254.1 -o ens33 -p icmp -j REJECT
4、修改INPUT链上的默认策略
iptables -P INPUT DROP
5、拒绝192.168.254.1-254的机器访问本主机的21,80端口
iptables -t filter -A INPUT -p tcp -m multiport --dports 21,80 -m iprange --src-range 192.168.254.1-192.168.254.254 -j REJECT
6、访问的报文中出现hello字符的那么就拒绝传输
iptables -I OUTPUT -m string --algo bm --string 'hello' -j REJECT
nat表:
#开启核心转发功能
临时性:
echo 1 > /proc/sys/net/ipv4/ip_forward
永久性:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
7、源地址为192.168.20.2的主机地址经过防火墙都转换成172.16.100.1这个ip地址(SNAT:源地址转换)
iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.16.100.2 -j SNAT --to-source 172.16.100.1
8、访问目标地址为172.16.100.1这个机器并且是tcp协议80号端口的都转发给192.168.20.2的80端口(DNAT目标地址转换)
iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.2:80
9、访问目标地址为172.16.100.1这个机器并且是tcp协议80号端口的都转发给192.168.20.2的8080号端口(DNAT目标端口地址转换)
iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.2:8080
五、关键技术
1、包过滤技术
防火墙的包过滤技术一般只应用于OSI7层的模型网络层的数据中,其能够完成对防火墙的状态检测,从而预先可以把逻辑策略进行确定。逻辑策略主要针对地址、端口与源地址,通过防火墙所有的数据都需要进行分析,如果数据包内具有的信息和策略要求是不相符的,则其数据包就能够顺利通过,如果是完全相符的,则其数据包就被迅速拦截。计算机数据包传输的过程中,一般都会分解成为很多由目和地质等组成的一种小型数据包,当它们通过防火墙的时候,尽管其能够通过很多传输路径进行传输,而最终都会汇合于同一地方,在这个目地点位置,所有的数据包都需要进行防火墙的检测,在检测合格后,才会允许通过,如果传输的过程中,出现数据包的丢失以及地址的变化等情况,则就会被抛弃。
2、加密技术
计算机信息传输的过程中,借助防火墙还能够有效的实现信息的加密,通过这种加密技术,相关人员就能够对传输的信息进行有效的加密,其中信息密码是信息交流的双方进行掌握,对信息进行接受的人员需要对加密的信息实施解密处理后,才能获取所传输的信息数据,在防火墙加密技术应用中,要时刻注意信息加密处理安全性的保障。在防火墙技术应用中,想要实现信息的安全传输,还需要做好用户身份的验证,在进行加密处理后,信息的传输需要对用户授权,然后对信息接收方以及发送方要进行身份的验证,从而建立信息安全传递的通道,保证计算机的网络信息在传递中具有良好的安全性,非法分子不拥有正确的身份验证条件,因此,其就不能对计算机的网络信息实施入侵。
3、防病毒技术
防火墙具有着防病毒的功能,在防病毒技术的应用中,其主要包括病毒的预防、清除和检测等方面。防火墙的防病毒预防功能来说,在网络的建设过程中,通过安装相应的防火墙来对计算机和互联网间的信息数据进行严格的控制,从而形成一种安全的屏障来对计算机外网以及内网数据实施保护。计算机网络要想进行连接,一般都是通过互联网和路由器连接实现的,则对网络保护就需要从主干网的部分开始,在主干网的中心资源实施控制,防止服务器出现非法的访问,为了杜绝外来非法的入侵对信息进行盗用,在计算机连接的端口所接入的数据,还要进行以太网和IP地址的严格检查,被盗用IP地址会被丢弃,同时还会对重要信息资源进行全面记录,保障其计算机的信息网络具有良好安全性。
4、代理服务器
代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。
代理服务器是防火墙技术引用比较广泛的功能,根据其计算机的网络运行方法可以通过防火墙技术设置相应的代理服务器,从而借助代理服务器来进行信息的交互。在信息数据从内网向外网发送时,其信息数据就会携带着正确IP,非法攻击者能够分局信息数据IP作为追踪的对象,来让病毒进入到内网中,如果使用代理服务器,则就能够实现信息数据IP的虚拟化,非法攻击者在进行虚拟IP的跟踪中,就不能够获取真实的解析信息,从而代理服务器实现对计算机网络的安全防护。另外,代理服务器还能够进行信息数据的中转,对计算机内网以及外网信息的交互进行控制,对计算机的网络安全起到保护。
基本功能:
(1) 一个lP地址或Internet帐户供多个用户同时使用
(2) 缓存功能,可以降低费用,提高速度
(3) 对内部网络用户进行权限和信息流量计费管理
(4) 对进入内部网络的Internet信息实施监控和过滤
原文地址:https://www.cnblogs.com/renyz/p/11379342.html
- Go语言学习(一):hello world
- JAVA基础知识点:内存、比较和Final
- python django 学习(一)数据库 目的根据已有BBS建立新的网站步骤
- SpringMVC中@RequestMapping的基本用法
- Java面试系列13
- 【Go 语言 时间相关操作 demo】
- redis AOF保存机制
- 用 TensorFlow 让你的机器人唱首原创给你听
- 不用synchronized块的话如何实现一个原子的i++?
- Oracle升级中的参数补充(r9笔记第2天)
- 【Go 语言,服务器模块】日志系统源码
- wait方法和sleep方法的区别
- Java面试系列10
- python django整理(三)页面基础(仿BBS)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php实现对文件压缩简单的方法
- laravel实现Auth认证,登录、注册后的页面回跳方法
- php 实现银联商务H5支付的示例代码
- Yii2.0框架behaviors方法使用实例分析
- laravel 去掉index.php伪静态的操作方法
- laravel 获取某个查询的查询SQL语句方法
- laravel dingo API返回自定义错误信息的实例
- Linux基于php-fpm模式的lamp搭建phpmyadmin的办法
- 基于laravel Request的所有方法详解
- 浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
- php图片裁剪函数
- Laravel自定义 封装便捷返回Json数据格式的引用方法
- Laravel模糊查询区分大小写的实例
- laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
- Laravel中validation验证 返回中文提示 全局设置的方法