Linux防火墙基础知识及配置

Linux防火墙基础知识

Linux的防火墙正确的来说并不算是防火墙,只是一种防火墙的功能体现。我们现在来讲解下Linux的这个防火墙功能的详细解释。

Linux的防火墙是由iptables与netfilter两个程序组成的,而iptables是一个单独的程序,netfilter是集成到内核中的一个程序,两个程序合作才能拥有完整的防火墙功能。

Iptables的功能是向netfiler提供规则,netfilter则是将规则执行起来。

Linux防火墙还分为主机防火墙与网络防火墙。

主机防火墙:工作在一个主机的边缘,数据报文刚刚进入网卡的时候,设定一个防火墙。

网络防火墙:工作在一个局域网边缘的防火墙。

防火墙定义:工作于主机或网络边缘,对于进出的报文根据定义的规则做检查,进而对被规则匹配到的报文作为相应处理的套件

防火墙的功能:

IDS:Intrusion Detect System,入侵检测系统

检测系统进程,如果有可疑行为就会报警

HIDS:Host IDS

NIDS:Network IDS

IPS:Intrusion Protect System,入侵防御系统

检测系统进程,如果有可疑行为就会进行相应操作,比如杀掉进程

HoneyPot: 蜜罐,专门利用别人会扫描的端口,将其开放用来吸引黑客进入你准备的陷阱

bt:backtrack,专为安全应用的发行版

Nessus,nmap

防火墙拥有五个钩函数(hook function)

PREROUTING:路由前

INPUT:到达本机内部的报文必经之路

FORWARD:由本机转发的报文的必经之路

OUTPUT:由本机发出的报文的必经之路

POSTROUTING:路由后

规则功能:优先级从左到右,从高到低

raw, mangle, net, filter

filter: 过滤,定义是否允许通过防火墙

net: 地址转发,启用connection_track

SNAT

DNAT

PNAT

mangle: 会修改报文首部,例如:将网络首部跳数增加

raw:目标是关闭net表上启用的连接追踪功能

四个功能四个表

五个钩子五个链

做过滤的位置:

路由前与路由后都不做过滤,都不适合,一个过早一个过晚。

表和链的对应关系:

filter: INPUT, FORWARD, OUTPUT

nat: PREROUTING(SNT,源地址转换), POSTROUTING(DNAT,目标地址转换),OUTPUT

mangle: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

raw:PREROUTING,OUTPUT

数据报文流程:

跟本机内部进程通信:

进入:PREROUTING,INPUT

出去:OUTPUT,POSTROUTING

由本机转发:

PREROUTING, FORWARD, POSTROUTING

数据报文的流向:

源IP和目标IP由流向决定

主机防火墙主要是用于到达主机的请求。

app head:应用层首部

tcp head: TCP首部

ip  head: ip 首部

icmp:internet control messaging protocol

iptables: 用户空间的工具,写规则,并自动发往netfilter,立即生效;

netfilter:接受并生效规则

基本语法:
	iptables [-t TABLE(表)] COMMAND CHAIN CRETIRIA -j TARGET

	-t TABLE: 
		nat,mangle,raw,filter
		默认是:filter

	COMMAND:
		对链做管理:
			-F:flush,清空规则链,默认为对应表的所有链
			-N:new,自建一条链,只有被默认的链,中的某条规则选中,跳转过去才会被用到,没有规则,就会回到主链接着匹配
			-X:delete,删除自定义的空链
			-Z:zero,计数器归零
			-P:policy, 设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP,允许或拒绝,所有规则不匹配才会用到
			-E:重命名自定义链

		对链中的规则做管理:
			-A: 在链中的尾部增加规则
			-I:插入一条新规则,在首部
			-D:删除规则的
			-R:替换规则的
		查询:
			-L:查询规则
				-n:显示的结果中IP地址不会被反解成主机名,数字格式显示主机地址和端口
				-v:详细格式,-vv,-vvv
				--line-numbers:显示规则编号
				-x:exactly,不要对计数器的结果做单位换算,而显示其精确值

		防火墙查询信息解析:
			pkts:包数,被本规则匹配到的报文数
			bytes:字节数,被本规则匹配到的所有包大小只和
			target: 处理机制
			prot:协议,ip报文中的报的协议
			opt: 选项
			in:流入的接口,从哪个网卡进来的
			out:流出的接口,从哪个网卡出去的
			source: 源地址
			destination: 目标地址

	-A使用方法:
		iptables [-t TABLE] -A 链名 匹配条件 -j 处理目标

			匹配条件:
				通用匹配
					-s 地址:指定报文源IP地址匹配的范围,匹配IP地址的源地址,可以是IP也可以是网络地址,可以使用!取反
						--src, --source: 都是-s一样的意思
					-d 地址: 指定报文目标IP地址匹配的范围,匹配IP地址的目标地址,可以是IP也可以是网络地址,可以使用!取反
						--dst, --destination: 都是-d一样的意思
					-p 协议:指定匹配报文的协议类型,一般有三种tcp,udp和icmp;
					-i INTERFACE: 数据报文流入的接口,放在数据流入的前半段,PREROUTING,INPUT,FORWARD
					-o INTERFACE:数据报文流出的接口,放在数据流出的后半段,OUTPUT,FORWARD,POSTROUTING

				扩展匹配:
					隐式扩展:当使用-p{tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项
						-p tcp:
							--sport PORT[-PORT]: 指定源端口
							--dport PORT[-PORT]: 指定目标端口
							--tcp-flags: 做标志位扩展
								--tcp-flag 要检查标志位列表(用都好分割),必须为1的标志位列表(逗号分割)
									例如: --tcp-flags syn,ack,rst,fin syn
											all none: 所有位都为0
											all all: 所有为都为1
								--syn: 相当于只放型syn为1的

						-p udp:
							--sport PORT[-PORT]: 指定源端口
							--dport PORT[-PORT]: 指定目标端口

						-p --icmp-type
								0: echo-reply,ping响应
								8: echo-request,ping请求

					显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用扩展专用选项
						-m state --state
						-m limit
						-m time

			处理目标:
				内置目标:
					过滤:
						拒绝
							DROP:悄悄的丢弃
							REJECT:有返回信息
						允许
							ACCEPT
						在自定义链中无法匹配报文时,将其返回主链
							RETURN 
删除规则:
		-D:删除规则的
			iptables [-t TABLE] -D CHAIN RULENUM

	策略设置:
		iptables [-t table] -P chain target

	修改规则:
		iptables [-t table] -R chain rulenum rule-specification

	插入规则:
		iptables [-t table] -I chain [rulenum] rule-specification
			默认插入到第一条,与-A相反。

	隐式扩展:
		--tcp-flag 要检查标志位列表(用都好分割),必须为1的标志位列表(逗号分割)
			例如: --tcp-flags syn,ack,rst,fin syn
				all none: 所有位都为0
				all all: 所有为都为1
		--syn:相当于syn为1

		-p --icmp-type
		0: echo-reply,ping响应
		8: echo-request,ping请求

	目标:
		RETURN: 在自定义链中无法匹配报文时,将其返回主链

	创建自定义链:
		iptables [-t table] -N chain
			例如:iptables -t filter -N http_in

	设置调用自定义连接
		iptables -A INPUT -d 192.168.1.1 -p tcp --dport 80 -j http_in
			设置访问目标地址为192.168.1.1服务器的80端口的连接都转到httpd_in这个自定义链上

	如果自定义链没有匹配的,将会回到主链
		iptables -A http_in -j RETURN	

	删除自定义且0引用的空链:
		iptables [-t table] -X chain
			例如:iptable -X http_in

	重命名自定义且0引用的空链:
		iptables [-t table] -E old_name new_name
			例如:iptables -E http_in web_in

以上为主机防火墙的规则定义,我们现在来分析下:
    1、如何过滤外部连接进入主机。
        外部连接进入主机要先从进入网卡进入,然后通过PREROUTING,再由路由选择进入INPUT,通过INPUT进入主机,接着由OUTPUT出去,再次路由选择,最有从POSTROUTING经过,由出去的网卡出去。
        注意:这里的网卡可能是同一个也可能是两块不同的网卡,主要看你主机状态,这点要弄清楚,否则规则可能会写错。
        如下图:

由上图可以得出,我们如果要过滤外面进来的连接需要在INPUT这个钩子的表上写规则。
    而规则又要卸载filter这个链上面,filter链是默认的,所以不需要特意指定链
    
    命令:
       iptables  -A INPUT -d 192.168.1.129 -p tcp --dport 22 -j ACCEPT
            开发22号端口,用于ssh连接,否则你的连接可能会直接挡掉
       iptables -P INPUT DROP
            将INPUT的默认状态改为DROP从而挡掉所有不允许通过的连接。
        
 以上就是开放一个端口,并且挡掉所有端口的命令,如果你想要开放某个端口可以参照以上例子。
 iptables  -A INPUT -d 服务器地址 -p 协议 --dport 需要开发的端口 -j ACCEPT

注意:防火墙的过滤规则只在filter的链上做,其他链不做过滤使用。因此一般做过滤都不需要指定链

以上为主机防火墙的实例。

现在来看下网络防火墙的实例

网络防火墙:

网络防火墙主要用于到达网络的请求。

网络防火墙我们一般用户NAT转换的比较多。

打开net转发:

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1 修改这个数值可以永久打开net转发

sysctl -p: 是sysctl文件重新加载,让配置生效

cat /proc/sys/net/ipv4/ip_forward :查看是否已经打开net转发,1为打开0为关闭

CentOS 7 设置转发:ip route add 0.0.0.0/0.0.0.0 via 192.168.1.1

所有的地址进入都转发到192.168.1.1

ftp的转发也需要开启nf_conntrack_ftp这个模块来,启动追踪。

否则防火墙开启了也不能连接到ftp

设置开机自动装载模块:

1、vim /etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_ftp":开机自动装载模块选项

2、写一个脚本,开机自动运行将iptables的命令键入

设置了以上的NET转发之后,所有将网关指向这台服务器地址的客户端,都讲由这台服务器转发出去。

注意:到此虽然你的转发可以发出去但是却不能收回,因为你的地址只是你个人的,不是公网上的,所以我们现在需要做一个nat源地址替换。

    我们要做源地址转换的nat需要在防火墙的POSTROUTING这个链上面做。因为源地址转换的话,就是在路由选择之后要出去了,但是还没出去之前将地址伪装成我们的公网地址,这样数据回来的时候就能找到我们的地址了。
    
    nat:Network Address Translation
		网络地址转换,为了安全

		地址转换:
			SNAT:源地址转换
			DNAT:目标地址转换
			PNAT:端口转换

			FULL NAT:全地址转换

	SNAT:

		专用选项:
			SNAT --to-source SIP
				转换成哪个源地址

			MASQUERADE:地址伪装,用于ADSL网络,会将地址转换成拨号之后的地址。

			例如:iptables -t nat -R POSTROUTING 1 -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.129

		nat转换都会带有一个相反的响应,而相反的响应是不需要专门指定的,nat会自己根据自己的追踪表来确定转换地址:
			请求的是目标就会响应源
			请求的是源就会响应目标
				例如:如果nat转换请求外部主机,那么回来的时候就是响应
					请求的时候是源地址转换,回来的时候是目标地址转换
					请求的时候需要指定源地址转换,回来的时候nat会根据自己的追踪表来确定目标地址。

	DNAT,PNAT:
		目标地址转换的时候,可以一样进行端口转换。

		--to-destination

	FULL NAT:全地址转换
		既转换目标地址,也转换源地址。
		例如:公司内有多个局域网,地址出去的时候需要通过一个路由器,所以转换的时候通过full nat转换目标地址与源地址。

    以上是nat的选项
    
    现在来配置一下:
        这里需要用-t指定表,因为默认是filter这个表
        
        iptales -t nat -A -s 192.168.0.0/16 -j SNAT --to-soure 192.168.1.1 
        
        这样就可以将所有从服务器出去的192.168这个网段的地址伪装成192.168.1.1 这个地址。

以上为基础只是,如果有什么问题也可以在博客留言。

时间: 2024-10-02 20:00:34

Linux防火墙基础知识及配置的相关文章

Linux DNS基础知识与配置

基础概念 程序大都都是有客户端和服务端组成,客户端(Client):用于发起应用请求:服务端(Server):接收并响应请求提供服务.Client是主动请求方,如何实现Server能够及时识别并处理Clinet的某种请求呢?这就引入了端口和监听的概念. 端口(PORT): 可以认为是服务的一种认证,1-1023端口号都被一些通用的应用程序所占用,例如Client请求:80端口,服务端就知道Client请求http服务,同时给予响应.( DNS基于UDP/53号端口和TCP/53号端口,TCP用于

Linux防火墙基础与编写防火墙规则

Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根据处理数据包的不同时机划分为五种链,而决定是否过滤或处理数据包的各种规则,按先后顺序存放在各规则链中. 1.防火墙:内核中具有包过滤体系 内核态:netfilter 用户态:iptables  管理工具 工作在网络层:可以对ip地址.端口.协议等信息进行处理 2.规则链:规则的集合 五种链:(必须大

Kali Linux渗透基础知识整理(二)漏洞扫描

Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网络上传输的数据量. TCP协议 TCP是因特网中的传输层协议,使用三次握手协议建立连接.当主动方发出SYN连接请求后,等待对方回答SYN+ACK ,并最终对对方的 SYN 执行 ACK 确认.这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议. 连接建立 TC

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

linux内存基础知识和相关调优方案

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大.内存作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据.只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行.对于整个操作系统来说,内存可能是最麻烦的的设备.而其性能的好坏直接影响着整个操作系统. 我们知道CPU是不能与硬盘打交道的,只有数据被载入到内存中才可

Linux系统基础知识

1.linux概述 ??Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议.它支持32位和64位硬件.Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.??Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间).Linux存在着许多不同的Linux版本,但它们都使用了Linux内核.Linux可安装在各

ASP.NET Core 2.2 基础知识(六) 配置(内含MySql+EF)

原文:ASP.NET Core 2.2 基础知识(六) 配置(内含MySql+EF) 先上一段代码,了解一下 .NET Core 配置数据的结构. 新建一个 控制台项目,添加一个文件 json.json ,文件内容如下: { "country": "cn", "person": { "id": 1, "address": { "addName": "chengdu"

Linux防火墙基本知识

一.防火墙的分类 (一).包过滤防火墙. 数据包过滤(packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,称为访问控制表(access control lable,ACL).通过检查数据流中每个数据包的源地址和目的地址,所用的端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过. 包过滤防火墙的优点是它对用户来说是透明的,处理速度快且易于维护.缺点是:非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击:数据包的源 地址.目的地址

Linux防火墙基础(Firewalld命令的使用)

Firewalld概述 Firewalld简介 (1)支持网络区域所定义的网络连接以及接口安全的动态防火墙管理工具.(2)支持IPv4.IPv6防火墙设置以及以太网桥接(3)支持服务或应运程序直接添加防火墙规则口(4)拥有两种配置模式运行时配置永久配置 Firewalld和iptables的关系 netfilter (1)位于linux内核中的包过滤功能体系(2)称为Linux防火墙的"内核态" Firewalld/iptables (1)Centos7默认的管理防火墙规则的工具(Fi