防火墙:硬件、软件
过滤 规则 IP
防火墙:位于网络之间,根据所定义的规则对进出网络数据进行匹配,并匹配到包指定的处理机制进行处理的硬件、软件或二者的结合;
包过滤防火墙:
有状态检测
简单包过滤
kernel:netfilter
userspace:iptables
iptables:rule --> netfilter
四个表:
filter:包过滤
nat:地址转换
mangle:数据包的修改和重新组合,ttl
raw;
每个表定义的链:
filter:INPUT、FORWARD,OUTPUT
nat:POSTROUTING、PREROUTING、OUTPUT
mangle:全部的链
raw:PREROUTING 、 OUTPUT
网关代理型:应用层
INPUT:主要与数据包想要进入linux本机有关;
OUTPUT:主要与linux本机所要送出的数据包有关;
NAT:这个表格主要用于来源地与目的地的IP或者port转换,与linux本机无关,主要与linux主机后的局域网内的计算机有关;
FORWARD:与linux本机没有关系,它可以将数据包转发到后端计算机中,与NAT的table相关性很强,转发与ip地址有关,与网卡的个数没有具体关系
PREROUTING:在进行路由判断之前执行的规则(DNAT/REDIRECT)
POSTROUTING:在进行路由判断之后执行的规则(SNAT/MASQUERADE)
OUTPUT;与发送出的数据包有关
iptables至少有三个默认table:
filter :过滤
nat :SNAT 、DNAT
mangle:把原来封装的数据包拆开后修改一下,然后再封装
命令:
iptables
-t 后面接table,默认是filter
-L 列出目前的table规则
-n 不进行IP与HOSTNAME的反查,显示速度会快很多
-v 显示详细信息
-F 清除链规则,不指定默认清除所有
-N 新建一条用户自定义链
-X 除掉所有用户自定义的空链
如果链规则非空,需要用-F清空链规则
-Z 将所有的chain(链)的计数与流量统计都归零
每一条规则都有两条计数器,一个用于记录被本条规则匹配的包的个数,另一个用户记录所有匹配到的包的体积之和,即流量
-E 重命名链
P 定义策略(Policy),INPUT,OUTPUT,FORWARD
ACCEPT;接收
DROP:直接丢弃
# iptables -[AI]链 [-io网络接口] [-p协议] [-s来源ip网段] [-d目标ip网段] -j[ACCEPT|DROP]
参数:
-A 追加一条规则,若之前已有4条,则-A就是加上第5条
-I 插入一条规则,—I则将这条插入默认为第1条规则
-I INPUT 3 表示在INPUT链中以第三条规则身份插入
-D 删除一条规则
iptables -D output 8 表示删除ouput链第8条规则
-R 替换规则 用法同上
-i 数据包所进入的那个网络接口,eth0 、eth1、lo
-o 数据包传出的那个网络接口,需与OUTPUT链配合
-s:来源ip网段,设置规则的数据包来源地,可以是IP也可以是网段
-d:目标ip网段
-p 协议,数据包格式有tcp、udp、icmp等
--sport PORT (限制来源端口)
--sport 1:65535
--dport PORT (限制目的端口)
--line-numbers 给链定义的规则定义顺序数字
iptables -t filter -L -n --line-number
--syn 表示主动联机的
iptables -t filter -A INPUT -p icmp --sport 1:1024 --syn DROP
-j 后面接操作,主要有ACCEPT、DROP、LOG(记录)
======================================================= 匹配条件:
通用匹配:
-s:来源ip网段,设置规则的数据包来源地,可以是IP也可以是网段
-d:目标ip网段
-p 协议,数据包格式有tcp、udp、icmp等
-i 数据包所进入的那个网络接口,eth0 和eth1、lo(一般不用于OUTPUT,POSTROUTING)
-o数据包传出的那个网络接口 (一般不用于INPUT,PREROUTING)
扩展匹配:
-j 后面接操作,主要有ACCEPT、DROP、LOG(记录)
隐式扩展;一般指对 -p选项中指定的协议进行的扩展
-p tcp
--sport PORT (限制来源端口)
--dport PORT (限制目的端口)
-p udp
--sport PORT (限制来源端口)
--dport PORT (限制目的端口)
-p icmp
ICMP TYPE:
echo-request 请求 :8
echo-replay 响应 :0
iptables -I INPUT -s 172.16.0.0/16 -d 172.16.33.1 -p icmp --icmp-type 8 -j DROP (拒绝请求,8,echo request)
iptables -I OUTPUT 1 172.16.33.1 -d 172.16.0.0/16 -p icmp --icmp-type 0 -j DROP(拒绝响应请求,0,echo replay)
iptables -A OUTPUT -s 172.16.100.1 -d 192.168.1.0/24 -o eth1 -p icmp --icmp-type 0 -j DROP (拒绝eth1上响应请求,0,echo replay)
--syn 表示主动联机的
iptables -t filter -A INPUT -p icmp --sport 1:1024 --syn DROP
显式扩展:
-m :iptables的模块
state:状态模块
mac :网卡硬件地址
state:连接状态
--state:状态模块
ESTABLISHED 已经成功联机的状态
NEW 新建立的数据包状态
RELATED 表示数据包与我们主机发送出去的数据包有关
INVSLID 无效的数据包
范例:只要是联机成功的数据包或者与已发送出*去的请求相关的数据包就给予通过,不合法就丢弃
#iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -m state --state INVALID -j DROP
**********************************************
# iptables -P OUTPUT DROP
#iptables -A OUTPUT -s 172.16.100.1 -m state --state ESTABLISHED -j ACCEPT
#iptables -P INPUT DROP
#iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-m (mport|mutiport)
--source-ports
--destination-ports
--ports
限定多个端口:
iptables -A INPUT -d 172.16.100.1 -p tcp -m mport --destination 80,22,23,110,143,25 -m state --state NEW,ESTABLISHED -j ACCEPT
-m iprange:
--src-range ip-ip
--dst-range ip-ip
iptables -A INPUT -d 172.16.100.1 -m iprange --src-range 192.168.1.9-192.168.1.200 -p tcp --dport 80 -m state NEW,ESTABLISHED -j ACCEPT
-m connlimit:限制某个地址上的并发连接请求
[!] --connlimit-above n 没有超出n这个连接请求,!表示没有超出
-m limit
--limit 12/second 限制每秒钟,接收12个请求
--limit-brust number 上限数量
the default is 5
#iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit 12/second --limit-brust 13 -j ACCEPT 限制每秒钟接收12个数据包,最多不能超过13个
-m time:
--timestart
--timestop
--days listofdays (格式为: Mon,Tue,Wed,Thu,Fri,Sat,Sun ; default everyday)
--datestart date
--datestop date 格式为: YYYY[:MM[:DD[:hh[:mm[:ss]]]]]
2月18号-2月26号,8:30-14:30允许访问本机:
#iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m time --timestart 08:30:00 --timestop 14:30:00 --datestart 2012:02:18 --datestop 2012:02:26 -j ACCEPT
-m string
--alog bm|kmp
--string 字符
限制含有web的网页请求
# iptables -A OUTPUT -s 172.16.100.1 -p tcp --sport 80 -m string --alog bm --string web -j DROP
# iptables-save 直接保存配置文件
# iptables-save > filename 保存iptables配置为一个文件
# iptables-restore < filename 从file文件恢复iptables配置
========================================================
# iptables -t filter -A INPUT -s 172.16.33.0/24 -p icmp -j DROP
如何拒绝别人的qing请求:
iptables -I INPUT -s 172.16.0.0/16 -d 172.16.33.1 -p icmp --icmp-type 8 -j DROP (拒绝请求,8,echo request)
如何拒绝响应qing请求:
#iptables -I OUTPUT 1 172.16.33.1 -d 172.16.0.0/16 -p icmp --icmp-type 0 -j DROP(拒绝响应请求,0,echo replay)
#iptables -A OUTPUT -s 172.16.100.1 -d 192.168.1.0/24 -o eth1 -p icmp --icmp-type 0 -j DROP (拒绝eth1上响应请求)
如何仅允许本地172.16.100.1,eth0,web服务;
#itpables -P INPUT DROP 先拒绝所有
#iptables -A INPUT -s 0.0.0.0/0.0.0.0 -d 172.16.100.1 -i eth0 -p tcp --dport 80 -j ACCEPT 再只允许开放web80端口服务
如何拒绝本地主机通过eth1,新的网络连接请求:
# iptables -A OUTPUT -o eth1 -p tcp --syn -j DROP
--syn 表示主动联机的