1.iptables规则表

  Filter(针对过滤系统):INPUT、FORWARD、OUTPUT

  NAT(针对地址转换系统):PREROUTING、POSTROUTING、INPUT、OUTPUT

  Mangle(针对策略路由和特殊应用):OUTPUT、POSTROUTING

2.安装包

  iptables-1.2.7a-2

3.配置防火墙

 1) 命令语法

  Usge: iptables [-t table] -[ADC] chain rule-specification [options]

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

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

  iptables [-t table] -D chain rulenum [options]

  iptables [-t table] -[LFZ] [chain] [options]

  iptables [-t table] -N chain

  iptables [-t table] -X [chain]

  iptables [-t table] -P chain target [options]

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

  规则操作参数说明:

  -A:-append 在所选择的链末添加一条或更多规则;

  -D: -delete 从所选链中删除一条或更多规则。有两种方法:把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则;

  -R: -replace 从选中的链中取代一条规则。如果源地址或目的地址转换为多地址,该命令会失败。规则序号从1开始;

  -I: -insert 根据给出的规则序号,向所选链中插入一条或更多规则。所以,如果规则序号为1,规则会插入链的头部。这也是不指定规则序号时的默认方式;

  -L: -list 现实所选链的所有规则。如果没有所选链,将显示所有链。也可以和z选项一起用,这是链会自动列出和归零;

  -F: -flush 清空所选链。这等于把所有规则一个个删除;

  -Z: -zero 把所有链的包以及字节的计数器清空;

  -N:-new-chain 根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在;

  -X:-delete-chain 删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将试着删除每个非内建的链;

  -P: -policy 设置链的目标规则;

  -E:-rename-chain 根据用户给出的名字对指定链进行重名名;

 规则定义参数说明:

  -p [!]protocol:

  规则或者包检查(待查包)的协议。指定协议可以是TCP、UDP、ICMP中的一个或者全部,也可以是数值,代表这些协议中的某一个。当然也可以使用在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocol all会匹配所有协议,而且这是缺省时的选项。在和check命令结合时,all可以不被使用;

  -s[!]address[/mask]:

  指定源地址,可以是主机名、网络名和清楚地IP地址。mask说明可以是网络掩码或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志--src是这个选项的简写;

  -d[!]address[/mask]:

  指定目标地址,要获取详细说明请参见-s标志的说明。标志--dst是这个选项的简写;

  -j target:

  指定规则的目标:也就是说包匹配应当做什么。目标可以为ACCEPT(通过)、 DROP(删除)、RETURN(返回)、REDIRECT(重新指向)、SNAT(源地址转换)、DNAT(目标地址转换)、MASQUERADE(伪装)等,还可以是用户自定义链。如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加;

  -i[!][name]:

  待选的可接受包接口名称,包通过该接口接收(在链INPUT、FORWORD和 PREROUTING中进入的包)。当在接口名前使用"!"说明后,指的是相反的名称,如果接口名后面加上"+",则所有以次接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配任意接口;

  -O[!][NAME]:

  这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)。其他设置同上。

2) 匹配规则扩展选项:

  tcp:当指定-p tcp,且未指定其他匹配的扩展,则装载这些扩展。

  --source-port[!][port[:port]]:

  源端口或端口范围指定。可以是服务名或端口号。使用格式端口:端口也可以指定包含的(端口)范围。如果忽略首端口号,默认是0,如果忽略末端口号,默认是65535,如果第二个端口号大于第一个,则他们进行交换。这个选项可以使用--sport的别名;

  --destionation-port[!][port:[port]]:

  目标端口或端口范围指定。这个选项可以使用--dport别名来代替;

  --tcp-flags[!]mask comp:

  匹配指定的TCP标记。第一个参数是要检查的标记,一个用逗号分开的列表,第二个参数是用逗号分开的标记表,是必须设置的。标记如:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(送入)ALLNONE。

  命令iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配那些设置了SYN标记而没有设置ACK、FIN和RST标记的包。

  udp:当指定-p icmp且未指定其他匹配的扩展时,则装载这些扩展。

  --icmp-type[!]typename:这个选项允许指定ICMP类型,可以是一个数值型的ICMP类型,或者是某个由命令"iptables -p icmp -h"所显示的ICMP类型名。

  mac:

  --mac-source[!]address:匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。注意,他只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。

  limit:这个模块匹配标志用来对网络数据的通过速率进行标记,他和LOG目标结合使用,给出有限的登陆数。当达到这个极限值时,使用这个扩展包的规则将进行匹配。(除非使用了!标记),他的扩展选项包括:

  --limit rate:最大平均匹配速率,可赋的值有"/second"、"/minute"、"/hour"或"/day"这样的单位,默认是"3/hour";

  --limit-burst number:待匹配包初始个数的最大值。若前面指定的极限还没达到这个数值,则该数字加1。默认值是5。

  multiport:这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p tcp或者-p udp连着使用:

  --source-port[port[,port]]:如果源端口是其中一个给定端口,则匹配;

  --destination-port[port[,port]]:如果目标端口是其中一个给定端口,则匹配;

  --port[port[,port]]:若源端口和目的端口相等并与某个给定端口相等,则匹配。

  owner:此扩展为本地生成包匹配包的创建者,只能用于OUTPUT链,而且,有一些包(如ICMP ping应答)还可能没有所有者,因此永远不会匹配:

  --uid-owner userid:如果给出有效的user id,那么匹配他的进程产生的包;

  --gid-owner groupid:如果给出有效的group id,那么匹配它的进程产生的包;

  --sid-owner sessionid:根据给出的会话组成匹配该进程产生的包。

  REJECT:作为对匹配的包的相应,返回一个错误的包,其他情况下和DROP相同。此目标只适用于INPUT、FORWARD和OUTPUT链,以及调用这些链的用户自定义链。这几个选项控制返回的错误包的特性:

  --reject-with type:其中的type可以是icmp-net-unreachable、icmp-host-unreachable、icmp-port- unreachable、icmp-porto-unreachable、icmp-net-prohibited或者icmp-host- prohibited,该类型会返回相应的ICMP错误信息(默认是port-unreachable)。选项echo-reply也是允许的;它只能用于指定ICMP ping包的规则中,生成ping的回应。

  SNAT:这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址(此连接以后所有的包都会被影响),停止对规则的检查:

  --to-source [][:port-port]:

  可以指定一个单一的新IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp或者-p udp的规则里)。如果未指定端口范围,源端口是512以下的端口惠被安排为其他的512以下的端口;512到1024之间的端口会被安排为1024以下的,其他端口会被安排为1024或以上。如果可能,端口不会被修改;

  --to-destiontion [][:port-port]:

  可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp或者-p udp的规则里)。如果未指定端口范围,目标端口不会被修改。

  MASQUERADE:只用于nat表的POSTROUTING链。只能用于动态获取ip(拨号)连接:如果拥有静态IP地址,要用SNAT。伪装相当于给包发出时所经过接口的IP地址设置一个映像,当借口关闭时,连接会终止。这是因为,当下一次拨号时,未必是相同的接口地址(以后所有建立的连接都将关闭)。他有一个选项:

  --to-ports []:指定使用的源端口范围,覆盖默认的SNAT源地址选择。这个选项只适用于指定了-p tcp或者-p udp的规则。

  REDIRECT:只适用于nat表的PREROUTING和OUTPUT链,以及只调用他们的用户定义链。他修改包的目标IP地址来发送包到机器自身(本地生成的包被安置为地址127.0.0.1),包含一个选项:

  --to-ports []:指定使用的目的端口或端口范围:不指定的话,目标端口不会被修改。只能用于指定了-p tcp或者-p udp的规则。

  3) 包过滤设置

  规则的写法:
 
   iptables定义规则的方式比较复杂:
   格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
     -t table :3个filter nat mangle
     COMMAND:定义如何对规则进行管理
     chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
     CRETIRIA:指定匹配标准
     -j ACTION :指定如何进行处理
 
   比如:不允许172.16.0.0/24的进行访问。
   iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
   当然你如果想拒绝的更彻底:
   iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT
 
   iptables -L -n -v #查看定义规则的详细信息

  举例:

  假如有这样一个局域网,内部IP地址范围192.168.1.1-254,网关地址为192.168.1.1,绑定在eth0接口上,同时,网关具有外部Internet地址为10.25.0.7,绑定在eth1接口上,防火墙就位于网关上,通过它的设置,对流经防火墙的网络包进行过滤处理。同时,在局域网内部有一台WWW服务器,他的内部地址为192.168.1.2,他被设置为可以接受外部的网络用户访问。

  首先清空所有的规则链,并设置规则链的默认策略为DROP,即丢弃所有的网络数据包。

  iptables -F

  iptables -P INPUT DROP

  iptables -P OUTPUT DROP

  iptables -P FORWARD DROP

  新增用户者自定义规则链bad_tcp_packets、allowed和icmp_packets。

  iptables -N bad_tcp_packets

  iptables -N allowed

  iptables -N icmp_packets

  下面定义bad_tcp_packets规则链的规则:将要求重导向的网络连接记录起来,然后将报文丢弃(防止本地机器被其他主机作为入侵跳板,侵入别的主机):

  iptables -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j LOG --log-level INFO --log-prefix "New not syn:"

  iptables -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j DROP

  下面定义allowed规则链的规则:允许要求连接的网络数据包或相应包进入,将其与网络数据包丢弃:

  iptables -A allowed -p TCP --syn -j ACCEPT

  iptables -A allwoed -p TCP -m state --state ESTABLLSHED,RELATED -J ACCEPT

  IPTABLES -A allowed -p TCP -j DROP

  下面定义icmp_packets规则链的规则:允许ping网络数据包进入,将其余的网络数据包丢弃:

  iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

  iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

  INPUT链,过滤要到达防火墙的网络数据包。

  进入防火墙主机的TCP网络数据包必须先进行bad_tcp_packets过滤:

  iptables -A INPUT -p TCP -j bad_tcp_packets

从WAN进入防火墙主机的ICMP网络数据包,必须先进行icmp_packets过滤,这是为了避免黑客传送不完整的IP网络数据包,系统会相应ICMP网络数据包,以通知对方,导致主机位置被侦测出来:

  iptables -A INPUT -p ICMP -i eth1 -j icmp_packets

  从LAN进入防火墙主机的全部单播和广播的网络数据包,均会放行:

  iptables -A INPUT -p ALL -i eth0 -d 192.168.1.1 -j ACCEPT

  iptables -A INPUT -p ALL -i eth0 -d 192.168.1.255 -j ACCEPT

  从LAN进入防火墙主机的DHCP网络数据包,予以放行,只有当防火墙担任DHCP时才使用:

  iptables -A INPUT -p UDP -i eth0 --dport 67 --sport 68 -j ACCEPT

  从WAN进入防火墙主机的所有网络数据包,检查是否为响应网络数据包,若是则予以放行:

  iptables -A INPUT -p ALL -d 10.25.0.7 -m state --state ESTABLISHED,RELATED -j ACCEPT

  限制过滤规则的检测频率为每分钟平均流量三个网络数据包(超过)上限的网络数据包将暂停检测,并将瞬间流量设定为一次最多处理三个网络数据包(超过上限的网络数据包将丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:

  iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packet dIEd:"

  FORWAD链,过滤要通过防火墙的网络数据包

  通过防火墙的TCP网络数据包必须先进行bad_tcp_pcakets过滤:

  iptables -A FORWAD -P TCP -J bad_tcp_packets

  从LAN要到WAN的网络数据包均放行:

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

  从WAN到LAN的网络数据包仅放行应答网络数据包:

  iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

  允许来自WAN的PING网络数据包,递送到局域网内的WWW服务器:

  iptables -A FORWARD -p ICMP -i eth1 -o eth0 -d 192.168.1.2 -j icmp_packets

  允许来自WAN的HTTP,HTTPS网络数据包,递送到局域网的WEB服务器:

  iptables -A FORWARD -p TCP -i eth1 -o eth0 -d 192.168.1.2 -m multiport --dport 80,443 -j allowed

  限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:

  iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet dIEd:"

  OUTPUT链,过滤从防火墙送出的网络数据包。

  从防火墙送出的TCP网络数据包必须先进行bad_tcp_packets过滤:

  iptables -A OUTPUT -p TCP -j bad_tcp_packets

  对于过滤通过的TCP包和其他类型的包,均会放行:

  iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT

  iptables -A OUTPUT -p ALL -s 192.168.1.1 -j ACCEPT

  iptables -A OUTPUT -p ALL -s 10.25.0.7 -j ACCEPT

  限制过滤规则的检测频率为每分钟平均流量3各网络数据包(超过上限的网络数据包将暂停检测),并将瞬间流量设定为一次最多处理3个数据包(超过上限的网络数据包将被丢弃不予处理),这类网络数据包通常是黑客用来进行拒绝服务攻击:

  iptables -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet dIEd:"

  4.NAT配置

  1) 目的NAT(DNAT)

  DNAT在外部数据包进入防火墙后且路由之前进行,他把该数据包的目的地址改为内部局域网的地址,然后路由该数据包进入到局域网内部主机。

  举例:

  iptables -t nat -A PREROUTING -t tcp -d 10.25.0.7 --dport 80 -i eth1 -j DNAT --to 192.168.1.2:80

  说明:可以路由到达防火墙的访问80端口(即WWW服务器)的数据包的目的地址改为192.168.1.2。

  2) 源NAT(SNAT)

  SNAT主要用来更改从防火墙发出的数据包的源地址,使得来自局域网的私有地址通过防火墙后,更改为防火墙具有的外部地址,以便数据接收方接收数据后,能够找到正确的回复地址。

  举例:

  iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to10.25.0.7

  说明:更改所有来自192.168.1.0/24的数据包的源IP地址为10.25.0.7

  注意:系统在经过路由及过滤等处理后,直到数据包要送出时,才进行SNAT,有一种SANT的特殊情况是IP伪装,通常建议在用拨号上网时使用,也就是在合法IP地址不固定的情况下使用。

  举例:

  iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

  说明:这样可以保证局域网内部的用户能够所有通过拨号服务器连接到INTERNET。

iptables规则表的更多相关文章

  1. iptables四表五链及默认规则使用,

    网络基础 TCP/IP模型: 应用层===传输层===网络层===数据链里层===物理层 数据封装: MAC帧头+IP报头+TCP/UDP报头===HTTP请求 数据帧 TCP/UDP报头: 随机产生 ...

  2. iptables [-t table] 指定规则表

    -t 参数用来,内建的规则表有三个,分别是:nat.mangle 和 filter,当未指定规则表时,则一律视为是 filter.个规则表的功能如下: nat:此规则表拥有 PREROUTING 和 ...

  3. Iptables 规则 一些简单实例和详细介绍

    设定规则 iptables -p INPUT DROP iptables -p OUTPUT ACCEPT iptables -p FORWARD DROP 1.防止外网用内网IP欺骗 iptable ...

  4. linux iptables规则介绍

    今天又学习了一下iptables,做一点总结来方便以后查阅. Netfilter(网络过滤器)是Linux操作系统核心层内部的一个数据包处理模块,主要负责数据包的拦截和转发,而iptables是Net ...

  5. iptables规则进阶

    iptables规则进阶 1.实验环境搭建: 在进行试验之前,先要进行实验环境的搭建,要求如下: 1.对于三台主机,分别设置IP地址 2.设置10.0.1.22为内网主机 3.设置中间主机有两个网卡, ...

  6. [转帖] iptables之四表五链

    iptables之四表五链 http://www.cnblogs.com/clouders/p/6544584.html mark 学习一下 对防火墙一无所知.. iptables可谓是SA的看家本领 ...

  7. linux系统中查看己设置iptables规则

    1.iptables -L 查看filter表的iptables规则,包括所有的链.filter表包含INPUT.OUTPUT.FORWARD三个规则链. 说明:-L是--list的简写,作用是列出规 ...

  8. iptables filter表 案例、iptables nat表的路由功能 、端口映射

    1.小案例 #!/bin/bashipt="/usr/sbin/iptables"$ipt -F$ipt -P INPUT DROP$ipt -P OUTPUT ACCEPT$ip ...

  9. ifconfig 命令,改变主机名,改DNS hosts、关闭selinux firewalld netfilter 、防火墙iptables规则

    ifconfig 命令用于查看网络相关的命令: 安装:yum install net-tools -y  ifdown  eth_name  关闭网卡  ifup  eth_name   开启网卡 配 ...

随机推荐

  1. linux 下 jdk tar.gz 包安装方法

    JDK安装 tar.gz为解压后就可使用的版本,这里我们将jdk-7u3-linux-i586.tar.gz解压到/usr/local/下. 1.解压 解压到当前目录:$ tar -zxvf /opt ...

  2. dig out secrets beneath AirSig

    My sister installed AirSig last week. She is so exciting about this new techknology and she won't st ...

  3. javascript之值传递与引用传递

    在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference).在计算机科学里,这个部分叫求值策略(Evaluation Strat ...

  4. Android IOS WebRTC 音视频开发总结(八)-- ios上移植webRTCDemo

    这篇文章主要介绍ios webrtcdemo的实现及相关注意事项,转载请说明出处(博客园RTC.Blacker) 前面很多人问webrtc android下有webrtcdemo,ios上怎么找不到, ...

  5. xls数据导入sqlite数据库

      protected void btn_ok_Click(object sender, EventArgs e)     {         try         {             st ...

  6. JavaScript中this详解

    这里的主题是 this ,不扯远了.this 本身原本很简单,总是指向类的当前实例,this 不能赋值.这前提是说 this 不能脱离 类/对象 来说,也就是说 this 是面向对象语言里常见的一个关 ...

  7. CentOS 6.X版本升级PHP

    #-----------------------------CentOS 6.X版本升级PHP------------------#! /bin/sh #1.关闭selinuxcp -rp /etc/ ...

  8. jQuery实现跨域访问

    示例: $.ajax({ url: url, crossDomain: true, async: false,dataType:"jsonp" }); 说明:$.ajax()有很多 ...

  9. PHP错误处理及异常处理笔记

    给新人总结一下PHP的错误处理. PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实 ...

  10. js给php传值

    //ajax传值 var str= JSON.stringify(arr1);//数组转string //alert(typeof(str)); $.ajax({ url:'test.php' ,ty ...