必威体育Betway必威体育官网
当前位置:首页 > IT技术

Iptables

时间:2019-08-05 14:44:18来源:IT技术作者:seo实验室小编阅读:52次「手机版」
 

iptables

iptables介绍

linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成。

netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables 组件是一种工具,也称为用户空间,它使插入、修改和除去信息包过滤表中的规则变得容易。

iptables基础

我们知道iptables是按照规则来办事的,规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听的套接字(IP:Port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点,我们说过,netfilter才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡,而这些关卡在iptables中不被称为"关卡",而被称为"链"。

在这里插入图片描述

其实我们上面描述的场景并不完善,因为客户端发来的报文访问的目标地址可能并不是本机,而是其他服务器,当本机的内核支持IP_FORWARD时,我们可以将报文转发给其他服务器,所以,这个时候,我们就会提到iptables中的其他"关卡",也就是其他"链",他们就是 “路由前”、“转发”、“路由后”,他们的英文名是

PREROUTING、FORWARD、POSTROUTING

也就是说,当我们启用了防火墙功能时,报文需要经过如下关卡,也就是说,根据实际情况的不同,报文经过"链"可能不同。如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去的。

在这里插入图片描述

所以,根据上图,我们能够想象出某些常用场景中,报文的流向:

到本机某进程的报文:PREROUTING --> INPUT

由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING

由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

表的概念

我们把具有相同功能的规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表

filter表:负责过滤功能,防火墙;内核模块:iptables_filter

nat表:network address translation,网络地址转换功能;内核模块:iptable_nat

mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle

raw表:关闭nat表上启用的连接追踪机制;iptable_raw

最常用的有三张表:filter,nat,mangle

在这里插入图片描述

数据经过防火墙的流程

在这里插入图片描述

链的作用

prerouting

数据包进入路由表之前的操作在此进行

input

通过路由表后发现目的地址为本机,则匹配该链中规则

forward

通过路由表后发现目的地址非本机,则匹配该链中规则

output

由本机产生的,向外转发的匹配该链中的规则

postrouting

发送到网卡接口之前,进行该链中规则的匹配

命令格式

iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 处理动作或跳转]

-t 接表名,如果不加-t 默认就是 –t filter

命令选项

-L 列出一个或所有链的规则

-v 显示详细信息,包括每条规则的匹配句数量和匹配字节

-x 在v的基础上,禁止自动换算单位(K,M)

-n 只显示ip地址和端口号,不显示域名和服务名称

-I 插入到防火墙第一条生效

-A 添加链是添加到最后一条

-D 删除指定链中的某一条规则,按规则序号或内容确定要删除的规则

-F 清空指定链中的所有规则,默认清空表中所有链的内容

-X 删除指定表中用户自定义的规则链

条件匹配

-i 入站请求接口

-o 出站请求接口

-s 入站源地址

-d 目标地址

-p 指定规则协议,如tcp, udp,icmp等,可以使用all来指定所有协议

–dport 目的端口,数据包的目的(dport)地址是80,就是要访问我本地的80端口

–sport 来源端口 数据包的来源端口是(sport)80,就是对方的数据包是80端口发送过来的。

处理动作

ACCEPT:允许数据包通过。

DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

masquerade:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

DNAT:目标地址转换。

REDIRECT:在本机做端口映射。

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配

一般不使用REJECT(拒绝)行为.REJECT会带来安全隐患

操作样例:

1 查看iptables规则

iptables -L -n

2 清除默认规则

iptables –F 清除所有规则

iptables –X 删除用户自定义的链

iptables –Z 链的计数器清零

默认情况下,我们的清除规则实际是对filter表的操作,如果是nat表,需要指定表

iptables –t nat –F

3 保存修改

[root@es salt]# /etc/init.d/iptables save

4 禁止ssh 默认22端口

iptables -A INPUT -p tcp --dport 22 -j DROP

5 禁止多端口

iptables -A INPUT -p tcp --dport 80:3306 -j DROP

[root@es ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpts:80:3306

列表形式禁止多端口

iptables -A INPUT -p tcp -m multiport --dport 50,51,60,8888 -j DROP

注:-m multiport 列表禁止多端口的参数

[root@es ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpts:80:3306

DROP tcp – 0.0.0.0/0 0.0.0.0/0 multiport dports 50,51,60,8888

6 删除规则

方法1

iptables -D INPUT -p tcp --dport 22 -j DROP

方法2

[root@es ~]# iptables -L -n --line-number

Chain INPUT (policy ACCEPT)

num target prot opt source destination

1 DROP tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpts:80:3306

2 DROP tcp – 0.0.0.0/0 0.0.0.0/0 multiport dports 50,51,60,8888

iptables -D INPUT 1

[root@es ~]# iptables -L -n --line-number

Chain INPUT (policy ACCEPT)

num target prot opt source destination

1 DROP tcp – 0.0.0.0/0 0.0.0.0/0 multiport dports 50,51,60,8888

7 禁止10.0.0.0/24网段连入

iptables -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP

注:-i 入站请求接口

-o 出站请求接口

-s 入站源地址

-d 目标地址

[root@es ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP all – 10.0.0.0/24 0.0.0.0/0

8 除了192.168.56.1其他IP都不能通过eth0连接

iptables -I INPUT -i eth0 -s ! 192.168.56.1 -j DROP

注:!和IP之间有空格 有提示 不用理会

[root@es ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP all – !192.168.56.1 0.0.0.0/0

9 禁 192.168.56.7 ping 本机

iptables -I INPUT -p icmp --icmp-type 8 -s 192.168.56.7 -j DROP

10 对外的WEB服务器,要允许http服务通过,并且不限制IP

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

11 允许FTP服务

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

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

注:FTP服务有些特殊 说以要允许ftp服务通过防火墙需要上面两步

ESTABLISHED 已经建立连接的数据包允许通过

RELATED 发出去的数据包允许通过

12 端口转发

iptables -t nat -A PREROUTING -d 192.168.52.5 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80

注: 访问目标地址是192.168.52.5 端口80的访问都转给172.16.1.17:80

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读