iptables基础学习(一)

主要学习罗列一些简单的iptables简单基础知识

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

-P :设置默认策略的

iptables -t filter -F 清空所有iptables规则

iptables -t filter -P FORWARD ACCEPT

 

关于设备的iptables,添加openvpn的端口开放指令

iptables -I INPUT -p tcp -m multiport --dports 80,23 -i tun0 -j ACCEPT

 

针对iptables指令和部分功能的解析说明:

一、指令及语法说明

详细说明:https://www.cnblogs.com/fenle/p/4708322.html

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

说明:

表名、链名:用于指定 iptables命令所操作的表和链,(链和表的说明,见下面)

命令选项:用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;)

条件匹配:用于指定对符合什么样 条件的数据包进行处理;

目标动作或跳转:用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

不指定-t时,默认是针对 -t filter

eg:

iptables -I INPUT -p tcp -m multiport --dports 80,23 -i tun0 -j ACCEPT

给tun0端口添加 80,23端口开放

 

iptables -D INPUT 1

删除input链的第一条规则

 

iptables -I INPUT -p icmp -j REJECT

拒绝进入防火墙的所有ICMP协议数据包

 

iptables -A FORWARD -p ! icmp -j ACCEPT

允许防火墙转发除ICMP协议以外的所有数据包(使用“!”可以将条件取反。)

 

iptables -A FORWARD -s 192.168.1.10 -j REJECT iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

拒绝转发来自192.168.1.10主机的数据,允许转发来自192.168.0.0/24网段的数据

 

iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP

只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

 

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

允许本机开放从TCP端口20-1024提供的应用服务

 

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

禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包

iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-m mac –mac-source”来表示数据

包的源MAC地址

 

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

允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280

这里用“-m multiport –dport”来指定目的端口及范围

 

 

iptables命令的管理控制选项

-A 在指定链的末尾添加(append)一条新的规则 -D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除 -I 在指定链中插入(insert)一条新的规则,默认在第一行添加 -R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换 -L 列出(list)指定链中所有的规则进行查看

-E 重命名用户定义的链,不改变链本身 -F 清空(flush) -N 新建(new-chain)一条用户自己定义的规则链 -X 删除指定表中用户自定义的规则链(delete-chain) -P 设置指定链的默认策略(policy)

-Z 将所有表的所有链的字节和数据包计数器清零 -n 使用数字形式(numeric)显示输出结果 -v 查看规则表详细信息(verbose)的信息 -V 查看版本(version) -h 获取帮助(help)

 

防火墙处理数据包的四种方式

-j 处理数据选项方式

ACCEPT 允许数据包通过

DROP 直接丢弃数据包,不给任何回应信息

REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。

LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

 

条件匹配

1. 协议匹配:用于检查数据包使用的协议,符合规则就允许,反之拒绝。允许使用的协议名在/etc/protocols文件中。

   常用的协议有tcp,udp,icmp,ip 和all。【  -p  协议名 】

# iptable -I INPUT -p icmp  -j REJECT 【拒绝进入防火墙本身的icmp数据包】

# iptable -A FORWARD -p udp -j ACCEPT  【允许转发udp的所有数据包】

2. 地址匹配:用于检查数据包的地址是否符合规则,包括源地址和目的地址。【-s  源地址, -d  目的地址】

# iptable -A FORWARD -s 10.0.0.0/8   -j DROP  【拒绝转发来自10.0.0.0/8 网段的数据包】

 

# iptable -A FORWARD -d 80.0.0.0/8   -j DROP  【 拒绝转发目的是80.0.0.0/8 网段的数据包】

 

3.端口匹配:用于检查数据包的tcp或udp端口,需要和 “-p 协议类型” 一起使用【-sport  源端口,-dport 目的端口】

# iptables -A FORWARD -s 10.0.0.0/8  -p tcp  --dport  80    -j ACCEPT 【允许转发来自10.0.0.0/8网段,目的端口是80的数据包】

# iptables -I FORWARD -s 10.0.0.0/8  -p tcp  --sport 21     -j ACCEPT【允许转发来自10.0.0.0/8网段,源端口是21的数据包】

4.接口匹配:用于检查数据包从防火墙那个接口进入或出去,来判断是否允许。

# iptables -A FORWARD  -i eth0 -s 10.0.0.0/8 -p tcp --dport 80  -j ACCEPT

【允许转发从eth0进入,来自10.0.0.0/8网段,使用tcp 协议,目的端口椒80的数据包】

# iptables -A INPUT -i eth0  -s 80.0.0.0/8  -j DORP 【拒绝从eth0进入,来自80.0.0.0/8的数据包】

5.SNAT转换:一般linux充当网关服务器时使用

SNAT只能用在nat表的POSTROUTING连,用于对源地址进行转换。要结合 --to 使用。

# iptables -t nat -A POSTROUTING -s 10.0.0.0/8  -j SNAT  --to 202.106.1.1

【将来自10.0.0.0/8网段的所有数据包的源地址转为202.106.1.1】

# iptables -t nat -A POSTROUTING  -i eth0  -s 80.0.0.0/8  -p tcp --dport 25 -j SNAT  --to 202.106.1.1

 

6.DNAT转换:只能用在nat表中的PREROUTING连,用于对目的地址或端口进行转换。

# iptables -t nat -A PREROUTING -i eth1 -d 202.106.1.1  -p tcp --dport  80 -j DNAT --to 10.0.0.10

【将从eth1 进入,目的地址是202.106.1.1,使用tcp 协议,目的端口是80的数据包的目的地址转为10.0.0.1】

7.MASQUERADE:伪装,是SNAT的特例。

# iptables  -t nat  -A POSTROUTING -s 10.0.0.0/8 -o eth1  -j MASQUERADE

【将来自10.0.0.0/8网段,从eth1出去的数据包的源地址伪装为eth1接口地址】

 

 

四.拓展模块

1.按来源MAC地址匹配

# iptables -t filter -A FORWARD -m --mac-source  00:02:b2:03:a5:f6  -j DROP

【拒绝转发来自该MAC地址的数据包】

2.按多端口或连续端口匹配

   20:      表示20以后的所有端口

   20:100   表示20到100的端口

   :20     表示20之前的所有端口 

   -m  multiport [--prots, --sports,--dports] 

#  iptables -A INPUT -p tcp -m  multiport  --dports 21,20,25,53,80  -j ACCEPT 【多端口匹配】

#  iptables -A INPUT -p tcp -dport  20:    -j ACCEPT

#  iptables -A INPUT -p tcp  -sport 20:80   -j ACCEPT

#  iptables -A INPUT -p tcp  -sport  :80    -j ACCEPT

注:

使用multiport可以添加多个不连接的端口,最多可以添加15组。如下

-A INPUT -p tcp -m multiport –dport 21:25,135:139 -j DROP

如果不使用multiport参数,只能是添加连续的端口。

如-A INPUT -p tcp –dport 21:25 -j DROP

而不能写成21:25,135:139

 

 

3.还可以按数据包速率和状态匹配

-m  limit  --limit 匹配速率   如: -m  limit --limit 50/s  -j ACCEPT

-m  state  --state  状态     如: -m  state --state INVALID,RELATED  -j ACCEPT

 

说明:

二、防火墙内部分的原理介绍:

详细说明连接见:https://www.cnblogs.com/zc1741845455/p/11281774.html

三张表介绍:

filter、net、mangle三张表:

filter负责过滤数据包,包括的规则链有,input(进),output(出)和forward(转发);一般为我们常用的

nat则涉及到网络地址转换,包括的规则链有,prerouting(路由前),postrouting(路由后)和output(出);

mangle表则主要应用在修改数据包内容上,用来做流量整形的,给数据包打个标识,默认的规则链有:INPUT、OUTPUT、forward、POSTROUTING、PREROUTING;

 

五个链:

input 匹配目标IP是本机的数据包 (进来的数据包)

Output 出口数据包,一般不在此链上做配置(出去的数据包)

Forward 匹配流经本机的数据包 (转发,流经的数据包)

Preouting 用来修改目的地址,用来做DNAT 。如:把内网中的80端口映射到路由器外网端口上(路由前,修改目的地址的)

Postrouting 用来修改源地址用来做SNAT 。如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网 (家庭路由,SNAT)

总结:iptables 三个表,5个链接

 

标准的默认的链的简单,理解就为上面这些

更多的情况,我们使用的是自定义链

 

三、自定义说明

我们具体的项目中一般使用到自定义链。包括白名单、黑名单、端口开放等,会涉及到这一块。 

自定义链说明:https://blog.csdn.net/lbyyy/article/details/78898931

 

1)创建一条自定义链

iptables -t filter -N in_web

这条自定义链的引用计数为0 (0 references),也就是说,这条自定义链还没有被任何默认链所引用,所以,即使IN_WEB中配置了规则,也不会生效

 

2)在自定义链中配置规则

iptables -t filter -I in_web -s 192.168.240.120 -j REJECT

和默认的链操作是一样的

自定义链中已经有了一些规则,但是目前,这些规则无法匹配到任何报文,因为我们并没有在任何默认链中引用它

 

3)引用自定义链 。将自定义链加到指定默认链中

但是,我们的链需要加到哪个规则中去?

IN_WEB链是为了针对web服务的入站规则而创建的,那么这些规则应该去匹配入站的报文,所以,我们应该用INPUT链去引用它

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

添加前:

添加后:

在INPUT链中添加了一条规则,访问本机80端口的tcp报文将会被这条规则匹配到

上述规则中的"-j IN_WEB"表示:访问80端口的tcp报文将由自定义链"IN_WEB"中的规则进行处理,当"-j"对应的值为一个自定义链时,就表示被当前规则匹配到的报文将交由对应的自定义链处理,具体怎样处理,取决于自定义链中的规则,当IN_WEB自定义链被INPUT链引用以后,可以发现,IN_WEB链的引用计数已经变为1,表示这条自定义链已经被引用了1次,自定义链还可以引用其他的自定义链

 

4)更改自定链名称

iptables -E in_web web

对应添加到INPUT上的链的名字会自动改过来,见图

使用"-E"选项可以修改自定义链名,如上图所示,引用自定义链处的名称会自动发生改变

 

 

5)删除自定义链

1、自定义链没有被任何默认链引用,即自定义链的引用计数为0。

2、自定义链中没有任何规则,即自定义链为空。

iptables  - X  web

记录一个问题,iptables和firewalld区别,为什么会冲突

 

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页