主要学习罗列一些简单的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区别,为什么会冲突