Linux防火墙iptables学习笔记

要在网上传输的数据会被分红许多小的数据包,咱们一旦接通了网络,会有不少数据包进入,离开,或者通过咱们的计算机。
   首先咱们要弄明白,防火墙将怎么对待 这些数据包。这些数据包会通过一些相应的规则链,好比要进入你的计算机的数据包会首先进入INPUT链,从咱们的计算机发出的数据包会通过 OUTPUT链,若是一台计算机作一个网络的网关(处于内网和外网两个网络链接的两台计算机,这两台计算机之间相互通信的数据包会通过这台计算机,这台计 算机即至关于一个路由器),可能 会有不少数据通过这台计算机,那么这些数据包必经FORWARD链,FORWARD链即数据转发链。明白了这些“链”的概念咱们才能进一步学习使用 iptables。

   如今咱们再来分析一下iptables规则是如何工做的,假如咱们要访问网站www.yahoo.com,咱们要对www.yahoo.com发出请 求,这些数据包要通过OUTPUT链,在请求发出前,Linux的内核会在OUTPUT链中检查有没有相应的规则适合这个数据包,若是没有相应的规 则,OUTPUT链还会有默认的规则,或者容许,或者不容许(事实上,不容许有两种,一种是把请求拒绝,告诉发出请示的程序被拒绝;还有一种是丢弃,让请 求发出者傻等,直到超时)。若是获得容许,请求就发出了,而www.yahoo.com服务器返回的数据包会通过INPUT链,固然,INPUT链中也会 有相应的规则等着它。 

   下面咱们介绍几个iptable的命令   
   iptables -L [-t filter]   
   这条命令是显示当前有什么已经设置好的防火墙规则,可能的显示结果以下: 
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

   从这里咱们能够看出,iptables 有三个链分别是 INPUT OUTPUT 和FORWARD.
其中
INPUT 是外部数据要进过咱们主机的第一外关卡(固然你前面也能够再加硬件防火墙).
OUTPUT 是你的主机的数据送出时要作的过绿卡
FORWARD   是转发 你在NAT时才会用到
要设置iptables 主要是对这三条链进行设置,固然也包括-nat的另外三个链 咱们之后再说
你要用iptables 你就得启到它 启动命令 service iptables restart 
iptables的默认设置为 三条链都是ACCEPT 以下:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
以上信息你能够用 iptables -L看到
整体来讲iptables能够有二种设置
1.默认容许,拒绝特别的
2.默认拒绝,容许特别的
两者都有本身有特色,从安全角度看 我的偏向于第二种,就是默认拒绝,容许特别的.但iptalbes 默认是第一种 默认容许,拒绝特别的 
你能够用命令改变默认值来达到咱们的要求 命令以下
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
你再用iptables -L查看一下就会以为默认值以改了
先来谈炎几个参数XZFL
-F 清除规则
-X 清除链
-Z 将链的记数的流量清零
通常来讲 再建立访问规则时 都会将原有的规则清零 这是一个比较好的习惯,由于某些规则的存在会影响你建的规则.
基本语法:
iptables [-t filter] [-AI INPUT,OUTPUT,FORWARD] [-io interface]
      [-p tcp,udp.icmp,all] [-s ip/nerwork] [--sport ports]
      [-d ip/netword] [--dport ports] [-j ACCEPT DROP]
以上是iptables的基本语法
A 是添加的意思
I 是播入的意思
io 指的是数据要进入或出去所要通过的端口 如eth1 eth0 pppoe等 
p 你所要指定的协议
-s 指源地址 但是单个IP如192.168.2.6 也能够是一个网络 192.168.2.0/24 还能够 是一个域名 如163.com 若是你填写的域名系统会自动解析出他的IP并在iptables里 显示
--sport 来源端口
-d 同-s类似 只不过他指的是目标地址 也能够是IP 域名 和网络
--dport 目标端口
-j 执行参数 ACCEPT DROP
注意:若是以有参数存在 则说明所有接受
1 如我要来本身l0接口的数据所有接受,咱们能够写成这样:
iptables -A INPUT -i lo -j ACCEPT
2 若是咱们想接受192.168.2.6这个IP地址传来的数据咱们能够这样写
iptablse -A INPUT -i eth1 -p tcp -s 192.168.2.6 -j ACCEPT
3 若是咱们要拒绝来本身192.168.2.0/24这个网的telnet链接linux

iptablse -A INPUT -i eth1 -p udp -s 192.168.2.0/24 --sport 23 -j DROPweb

 

iptables [-t table] command [match] [-j target/jump]
-t 参数用来指定规则表,内建的规则表有三个,分别是:nat、mangle 和 filter,当未指定规则表时,则一概视为是 filter。个规则表的功能以下:
nat 此规则表拥有 Prerouting 和 postrouting 两个规则链,主要功能为进行一对1、一对多、多对多等网址转译工做(SNATDNAT),因为转译工做的特性,需进行目的地网址转译的封包,就不须要进行 来源网址转译,反之亦然,所以为了提高改写封包的率,在防火墙运做时,每一个封包只会通过这个规则表一次。若是咱们把封包过滤的规则定义在这个数据表里,将 会形成没法对同一包进行屡次比对,所以这个规则表除了做网址转译外,请不要作其它用途。
mangle 此规则表拥有 Prerouting、FORWARD 和 postrouting 三个规则链。
除了进行网址转译工做会改写封包外,在某些特殊应用可能也必须去改写封包(TTL、TOS)或者是设定 MARK(将封包做记号,以进行后续的过滤),这时就必须将这些工做定义在 mangle 规则表中,因为使用率不高,咱们不打算在这里讨论 mangle 的用法。
filter 这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则链,这个规则表顾名思义是用来进行封包过滤的理动做(例如:DROP、 LOG、 ACCEPT 或 REJECT),咱们会将基本规则都创建在此规则表中。
经常使用命令列表:
命令 -A, --append
范例 iptables -A INPUT ...
说明 新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则。
命令 -D, --delete
范例 iptables -D INPUT --dport 80 -j DROP
使用iptables -L -n  --line-number  能够查看到每一个规则chain  的序列号,只能这样才能删除指定的规则。
iptables -D INPUT 1
说明 从某个规则链中删除一条规则,能够输入完整规则,或直接指定规则编号加以删除。
命令 -R, --replace
范例 iptables -R INPUT 1 -s 192.168.0.1 -j DROP
说明 取代现行规则,规则被取代后并不会改变顺序。
命令 -I, --insert
范例 iptables -I INPUT 1 --dport 80 -j ACCEPT
iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT
说明 插入一条规则,本来该位置上的规则将会日后移动一个顺位。
命令 -L, --list
范例 iptables -L INPUT
说明 列出某规则链中的全部规则。
命令 -F, --flush
范例 iptables -F INPUT
说明 删除某规则链中的全部规则。
命令 -Z, --zero
范例 iptables -Z INPUT
说明 将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。
命令 -N, --new-chain
范例 iptables -N allowed
说明 定义新的规则链。
命令 -X, --delete-chain
范例 iptables -X allowed
说明 删除某个规则链。
命令 -P, --policy
范例 iptables -P INPUT DROP
说明 定义过滤政策。 也就是未符合过滤条件之封包,预设的处理方式。
命令 -E, --rename-chain
范例 iptables -E allowed disallowed
说明 修改某自订规则链的名称。
经常使用封包比对参数:
参数 -p, --protocol
范例 iptables -A INPUT -p tcp
说明 比对通信协议类型是否相符,可使用 ! 运算子进行反向比对,例如:-p ! tcp ,意思是指除 tcp 之外的其它类型,包含udp、icmp ...等。若是要比对全部类型,则可使用 all 关键词,例如:-p all。
参数 -s, --src, --source
范例 iptables -A INPUT -s 192.168.1.1
说明 用来比对封包的来源 IP,能够比对单机或网络,比对网络时请用数字来表示屏蔽,例如:-s 192.168.0.0/24,比对 IP 时可使用 ! 运算子进行反向比对,例如:-s ! 192.168.0.0/24。
参数 -d, --dst, --destination
范例 iptables -A INPUT -d 192.168.1.1
说明 用来比对封包的目的地 IP,设定方式同上。
参数 -i, --in-interface
范例 iptables -A INPUT -i eth0
说明 用来比对封包是从哪片网卡进入,可使用通配字符 + 来作大范围比对,例如:-i eth+ 表示全部的 ethernet 网卡,也以使用 ! 运算子进行反向比对,例如:-i ! eth0。
参数 -o, --out-interface
范例 iptables -A FORWARD -o eth0
说明 用来比对封包要从哪片网卡送出,设定方式同上。
参数 --sport, --source-port
范例 iptables -A INPUT -p tcp --sport 22
说明 用来比对封包的来源埠号,能够比对单一埠,或是一个范围,例如:--sport 22:80,表示从 22 到 80 埠之间都算是符合件,若是要比对不连续的多个埠,则必须使用 --multiport 参数,详见后文。比对埠号时,可使用 ! 运算子进行反向比对。
参数 --dport, --destination-port
范例 iptables -A INPUT -p tcp --dport 22
说明 用来比对封包的目的地埠号,设定方式同上。
参数 --tcp-flags
范例 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
说明 比对 TCP 封包的状态旗号,参数分为两个部分,第一个部分列举出想比对的旗号,第二部分则列举前述旗号中哪些有被设,未被列举的旗号必须是空的。TCP 状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)
PSH(强迫推送) 等都可使用于参数中,除此以外还可使用关键词 ALL 和 NONE 进行比对。比对旗号时,可使用 ! 运算子行反向比对。
参数 --syn
范例 iptables -p tcp --syn
说明 用来比对是否为要求联机之 TCP 封包,与 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 的做用彻底相同,若是使用 !运算子,可用来比对非要求联机封包。
参数 -m multiport --source-port
范例 iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
说明 用来比对不连续的多个来源埠号,一次最多能够比对 15 个埠,可使用 ! 运算子进行反向比对。
参数 -m multiport --destination-port
范例 iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
说明 用来比对不连续的多个目的地埠号,设定方式同上。
参数 -m multiport --port
范例 iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
说明 这个参数比较特殊,用来比对来源埠号和目的埠号相同的封包,设定方式同上。注意:在本范例中,若是来源端口号为 80 目的地埠号为 110,这种封包并不算符合条件。
参数 --icmp-type
范例 iptables -A INPUT -p icmp --icmp-type 8
说明 用来比对 ICMP 的类型编号,可使用代码或数字编号来进行比对。请打 iptables -p icmp --help 来查看有哪些代码可用。
参数 -m limit --limit
范例 iptables -A INPUT -m limit --limit 3/hour
说明 用来比对某段时间内封包的平均流量,上面的例子是用来比对:每小时平均流量是否超过一次 3 个封包。 除了每小时平均次外,也能够每秒钟、每分钟或天天平均一次,默认值为每小时平均一次,参数如后: /second、 /minute、/day。 除了进行封
数量的比对外,设定这个参数也会在条件达成时,暂停封包的比对动做,以免因骇客使用洪水攻击法,致使服务被阻断。
参数 --limit-burst
范例 iptables -A INPUT -m limit --limit-burst 5
说明 用来比对瞬间大量封包的数量,上面的例子是用来比对一次同时涌入的封包是否超过 5 个(这是默认值),超过此上限的封将被直接丢弃。使用效果同上。
参数 -m mac --mac-source
范例 iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
说明 用来比对封包来源网络接口的硬件地址,这个参数不能用在 OUTPUT 和 Postrouting 规则炼上,这是由于封包要送出到网后,才能由网卡驱动程序透过 ARP 通信协议查出目的地的 MAC 地址,因此 iptables 在进行封包比对时,并不知道封包会送到个网络接口去。
参数 --mark
范例 iptables -t mangle -A INPUT -m mark --mark 1
说明 用来比对封包是否被表示某个号码,当封包被比对成功时,咱们能够透过 MARK 处理动做,将该封包标示一个号码,号码最不能够超过 4294967296。
参数 -m owner --uid-owner
范例 iptables -A OUTPUT -m owner --uid-owner 500
说明 用来比对来自本机的封包,是否为某特定使用者所产生的,这样能够避免服务器使用 root 或其它身分将敏感数据传送出,能够下降系统被骇的损失。惋惜这个功能没法比对出来自其它主机的封包。
参数 -m owner --gid-owner
范例 iptables -A OUTPUT -m owner --gid-owner 0
说明 用来比对来自本机的封包,是否为某特定使用者群组所产生的,使用时机同上。
参数 -m owner --pid-owner
范例 iptables -A OUTPUT -m owner --pid-owner 78
说明 用来比对来自本机的封包,是否为某特定行程所产生的,使用时机同上。
参数 -m owner --sid-owner
范例 iptables -A OUTPUT -m owner --sid-owner 100
说明 用来比对来自本机的封包,是否为某特定联机(Session ID)的响应封包,使用时机同上。
参数 -m state --state
范例 iptables -A INPUT -m state --state RELATED,ESTABLISHED
说明 用来比对联机状态,联机状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。

INVALID 表示该封包的联机编号(Session ID)没法辨识或编号不正确。
ESTABLISHED 表示该封包属于某个已经创建的联机。
NEW 表示该封包想要起始一个联机(重设联机或将联机重导向)。
RELATED 表示该封包是属于某个已经创建的联机,所创建的新联机。例如:FTP-DATA 联机一定是源自某个 FTP 联机。

经常使用的处理动做:
-j 参数用来指定要进行的处理动做,经常使用的处理动做包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、

SNAT、MIRROR、QUEUE、RETURN、MARK,分别说明以下:
ACCEPT 将封包放行,进行完此处理动做后,将再也不比对其它规则,直接跳往下一个规则炼(natostrouting)。
REJECT 拦阻该封包,并传送封包通知对方,能够传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 
tcp-reset(这个封包会要求对方关闭联机),进行完此处理动做后,将再也不比对其它规则,直接 中断过滤程序。 范例以下:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
DROP 丢弃封包不予处理,进行完此处理动做后,将再也不比对其它规则,直接中断过滤程序。
REDIRECT 将封包从新导向到另外一个端口(PNAT),进行完此处理动做后,将 会继续比对其它规则。 这个功能能够用来实做通透式
porxy 或用来保护 web 服务器。例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE 改写封包来源 IP 为防火墙 NIC IP,能够指定 port 对应的范围,进行完此处理动做后,直接跳往下一个规则(mangleostrouting)。这个功能与 SNAT 略有不一样,当进行 IP 假装时,不需指定要假装成哪一个 IP,IP 会从网卡直接读,当使用拨接连线时,IP 一般是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例以下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
LOG 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 组态档,进行完此处理动做后,将会继续比对其规则。例如:
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
SNAT 改写封包来源 IP 为某特定 IP 或 IP 范围,能够指定 port 对应的范围,进行完此处理动做后,将直接跳往下一个规则(mangleostrouting)。范例以下:
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT 改写封包目的地 IP 为某特定 IP 或 IP 范围,能够指定 port 对应的范围,进行完此处理动做后,将会直接跳往下一个规炼(filter:input 或 filter:forward)。范例以下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination
192.168.1.1-192.168.1.10:80-100
MIRROR 镜射封包,也就是未来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动做后,将会中断过滤程序。
QUEUE 中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,能够进行其它应用,例如:计算联机费.......等。
RETURN 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,若是把自订规则炼当作是一个子程序,那么这个动做,就至关提前结束子程序并返回到主程序中。
MARK 将封包标上某个代号,以便提供做为后续过滤的条件判断依据,进行完此处理动做后,将会继续比对其它规则。范例以下:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
iptables -X
iptables -F -t mangle
iptables -t mangle -X
iptables -F -t nat
iptables -t nat -X
首先,把三个表清空,把自建的规则清空。
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
设定INPUT、OUTPUT的默认策略为DROP,FORWARD为ACCEPT。
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
先把“回环”打开,以避免有没必要要的麻烦。
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT
在全部网卡上打开ping功能,便于维护和检测。
iptables -A INPUT -i eth0 -s 192.168.100.250 -d 192.168.100.1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.100.250 -s 192.168.100.1 -p tcp --sport 22 -j ACCEPT
打开22端口,容许远程管理。(设定了不少的附加条件:管理机器IP必须是250,而且必须从eth0网卡进入)
iptables -A INPUT -i eth0 -s 192.168.100.0/24 -p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.100.0/24 -p tcp --sport 3128 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.168.0/24 -p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -d 192.168.168.0/24 -p tcp --sport 3128 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth2 -p tcp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth2 -p udp --sport 53 -j ACCEPT
上面这几句是比较头痛的,我作逐一解释。
iptables -A INPUT -i eth0 -s 192.168.100.0/24 -p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT
容许192.168.100.0/24网段的机器发送数据包从eth0网卡进入。若是数据包是tcp协议,并且目的端口是3128(由于REDIRECT已经把80改成3128了。nat表的PREROUTING是在filter表的INPUT前面的。)的,再并且,数据包的状态必须是NEW或者ESTABLISHED的(NEW表明tcp三段式握手的“第一握”,换句话说就是,容许客户端机器向服务器发出连接申请。ESTABLISHED表示经过握手已经创建起连接),经过。
iptables -A OUTPUT -o eth2 -p tcp --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT
咱们先来看这一句。如今你的数据包已经进入到linux服务器防火墙上来了。squid须要代替你去访问,因此这时,服务器就成了客户端的角色,因此它要使用32768到61000的私有端口进行访问。(你们会奇怪应该是1024到65535吧。其实CentOS版的linux所定义的私有端口是32768到61000的,你能够经过cat /proc/sys/net/ipv4/ip_local_port_range,查看一下。)再次声明:这里是squid以客户端的身份去访问其余的服务器,因此这里的源端口是32768:61000,而不是3128!
iptables -A INPUT -i eth2 -p tcp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
固然了,数据有去就有回。
iptables -A OUTPUT -o eth0 -d 192.168.100.0/24 -p tcp --sport 3128 -m state --state ESTABLISHED -j ACCEPT
数据包还得经过服务器,转到内网网卡上。请注意,这里,是squid帮你去访问了你想要访问的网站。因此在内网中,你的机器是客户端角色,而squid是服务器角色。这与刚才对外访问的过程是不一样的。因此在这里,源端口是3128,而不是32768:61000。
iptables -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth2 -p udp --sport 53 -j ACCEPT
固然,DNS是不可缺乏的。
iptables -A INPUT -i eth+ -p tcp --dport 80 -j LOG --log-prefix "iptables_80_alert" --log-level info
iptables -A INPUT -i eth+ -p tcp --dport 21 -j LOG --log-prefix "iptables_21_alert" --log-level info
iptables -A INPUT -i eth+ -p tcp --dport 22 -j LOG --log-prefix "iptables_22_alert" --log-level info
iptables -A INPUT -i eth+ -p tcp --dport 25 -j LOG --log-prefix "iptables_25_alert" --log-level info
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j LOG --log-prefix "iptables_icmp8_alert" --log-level info
固然了,来点日志记录会对网管员有所帮助。
iptables 基本命令使用举例
1、链的基本操做
一、清除全部的规则。
1)清除预设表filter中全部规则链中的规则。
# iptables -F
2)清除预设表filter中使用者自定链中的规则。
#iptables -X
#iptables -Z
二、设置链的默认策略。通常有两种方法。
1)首先容许全部的包,而后再禁止有危险的包经过放火墙。
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
2)首先禁止全部的包,而后根据须要的服务容许特定的包经过防火墙。
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
三、列出表/链中的全部规则。默认只列出filter表。
#iptables -L
四、向链中添加规则。下面的语句用于开放网络接口:
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT
#iptables -A INPUT -i eth0 -j ACEPT
#iptables -A OUTPUT -o eth1 -j ACCEPT
#iptables -A FORWARD -i eth1 -j ACCEPT
#iptables -A FORWARD -0 eth1 -j ACCEPT
注意:因为本地进程不会通过FORWARD链,所以回环接口lo只在INPUT和OUTPUT两个链上做用。
五、使用者自定义链。
#iptables -N custom
#iptables -A custom -s 0/0 -d 0/0 -p icmp -j DROP
#iptables -A INPUT -s 0/0 -d 0/0 -j DROP
2、设置基本的规则匹配
一、指定协议匹配。
1)匹配指定协议。
#iptables -A INPUT -p tcp
2)匹配指定协议以外的全部协议。
#iptables -A INPUT -p !tcp
二、指定地址匹配。
1)指定匹配的主机。
#iptables -A INPUT -s 192.168.0.18
2)指定匹配的网络。
#iptables -A INPUT -s 192.168.2.0/24
3)匹配指定主机以外的地址。
#iptables -A FORWARD -s !192.168.0.19
4)匹配指定网络以外的网络。
#iptables -A FORWARD -s ! 192.168.3.0/24
三、指定网络接口匹配。
1)指定单一的网络接口匹配。
#iptables -A INPUT -i eth0
#iptables -A FORWARD -o eth0
2)指定同类型的网络接口匹配。
#iptables -A FORWARD -o ppp+
四、指定端口匹配。
1)指定单一端口匹配。
#iptables -A INPUT -p tcp --sport www
#iptables -A INPUT -p udp –dport 53
2)匹配指定端口以外的端口。
#iptables -A INPUT -p tcp –dport !22
3)匹配端口范围。
#iptables -A INPUT -p tcp –sport 22:80
4)匹配ICMP端口和ICMP类型。
#iptables -A INOUT -p icmp –icimp-type 8
5)指定ip碎片。
每一个网络接口都有一个MTU(最大传输单元),这个参数定义了能够经过的数据包的最大尺寸。若是一个数据包大于这个参数值时,系统会将其划分红更小的数据包
(称为ip碎片)来传输,而接受方则对这些ip碎片再进行重组以还原整个包。这样会致使一个问题:当系统将大数据包划分红ip碎片传输时,第一个碎片含有
完整的包头信息(IP+TCP、UDP和ICMP),可是后续的碎片只有包头的部分信息(如源地址、目的地址)。所以,检查后面的ip碎片的头部(象有TCP、UDP和ICMP同样)是不可能的。假若有这样的一条规则:
#iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 –dport 80 -j ACCEPT
而且这时的FORWARD的policy为DROP时,系统只会让第一个ip碎片经过,而余下的碎片由于包头信息不完整而没法经过。能够经过—fragment/-f 选项来指定第二个及之后的ip碎片解决上述问题。
#iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT
注意如今有许多进行ip碎片攻击的实例,如DoS攻击,所以容许ip碎片经过是有安全隐患的,对于这一点能够采用iptables的匹配扩展来进行限制。
3、设置扩展的规则匹配(举例已忽略目标动做)
一、多端口匹配。
1)匹配多个源端口。
#iptables -A INPUT -p tcp -m multiport –sport 22,53,80,110
2)匹配多个目的端口。
#iptables -A INPUT -p tcp -m multiport –dpoort 22,53,80
3)匹配多端口(不管是源端口仍是目的端口)
#iptables -A INPUT -p tcp -m multiport –port 22,53,80,110
二、指定TCP匹配扩展
使用 –tcp-flags 选项能够根据tcp包的标志位进行过滤。
#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN
#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK
上实例中第一个表示SYN、ACK、FIN的标志都检查,可是只有SYN匹配。第二个表示ALL(SYN,ACK,FIN,RST,URG,PSH)的标志都检查,可是只有设置了SYN和ACK的匹配。
#iptables -A FORWARD -p tcp --syn
选项—syn至关于”--tcp-flags SYN,RST,ACK SYN”的简写。
三、limit速率匹配扩展。
1)指定单位时间内容许经过的数据包个数,单位时间能够是/second、/minute、/hour、/day或使用第一个子母。
#iptables -A INPUT -m limit --limit 300/hour
2 )指定触发事件的阀值。
#iptables -A INPUT -m limit –limit-burst 10 
用来比对一次同时涌入的封包是否超过10个,超过此上限的包将直接丢弃。
3)同时指定速率限制和触发阀值。
#iptables -A INPUT -p icmp -m limit –-limit 3/m –limit-burst 3
表示每分钟容许的最大包数量为限制速率(本例为3)加上当前的触发阀值burst数。任何状况下,均可保证3个数据包经过,触发阀值burst至关于容许额外的包数量。 
4)基于状态的匹配扩展(链接跟踪)
每一个网络链接包括如下信息:源地址、目标地址、源端口、目的端口,称为套接字对(socket pairs);协议类型、链接状态(TCP协议)
和超时时间等。防火墙把这些信息称为状态(stateful)。状态包过滤防火墙能在内存中维护一个跟踪状态的表,比简单包过滤防火墙具备更大的安全性,命令格式以下: 
iptables -m state –-state [!]state [,state,state,state]
其中,state表是一个逗号分割的列表,用来指定链接状态,4种:
>NEW: 该包想要开始一个新的链接(从新链接或链接重定向)
>RELATED:该包是属于某个已经创建的链接所创建的新链接。举例:
FTP的数据传输链接和控制链接之间就是RELATED关系。
>ESTABLISHED:该包属于某个已经创建的链接。
>INVALID:该包不匹配于任何链接,一般这些包被DROP。
例如:
(1)在INPUT链添加一条规则,匹配已经创建的链接或由已经创建的链接所创建的新链接。即匹配全部的TCP回应包。
#iptables -A INPUT -m state –state RELATED,ESTABLISHED
(2)在INPUT链链添加一条规则,匹配全部从非eth0接口来的链接请求包。
#iptables -A INPUT -m state -–state NEW -i !eth0
又如,对于ftp链接可使用下面的链接跟踪:
(1)被动(Passive)ftp链接模式。
#iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state –-state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m 
state -–state ESTABLISHED,RELATED -j ACCEPT
(2)主动(Active)ftp链接模式
#iptables -A INNPUT -p tcp --sport 20 -m state –-state ESTABLISHED,RELATED -j ACCEPT安全

相关文章
相关标签/搜索