iptables 详细教程.docx

上传人:b****6 文档编号:8482654 上传时间:2023-01-31 格式:DOCX 页数:28 大小:438.99KB
下载 相关 举报
iptables 详细教程.docx_第1页
第1页 / 共28页
iptables 详细教程.docx_第2页
第2页 / 共28页
iptables 详细教程.docx_第3页
第3页 / 共28页
iptables 详细教程.docx_第4页
第4页 / 共28页
iptables 详细教程.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

iptables 详细教程.docx

《iptables 详细教程.docx》由会员分享,可在线阅读,更多相关《iptables 详细教程.docx(28页珍藏版)》请在冰豆网上搜索。

iptables 详细教程.docx

iptables详细教程

iptables四个表五条链

  其实关于iptables的使用网上的资料和教程也比较多,主要是要理解其中的路由前和路由后每个表和链所处的位置和作用,明白了也就简单了,以下是我转载的觉得写的比较详细的一篇博客,有时间我将写一篇关于这些表和链的实质性的配置例子。

一、netfilter和iptables说明:

1、 netfilter/iptablesIP信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。

这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。

在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。

   虽然netfilter/iptablesIP信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter和iptables组成。

   

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

   

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

   iptables包含4个表,5个链。

其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。

  2、 4个表:

filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。

表的处理优先级:

raw>mangle>nat>filter。

          filter:

一般的过滤功能

          nat:

用于nat功能(端口映射,地址映射等)

          mangle:

用于对特定数据包的修改

          raw:

有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

     RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。

一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.

        RAW表可以应用在那些不需要做nat的情况下,以提高性能。

如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

 3、5个链:

PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

           PREROUTING:

数据包进入路由表之前

           INPUT:

通过路由表后目的地为本机

           FORWARD:

通过路由表后,目的地不为本机

           OUTPUT:

由本机产生,向外转发

           POSTROUTIONG:

发送到网卡接口之前。

如下图:

     

      

 

    iptables中表和链的对应关系如下:

     

 

 

二、iptables的数据包的流程是怎样的?

一个数据包到达时,是怎么依次穿过各个链和表的(图)。

 

基本步骤如下:

 

1.数据包到达网络接口,比如eth0。

 

2.进入raw表的PREROUTING链,这个链的作用是赶在连接跟踪之前处理数据包。

 

3.如果进行了连接跟踪,在此处理。

 

4.进入mangle表的PREROUTING链,在此可以修改数据包,比如TOS等。

 

5.进入nat表的PREROUTING链,可以在此做DNAT,但不要做过滤。

 

6.决定路由,看是交给本地主机还是转发给其它主机。

 

到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过:

 

7.进入mangle表的FORWARD链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。

 

8.进入filter表的FORWARD链,在这里我们可以对所有转发的数据包进行过滤。

需要注意的是:

经过这里的数据包是转发的,方向是双向的。

 

9.进入mangle表的POSTROUTING链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。

 

10.进入nat表的POSTROUTING链,在这里一般都是用来做SNAT,不要在这里进行过滤。

 

11.进入出去的网络接口。

完毕。

 

另一种情况是,数据包就是发给本地主机的,那么它会依次穿过:

 

7.进入mangle表的INPUT链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。

 

8.进入filter表的INPUT链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。

 

9.交给本地主机的应用程序进行处理。

 

10.处理完毕后进行路由决定,看该往那里发出。

 

11.进入raw表的OUTPUT链,这里是在连接跟踪处理本地的数据包之前。

 

12.连接跟踪对本地的数据包进行处理。

 

13.进入mangle表的OUTPUT链,在这里我们可以修改数据包,但不要做过滤。

 

14.进入nat表的OUTPUT链,可以对防火墙自己发出的数据做NAT。

 

15.再次进行路由决定。

 

16.进入filter表的OUTPUT链,可以对本地出去的数据包进行过滤。

 

17.进入mangle表的POSTROUTING链,同上一种情况的第9步。

注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。

 

18.进入nat表的POSTROUTING链,同上一种情况的第10步。

 

19.进入出去的网络接口。

完毕。

  三、iptablesraw表的使用

增加raw表,在其他表处理之前,-jNOTRACK跳过其它表处理

状态除了以前的四个还增加了一个UNTRACKED

例如:

可以使用“NOTRACK”target允许规则指定80端口的包不进入链接跟踪/NAT子系统

iptables-traw-APREROUTING-d1.2.3.4-ptcp--dport80-jNOTRACK

iptables-traw-APREROUTING-s1.2.3.4-ptcp--sport80-jNOTRACK

iptables-AFORWARD-mstate--stateUNTRACKED-jACCEPT

  四、解决ip_conntrack:

tablefull,droppingpacket的问题

在启用了iptablesweb服务器上,流量高的时候经常会出现下面的错误:

ip_conntrack:

tablefull,droppingpacket

这个问题的原因是由于web服务器收到了大量的连接,在启用了iptables的情况下,iptables会把所有的连接都做链接跟踪处理,这样iptables就会有一个链接跟踪表,当这个表满的时候,就会出现上面的错误。

iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip_conntrack_max,链接碰到各种状态的超时后就会从表中删除。

所以解決方法一般有两个:

(1)加大ip_conntrack_max值

vi/etc/sysctl.conf

net.ipv4.ip_conntrack_max=393216

filter.ip_conntrack_max=393216

(2):

降低ip_conntracktimeout时间

vi/etc/sysctl.conf

filter.ip_conntrack_tcp_timeout_established=300

filter.ip_conntrack_tcp_timeout_time_wait=120

filter.ip_conntrack_tcp_timeout_close_wait=60

filter.ip_conntrack_tcp_timeout_fin_wait=120

上面两种方法打个比喻就是烧水水开的时候,换一个大锅。

一般情况下都可以解决问题,但是在极端情况下,还是不够用,怎么办?

这样就得反其道而行,用釜底抽薪的办法。

iptables的raw表是不做数据包的链接跟踪处理的,我们就把那些连接量非常大的链接加入到iptablesraw表。

如一台web服务器可以这样:

iptables-traw-APREROUTING-d1.2.3.4-ptcp--dport80-jNOTRACK

iptables-AFORWARD-mstate--stateUNTRACKED-jACCEPT

五、实例说明:

1、单个规则实例

iptables-F?

#-F是清除的意思,作用就是把FILTRETABLE的所有链的规则都清空

iptables-AINPUT-s172.20.20.1/32-mstate--stateNEW,ESTABLISHED,RELATED-jACCEPT

#在FILTER表的INPUT链匹配源地址是172.20.20.1的主机,状态分别是NEW,ESTABLISHED,RELATED的都放行。

iptables-AINPUT-s172.20.20.1/32-mstate--stateNEW,ESTABLISHED-ptcp-mmultiport--dport123,110-jACCEPT

#-p指定协议,-m指定模块,multiport模块的作用就是可以连续匹配多各不相邻的端口号。

完整的意思就是源地址是172.20.20.1的主机,状态分别是NEW,ESTABLISHED,RELATED的,TCP协议,目的端口分别为123和110的数据包都可以通过。

iptables-AINPUT-s172.20.22.0/24-mstate--stateNEW,ESTABLISHED-ptcp-mmultiport--dport123,110-jACCEPT

iptables-AINPUT-s0/0-mstate--stateNEW-ptcp-mmultiport--dport123,110-jDROP

#这句意思为源地址是0/0的NEW状态的的TCP数据包都禁止访问我的123和110端口。

iptables-AINPUT-s!

172.20.89.0/24-mstate--stateNEW-ptcp-mmultiport--dport1230,110-jDROP

#"!

"号的意思取反。

就是除了172.20.89.0这个IP段的地址都DROP。

iptables-RINPUT1-s192.168.6.99-ptcp--dport22-jACCEPT

替换INPUT链中的第一条规则

iptables-tfilter-LINPUT-vn

以数字形式详细显示filter表INPUT链的规则

#-------------------------------NATIP--------------------------------------

#以下操作是在NATTABLE里面完成的。

请大家注意。

iptables-tnat-F

iptables-tnat-APREROUTING-d192.168.102.55-ptcp--dport90-jDNAT--to172.20.11.1:

800

#-APREROUTING指定在路由前做的。

完整的意思是在NATTABLE的路由前处理,目的地为192.168.102.55的目的端口为90的我们做DNAT处理,给他转向到172.20.11.1:

800那里去。

iptables-tnat-APOSTROUTING-d172.20.11.1-jSNAT--to192.168.102.55

#-APOSTROUTING路由后。

意思为在NATTABLE的路由后处理,凡是目的地为172.20.11.1的,我们都给他做SNAT转换,把源地址改写成192.168.102.55。

iptables-AINPUT-d192.168.20.0/255.255.255.0-ieth1-jDROP

iptables-AINPUT-s192.168.20.0/255.255.255.0-ieth1-jDROP

iptables-AOUTPUT-d192.168.20.0/255.255.255.0-oeth1-jDROP

iptables-AOUTPUT-s192.168.20.0/255.255.255.0-oeth1-jDROP

#上例中,eth1是一个与外部Internet相连,而192.168.20.0则是内部网的网络号,上述规则用来防止IP欺骗,因为出入eth1的包的ip应该是公共IP

iptables-AINPUT-s255.255.255.255-ieth0-jDROP

iptables-AINPUT-s224.0.0.0/224.0.0.0-ieth0-jDROP

iptables-AINPUT-d0.0.0.0-ieth0-jDROP

#防止广播包从IP代理服务器进入局域网:

iptables-AINPUT-ptcp-mtcp--sport5000-jDROP

iptables-AINPUT-pudp-mudp--sport5000-jDROP

iptables-AOUTPUT-ptcp-mtcp--dport5000-jDROP

iptables-AOUTPUT-pudp-mudp--dport5000-jDROP

#屏蔽端口5000

iptables-AINPUT-s211.148.130.129-ieth1-ptcp-mtcp--dport3306-jDROP

iptables-AINPUT-s192.168.20.0/255.255.255.0-ieth0-ptcp-mtcp--dport3306-jACCEPT

iptables-AINPUT-s211.148.130.128/255.255.255.240-ieth1-ptcp-mtcp--dport3306-jACCEPT

iptables-AINPUT-ptcp-mtcp--dport3306-jDROP

#防止Internet网的用户访问 MySQL 服务器(就是3306端口)

iptables-AFORWARD-pTCP--dport22-jREJECT--reject-withtcp-reset

#REJECT,类似于DROP,但向发送该包的主机回复由--reject-with指定的信息,从而可以很好地隐藏防火墙的存在

2、www的iptables实例

#!

/bin/bash

exportPATH=/sbin:

/usr/sbin:

/bin:

/usr/bin

#加载相关模块

modprobeiptable_nat

modprobeip_nat_ftp

modprobeip_nat_irc

modprobeip_conntrack

modprobeip_conntrack_ftp

modprobeip_conntrack_irc

modprobeipt_limit

echo1>;/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo0>;/proc/sys/net/ipv4/conf/all/accept_source_route

echo0>;/proc/sys/net/ipv4/conf/all/accept_redirects

echo1>;/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

echo1>;/proc/sys/net/ipv4/conf/all/log_martians

echo1>;/proc/sys/net/ipv4/tcp_syncookies

iptables-F

iptables-X

iptables-Z

##允许本地回路?

Loopback-Allowunlimitedtraffic

iptables-AINPUT-ilo-jACCEPT

iptables-AOUTPUT-olo-jACCEPT

##防止SYN洪水?

SYN-FloodingProtection

iptables-Nsyn-flood

iptables-AINPUT-ippp0-ptcp--syn-jsyn-flood

iptables-Asyn-flood-mlimit--limit1/s--limit-burst4-jRETURN

iptables-Asyn-flood-jDROP

##确保新连接是设置了SYN标记的包?

MakesurethatnewTCPconnectionsareSYNpackets

iptables-AINPUT-ieth0-ptcp!

--syn-mstate--stateNEW-jDROP

##允许HTTP的规则

iptables-AINPUT-ippp0-ptcp-s0/0--sport80-mstate--stateESTABLISHED,RELATED-jACCEPT

iptables-AINPUT-ippp0-ptcp-s0/0--sport443-mstate--stateESTABLISHED,RELATED-jACCEPT

iptables-AINPUT-ippp0-ptcp-d0/0--dport80-jACCEPT

iptables-AINPUT-ippp0-ptcp-d0/0--dport443-jACCEPT

##允许DNS的规则

iptables-AINPUT-ippp0-pudp-s0/0--sport53-mstate--stateESTABLISHED-jACCEPT

iptables-AINPUT-ippp0-pudp-d0/0--dport53-jACCEPT

##IP包流量限制?

IPpacketslimit

iptables-AINPUT-f-mlimit--limit100/s--limit-burst100-jACCEPT

iptables-AINPUT-ieth0-picmp-jDROP

##允许SSH

iptables-AINPUT-ptcp-sip1/32--dport22-jACCEPT

iptables-AINPUT-ptcp-sip2/32--dport22-jACCEPT

##其它情况不允许?

Anythingelsenotallowed

iptables-AINPUT-ieth0-jDROP

3、一个包过滤防火墙实例

环境:

redhat9加载了stringtime等模块

eth0接外网──ppp0

eth1接内网──192.168.0.0/24

#!

/bin/sh

#

modprobeipt_MASQUERADE

modprobeip_conntrack_ftp

modprobeip_nat_ftp

iptables-F

iptables-tnat-F

iptables-X

iptables-tnat-X

###########################INPUT键###################################

iptables-PINPUTDROP

iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT

iptables-AINPUT-ptcp-mmultiport--dports110,80,25-jACCEPT

iptables-AINPUT-ptcp-s192.168.0.0/24--dport139-jACCEPT

#允许内网samba,smtp,pop3,连接

iptables-AINPUT-ieth1-pudp-mmultiport--dports53-jACCEPT

#允许dns连接

iptables-AINPUT-ptcp--dport1723-jACCEPT

iptables-AINPUT-pgre-jACCEPT

#允许外网vpn连接

iptables-AINPUT-s192.186.0.0/24-ptcp-mstate--stateESTABLISHED,RELATED-jACCEPT

iptables-AINPUT-ippp0-ptcp--syn-mconnlimit--connlimit-above15-jDROP

#为了防止DoS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃

iptables-AINPUT-s192.186.0.0/24-ptcp--syn-mconnlimit--connlimit-above15-jDROP

#为了防止DoS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃

iptables-AINPUT-picmp-mlimit--limit3/s-jLOG--log-levelINFO--log-prefix

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1