防火墙就是一台主机,其安全防护措施被可以强化,且可信任,一定要坐落在网络的枢纽点,必须能够过滤往来网络的所有的包。
由于linux内核中有一个称为netfilter的子系统,当包经过linux内核时候,必须一次经过此子系统的各个检查点,因此,放火墙就是我们通过命令行工具iptables设定的各个检查规则的总和。
netfilter在防火墙的应用中可以对包进行三种处理方式,过滤filtering,拆分mangling,转址nating。
过滤对于包的处理有几种,通过,丢弃,拒绝(丢弃则包来源不会收到任何的通知,而拒绝则会给包来源一个icmp通知)。而对于包的识别主要有以下几个条件:
协议类型:tcp udp icmp等
通信端口:tcp或者udp协议
包类型:syn/ack,数据,icmp echo request等
来源地址:
目的地址。
ip过滤发生在网络层,所以,它无法识别出应用程序本身,也就是说,如果我们想封锁telnet包,只是封锁23端口是完全不行的,其完全可以用另一个端口,例如2323来访问,netfilter对此完全无能为力,需要用别的proxy server来封锁telnet服务。
iptalbes将网络包处理规则归纳为三个表table,分别是filter,nat,mangle,每个表由若干个链chain组成,每条链由一系列规则rule组成,每条规则描述一种匹配条件match和一种目标target,其中,匹配条件挑选包,而目标是对包的处理。
iptables的优势在于规则比较简单明了,可以用有限的规则写出比较强大的防火墙,并且逻辑很清楚。写防火墙规则的步骤,基本上是用文字描述出想要达到的目的,然后用iptables实现。
iptables在内核对于包的处理过程中定义了5个检查点hook point,每个检查点对应一组链。分别是PREROUTING INPUT FORWARD POSTROUTING OUTPUT。这些链供管理员安排过滤表规则,每一个规则代表一次检测或者影响包流动的机会。
FORWARD 经过网关(从某接口近来,再从另一个接口处去)的包。 (mangle filter)
INPUT即将递交给本地进程的包(mangle filter)
OUTPUT本地进程刚刚产生的包(mangle nat filter)
POSTROUTING即将进入网络接口而离开的包(mangle nat)
PREROUTING刚从网络接口进入的有效包。(mangle nat)
iptables主要命令以及参数列表:
命令:command
-t table: nat mangle filter
-A 增加一条规则
-D 删除一条规则
-I 插入一条规则
-R 替换一条规则
-L 列出指定链的规则,如果不指定链,将列出所有的规则
-F 清空链表
-Z 计数值归零
-N 创建新链
-X 删除用户自定义链
-P 默认targer,默认处理方式
-E 重命名链
-h 帮助
参数: parameters
-p 协议:tcp udp icmp all
-s 源地址
-d 目的地址
-j 处理方式 ACCEPT DROP REJECT or USER-SPECIFIED
-g goto
-i 从某网络设备进入
-o 从某网络设备出去
[!] -f 处理碎片包 fragment
-c 初始化计数值
-v verbose输出,通常用来统计流量
-n numeric 以ip形式显示
-x 准确的输出流量,不用M K等显示
-line-numbers 在列出的每一个规则之前加上行号
-m 加载需要的模块
一些匹配条件
mac --mac-source
icmp --icmp-type
udp --destnation-port --dport --source-port -sport
tcp --dport --mss --sport --syn --tcp-flags --tcp-option
一些有用的扩展模块
1、limit
--limit rate n/second n/minute n/hour n/day
--limit-burst
2、account
--aaddr netword/netmask 192.168.0.0/24
--aname 定义统计保存的文件名字
--ashort 记录较简短的统计信息
读取计数 cat /proc/net/ip_account/Xxx
3、connlimit
限定每一个ip地址的tcp并发访问数量
--connlimit-above
--connlimit-mask
target扩展
DNAT 用在nat表的OUTPUT PREROUTING
--to-destination
SNAT 用在nat表的POSTROUTING链
--to-source