Linux下iptables实践与详解

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介: Linux下iptables实践与详解

防火墙是一种应用于网络上的过滤机制,从保护对象上可分为:主机防火墙、网络防火墙,从物理上可分为:硬件防火墙、软件防火墙。


保护对象上的分类:


主机防火墙:针对于单个主机进行防护

网络防火墙:往往部署于网络边界,对流入以及流出的流量进行过滤

物理上的分类:


硬件防火墙:拥有经过特别设计的硬件及芯片,性能高、成本高

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低、成本低


【1】基本介绍与操作

① 概述


当主机收到一个数据包后,数据包先在内核空间中处理。若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理。若发现目的不是自身,则会将包丢弃或进行转发。

iptables实现防火墙功能的原理


在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数。iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。


iptables中定义有5条链,说白了就是上面说的5个钩子函数。因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包。


iptables定义的表


在每个链上都有一堆规则,但是部分规则是相似的,那我们把一些实现相同功能的规则放在一起,就能轻松的完成复用了—这就是表。


filter:负责过滤功能,内核模块 iptables_filter

nat:负责进行网络地址转换,内核模块 iptable_nat

mangle:拆解报文,进行修改,重新封装,内核模块 iptable_mangle

raw:关闭 nat 表上启用的连接追踪机制,内核模块 iptable_raw

security:安全相关。CentOS 7 里新增的表,暂且不介绍

表具有一定的优先级:raw–>mangle–>nat–>filter。一条链上可定义不同功能的规则,检查数据包时将根据上面的优先级顺序检查。


② 命令与规则详解**

语法格式如下:

iptables(选项)(参数)


  • 选项
-t<表>:指定要操纵的表;
-A --apend:向规则链中添加条目;
-D --delete:从规则链中删除条目;
-I --insert:向规则链中插入条目;
-R --replace:替换规则链中的条目;
-L --list:显示规则链中已有的条目;
-F --flush:清除规则链中已有的条目;
-Z --zero:清空规则链中的数据包计算器和字节计数器;
-N --new-chain:创建新的用户自定义规则链;
-P --policy:定义规则链中的默认目标;
-h --help:显示帮助信息;
-p --protocol:指定要匹配的数据包协议类型;
-s --source:指定要匹配的数据包源ip地址;
-j<目标> --jump target:指定要跳转的目标;
-i<网络接口> --interface:指定数据包进入本机的网络接口;
-o<网络接口> --output:指定数据包要离开本机所使用的网络接口。


iptables命令选项输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> 
--sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作


表名包括:

raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
nat:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。


对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT


对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING


而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING


规则链名包括:

INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。


动作包括:

ACCEPT:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。
LOG:日志记录。
REJECT:丢弃数据包并给发送此数据包的主机发送一条icmp包来进行说明。


③ 操作防火墙服务的常用命令

查询防火墙状态:

[root@localhost ~] service   iptables status

停止防火墙:

[root@localhost ~] service   iptables stop

启动防火墙:

[root@localhost ~] service   iptables start

重启防火墙:

[root@localhost ~] service   iptables restart

永久关闭防火墙:

[root@localhost ~] chkconfig   iptables off

永久关闭后启用:

[root@localhost ~] chkconfig   iptables on

【2】配置防火墙

修改配置文件命令如下:

vim /etc/sysconfig/iptables

假设添加8656端口:

保存配置文件并执行如下命令使其生效:

[root@localhost ~]# service iptables restart

这里记录一个小坑,当你在iptables文件里面修改后,谨记不要使用如下命令:

servcie iptables save

如果直接编辑了配置文件,然后用service iptables save,那么内存里的配置规则是初始的,会覆盖你直接对配置文件的编辑 !

那么该命令如何使用呢?


在你使用命令修改防火墙情况下,使用该命令会使其永久有效!

iptables  -A INPUT -p tcp -m state --state NEW -m tcp --dport 82 -j ACCEPT
#上面的命令即时生效,但是重启iptables服务后就消失了
service iptables save
#iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

【3】iptables实例说明

实例如下:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:168]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 8080,8081,8082,8083,8161 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

实例说明如下:

:INPUT ACCEPT [0:0]
# 该规则表示INPUT链默认策略是ACCEPT
:FORWARD ACCEPT [0:0]
# 该规则表示FORWARD链默认策略是ACCEPT
:OUTPUT ACCEPT [0:0]
# 该规则表示OUTPUT链默认策略是ACCEPT
-A INPUT -i lo -j ACCEPT
#-i 参数是指定接口,这里的接口是lo ,lo就是Loopback(本地环回接口)。
#意思就允许本地环回接口在INPUT链的所有数据通信。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#意思是允许进入的数据包只能是刚刚我发出去的数据包的回应。
#ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#这两条的意思是在INPUT链和FORWARD链中拒绝所有其他不符合上述任何一条规则的数据包。
#并且发送一条host prohibited的消息给被拒绝的主机。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#iptables可以使用扩展模块来进行数据包的匹配,语法就是 -m module_name。
#所以-m state 的意思是使用 state 扩展模块的功能。
#-m state --state NEW表示数据包的状态必须是NEW.
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT
#在所有网卡上打开ping功能,便于维护和检测。 
目录
相关文章
|
4月前
|
Ubuntu Linux vr&ar
IM跨平台技术学习(十二):万字长文详解QQ Linux端实时音视频背后的跨平台实践
本文详细记录了新版QQ音视频通话在 Linux 平台适配开发过程中的技术方案与实现细节,希望能帮助大家理解在 Linux 平台从 0 到 1 实现音视频通话能力的过程。
160 2
|
2月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
218 73
|
13天前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
16 3
|
29天前
|
运维 网络协议 安全
Linux安全运维--一篇文章全部搞懂iptables
Linux安全运维--一篇文章全部搞懂iptables
35 1
|
1月前
|
Ubuntu Linux
Linux实践|设置静态 IP 地址
Linux实践|设置静态 IP 地址
49 0
Linux实践|设置静态 IP 地址
|
3月前
|
存储 人工智能 数据管理
深入理解Linux操作系统之文件系统管理探索人工智能:从理论到实践的旅程
【8月更文挑战第30天】在探索Linux的无限可能时,我们不可避免地会遇到文件系统管理这一核心话题。本文将深入浅出地介绍Linux文件系统的基础知识、操作命令及高级技巧,帮助你更有效地管理和维护你的系统。从基础概念到实践应用,我们将一步步揭开Linux文件系统的神秘面纱。
|
3月前
|
域名解析 网络协议 Linux
在Linux中,iptables有哪相关的命令?
在Linux中,iptables有哪相关的命令?
|
4月前
|
负载均衡 网络协议 Linux
|
3月前
|
Linux 网络安全
在Linux中,iptables和firewalld两种防火墙如何使用?
在Linux中,iptables和firewalld两种防火墙如何使用?
|
3月前
|
网络协议 Linux 应用服务中间件
如何使用Iptables在Linux网关上转发端口
如何使用Iptables在Linux网关上转发端口
102 5