防火墙做为一种内部网与外部网之间的访问控制设备,一般安装在内部网络与外部网络的边际,防火墙具备很好的网络保护做用。入侵者必须先经过防火墙的安全防线才能接触计算机。能够将防火墙配置不一样的安全级别,达到不一样的安全防御。web
netfilter/iptables是集成在Linux2.4x版本内核中的包过滤防火墙系统。它能够实现数据包过滤
,网络地址转换
以及数据包管理功能
。Linux中的防火墙系统中,netfilter位于内核空间,负责对本机全部流入,流出,转发的数据包进行查看,修改,丢弃,拒绝等操做,因为netfilter位于内核空间,用户通常没法接触内核和修改内核,因此就须要一些命令行工具进行管理,经常使用的有iptables,firewalld等工具。所以,真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。安全
简单来讲,iptables是由表组成,表是链的集合,链上有规则。若是将iptables比做一栋楼,那么表、链、规则是:服务器
iptables | 表(tables) | 链(chains) | 规则(policy) |
---|---|---|---|
大楼 | 每一层楼 | 一层楼的房间 | 房间内的布局 |
iptables中有四表五链网络
表 | 做用 |
---|---|
filter | 实现数据包的过滤(经常使用) |
nat | 修改数据包的地址和端口(经常使用) |
mangle | 修改数据包的服务类型、TTL、而且能够配置路由实现QOS内核模块(用得很少) |
raw | 决定数据包是否被状态跟踪机制处理(用得很少) |
而链分别是:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。tcp
filter表的链
filter表是iptables默认的表,有3条链,分别是INPUT、FORWARD和OUTPUT链。工具
nat表的链
对于nat表来讲有3条链,分别是PREROUTING、OUTPUT和POSTROUTING链。布局
规则表之间的优先顺序:
Raw>mangle>nat>filter测试
规则链的优先顺序
分3种状况spa
入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),以后会进行路由选择(判断该数据包应该发往何处),若是数据包的目标主机是防火墙本机(好比说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否容许经过等),经过之后再交给系统上层的应用程序(好比Apache服务器)进行响应。命令行
转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,以后会进行路由选择,若是数据包的目标地址是其它外部地址(好比局域网用户经过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),而后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
出站数据流向
防火墙本机向外部地址发送的数据包(好比在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,以后进行路由选择,而后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
工做流程小结:
一、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
二、若是匹配上了规则,即明确代表是阻止仍是经过,此时数据包就不在向下匹配新规则了。
三、若是全部规则中没有明确代表是阻止仍是经过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则获得明确的阻止仍是经过。
四、防火墙的默认规则是对应链的全部的规则执行完之后才会执行的(最后执行的规则)。
iptables的语法命令格式:
iptables -t [表名] 命令选项 [链名] 匹配参数 [-j目标动做]
说明:
表名和链名:用于指定iptables操做的是哪一个表哪条链
命令选项:用于指定管理iptables规则的方式(增长,删除等)
匹配参数:用于指定对符合什么条件的数据包进行处理
目标动做:用于指定对数据包的处理
选项:
-t
:指定须要维护的防火墙规则表,不使用-t时,默认操做filter表命令选项:
-A:
追加防火墙规则-D:
删除防火墙规则-I:
插入防火墙规则-F:
清空防火墙规则-L:
列出防火墙规则-R:
替换防火墙规则-Z:
清空防火墙数据表统计信息-P:
设置链默认规则匹配参数
[!] -P:
匹配协议,!表明取反即不匹配[!] -s:
匹配源地址[!] -d:
匹配目标地址[!] -i:
匹配入站网卡接口[!] -o:
匹配出站网卡接口[!] --sport:
匹配源端口[!] --dport:
匹配目标端口[!] --src-range:
匹配源地址范围[!] --dst-range:
匹配目标地址范围[!] --limit:
匹配数据表速率[!] --mac-source:
匹配源MAC地址[!] --sports:
匹配源端口[!] --dports:
匹配目标端口[!] --state:
匹配状态[!] --string:
匹配应用层字串目标动做
ACCEPT:
容许数据包经过DROP:
丢弃数据包REJECT:
拒绝数据包经过LOG:
将数据包信息记录syslog日志DNAT:
目标地址转换SNAT:
源地址转换MASQUERADE:
地址欺骗REDIRECT:
重定向iptables的保存
默认的iptables防火墙规则会马上生效,但若是不保存,当计算机重启后全部的规则都将丢失,因此对防火墙规则进行及时的保存操做是有必要的。
备份工具:
iptables-save > /etc/sysconfig/iptables
还原工具:
iptables-restore < /etc/sysconfig/iptables
或者执行service iptables save
也行。
一、查看filter表的全部规则
iptables -nL
二、查看nat表的全部规则
iptables -t nat -nL
三、清空filter表的全部规则
iptables -t filter -F
四、往filter表添加一条规则,丢弃192.168.0.1主机发给本机的全部数据包
iptables -t filter -A INPUT -s 192.168.0.1 -j DROP
五、往filter表插入一条规则,拒绝192.168.0.2主机ping本机
iptables -I INPUT -s 192.168.0.2 -p icmp -j REJECT
六、查看filter表中防火墙规则并显示规则编号
iptables -nL --line-number
七、删除filter表中INPUT链的第一条规则
iptables -D INPUT 1
八、替换filter表INPUT链的第二条规则,拒绝除了192.168.0.3以外的任何主机链接本机
iptables -R INPUT 2 ! -s 192.168.0.3 -j REJECT
九、修改filter表INPUT链的默认规则为接收数据包
iptables -P INPUT ACCEPT
十、禁止来自10.0.0.188 ip地址访问80端口的请求
iptables -A INPUT -s 10.0.0.188 -p tcp --dport 80 -j DROP
十一、实现把访问10.0.0.3:80的请求转到172.16.1.17:80
iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80
十二、只容许远程主机访问本机的80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -j DROP
1三、实现172.16.1.0/24段全部主机经过124.32.54.26外网IP共享上网。
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
1四、容许任意客户端访问服务主机提供的平常服务(HTTP,HTTPS,DNS,NTP,SMTP,POP3)
iptables -A INPUT -p udp --dport 25 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 110 -j ACCEPT iptables -A INPUT -p tcp --dport 143 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT ACCEPT
1五、禁止任何主机访问本机22端口
iptables -A INPUT -p tcp -dport 22 -j DROP