Iptables防火墙设置

防火墙规则的匹配顺序流程图

iptables防火墙设置

Iptables表和链的结构

Iptables有四张表,RAW,MANGLE,NAT,FILTER。表的处理优先级:raw>mangle>nat>filter

各表功能:

Filter:一般的过滤功能

Nat:用于nat功能-端口或地址映射

Mangle:用于对特定数据包的修改

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

五个链:INPUT,FORWARD,PREROUTING,POSTROUTING,OUTPUT

一般无特殊需要,配置iptables是只需配置filter和nat两张表。如不开启路由转发,则只配置filter表。

Filter表中的链有:INPUT,FORWARD,OUTPUT

Nat表中的链有:PREROUTING,POSTROUTING,OUTPUT

Mangle表中的链有:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

Raw表中的链有:PREROUTING,OUTPUT

链相对数据包的位置:

PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地位本机

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

OUTPUT:由本机产生,向外转发

POSTROUTING:发送到网卡界面之前

iptables防火墙设置

Iptables部分参数简介:

规则的增删改:

-A(追加),-I(插入),-D(删除一条规则),-R(修改),-L(查看),-P(默认规则)

常用参数:

-p (指定协议),-s(源地址),-d(目的地址),--sport(源端口),--dport(目的端口),-i(入口网卡),-o(出口网卡),-m(加载模块),-t(指定表,默认为filter表)

例:-m state --state  NEW,ESTABLISHED,RELATED,INVALID (联机状态)

-m multiport  --source-port|--destination-port   80,443,22

这里-m  state 是告诉系统需加载state模块,因为这里使用了--state

注:在使用多端口设置包过滤规则时,必须指定协议(-p  tcp|udp……)

常用的处理动作:

-j:用来指定要进行的处理动作

ACCEPT:将包放行,进行完此动作后,将不再对比其他规则,直接跳往下一个规则链

REJECT:拦阻改封包,并传送封包通知,完成此动作,直接中断过滤程序

DROP:丢弃包不予处理,进行完此动作后,将不再对比其他规则,直接中断该程序

REDIRECT:将包重新导向到另一个端口(PNAT),之后继续对比其他规则

MASQUERADE:改写封包来源IP为防火墙NIC IP,可指定port范围,之后跳往下一

SNAT:改写封包来源IP为某特定IP或IP范围,可指定port范围,之后跳往下一规则

DNAT:改写封包目的IP为某特定IP或IP范围,可指定port范围,之后跳往下一规链

设定iptables从这里开始

默认规则的设置

iptables设置默认规则

Iptables  -P  INPUT  DROP|ACCEPT

Iptables  -P  FORWARD  DROP|ACCEPT

Iptables  -P  OUTPUT  DROP|ACCEPT

iptables防火墙设置

注:一般设置默认规则,INPUT链和FORWARD链为DROP,OUTPUT链为ACCEPT

以下规则的设置,即是依据一般性默认规则下设置的

1-允许回环访问

Iptables  -I   INPUT  -i  lo -j  ACCEPT

Iptables  -I   OUTPUT  -o  lo   -j   ACCEPT(在OUTPUT链的默认策略为DROP时设)

iptables防火墙设置

2-允许外部主机的ping测试

Iptables  -A  INPUT  -p  icmp   --icmp-type  echo-request   -j   ACCEPT

Iptables  -A  OUTPUT  -p  icmp  --icmp-type  echo-reply  -j   ACCEPT(OUTPUT链)

iptables防火墙设置

3-允许本机ping测外部主机

Iptables  -A  INPUT  -p  icmp  --icmp-reply   -j   ACCEPT

Iptables  -A  OUTPUT  -p  icmp   --icmp-requst   -j   ACCEPT

注:在INPUT链添加了联机状态规则(如下)下,不设置上述规则也是可以ping外部主机的。

Iptables  -I  INPUT  -m  state  --state  ESTABLISEHED,RELATED  -j  ACCEPT

在不影响外部ping本主机测试的情况下,可设置下面这条命令进行限制本机ping外部主机

iptables  -I  INPUT  -p  icmp  --icmp-type  echo-reply  -j  REJECT

注意此规则的位置,必须放在下图INPUT第二行规则之前,否则无效。(此涉及iptables规则匹配的顺序---自上而下)

iptables防火墙设置

4-限制指定ip地址访问本机

Iptables  -A  INPUT  -i   eth0  -s   ip   -j   DROP

加上“-p  tcp”可以指定只屏蔽ip的tcp数据包

5-指定范围内ip地址远程连接本机

Iptables  -A  INPUT  -p  tcp  --dport  22  -s  192.168.1.0/24  -j  ACCEPT

iptables防火墙设置

注:当其他ip段连接登录本机时,因源地址的网段与规则不匹配,往下也无匹配的规则,最后采用默认策略拒绝掉连接请求。

iptables防火墙设置

6-允许所有的ssh连接本机请求

Iptables  -A  INPUT  -i  eth0  -p  tcp  --dport  22  -m  state  --state  NEW,ESTABLISHED  -j  ACCEPT

Iptables  -A  OUTPUT  -o  eth0  -p  tcp  --dport  22  -m  state  --state  ESTABLISHED  -j  ACCEPT(在OUTPUT的默认策略为DROP的情况下添加这条语句)

注:若要限制或允许某一ip连接可用参数“-s  ip”来指定拒绝“-j  ACCEPT”。对于http/https的连接请求,与上述设置一样,只需改变目的端口即可

7-禁止本机发起ssh连接请求

Iptables -A OUTPUT -o  eth0  -p  tcp  --dport  22  -m  state  --state NEW,ESTABLISHED  -j  REJECT(因为是发起的ssh请求,所有是出口,端口为目的端口)  

iptables防火墙设置iptables防火墙设置        

iptables防火墙设置

Iptables  -A  INPUT  -i  eth0  -p  tcp  --sport  22  -m  state  --state  ESTABLISHED  -j  REJECT

iptables防火墙设置

注:两条规则任选一条。

8-多端口规则设置(ssh,http连接访问)

基于ssh、http、https协议都是基于tcp协议,设置规则是只是端口的不同,可利用多端口简化设置。

Iptables  -A  INPUT  -i  eth0  -p  tcp  -m  multiport  --dports  22,80,443  -j  ACCEPT

9-允许解析DNS(出站DNS连接)

Iptables  -A  INPUT  -i  eth0  -p  udp(tcp)  --sport  53  -j  ACCEPT

Iptables  -A  OUTPUT  -o  eth0  -p  udp(tcp)  --dport  53  -j  ACCEPT

注:注意数据包的流向。

10-数据库连接限制内网连接

Iptables  -A  INPUT  -i  eth0  -p  tcp  -s  10.65.110.0/24  --dport  3306  -m  state  --state  NEW,ESTABLISHED  -j  ACCEPT

Iptables  -A  OUTPUT  -o  eth0  -p  tcp  --sport  3306  -m  state  ESTABLISHED  -j  ACCEPT (依据OUTPUT链的默认策略选择添加与否)

其他类似的服务依据端口和协议和是否限定ip来模仿上述格式设置iptables的规则。

11-防止DOS***(此规则未测试)

Iptables  -A  INPUT  -p  tcp  --dport  80  -m  limit  --limit  25/minute   --limit-burst  100  -j  ACCEPT

-m  limit :启用limit扩展

--limit  25/minute:允许最多每分钟25个连接

--limit-burst  100:当达到100个连接后,才启动上述25/minute限制

注:依据实际情况选择规则添加与否和连接限制参数

12-负载均衡(未测试)

可以利用iptables的-m nth扩展,及其参数(–counter 0 –every 3 –packet x),进行DNAT路由设置(-A PREROUTING -j DNAT –to-destination),从而将负载平均分配给3台服务器:

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

13-nat转发

在做转发前,明确转发的方向,ip地址,以及了解iptables转发过程中数据包的流向。

下面是iptables在做转发时,数据包的流向。如下:

iptables防火墙设置

主机104开启路由转发

iptables防火墙设置

如本地主机有两片网卡,eth0(连接内网)和eth1(连接外网)。则可以做如下转发,只需将ip地址做转换即可,而本文由于设备限制,做的是单网卡的ip映射。但原理是一样的。

转发是依靠nat表中PREROUTING和POSTROUTING链来完成的。可以实现端口映射,ip映射,内部ip伪装

内网数据到外网的转发

Iptables  -A  FORWARD  -i  eth0  -o  eth1  -j  ACCEPT

端口映射

例如将来自端口88的请求转发到80端口

Iptables  -A  INPUT  -p  tcp  --dport  88  -d  192.168.1.104  -j  DNAT  --to  192.168.1.104:80 

http测试

iptables防火墙设置

注:在这里为什么不设置转发链还可以访问成功,是因为这里的ip没有被转发链修改,变得只是目的端口(由88改为80)。

Ip映射

对于Iptables的ip映射,本文实现ip转发的要求和环境如下:

环境:主机192.168.1.104

  主机 192.168.1.107

  Windows:192.168.1.53

要求:将所有访问192.168.1.104的主机服务的请求转发给主机192.168.1.107,并且,请求的回应经由192.168.1.104返回给客户端(例如:192.168.1.53)

对于做ip映射,规则链的默认规则如下:

INPUT    DROP

FORWARD   DROP

OUTPUT   ACCEPT

PREROUTING和POSTROUTING链不做要求

配置如下:

iptables防火墙设置

命令:

1- iptables  -t  nat  -A  PREROUTING  -p  tcp  --dport  80  -d  192.168.1.104

-j  DNAT  --to 192.168.1.107:80

2- iptables  -t  nat  -A  POSTROUTING  -o  eth0  -p  tcp  --dport  80  -d  192.168.1.107  -j  SNAT  --to-source  192.168.1.104

3- iptables  -I  FORWARD  -p  tcp  -m  state  --state  ESTABLISHED,RELATED  -j  ACCEPT

(注:这一条在FORWARD默认策略为DROP时必须加上,否则ip映射失败)

4- iptables  -A  FORWARD  -p  tcp  --dport  80   -d  192.168.1.107  -j  ACCEPT

注:若FORWARD链的默认规则为ACCEPT,第3,4条规则可省略。

解释:

第一条:即iptables的ip映射,这是主要规则

第二条:这条规则是在数据包流出之前将数据包的源地址映射为中介ip,使响应数据包可以              找到返回路径。这是对于静态(内网)ip而言。而双网卡或动态获取ip时,可使              用“-j  MASQUERADE”机制,系统自动读取网卡信息,将源地址映射为与网卡              同网段的ip地址。主要作用是(内外网通信)在数据包出去后,响应数据包可以返回

第三条:这条规则表示与系统已经建立的连接,或与某程序相关的数据包允许转发。

第四条:在默认规则为DROP的情况下,可以转发的条件规则。

测试:

以Apache服务进行ip转发测试,一下是主机104和主机107的http网页测试内容:

iptables防火墙设置

iptables防火墙设置

以下截图,客户端在访问104主机时,网页显示的内容为107主机的网页内容。

iptables防火墙设置

iptables防火墙设置

下面是抓包结果,显示了数据包请求与响应的流向。

iptables防火墙设置

以上,表面ip映射成功。

若还需要对访问的ip进行限制,可使用“-s  192.168.1.0/24”网段来实现。具体配置,依据实际情况增加和删减规则。

注:最后在测试的时候,如果开始测试时是可以的,后来又不行了,那有可能是网卡出错了。可以查看一下这个文件中的信息。这个文件是专门存放网卡信息的文件。通信网卡要与ifconfig显示一致

/etc/udev/rules.d/70-persistent-net.rules

iptables防火墙设置

 

参考文档:

http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457077.html

http://www.2cto.com/os/201308/238142.html