linux---iptables

防火墙—iptables

基本概念

关于iptables

1.iptables是软件防火墙,属于应用层的防火墙,是由linux内核去实现的。

2.iptables只是一个给netfilter传递参数和查看参数信息的软件,是linux内核中的一个防火墙管理工具,不是防火墙工具,linux中的防火墙功能是由linux内核实现的。

3.iptables也可以间接的当做抓包工具使用:
#iptables -L -n --line-num -v
–line-num:显示规则的编号
-v:显示数据抓包的个数

4.iptables设置防火墙规则,一般设置在防火墙设备(硬件防火墙)上,不会在服务器上设置软件防火墙,因为iptables进行防火墙规则过滤时,会对数据进行筛选,降低数据的传输,而且会影响服务器的工作效率

规则链

首先要了解规则是什么,规则就是按一定的规范组成的准则,简而言之就是要准守的一个准则,如果某个事物不满足该规则,则就被划分为别的事物,如果满足,就被划分为该规则定义的一类事物。所以规则的作用就是在于对数据包进行过滤或处理,根据处理时机的不同,各种规则被组织在不同的“链”中

规则链就是一组规则的集合,是防火墙规则/策略的集合。如描述某个人时,用黄皮肤、黑头发等信息去形容一个人,那么这些描述信息就可以看成是一个规则链

特别注意:当一个规则链中有多条规则,会按照序号的先后顺序,从第一个开始匹配,若找到匹配的规则则停止匹配,如果寻找到最后一条规则还没有找到匹配的,则会按该链的默认规则(默认的规则就是放行,也可人为的设置)对数据包进行处理。

在linux系统中,自带了5种规则链,分别如下:
1.INPUT:处理入站数据包(即处理进入本机应用程序的数据包)
2.OUTPUT:处理出站数据包(处理从本机应用程序出去的数据包)
3.FORWARD:处理正在转发的数据包(将本机当做了一个路由器)
4.POSTROUTING:在进行路由选择后处理的数据包(处理从本机出去的数据包)
5.PREROUTING:在进行路由选择前处理的数据包(处理进入本机的数据包)

5种链路的位置如图所示:
在这里插入图片描述
因此,数据包进入主机后只有两条路径。分别如下:
访问本机的应用程序:
流向:PREROUTING->INPUT->OUTPUT->POSTROUTING
仅在主机进行数据的转发:
流向:PREROUTING–>FORWARD–>POSTROUTING

除此之外,还可以自定义链。如下:
在这里插入图片描述
在这里插入图片描述
删除自定义链一定要注意,链中没有规则才能删除链。

规则表

2.规则表,是规则链组成的一个表,可看成是规则链的一个集合。

在开始对规则链的例子中,可以将黄皮肤,黑头发看成是对中国人的描述,那么将白皮肤看成是对英国人的描述,类似的将高鼻梁看成是对美国人的描述。这里有三条规则链,在中国有很多的人种,因此,可将中国看成是一个表,不同的人群看成是一个链。

在linux中,有4个规则表,分别如下:

raw表:确定是否对该数据包进行状态(新老数据)跟踪,看syn和ack序列位,如果ack和syn为1,则证明以前连接过,该主机是可信赖的。该表默认含有PREROUTING和OUTPUT链。 RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度
mangle表:为数据包设置标记,可以向数据包里面插入标记。方便过滤时候进行识别。该表默认含有所有的链
nat表:修改数据包中的源、目标IP地址或端口。用来做内外网数据的转换。该表默认含有PREROUTING,INPUT、OUTPUT、POSTROUTING链。
filter表:确定是否放行该数据包(过滤),主要是用来保护应用程序的数据,但是也可以对路由的功能进行控制,限制访问本机的应用程序,如nginx、mysql等。该表默认含有INPUT、OUTPUT、FORWARD链

这四个表是有优先级的。当某个规则链同时出现在多个表中时,根据表的优先级进行查看,优先级从高到低的顺序如下:
raw—》mangle—》nat—》filter

命令选项

命令的使用语法格式为:

iptables [-t 表名] 选项 [链名] [条件匹配] [-j 目标动作或跳转] 加粗文本
注意:
1.不指定表名时,默认表示filter表
2.不指定链名时,默认表示该表内所有链
3.除非设置规则链的默认策略,否则需要指定匹配条件

常用选项:

  1. -t:指定查看的表,不指定默认是查看的filter表,t代表table
  2. -L:列出指定链的所有规则
    在这里插入图片描述
  3. -A:指定在链的最后添加一条规则,a代表append,追加的意思
  4. -I(大写的i):在链的指定位置插入规则,i是insert(数字填写在链后面,默认第一条)
  5. -v:指定显示数据包
  6. -C:检查链中是否有与指定内容匹配的规则
  7. -n:以数字的形式显示服务,将服务的名称显示为端口号
  8. -j:指定改规则的处理策略,有三种类型,ACCEPT(接受,也就是允许通过)、DROP(丢弃,并且不会给予反馈)、REJECT(丢弃,但是会给予 反馈)
  9. –line-numbers:显示每一条规则的编号
    在这里插入图片描述
    两者区别
  10. -P:设置默认规则,不需要指定匹配条件
  11. -D:清除指定位置的规则,位置的数字放在链的后面
  12. -F:清除表的规则
  13. -R:修改制定位置的规则
  14. -N:增加自定义链 (自定义链需要别的链去引用进行规则的过滤,因为自定义链不在优先级队列中,因此数据包不会考虑自定义链)
  15. -X:删除自定义链
  16. -E:修改链的名字,不要轻易修改系统默认的链的名字,否则结局很被悲惨

通用条件

可直接使用,不依赖于其他的条件或扩展模块
16. -s:指定源ip地址
17. -p:指定采用的协议
18. -d:指定目的ip地址
19. -i:指定进来数据的网卡接口
20. -o:指定数据出去的网卡接口

隐式条件:

一般需要以特定的协议匹配作为前提
21. --dport:指定服务的目的端口号。注意,采用端口号后一定要指定协议,否则会报错,因为端口号是基于协议的。
22. --sport:指定服务的源端口号。
23. --tcp-flags:指定标记位(syn、ack、psh、FIN、RST等)
24. --icmp-type:指定icmp包的类型,8是请求包,0是响应包等

显式条件匹配

需要使用“-m 扩展模块”的形式明确指定匹配方式
常见的有多端口、MAC地址、IP地址范围、数据包状态等匹配方式

可用lsmod命令查看所有加载的模块
modprobe ip_conntrack_ftp:加载指定的模块(ip_conntrack_ftp)
开启路由功能3种方法
-m的组合:

和mac组合:
	--mac-source MAC地址:指定源mac地址
和multiport组合,可以指定多个端口
    --dport 20,21,25,110,1250:1280
和iprange组合,可以指定一段ip范围:
	--src-range 192.168.1.20-192.168.1.99
和state组合,可以查看状态包的匹配
	NEW:新的数据包
	ESTABLISHED:已经建立连接的数据
	RELATED:根据某个已经建立连接再发起另一个连接,在FTP(文件传输协议,应用层协议)的被动模式中的数据连接中经常使用。

iptables防火墙规则的导入、导出

iptables规则的导入导出规则,其实本质就是将规则重定向到指定文件,这就是导出。再从指定文件读取内容到规则里面,就是导入。
规则导出:iptables-save > 文件名
规则导入:iptables-restore < 文件名
若要设置开机就自动导入关机之前的规则。则需要将命令放在/etc/rc.local文件里面,这个文件是开机就会自动执行的,但是要注意的一点是,要给该文件可执行的权限,否则开机时的用户是没有权限去执行该文件的。给文件可执行权限的命令如下:
chmod +x /etc/rc.d/rc.local

例子

1.修改filter表的INPUT默认规则,将其改为DROP

iptables -P INPUT DROP

2.清除filter表的INPUT链上的第二条规则

iptables -D INPUT 2

3.清除所有filter表的所有链规则

iptables -F

4.在raw表中新增一个名为TCP_PACKETS的规则链

iptables -t raw -N TCP_PACKETS

5.在filter表中的OUTPUT链中设置允许源端口是20-80之间的数据

iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT

6.不让经由eth0网卡的icmp请求包通过

iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP

7.对于源mac地址是00:0C:29:27:55:3F的数据包不予转发

iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP

8.允许源端口是20,21,25,110,1250到1280的数据包进入主机应用程序

iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

9.对于源ip地址是192.168.1.20到192.168.1.99之间的所有数据包都不让其数据进行转发

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

10.对采用tcp协议,且状态是新数据,但是以前建立过连接的老数据进行丢弃。这种包数不合法的数据包,很明显是用来攻击本机网络安全,消耗本机带宽的。因为SYN标志位为0,则证明以前建立过连接,所以不需要再请求连接了,但是其状态又是NEW(新数据),所以很明显该数据包进行了伪装,目的就是和本机建立连接,从而消耗带宽。

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

12.附上脚本,功能是本机能ping别的主机,但是别的主机不能ping本机。且不允许192.168.0.205的主机访问本机的80,3306号端口。但是能访问22号端口

#!/bin/bash
####清除filter表的规则,表里的所有链的规则都会被清空
iptables -F

######设置默认策略
iptables -P INPUT DROP

####添加禁止web
iptables -A INPUT -s 192.168.0.205 -p tcp --dport 80 -j DROP

####添加禁止mysql
iptables -A INPUT -s 192.168.0.205 -p tcp --dport 3306 -j DROP

####添加禁止ping
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

####允许某个访问ssh
iptables -A INPUT -s 192.168.0.205 -p tcp --dport 22 -j ACCEPT

13.脚本功能如下:
1.允许192.168.0.0/24网段的主机访问本机的web、ftp、ssh和mysql。
-s:192.168.0.0/24:指定网段
2.允许任何人都可以访问本机的dns服务,dns服务开放53号端口,采用udp协议
3.禁止其他电脑ping本机,本机可以ping其他电脑
4.默认的INPUT链规则改成DROP
5.所以的规则生效后要保存。
脚本内容如下:

###清空规则链
iptables -F
iptables -t nat -F

###将INPUT链规则改为DROP
iptables -P INPUT DROP

###允许相同网段的主机访问本机的web、ftp、ssh和mysql服务
iptables -A INPUT -p tcp -s 192.168.0.0/24 -m multiport --dport 80,21,22,3306 -j ACCEPT

###允许任何人访问本机的dns服务
iptables -A INPUT -p udp --dport 53 -j ACCEPT


###不让其他电脑ping本机,但是本机可以ping其他电脑
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

在/etc/rc.local下添加一行命令:
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值