linux下iptables命令的应用与详解

一、iptables的规则表和链。

表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

  链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一

条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据

该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定
义的默认策略来处理数据包。
  Iptables采用“表”和“链”的分层结构。下面罗列一下这四张表和五个链。注意一定要明白这些表和链的关系及作用。

(1)iptables规则表:

①filter表——三个链:INPUT、FORWARD、OUTPUT
  作用:过滤数据包  内核模块:iptables_filter.
  ②Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
  作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
  ③Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
  作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
  ④Raw表——两个链:OUTPUT、PREROUTING
  作用:决定数据包是否被状态跟踪机制处理  内核模块:iptable_raw

优先级由高到低的顺序为:raw-->mangle-->nat-->filter

(2)iptables规则链:

①INPUT——进来的数据包应用此规则链中的策略
  ②OUTPUT——外出的数据包应用此规则链中的策略
  ③FORWARD——转发数据包时应用此规则链中的策略
  ④PREROUTING——对数据包作路由选择前应用此链中的规则
 (注意:所有的数据包进来的时侯都先由这个链处理)
  ⑤POSTROUTING——对数据包作路由选择后应用此链中的规则
 (注意:所有的数据包出来的时侯都先由这个链处理)

链上规则的秩序:

①同类规则(访问同一应用),匹配范围小的放上面

②不同类规则(访问不同应用),匹配到报文频率较大的放上面

③将那些可由一条规则描述的多个规则合并为一个

④设置默认策略

第一种情况:入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包

的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通
过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

  第二冲情况:转发数据流向
  来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网

关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地
址等)进行处理。

  第三种情况:出站数据流向
  防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

二、iptables命令详解:

iptables的基本语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
  说明:表名、链名用于指定
iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式   比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样
条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

(1)基本命令

①-L 【链名】列出指定链上的所有规则,默认列出所有链上的规则。

举例:列出INPUT链上的所有规则

iptables -L INPUT

-n 以数字方式显示

-v  列出更详细信息

通常-vnL(L只能写到最后)一起使用,查看防火墙上面的所有策略。

iptables -vnL

②--line-numbers  以序列号方式列出策略,通常和-vnL一起使用。

举例:查看防火墙上有多少条策略

iptables -vnL --line-numbers

③-A 追加

④-I 插入一条策略,默认是第一条策略。

举例:把禁止172.17.66.66ping本机写到INPUT规则链的第二条。

iptables -A INPUT 2  -s 172.17.66.66 -p icmp -j REJECT

⑤-R 修改策略

举例:修改上个例子中禁ping本机的ip地址172.17.66.66为172.17.88.88

iptables -R INPUT 2 -s 172.17.88.88 -p icmp -j RENECT

⑥-D 删除策略  【注意:需要指明规则序号和规则本身】

举例:删除INPUT规则链上所有策略

iptables -D INPUT 2

⑦-F 清空所有策略

举例:清空防火墙上所有策略

iptables -F

⑧-S 命令方式显示出策略,可以重定向文件里。

举例:把所有策略导入到iptables.txt文件里

iptables -S > iptables.txt

⑨-N 自定义规则链(必须放到系统自带的五个规则链中的一个才能生效】

自定义规则链:iptables -N account

给自定义规则链添加策略:iptables -A account  -s 172.17.66.66,172.17.88.88 -j ACCEPT

自定义规则链加到系统规则链里:iptables -A INPUT  -j  account

  ⑩-X 删除自定义的规则链

从系统规则链里删除自定义链:iptables -D INPUT  (自定义规则序号)

清空自定义规则链里面的策略:iptables -F account

删除自定义的规则链:iptables -X account

(2)基本匹配条件:无需加载模块,由iptables/netfilter自行提供,不需要加-m

①[!] --dport   指定端口

iptables -A INPUT -p tcp  --dport 22:23:24,80  -j  REJECT

②[!] -s  --source address[/mask][,...]:源IP地址或范围

③[!] -d  --destination address[/mask][,...]:目标IP地址或范围

④[!] -p  --protocol protocol:指定协议,可使用数字如0(all)

protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,

举例:拒绝172.17.66.66访问172.17.88.88的tcp80端口

iptables -A FORWARD -s 172.17.66.66 -d 172.17.88.88 -p tcp --dport 80 -j REJECT

说明:[!]说明可以取反。

举例:除了172.17.66.66不能ping本机,其它都可以

iptables -A INPPUT ! -s 172.17.66.66 -p icmp -j REJECT

⑤[!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链

举例:【iptables -A INPUT  -s   172.17.66.66  -i eth0  -j REJECT】

⑥[!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链

(3)扩展命令:

①multiport扩展

以离散方式定义多端口匹配,最多指定15个端口

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

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

[!] --ports port[,port|,port:port]...多个源或目标端口

示例:允许172.17.0.0/16这个段的网络通过20、80端口访问本机

iptables -A INPUT -s 172.16.0.0/16 -p tcp -m multiport --dports 20,80 -j ACCEPT

②iprange扩展

指明连续的(但一般不是整个网络)ip地址范围

[!] --src-range from[-to] 源IP地址范围

[!] --dst-range from[-to] 目标IP地址范围

示例:拒绝172.16.100.5-172.16.100.10这个网段的ip通过tcp80端口访问本机

iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP

③mac扩展

指明源MAC地址

--mac-source XX:XX:XX:XX:XX:XX

示例:拒绝00:50:56:12:34:56这个mac地址访问本机

iptables -A INPUT -s 172.16.0.100 -m mac --macsource 00:50:56:12:34:56 -j ACCEPT

④string扩展:   【回应报文】

对报文中的应用层数据做字符串模式匹配检测

--algo {bm|kmp}:字符串匹配检测算法

bm:Boyer-Moore

kmp:Knuth-Pratt-Morris

[!] --string pattern:要检测的字符串模式

[!] --hex-string pattern:要检测字符串模式,16进制格式

示例:拒绝172.16.0.0/16这个网段的ip访问带有goolge字样的网站

iptables -A OUTPUT -s 172.16.0.0/16 -d 0/0 -p tcp --sport 80 -m string --algo bm --string “google" -j REJECT

⑤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...] 星期几

注意:CentOS7系统默认为UTC 【需要减八个小时是北京时区】

举例:拒绝172.16.0.0/16这个网段在每周的Sat,Sun的14:30-18:30访问tcp的80端口

iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP

⑥connlimit扩展

根据每客户端IP做并发连接数数量匹配可防止CC(Challenge Collapsar挑战黑洞)攻击

--connlimit-upto n:连接的数量小于等于n时匹配

--connlimit-above n:连接的数量大于n时匹配

示例:当连接数量大于2时拒绝访问172.16.100.10

iptables -A INPUT -d 172.16.100.10 -p tcp --dport  22 -m connlimit --connlimit-above 2 -j REJECT

⑦state扩展

conntrack机制:追踪本机上的请求和响应之间的关系

状态有如下几种:

NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求

iptables -A INPUT -s 172.17.66.66 -p tcp --dports 80 -m state --state NEW -j REJECT 【正在进行的没事,新连接的拒绝,即重新访问80端口的都不行】

ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态

RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系

INVALID:无效的连接,如flag标记不正确

UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

三、网络防火墙

iptables/netfilter网络防火墙:
  (1) 充当网关
  (2) 使用filter表的FORWARD链

①SNAT

让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装

网络拓扑:

基于原地址的转换一般用在我们的许多内网用户通过一个外网的口上网的时候,这时我们将我们内网的地址转换为一个外网的IP,我们就可以实现连接其他外网IP的功能。

定义的样式:

比如我们现在要将所有192.168.0.0/24网段的IP经过路由器(记得开启转发功能,同时连接外网和内网)的时候全都转换成8.8.8.8这个假设出来的外网地址:

命令:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 8.8.8.8

这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成8.8.8.8这个IP.

②DNAT

对于目标地址转换,数据流向是从外向内的,外面的是客户端,里面的是服务器端通过目标地址转换,我们可以让外面的ip通过我们对外的外网ip来访问我们服务器不同的服务器,而我们的服务却放在内网服务器的不同的服务器上。

定义的样式:

比如我们现在在互联网上想访问192.168.0.0/24这个网段的局域网,经过路由器的时候全部转换为192.168.2.2这个内网地址:

命令:iptables -t nat -A PREROUTING -d 8.8.8.8 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.0/24

四、控制规则的存放以及开启

注意:你所定义的所有内容,当你重启机器的时候都会失效,要想我们能够生效,需要使用一个命令将它保存起来

①service iptables save 命令

它会保存在/etc/sysconfig/iptables这个文件中

②iptables-save 命令

iptables-save > /etc/sysconfig/iptables

③iptables-restore 命令

开机的时候,它会自动加载/etc/sysconfig/iptabels

如果开机不能加载或者没有加载,而你想让一个自己写的配置文件(假设为iptables.2)手动生效的话:

iptables-restore < /etc/sysconfig/iptables.2

则完成了将iptables中定义的规则手动生效

时间: 2024-07-31 05:42:10

linux下iptables命令的应用与详解的相关文章

Linux下rar 命令压缩和解压详解

例1:添加文件或目录到压缩档案中,使用a命令.例如把文件files1添加到abc.rar中,使用a或m命令,a命令把file1文件添加到abc.rar档案中保持原有的file1文件不变,m命令移动file1文件到file1.rar档案中(压缩完成后会删除原有的file1文件,注意:m命令只针对文件进行操作)$rar a abc.rar file1 说明:如果此时abc.rar档案不存在,会自行创建abc.rar文档案,如果abc.rar档案已经存在,则将file1文件压缩进abc.rar档案中,

linux 下rpm命令参数使用方法详解

RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:在Fedora .Redhat.Mandriva.SuSE.YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用: 一个RPM 包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系:也就是安装一个rpm包需要的so动态链接库(也称为共享库)的环境.其实就和人的生存环境一样

Linux下IPtables命令详解

Linux下IPtables命令图解 Linux下IPtables命令剖析 1.命令:-A 顺序添加,添加一条新规则-I 插入,插入一条新规则 -I 后面加一数字表示插入到哪行-R 修改, 删除一条新规则 -D 后面加一数字表示删除哪行-D 删除,删除一条新规则 -D 后面加一数字表示删除哪行-N 新建一个链-X 删除一个自定义链,删除之前要保证次链是空的,而且没有被引用-L 查看@1.iptables -L -n 以数字的方式显示@2. iptables -L -v显示详细信息@3. ipta

Linux下同步工具inotify+rsync使用详解

Linux下同步工具inotify+rsync使用详解 Posted on 2014-12-12 |  In Linux|  9|  Visitors 438 1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的"Rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行Rsync serve

转:Linux中find命令-path -prune用法详解

在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0.dir1和dir2 ...等目录及dir00.dir01...dir10.dir11...等子目录. 1. 在当前目录下查找所有txt后缀文件 find ./ -name *.txt 2.在当前目录下的dir0目录及子目录下查找txt

LINUX下ORACLE相关的内核参数详解

ORACLE相关的内核参数详解 1.kernel.sem [[email protected] ~]# cat /proc/sys/kernel/sem 250         32000    100         142 [[email protected] ~]#  ipcs -sl ------ Semaphore Limits -------- max number of arrays = 142 max semaphores per array = 250 max semaphor

Linux下安装Hadoop(2.7.1)详解及WordCount运行

一.引言 在完成了Storm的环境配置之后,想着鼓捣一下Hadoop的安装,网上面的教程好多,但是没有一个特别切合的,所以在安装的过程中还是遇到了很多的麻烦,并且最后不断的查阅资料,终于解决了问题,感觉还是很好的,下面废话不多说,开始进入正题. 本机器的配置环境如下: Hadoop(2.7.1) Ubuntu Linux(64位系统) 下面分为几个步骤来详解配置过程. 二.安装ssh服务 进入shell命令,输入如下命令,查看是否已经安装好ssh服务,若没有,则使用如下命令进行安装: sudo

linux下easy_install的安装与使用详解

Python中的easy_install工具用起来非常好用,它的作用类似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan. 1.easy_install安装 如果想使用easy_install工具,需要先安装setuptools,不过更酷的方法是使用ez_setup.py脚本:执行如下命令: 1 2 shell#  wget -q http://peak.telecommunity.com/dist/ez_setup.py shell#  python ez_setup.p

Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序

1.首先,先要去MyEclipse和Tomcat的官网去下载Linux版的压缩文件,而MyEclipse的中文官网是需要登录并有可能要付钱,大家可以去网上下载,还有就是Tomcat的linux版,这个直接上官网就可以下载了,下载后我还是通通把它们放在我E盘下的as目录底下,如果大家还没配置好jdk,即Java环境的话,可看我这篇文章:http://blog.csdn.net/u012561176/article/details/45119047 这里我就直接进行操作了! 我E盘下的as文件夹