iptables 工具的使用

试验建议:关闭CentOS 7 或 CentOS 6的防火墙 (systemctl stop firewalld ; systemctl disable firewalld 或 service iptables stop ; chkconfig iptables off)

iptables   -vnL --line-numbers

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

# 在表的对应链上添加规则

iptables [-t table] {-A|-C|-D} chain rule-specification

# ipv6

ip6tables [-t table] {-A|-C|-D} chain rule-specification

# 在链中插入规则

iptables [-t table] -I chain [rulenum] rule-specification

# 修改对应链的规则

iptables [-t table] -R chain rulenum rule-specification

# 删除对应链上的规则

iptables [-t table] -D chain rulenum

# 显示链上的规则

iptables [-t table] -S [chain [rulenum]]

# 将链上的规则全部清除

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

# 增加一条自定义链

iptables [-t table] -N chain

# 删除一条自定义链

iptables [-t table] -X [chain]

# 修改链上的默认策略

iptables [-t table] -P chain target

# 重命名自定义链

iptables [-t table] -E old-chain-name new-chain-name

# 规则的格式

rule-specification = [matches...] [target]

# 匹配的格式

match = -m matchname [per-match-options]

# 处理的格式

target = -j targetname [per-target-options]

  • iptables命令格式(记牢,如果你在这里有点蒙的话,请不要急。稍后带你玩一玩你就懂了)

# -t 指定功能表,SUBCOMMAND其实就是各种选项,作用在哪一条链上 matches表示匹配规则,target表示处理的动作

iptables [-t table] SUBCOMMAND chain [matches...] [ -j target]

  • 将iptables命令逐一拆解分析

1:-t table 指定功能表

功能表有:raw , mangle , nat , filter,如果不指定,默认就是filter

2:SUBCOMMAND:指定在对应链上的增、删、改、查

(1)查看规则

-L:表示列出功能表对应链上的所有的规则

-n:以数字格式显示地址和端口,如果不加n选项,会反解主机名和端口对应的服务名

-v:显示详细格式

-x:显示计数器的精确值,每一条规则都有两类计数器,一类用于显示被匹配到的报文的个数,一类用于显示size

--line-numbers:显示链上的规则编号

(2)规则管理

-A :表示append 追加,默认为最后一个

-I: 表示insert插入,默认为第一个

-D:delete,删除

1:rule specification

2: rule number

-R: replace, 替换

-F:flush, 清刷链上的规则

-Z:zero,置0

-S:显示指定链的所有的规则,以iptables-save命令的格式显示

iptables的每一条规则有两类计数器

(1)由本规则匹配到的所有的packets

(2)由本规则匹配到的所有的bytes

(3)链管理

-N :新增一条自定义链

-X:删除自定义的空链

-E:rename,重命名自定义链的未被引用的链(引用计数器为0)

例如:iptables -N uplooking

例如:iptables -E uplooking mychain

例如:iptables -P FORWARD DROP

(4)默认策略管理

-P:设置默认策略

ACCEPT:接受

DROP:丢弃

REJECT:拒绝

例如:iptables -P FORWARD DROP

例如:iptables -P INPUT DROP

  • 示例

例如:iptables -vnL --line-numbers 查看filter表作用的链

例如:iptables -t nat -nL查看nat表对应的链

例如:iptables -N uplooking 增加一个自定义链

例如:iptables -E uplooking mychain 将自定义链 uplooking 改名为 mychain

例如:iptables -X mychain 删除自定义链,注意只有是空的链才能删除

例如:iptables -P FORWARD DROP 将FARWARD链的默认策略改为DROP

例如:iptables -P INPUT DROP 将INPUT的默认链改为DROP,这样的话,报文无法进入内核,不能被用户空间的服务接受,如ssh协议无法实现,远程无法连接

  • match匹配条件(实操第一部分:基本匹配)(非常重要,请务必认真听讲)

1:基本匹配:netfilter的hooks函数自带的匹配机制

[!] -s, --source address[/mask][,...]: 原地址匹配, ! 表示取反,表示不被匹配之意

[!] -d, --destination address[/mask][,...] :目标地址匹配,! 表示取反,表示不被匹配之意

[!] -i, --in-interface name:限制报文流入的接口匹配(入栈报文),只能由于:PREROUTING,INPUT,FORWARD

[!] -o, --out-interface name:限制报文流出的接口匹配(出栈报文),只能由于:OUTPUT,POSTROUTING, FORWARD

例如:iptables -A INPUT -s 192.168.10.223 -d 192.168.10.222 -j DROP 在INPUT链中添加一个规则,使得192.168.10.223的报文丢弃

例如:iptables -A INPUT -s 192.168.10.223 -d 192.168.10.222 -j ACCEPT 将192.168.10.223的报文接受,但是如果对于一个IP的规则只能做出一个动作,如果想重新设置需要将规则清空,使用iptables -F

  • match匹配条件(实操第二部分:隐式扩展匹配)(非常重要,请务必认真听讲)

2:扩展匹配:扩展模块匹配引入的匹配机制,-m matchname

隐式扩展:可以不使用-m选项专门的加载相应的模块,但是要加-p选项,指明使用哪种协议

[!] -p {tcp|udp|icmp|icmpv6|esp|ah|sctp|mh|all}:限制协议,就不需要用-m指定加载的扩展模块

例如:iptables -A INPUT -s 192.168.10.223 -d 192.168.10.222 -p tcp -j ACCEPT 表明如果是tcp协议的放行

① tcp:隐含了-m tcp。 有专用选项

[!] --source-port,--sport port[:port]:匹配报文中的TCP首部的源端口,可以是端口范围

[!] --destination-port,--dport port[:port]:匹配报文中的TCP首部的目标端口,可以是端口范围

[!] --tcp-flags mask comp: 检查报文中的指明mask的TCP标志位,要这些标志位中comp必须为1,了解即可

[!] --syn:相当于--tcp-flags syn,fin,ack,rst syn,匹配三次握手的第一次,了解即可

例如: --tcp-flags syn,fin,ack,rst syn:指明这四个标志位中的syn必须为1,而其他的为0,也就是TCP的第一次握手

例如:--tcp-flags syn,fin,ack,rst syn,fin:就是四次断开中的第一次

示例1:指明开放tcp协议的80端口,也就是web服务

iptables -A INPUT -s 0/0 -d 192.168.10.222 -p tcp --dport 80 -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 80 -j ACCEPT

示例2:指明开放TCP的22端口,也就是ssh服务

iptables -A INPUT -s 0/0 -d 192.168.10.222 -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 22 -j ACCEPT

② udp:隐含了-m udp。有专用选项

[!] --source-port,--sport port[:port] :匹配报文中的udp首部的源端口,可以是端口范围

[!] --destination-port,--dport port[:port]:匹配报文中的udp首部的目标端口,可以是端口范围

③ icmp:隐含指明了”-m icmp”。有专用选项

[!] --icmp-type {type[/code]|typename}

type/code有两种类型:

0/0 :echo reply 指明应答的类型

8/0:echo request 指明请求的类型

示例1:开放别人可以ping自己

iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 0 -j ACCEPT

示例2:开放自己可以ping别人

iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 0 -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 8 -j ACCEPT

  • match匹配条件(实操第三部分:显示扩展匹配)(非常重要,请务必认真听讲)

显示扩展:必须使用-m加载扩展模块

1:multiport :多端口匹配,离散的方式定义的多端口匹配,最多可以指定15个端口

[!] --source-ports,--sports port[,port|,port:port]...:指定源端口

[!] --destination-ports,--dports port[,port|,port:port]...:指定目标端口

[!] --ports port[,port|,port:port]...:可以指定源端口和目标端口

例如:同时开放22和80端口

iptables -I INPUT -s 0/0 -d 192.168.10.222 -p tcp -m multiport --dports 22,80 -j ACCEPT

iptables -I OUTPUT -s 192.168.10.222 -d 0/0 -p tcp -m multiport --sports 22,80 -j ACCEPT

2:iprange :指明一段连续的IP地址范围,作为源地址或目标地址的匹配

[!] --src-range from[-to]:指定源地址范围

[!] --dst-range from[-to]:指定目标地址范围

例如:指定客户端ip在192.168.10.1-192.168.10.254范围内的才能访问telnet服务

iptables -A INPUT -d 192.168.10.222 -p tcp --dport 23 -m iprange --src-range 192.168.10.1-192.168.10.254 -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -p tcp --sport 23 -m iprange --dst-range 192.168.10.1-192.168.10.254 -j ACCEPT

3:string:对报文中的应用层数据做字符串匹配检测

--algo {bm|kmp}

[!] --string pattern :给定要检查的字符串模式

[!] --hex-string pattern:给定要检查的字符串模式,十六进制编码

例如:只要页面中包含admin的页面都不能访问

iptables -I OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "admin" -j REJECT

4:time:收到报文的时间/日期与指定到的时间/日期做匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期时间

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间

--timestart hh:mm[:ss]:以天为单位的起始时间

--timestop hh:mm[:ss]:以天为单位的起始时间

[!] --monthdays day[,day...]:匹配一个月中的哪天

[!] --weekdays day[,day...]:匹配一个周中的哪天

例如:指定客户端IP范围和访问时间才能访问

iptables -I INPUT -d 192.168.10.222 -p tcp --dport 23 -m iprange --src-range 192.168.10.1-192.168.10.254 -m time --timestart 08:00:00 --timestop 018:00:00 -j ACCEPT

5:connlimit:根据每个客户端主机做并发并发连接数量限制,就是每个客户端最多发起的连接数量

--connlimit-upto n:连接数量小于等于n,则匹配

--connlimit-above n:连接数量大于n,则匹配

例如:

iptables -A INPUT -s 0/0 -d 192.168.10.222 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 23 -m connlimit --connlimit-upto 2 -j ACCEPT

6:limit:基于令牌桶算法对报文的速率做匹配。

--limit rate[/second|/minute|/hour|/day] :限制等待的速率, 也就是接受或响应数据包的速率

--limit-burst number:第一次可以有多少个不需要等待的

例如:这里是限制每分钟只能入栈20个icmp的报文,并且第一次入栈允许5个不需要等待,后续的报文每次需要等待2秒

iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m limit --limit 30/minute --limit-burst 5 -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 0 -j ACCEPT

7:state:用于对报文状态判断

[!] --state state:匹配报文的状态

INVALID :无法识别的连接

ESTABLISHED:连接追踪模块中存在记录的连接

NEW:连接追踪模板当中不存在的连接请求

RELATED:相关联的连接

UNTRACKED:未追踪的连接

例如1:允许自己ping别人

iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

例如2:允许别人ping自己

iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

8:对于连接追踪还需了解的知识

已经追踪到的并记录下来的连接保存在 /proc/net/nf_conntrack里面

如果追踪的记录满载了,就会显示连接超时

连接追踪功能所能够记录的最大连接数量保存在 (可调整)/proc/sys/net/nf_conntrack_max

这里可以通过命令调节内核中的参数

sysctl -w net.nf_conntrack_max=300000 将最大的追踪记录调节到300000个

conntrack所能追踪的连接数量的最大值取决于/proc/sys/net/nf_conntrack_max的设定,已经追踪的连接位于/proc/net/nf_conntrack文件中,超时的连接会被删除,当模板满载,后续的新连接有可能会超时。解决办法:

(1)加大nf_conntrack_max的值

(2)降低nf_conntrack条目的超时时长

不同协议的连接追踪时长定义在/proc/sys/net/netfilter下

  • target处理动作(实操第四部分:处理动作)(非常重要,请务必认真听讲)

-j ACTION [per-target-options]

ACCETP , DROP , REJECT

RETURN :返回调用的链

REDIRECT:端口重定向

LOG:日志

MARK:防火墙标记

DNAT:目标地址转换

SNAT:原地址转换

MASQUERADE:地址伪装

1:开放ssh、web、telnet服务

# 由于 ESTABLISHED会经常被访问,因此写在第一个

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

# 特定的服务开放

iptables -A INPUT -d 192.168.10.222 -p tcp -m multiport --dports 22,80,23 -m state --state NEW -j ACCEPT

iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT

# 所有的入栈报文,出栈全部被允许

iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

2:开放ftp、ssh、web、telnet服务

思考:对于ftp服务来说,有两个端口,20、21,如果想使用RELATED关联追踪,应该让内核加载nf_conntrack_ftp模块

# 内核加载nf_conntrack_ftp模块

modprobe nf_conntrack_ftp

# 放行了ftp协议的数据连接的端口,由于端口是随机的,所以不要给定端口号,并且指明连接追踪是related和established

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

# 特定的服务开放

iptalbes -A INPUT -d 192.168.10.222 -p tcp -m miltiport --dports 22,23,80,21 -m state --state NEW -j ACCEPT

iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT

# 所有的入栈报文,出栈全部被允许

iptables -A OUTPUT -s 192.168.10.222 -m state --state ESTABLISHED -j ACCEPT

  • 让内核加载写好的规则

CentOS 6和CentOS 7:

iptables-restore < 指定保存规则的文件路径

CentOS 6:会自动从/etc/sysconfig/iptables重载规则

service iptables restart

  • 如果自动生效规则文件中的规则

(1)把iptables命令放在脚本文件中,让脚本文件开机自动运行

/etc/rc.d/rc.local 中写入执行iptables的命令的脚本

(2)将保存的规则通过脚本命令自动开机重载

/etc/rc.d/rc.local 中 写入 iptables-restore < 指定保存规则的文件路径

时间: 2024-10-18 13:04:05

iptables 工具的使用的相关文章

iptables 工具

iptables 工具 参考文档: https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html netfilter/iptabels应用程序,被认为是Linux中实现包过滤功能的第四代应用程序. netfilter/iptables包含在2.4以后的内核中,它可以实现Firewall.NAT(网络地址转换)和数据包的分割等功能. netfilter工作在内核中,由一些信息包过滤表组成,这些表包含内

保证Linux系统安全之使用iptables工具管理防火墙

随着企业中使用Linux系统的增加,保证Linux系统安全成为运维人员的必备技能之一. Linux系统本身有很强大的防护措施:防火墙.那么如何管理防火墙就成为重中之重. 随着CentOS 7.CentOS 8的出现,越来越多的人喜欢使用firewalld工具来管理防火墙.因为它不仅可以通过命令行设置,也可以通过图形化设置.关于使用firewalld工具管理Linux防火墙,可参考保证Linux系统安全之使用firewalld工具管理防火墙 下面我们主要介绍iptables工具管理防火墙. 本人第

十六、SELINUX、netfilter防火墙以及其iptables工具

SELINUX 关闭selinux有两种方法:暂时关闭selinux防火墙,下次重启后selinux还会开启.#setenforce 0 #getenforce #查看临时关闭selinux的状态命令永久关闭selinux #vi /etc/selinux/config #修改selinux的配置文件 更改"SELINUX=enforcing"为 SELINUX=disabled  保存退出. 此处需要重启.方能改成disabled. [[email protected] ~]# /u

iptables工具_过滤包—命令(-A、-I、-D、-R、-L等)

iptables 指令 语法: iptables [-t table] command [match] [-j target/jump] -t 参数用来指定规则表,内建的规则表有三个,分别是:nat.mangle 和 filter, 当未指定规则表时,则一律视为是 filter. 各个规则表的功能如下: nat 此规则表拥有 Prerouting 和 postrouting 两个规则链,主要功能为进行一对一.一对多.多对多等网址转译工作(SNATDNAT),由于转译工作的特性,需进行目的地网址转

iptables工具__过滤包—命令(-A、-I、-D、-R、-L等)、参数(-p、-s、-d、--sport、--dport、-i、-o等)、动作-j (ACCEPT、DROP、REJECT、RED )等模块参考

iptables 指令 语法: iptables [-t table] command [match] [-j target/jump] -t 参数用来指定规则表,内建的规则表有三个,分别是:nat.mangle 和 filter,           当未指定规则表时,则一律视为是 filter. 各个规则表的功能如下: nat 此规则表拥有 Prerouting 和 postrouting 两个规则链,主要功能为进行一对一.一对多.多对多等网址转译工作(SNATDNAT),由于转译工作的特性

Linux防火墙(SElinux、netfilter)防火墙工具iptables

Linux防火墙 SElinux防火墙 SElinux是Linux系统特有的安全机制,一般装完系统后都会手动将它关闭: 查询状态 getenforce Enforcing:为开启状态,Permissive:为临时关闭状态,Disabled:为关闭状态: [[email protected] ~]# getenforce Enforcing [[email protected] ~]# 临时关闭 setenforce 0 [[email protected] ~]# getenforce Enfo

Linux下针对路由功能配置iptables的方法详解

作为公司上网的路由器需要实现的功能有nat地址转换.dhcp.dns缓存.流量控制.应用程序控制,nat地址转换通过iptables可以直 接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使用bind,流量控制可以使用tc,应用程序控制:例如对qq的封锁可以使用 netfilter-layer7-v2.22+17-protocols-2009-05-28.tar.gz来实现 1.网络规划 操作系统是centos5.8 2.安装dhcpd yum install dhcp-3.0.5-3

iptables原理知识

一.iptables的原理 iptables实际上是定义防火墙规则的工具,真正对数据报文处理的是内核中的netfilter模块.netfilter对报文的处理方式一般有:过滤,地址转换,连接追踪. 1.常用的数据报文格式的解释 防火墙实际上是对进出本机的各种报文进行控制,所以了解常见报文的结构(格式)可以精确的控制报文. 1)IP报文的格式 ip报文的结构如下图: 在这里与防火墙关系最大的是源地址.目标地址.协议.源地址指明报文的来源,目标地址说明报文的去处,协议指明传输层所使用的协议. 补充:

linux 的iptables防火墙

hostile: [hastl]: 敌对的,敌意的: hostile army,  hostile action hostile aircraft. we lea the whole hostile army captive. [k2eptiv]: adj. 被监禁的... -------------------------------------------------------- linux防火墙分成两大模块 : netfilters: 内核空间和iptables工具(用户空间). 是信息