防火墙
1. 防火墙:
1.)包过滤防火墙 à简单包过滤防火墙
à基于状态检测的包过滤防火墙
2.)Pagload à代理防火墙
2. tcp/ip选择5个点(hook functions)钩子函数作为过滤条件
Netfilter:自身不做过滤,靠Ipv6规则过滤
Framework/iptablesà存放规则
3. tables
按功能和规则的不同可分为:四个表,五个链。
1.)四个表:filter:本机转发
nat:àSNAT(离开的一霎那)
àDNAT(进入之前)
mangle
raw
2.)五个链:PREROUTING,INPUT,OUTPUT,FORDWARD,POSTROUTING
4. 各个表的规则:
filter :INPUT ,FORDWARD ,OUTPUT
nat: PREROUTING ,POSTROUTING ,OUTPUT
mangle:ALL
raw :PREROUTING
5.iptables默认使用filter表
iptables [-t table] Command Chains [NUM] match-conditions –j Action
***************************************************
Command:(对链中规则的操作命令)
-A :append附加(在尾部追加规则)
-I:insert插入到某条规则之前
-R n:Replace(修改第几条规则)
-D n:detelete删除某条规则
Chains:(对于链的管理)
-F;flush清空规则(若没指明链,则将表中的链全清空)
-P: policy默认策略{DROP|ACCEPT}
-N;new(用户自定义一条新规则)
-X:删除用户自定义的一条新链,默认五条都被删掉
-E:remain(将用户自定义的某条链重命名为其他名)
-Z:zero(清空计数器)
-L:list(某条链中所有规则)
-S;print /etc/sysconfig/tables(默认保存位置)
iptables –L –v : 所有被本规则匹配的包的个数
及 所有被本规则匹配的包的体积
匹配规则可分为:
***通用匹配:-p protocol{tcp|udp|icmp}
-s src-address(单个或网段地址)
-d dst_address
-i in_insertface
-o out_interface
***扩展匹配:++隐含扩展:tcp{--dport,--sport,--tcp-flags
--syn}
udp{--sport,--dport, --icmp-type}
++显示扩展:-m state --state
-m mutiport --ports
-m limit --limit
-m string --limit
-m mac --mac-source
处理动作:(-j jump)
DROP, REJECT, ACCEPT, SNAT, DNAT, LOG, REDIRECT(重定向),MASQUERADE(地址伪装,一般用于外网接口为动态地址时)
6.用法案例:
iptables –L
iptables filter|raw|mangle|nat –L(若不指明,默认为filter)
iptables –t filter –L –line-numbers(显示规则编号)
iptables –t filter –L –line-numbers –n(-n 以ip地址的形式显示地址,反解析,不做名称解析)
iptables –t filter –L –line-numbers –n –v(显示详细信息)
iptables –t filter –L –line-numbers –n –v –X(不做单位换算,直接显示其精确值)
INPUT,OUTPUT
***iptables –t filter –P INPUT DROP(若修改,则都进不去)
iptables –t filter –A INPUT –s 0.0.0.0/0.0.0.0 –d -192.168.0.116 –p tcp --dport 80 –j DROP(所有地址都不能访问192.168.0.116 的web服务)
iptables –t filter –A OUTPUT –s 192.168.0.116 –d 0.0.0.0/0.0.0.0 –p tcp --sport 80 –j DROP(192.168.0.116不能访问web服务)
iptables –t filter –A INPUT –s 192.168.0.116 -p tcp --dport 80 –j DROP(192.168.0.116不能访问其它的地址的web服务)
**********************************************
若要拒绝192.168.0.0网段的地址,但是允许192.168.0.3,
将192.168.0.3放到前面(提示:0:echo-reply, 8:echo-request, 3:destination unreachable)
假设有通信双方本地A(192.168.0.116),远程为 B(192.168.0.254)
让Aping不通B,则:iptables –t filter –A OUTPUT –s 192.168.0.116 –d 192.168.0.254 –p --icmp-type 8 –j DROP
让Bping不通A,但自己却能回应:iptables –t filter –A INPUT
-s 192.168.0.254 –d 192.168.0.116 –p –icmp-type 0 –j DROP
***************************************************
ssh
iptables –t filter –A INPUT -s 192.168.0.254 –d 192.168.0.116 –p tcp --dport 22 –j DROP(拒绝192.168.0.254远程登录到192.168.0.116上)
iptables –t filter –A INPUT –s !192.168.0.0/24 –d 192.168.0.116 –p icmp --icmp-type 8 –j DROP(所有非192.168.0.0/24网段的地址将都ping不通192.168.0.116)
***************************************************
DNAT(目标地址转换)
内网:192.168.1.1,192.168.1.2,192.168.1.3(均为web服务器)
外网:1.1.1.1
若让1.1.1.1访问这些服务,首先得进行地址转换,应将外网上的地址转换为内网的地址才能进行访问。(即将原地址转换为目标地址才能进行访问。)
iptables –t nat –A PREROUTING –d 1.1.1.1 –p tcp –dport 80 –j DNAT --to-dest 192.168.1.2:8080
SNAT(源地址转换)
外网地址:192.168.100.2
网关:外网接口:192.168.100.1,内网接口:192.168.10.1
内网地址:192.168.10.1
让内网访问外网:
Iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –d 192.168.100.0/24 –j SNAT –to-source 192.168.100.1
MASQERADE(地址伪装)
外网地址:192.168.100.0/24
网关:外网接口:192.168.100.1(但不固定,会经常发生变化)内网接口:192.168.10.1
内网地址:192.168.10.0/24
内网访问外网,需要做地址转换,但内网的外网接口地址又为动态时,我们就需要进行地址伪装,让外界看来地址没有发生变化。
iptables –t nat –s 192.168.10.0/24 –d 192.168.100.0/24 –j MASQERADE --to-source 192.168.100.1
***************************************************
外网地址为:192.168.100.2
内网地址为:192.168.10.2
假设拒绝内网访问外网,对于尝试访问内网的将计入系统日志,配置规则如下:
iptables –A FORWARD –s 192.168.100.2 –d 192.168.10.0/24 –j LOG --log-prefix “From external:”
iptables –A FORWARD –s 192.168.100.2 –d 192.168.10.0/24 –j DROP