Linux系统运维之iptables防火墙篇

一、iptables介绍

Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制。

iptables防火请的概念理解
流程:iptables—表---链—规则
iptables:相当于一个容器,里面装着防火墙的表
tables(表):一个小容器,装着防火墙的链
chain(链):一个更小容器,装着防火墙的规则
policy(规则):允许或者拒绝,防火墙一条一条安全策略

简单的说就是:

Netfilter(防火墙)(表) tables(链)chain(规则)policy
一栋楼楼里面的房子房子里面的柜子柜子里面整齐的衣服

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

二、iptables的四表五连

四表
1、filter表(默认防火墙功能 准许拒绝)
2、nat表,功能:内网服务器上外网、共享上网、端口映射
3、mangle表:ALL(跟路由无关,在任何点都行,ye最高)。实现包重构(修改)。(不常用)
4、raw表:数据跟踪处理。(不常用)

五链:
1、INPUT
2、OUTPUT
3、FORWARD
4、POSTROUTING
5、PREROUTING

表对应的链

filter表:

chain(链)功能强调:主要和自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包)filter表示iptables默认使用的表,这个表定义了三个链(chains)
INPUT过滤进入主机的数据包
FORWARD负责流经主机的数据包。起转发作用,和nat的关系很大
OUTPUT处理从主机发出去的数据包

nat表

chain(链)负责网络地址的转换,即来源于目的IP地址和port的转换应用:和主机本身无关一般用于局域网共享上网或者特殊端口转换服务相关 工作场景:1、用于企业路由(zebra)或者网关(iptables),共享上网(POSTROUTIG) ;2、做内部外部ip地址一对一映射(dmz),硬件防火墙映射到ip内部服务器,ftp服务(OREROUTIG);3、WEB,单个端口映射,直接映射80端口(PREROUTIG),这个表定义了三个链,nat功能相当于网络的acl控制
OUTPUT改变主机发出数据包的目的地址
PREROUTING在数据包到达防火墙时,进行路由判断之前执行规则,作用是改变数据包的目的地址、目的端口
POSTOUTING数据包离开防火墙之后进行路由判断之后执行的规则,作用是改变数据包的原地址和源端口

三、iptables命令及参数

iptables:防火墙规则制定命令
参数:

-F:(--flush),清除所有的规则,不会处理默认的规则
-X:删除用户自定义的链
-Z:链的计数器消息

-L:显示表中所有的规则
-n:不要把端口或ip反向解析为名字
-t:指定表
-A:将规则添加懂指定链上
-I:表示将规则插入到指定链上
-R:表示将规则信息进行修改
-D:delete删除
-l:insert拒绝的规则放在最上面

-p:(protocal)协议————tcp、udp、icmp、all
-j:指定对相应匹配规则执行什么操作(ACCEPT DROP* REJECT)
     --dport:目标端口
     --sport:源端口	
-s:指定匹配的源地址网段信息,或者匹配的主机信息
-d:指定匹配的目标地址网段信息,或者匹配的主机信息
-i:指定匹配的进入流量接口信息 只能配置在INPUT链上
-o:指定匹配的发出流量接口信息 只能配置在OUTPUT链上

nc命令:相当于telnet
参数

-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。

四、简单的实践

清除配置规则
iptables -F <- 清空iptables所有规则信息(清除filter)
iptables -X <- 清空iptables自定义链配置(清除filter)
iptables -Z <- 清空iptables计数器信息(清除filter)

1、阻止用户访问服务器的22端口

### -A 表示添加规则到相应链上,默认表示添加规则到结尾
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP   ##此规则一添加,则无法连接远程连接,如需连接则要到本机更改规则
#删除规则
#iptables -t filter -D INPUT -p tcp --dport 22 -j DROP   --- -D 表示删除规则从相应链上。


 ###  -I 表示插入规则到相应链上,默认表示插入规则到首部	 
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP 
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定规则插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP   --- -R 指定将配置好的规则信息进行替换

2、除了某个地址可以访问22端口之外,其余地址都不能访问

列如:
允许ip:10.0.0.9访问
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
    
阻止10网段访问
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP 
  	 
##通过利用 !进行规则取反,进行策略控制(只允许10.0.0.9访问)
iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT

3、指定阻止访问多个端口服务

--- 匹配连续的端口号访问,连续的端口可以连续
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP 
	   
--- 匹配不连续的端口号访问   
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP  
	-m   --- 指定应用扩展模块参数
	 multiport   --- 可以匹配多个不连续端口信息

4、通过防火墙实现禁ping功能

实现ping功能测试链路是否正常,基于icmp协议实现的
icmp协议有多种类型:
	icmp-type 8:请求类型 (禁ping的主要类型) 
	icmp-type 0:回复类型
	icmp-type 0:any(所有)	   

情况一:实现禁止主机访问防火墙服务器(禁止其他机子ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP

情况二:实现禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP

默认情况:所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP

5、实现防火墙状态机制控制

NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
RELATED: 基于一个连接,然后建立新的连接
INVALID: 无效的的数据包,数据包结构不符合正常要求的

iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

6、配置共享上网功能

原理:(来自老男孩教育)
在这里插入图片描述

模拟环境:
1、找一台机子(我这里是虚拟机any),停掉其网卡一,开启内网网卡二,使其不能上网
停网卡示例:
在这里插入图片描述

2、然后在管理机(可以上网的机子)配置iptables规则使用nat表转发网段的子网掩码要与配置的网卡一致

#在管理机(能上网的机器上面)配置
iptables -t nat -A POSTROUING -s 172.16.1.0/16 -j SNAT --to-source 10.0.0.61

#如果管理机的ip是动态的,就使用:
iptables -t nat -A POSTROUING-s 172.16.1.0/24 -j MASQUERADE
#MASQUERADE:掩饰的意思
	
#注意:必须要把nat的转发功能打开:net.ipv4.ip_forward=1
  echo 1 >/proc/sys/net/ipv4/ip_forward   ##打开
  echo 0 >/proc/sys/net/ipv4/ip_forward   ##关闭
把net.ipv4.ip_forward=1添加到/etc/sysctl.conf中:echo ‘net.ipv4.ip_forward=1>>/etc/sysctl.conf实现自启动

3、在any主机上ping www.baidu.com
这里是可以上网的!!!

4、端口转发/映射
公网ip访问内网的时候可以使用管理机进行端口的转发(映射),实现客户端能连上内网的主机
原理图(来自老男孩教育)
在这里插入图片描述在这里插入图片描述

**在配置好共享上网的前提之下**	
	用户从公网访内网的主机,途经管理机转发(端口映射)
	在管理上配置iptables规则:
iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-distination 172.16.7:22


配置之后就可以在外网的主机上访问管理机的9000端口,管理机转发到web的22端口上

5、ip映射
公网ip访问内网的时候可以使用管理机进行ip的转发(映射),实现客户端能连上内网的主机

特别说明
可以在管理机上添加虚拟ip来实现实验:(因为ip映射需要大量的ip地址来转发,所以此实验是为了测试,实际生产当中,一般不用)
命令: ip address add ip地址 可以简写为:ip a a ip地址
在这里插入图片描述

原理图:(来自老男孩教育)
在这里插入图片描述

然后配置iptables规则:
无需指定端口:(参数在上面有讲)
iptables -t nat -A PREROUTING -d 10.0.0.62  -j DNAT --to-distination 172.16.7:22

说明:本章部分内容来自老男孩教育

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
从其他地方下载下来的。在这里与大家分享。 内容简介   《Linux防火墙》创造性地将防火墙技术和入侵检测技术相结合,充分展示开源软件的威力。书中全面阐述了iptables防火墙,并详细讨论了如何应用psad、fwsnort、fwknop 3个开源软件最大限度地发挥iptables检测和防御攻击的效力。大量真实例子以及源代码更有助于读者理解安全防御的原理、技术和实际作。 作者简介   Michael Rash,世界级的安全技术专家,以防火墙、入侵检测系统等方面的造诣享誉安全界。他是psad、fwsnort和fWknop等著名开源安全软件的开发者。也是屡获大奖的Dragon入侵防御系统的安全架构师。除本书外.他还与人合撰Snort 2.1 Intrusion Detection和Intrusion Prevention and Active Response。他同时还是Linux Joumal、SysAdmin和login等著名技术媒体的专栏作家。 目录   第1章 iptables使用简介 1   1.1 iptables 1   1.2 使用iptables进行包过滤 2   1.2.1 表 2   1.2.2 链 2   1.2.3 匹配 3   1.2.4 目标 3   1.3 安装iptables 4   1.4 内核配置 5   1.4.1 基本Netfilter编译选项 6   1.4.2 结束内核配置 7   1.4.3 可加载内核模块与内置编译和安全 7   1.5 安全性和最小化编译 9   1.6 内核编译和安装 9   1.7 安装iptables用户层二进制文件 10   1.8 默认iptables策略 11   1.8.1 策略需求 11   1.8.2 iptables.sh脚本的开头 12   1.8.3 INPUT链 13   1.8.4 OUTPUT链 15   1.8.5 FORWARD链 15   1.8.6 网络地址转换 16   1.8.7 激活策略 17   1.8.8 iptables-save与iptables-restore 18   1.8.9 测试策略:TCP 20   1.8.10 测试策略:UDP 21   1.8.11 测试策略:ICMP 22   1.9 本章总结 23   第2章 网络层的攻击与防御 24   2.1 使用iptables记录网络层首部信息 24   2.2 网络层攻击的定义 27   2.3 滥用网络层 28   2.3.1 Nmap ICMP Ping 28   2.3.2 IP欺骗 28   2.3.3 IP分片 30   2.3.4 低TTL值 30   2.3.5 Smurf攻击 31   2.3.6 DDoS攻击 32   2.3.7 Linux内核IGMP攻击 32   2.4 网络层回应 33   2.4.1 网络层过滤回应 33   2.4.2 网络层阈值回应 33   2.4.3 结合多层的回应 34   第3章 传输层的攻击与防御 35   3.1 使用iptables记录传输层首部 35   3.1.1 记录TCP首部 35   3.1.2 记录UDP首部 37   3.2 传输层攻击的定义 38   3.3 滥用传输层 38   3.3.1 端口扫描 38   3.3.2 端口扫射 46   3.3.3 TCP序号预测攻击 46   3.3.4 SYN洪泛 47   3.4 传输层回应 47   3.4.1 TCP回应 47   3.4.2 UDP回应 50   3.4.3 防火墙规则和路由器ACL 51   第4章 应用层的攻击与防御 53   4.1 使用iptables实现应用层字符串匹配 53   4.1.1 实际观察字符串匹配扩展 54   4.1.2 匹配不可打印的应用层数据 55   4.2 应用层攻击的定义 56   4.3 滥用应用层 56   4.3.1 Snort签名 57   4.3.2 缓冲区溢出攻击 57   4.3.3 SQL注入攻击 59   4.3.4 大脑灰质攻击 60   4.4 加密和应用层编码 62   4.5 应用层回应 63   第5章 端口扫描攻击检测程序psad简介 64   5.1 发展历史 64   5.2 为何要分析防火墙日志 64   5.3 psad特性 65   5.4 psad的安装 65   5.5 psad的 67   5.5.1 启动和停止psad 68   5.5.2 守护进程的唯一性
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值