Netfilter/Iptables(如下简称Iptables)是unix/linux自带的一款优秀且开放源代码的彻底自由的基于包过滤的防火墙工具,它的功能十分强大,使用很是灵活,能够对流入和流出服务器的数据包进行很精细的控制。特别是它能够在一台很是低的硬件配置下跑的很是好。iptables+zebra+squidlinux
Iptables是linux2.4及2.6内核中集成的服务。其功能与安全性比其老一辈ipfwadm,ipchains强大的多,Iptables主要工做在OSI七层的2、三四层,若是从新编译内核,Iptables也能够支持7层控制(squid代理+iptables)。web
主机防火墙(filter表的INPUT链)安全
局域网共享上网(nat表的POSTROUTING链)。半个路由器,NAT功能。服务器
端口及IP(一对一)映射(nat表的PREROUTING链),硬防的NAT功能。网络
iptables是采用数据包过滤机制工做的,因此它会对请求的数据包的包头数据进行分析,并根据咱们预先设定的规则进行匹配来决定是否能够进入主机。并发
一、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。app
二、若是匹配上了规则,即明确代表是阻止仍是经过,此时数据包就不在向下匹配新规则了。tcp
三、若是全部规则中没有明确代表是阻止仍是经过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则获得明确的阻止仍是经过。工具
四、防火墙的默认规则是对应链的全部的规则执行完之后才会执行的(最后执行的规则)。测试
1.尽量不给服务器配置外网IP,能够经过代理转发或者经过防火墙映射。
2.并发不是特别大状况再外网IP的环境,要开启iptables防火墙。
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中能够有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否知足规则所定义的条件。若是知足,系统就会根据 该条规则所定义的方法处理该数据包;不然iptables将继续检查下一条规则,若是该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
Iptables采用“表”和“链”的分层结构。在REHL4中是三张表五个链。如今REHL5成了四张表五个链了,不过多出来的那个表用的也不太多,因此基本仍是和之前同样。下面罗列一下这四张表和五个链。注意必定要明白这些表和链的关系及做用。
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
INPUT——进来的数据包应用此规则链中的策略
OUTPUT——外出的数据包应用此规则链中的策略
FORWARD——转发数据包时应用此规则链中的策略
PREROUTING——对数据包做路由选择前应用此链中的规则
(记住!全部的数据包进来的时侯都先由这个链处理)
POSTROUTING——对数据包做路由选择后应用此链中的规则
规则表之间的优先顺序:
Raw——mangle——nat——filter
规则链之间的优先顺序(分三种状况)
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),以后会进行路由选择(判断该数据包应该发往何处),若是数据包 的目标主机是防火墙本机(好比说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否容许通 过等),经过之后再交给系统上层的应用程序(好比Apache服务器)进行响应。
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,以后会进行路由选择,若是数据包的目标地址是其它外部地址(好比局域网用户经过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),而后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
防火墙本机向外部地址发送的数据包(好比在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,以后进行路由选择,而后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
iptables [-t 表名] 命令选项 [链名][条件匹配] [-j 目标动做或跳转]
说明:表名、链名用于指定 iptables命令所操做的表和链,命令选项用于指定管理iptables规则的方式(好比:插入、增长、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动做或跳转用于指定数据包的处理方式(好比容许经过、拒绝、丢弃、跳转(Jump)给其它链处理。
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,能够按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,能够按规则序号和内容替换
-L 列出(list)指定链中全部的规则进行查看
-E 重命名用户定义的链,不改变链自己
-F 清空(flush)
-N 新建(new-chain)一条用户本身定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将全部表的全部链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
ACCEPT 容许数据包经过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包经过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,而后将数据包传递给下一条规则
[root@web01 ~]# /etc/init.d/iptables start
iptables: Applying firewall rules: [ OK ]
[root@web01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@web01 ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@web01 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
-A -I -D
iptables [-t table] -A chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -D chain rulenum #<==根据规则号删除。
iptables [-t table] -D chain rule-specification
注释:
-t 指定表d(efault: `filter')
-A #<==把规则添加到指定的链上,默认添加到最后一行。
-I #<==插入规则,默认插入到第一行。
-D #<==删除链上的规则
iptables -D INPUT 4 #<==4是规则号。
-F #<==清除一个链或全部链上的规则
-Z #<==链的记数器清零
-X #<==删除用户自定义的链。
实例:
实践:
[root@web02 ~]# iptables -Z
[root@web02 ~]# iptables -X
[root@web02 ~]# iptables -F
[root@web02 ~]# iptables -nL
[root@web02 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
规则注释:
-p #<==指定过滤的协议-p(tcp,udp,icmp,all)
--dport #<==指定目标端口(用户请求的端口)。
-j #<==对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)
--sport #<==指定源端口。
[root@web01 ~]# iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP
[root@web02 ~]# iptables -A INPUT -p tcp ! -s 10.0.0.2 -i eth0 -j DROP
-s #<==指定源地址。 ! 取反。
-d #<==指定目的地址。
-i #<==进入的网络接口(eth0,eth1)。
-o #<==出去的网络接口(eth0,eth1)。
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
iptables -I INPUT -p tcp --dport 18:80 -j DROP #<==最佳
iptables -A INPUT -p icmp --icmp-type 8
实例:
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-m state --state
NEW:已经或将启动新的链接
ESTABLISHED:已创建的链接
RELATED:正在启动的新链接
INVALID:非法或没法识别的
#容许关联的状态包 ftp协议
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-m limit --limit n/{second/minute/hour}:
iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min -j DROP
在同一时间内容许经过的请求"n"为数字,不指定默认为5
iptables -I INPUT -s 10.0.0.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT
修改默认规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTOP ACCEPT