防火墙(iptables)

本文详细解析了iptables防火墙的工作原理,包括其四表五链结构、规则配置方法及常见命令。介绍了iptables如何通过内核空间与用户空间的交互实现报文过滤与地址转换,以及如何作为主机防火墙或网络防火墙进行配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.防火墙分类
从逻辑上分:主机防火墙(针对单个主机进行防护)
网络防火墙(处于网络入口或者入口边缘,针对网络入口进行防护,服务于防火墙背后的本地局域网)
从物理上分:硬件防火墙(在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高)
软件防火墙(应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低)
iptables不是真能整意义上的防火墙,可以理解为一个客户端工具,用户通过这个工具,将用户的安全设定执行到对应的安全框架中,(这个安全框架就是真正的防火墙netfilter,它属于内核空间)
iptables 是一个命令行工具,,位于用户空间,通过这个命令行工具来操作netfilter;

2.内核空间与用户空间
内核空间:也叫内核态,操作系统占据的内存区域;
用户空间:也叫用户态,用户进程所在的内存区域
硬件驱动代码运行在内核空间,与kernel运行在相同的空间内,所以驱动程序发生问题容易造成系统崩溃;
将用户空间与内核空间隔离开,可减少系统崩溃的可能,提高系统的稳定性;(一般情况下,应用程序崩溃的情况比一些硬件故障出现的概率要多很多,因此将用户空间与内核空间隔离开)

3.iptables 的四表五链
规则:源地址 目标地址 传输协议(TCP、UDP、ICMP) 服务类型(HTTP、FTP、SMTP)
放行:ACCEPT 拒绝:REJECT 丢弃:DROP
配置防火墙的主要工作就是 添加、修改和删除规则;

表:具有相同规则的集合
filter 表: 负责过滤功能,防火墙;内核模块;iptables_filter
nat 表: 网络地址转换功能;内核模块;iptables_nat
mangle表: 拆解报文,作出修改,并重新封装的功能;iptables_mangle
raw表: 关闭nat表上启用的连接追踪机制;iptables_raw
链:将每一个关卡的所有规则缠在一条链上(表是链上的一些具有相同功能的集合)
PREROUTING:raw表、mangle表、nat表
INPUT: mangle表、filter表、(centos7中有nat.6 没有)
RORWARD: mangle表、filter表
OUTPUT: raw表、mangle表、nat表、filter表
POSTROUTING:mangle表、表
表和链的关系:(一般在定义规则时):按优先级由高到低排序的
raw: PREOUTING , OUTPUT
mangle: PEROUTING , INPUT , RORWARD , OUTPUT , POSTROUTING
nat: PEROUTING , OUTPUT , POSTROUTING (centos7中有INPUT ,6 没有)
filter: INPUT , RORWARD , OUTPUT
优先级次序(由高到低):raw > mangle > nat > filter

4.iptables 的用法(规则即匹配条件加上处理动作)
匹配条件:源地址 : source IP
源端口 :source port
目标地址 :destination ip
目标端口 :destination port
处理动作 :
ACCEPT: 允许数据包通过
DROP: 直接丢弃数据包,不该任何回应信息,过了超时时间才会有反应
REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
SNAT: 源地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERADE:是SNAT的一种特殊形式,适用于动态的,临时会变的IP上
DNAT: 目标地址转换
REDIRECT:在本机做端口映射
LOG: 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

5.常用命令
-t:nat -L 列出所有nat 链中的所有规则
-A: 在指定链尾部添加规则
-D:删除匹配的规则
-R:替换匹配的规则
-I :在指定位置插入规则(插在filter表上INPUT链上第一位上)
-L/S:列出指定链或所有链的规则
-F:删除指定链或所有链的规则
-N:创建用户自定义链
-X:删除指定的用户自定义链
-P:为指定链设置默认规则策略,对自定义链不起作用
-Z:将指定链或所有链的计数器清零
-E:更改自定义链的名称
-n :IP地址和端口号以数字的方式显
常用参数:
-p tcp/udp/icmp/all :匹配指定协议,all 匹配所有协议
-s :匹配源地址 -s 192.168.1.111或 -s 192.168.1.0/24
-s ! :匹配源地址以外的
-d :匹配目标地址 -d 192.168.1.129 或 -d 192.168.1.0/24
-j :DROP、ACCEPT、REJECT :丢弃、允许、拒绝
-m :-mac 绑定MAC地址
–sport :匹配源端口 [00:00 连续端口]
–dport :匹配目标端口,可指定连续端口-sport 80
-o :匹配出口网卡(只适用于RORWARD、POSTROUTING、OUTPUT)iptables -A RORWARD -o eth0
-i :匹配入口网卡(只适用于PROUTING、INPUT、RORWARD)
-icmp-type:匹配icmp类型 iptables -p icmp-h :查看可用的ICMP类型
-tcp-flag mask comp:匹配tcp标记,mask表示检查范围,comp表示匹配mask中的哪些标记 iptables -A RORWARD -p tcp–tcp-flags ALL SYN,ACK -j ACCEPT
用法总结:
-t :指定要操作的表,缺省时表示filter表
-L :表示列出规则,在-L加上链名时表示查看指定表的指定链中的规则
-v :列出详细信息
–line-numbers :显示规则序号
-x :显示出计数器的精确值

6. iptables 规则配置(配置前将系统环境清零)
iptables -F:清理所有规则
iptables -nvL:查看所有规则的详细信息
(-t:指定操作的表/ -I:制定规则插入到哪个表中/ -s:指定匹配中的源地址/ -j:指定匹配条件的动作)
(1)增加规则:
拒绝所有来自192.168.1.129的所有报文 :iptables -t filter -I INPUT -s 192.168.1.129 -j DROP
新增规则,并将规则至于第二:iptables -t filter -I INPUT 2 -s 192.168.1.129 -j REJECT
(2)删除规则(-D)
删除第一条规则:iptables -t filter -D INPUT 1
iptables -D INPUT -s 192.168.1.129 -j ACCEPT
(3)修改规则(-R)
修改iptables -t filter -I INPUT -s 192.168.1.129 -j ACCEPT
iptables -t filter -R INPUT -s 192.168.1.129 -j DROP
修改链的默认策略:iptables -t filter -p INPUT DROP
(4)保存规则
service iptables save

7.命令集合
(1)在规则尾部追加:iptables -t 表名 -A 链名 匹配条件 -j 动作
(iptables -t filter -A INPUT -s 192.168.1.129 -j ACCEPT )
(2)在规则首部追加:iptables -t 表名 -A 链名 匹配条件 -j 动作
( iptables -t filter -I INPUT -s 192.168.1.129 -j ACCEPT)
(3)在指定链的位置添加:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
(iptables -t filter -I INPUT 2 -s 192.168.1.129 -j ACCEPT)
(4)修改指定表的指定链的默认策略:iptables -t 表名 -p 链名 -j 动作
(iptables -t filter -p FORWARD ACCEPT )
(5)按照规则序号删除规则:iptables -t 表名 -D 链名 规则序号
(iptables -t filter -D INPUT 3)
(6)按照匹配条件和动作删除规则:iptables -t 表名 -D 链名 匹配条件 -j 动作
(iptables -t filter -D INPUT -s 192.168.1.129 -j REJECT)
(7)删除所有规则:iptables -F
(8)删除指定表指定链:iptables -t filter -F INPUT
(9)删除指定表:iptables -t filter -F
(10)修改规则:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
(iptables -t filter -R INPUT 1 -s 192.168.1.129 -j ACCEPT)
(11)修改指定默认链:iptables -t 表名 -p 链名 动作
(iptables -t filter -p FORWARD ACCEPT)
(12)保存规则:service iptables save
iptables-save >/etc/sysconfig/iptables

8.防火墙的启动与停止
停止防火墙: systemctl stop firewalld
禁止firewalld自动启动: systemctl disabled firewalld
启动iptables: systemctl start iptables
将iptables设置为开机后自启动,以后即可通过iptables-service控制iptables:systemctl enabled iptables

9.常用的扩展匹配条件
(1)tcp 扩展模块
-p tcp -m tcp --sport 用于匹配tcp协议报文的源端口,可以使用冒号指定一个 连续的端口范围
-p tcp -m tcp --dport 用于匹配tcp协议报文的目标端口,可以使用冒号指定一个连续的端口范围
iptables -t filter -I OUTPUT -d 192.168.1.129 -p tcp -m tcp --sport 22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.129 -p tcp -m tcp --dport 22:25 -j REJECT
iptables -t filter -I OUTPUT -d 192.168.1.129 -p tcp -m tcp ! --sport 22 -j ACCEPT
-p tcp -m multiport --sport 用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用“逗号”隔开
-p tcp -m multiport --dport 用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用“逗号”隔开
iptables -t filter -I OUTPUT -d 192.168.1.129 -p tcp -m multiport --sports 443,445 -j REJECT
iptables -t filter -I OUTPUT -d 192.168.1.129 -p tcp -m multiport --sports 443:445 -j REJECT

10.string扩展模块
使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件
-m string :表示使用string扩展模块
–algo :用于指定匹配算法,可选的算法有bm与kmp,此选项为必选选项
–string:用于指定需要匹配的字符串
iptables -t filter -I INPUT -m string --algo kmp --string “bit” -j REJECT

11.iptables之forward
主机防火墙主要针对单个主机进行防护,网络防火墙处于网络入口的边缘,针对网络入口进行防护,针对整个网络入口后面的局域网。
当外部网络中的主机与网络内部主机通讯时,不管是由外部主机发网内部主机的报文,还是由内部主机发网外部主机的报文,都需要经过iptables所在的主机,由iptables所在的主机进行“过滤并转发”,所以,网络防火墙主机的主要工作就是“过滤并转发”。
当iptables的角色时"主机防火墙"时,报文需要过滤时,只能在INPUT和OUTPUT链中实现
当iptables的角色变为“网络防火墙”时,规则只能定义在RORWARD中.
实例: 在这里插入图片描述
图中:一般把网络分成内外网,公司也这样划分,一部分为内网,一部分为公司内网
内网网段:192.168.2.0 外网网段:192.168.1.0
(1) iptables作为主机防火墙:
@新增一条路由,让主机A访问192.168.2.0网段都发送给主机B的eth0网卡上
route add -net 192.168.2.0/24 gw 192.168.1.153
ping 192.168.1.153 可以ping通
ping 192.168.1.154 ping 不通
通与不通的原因:当我们设置静态路由的时候,192.168.2.0的网络都跳给了192.168.1.153,所以我们ping2.153时,主机B收到了这个报文,主机B发现这个2.153这个IP地址是自己的,就给了主机A回应,但是2.154发现自己并不是这个地址,所以没有回应.
@打开主机B的转发功能,才可以让报文转发
临时打开转发功能:
cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
永久生效:
修改/etc/sysctl.conf 中的net.ipv4.ip_forward=1
此时:192.168.1.153和192.168.1.154都可以ping通

(2)iptables作为网络防火墙:主要负责过滤和转发,过滤是在filter表中,转发需要配置RORWARD链(双向通讯)
@主机B上配置RORQARD链,拒绝任何报文通过,这时候主机A和主机B都无法访问
iptables -A FPRWARD -j REJECT
@打开主机A和主机B的apache服务
echo “outside” > index.html
cat index.html
service httpd status

		echo "inside" >/var/www/html/index.html
		cat /var/www/html/index.html
		service httpd  status

@配置访问规则,允许内网主机C可以访问外网主机A的web服务
iptables -I FORWARD -s 192.168.2.0/24 -p tcp --dport 80 -j ACCEPT 结果是无法访问
iptables -I FORWARD -d 192.168.2.0/24 -p tcp --sport 80 -j ACCEPT 结果是通的

通常防火墙之后需要考虑双向通讯,使用state模块,这样只需要考虑请求方即可.
iptables -D FPRWARD 1
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(3)小总结 : 如果想要iptables做网络防火墙,iptables所在主机开启核心转发功能,以便能够转发报文.
@查看当前主机是否开启了核心转发,0表示关闭.1表示已开启
cat /proc/sys/net/ipv4/ip_forward
@临时开启核心转发,立即生效,但是重启网卡后会失效
方法一: echo 1 >/proc/sys/net.ipv4/ip_forward
方法二: sysctl -w net.ipv4.ip_forward=1
@开启核心转发功能,重启网络服务后永久生效
配置/etc/sysctl.conf文件中net.ipv4.ip_forward设置为1 (centos6)
配置/usr/lib/sysctl.d/00-system.conf文件,将net.ipv4.ip_forward设置为1 (centos7)

@iptables作为网络防火墙时,在filter表中FORWARD链中设置规则
先设置一条默认拒绝所有的规则,然后再为需要放行的报文设置规则
设置规则时要考虑方向问题,针对请求报文与回应报文,考虑报文的源地址和目标地址,源端口与目标端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值