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功能,便于维护和检测。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值