防火墙的相关知识
防火墙:位于网络之间的,根据所定义的规则对进出网络数据包经行匹配,并匹配到包用指定的处理机制进行处理的硬件、软件或者二者的结合
包过滤防火墙:工作于网络层
有状态检测
简单包过滤
网关代理型防火墙:工作于应用层,效率低,安全性高
Hook function:5个钩子
INPUT
OUTPUT
RORWARK
PREROUTING
POSTRONTING
filter:过滤 在INPUT,OUTPUT,RORWARK
nat:PREROUTING(dnat)POSTRONTING(snat) OUTPUT
mangle:对数据包的封装格式重新进行修改,在5个钩子里都可以
raw:PREROUTING,OUTPUT
当每个钩子拥有不同的表时,其检测顺序是先mangle,在nat,最后filter
防火墙规则的查看:
# iptables -t table -L -n -v
-t 默认是filter
-L 列出目前的table的规则
-n 不进行IP与hostname反查,使显示信息更快
-v 显示详细信息
--line-numbers 显示的时候带行号
防火墙规则的清除
# iptables -t table [-FXZ]
-F (flush):清空所有的已定规则
-X ():删除用户自定义的空链
-Z ():清空计数器(每一条规则都有两个计数器,一个用于记录被本条规则所匹配到的包的个数,另一个用户记录所有匹配到包的体积之和)
定义防火墙的默认策略
# iptables -P chain (ACCEPT|DROP) REJECT
# iptables -P INPUT DROP
配置防火墙
#iptables [-t table] sub_command CHAIN [num] [cretiria] [ -j ACCTION]
sub_command:
Rule:
-A (append):追加
-I (insert):插入,
-D (delete):删除 -D OUTPUT
-R (replace):替换, -R FORWARD 6
chain:链
-N (new):新建
-E 重命名一条链
通用匹配:
-s ! IP/NETWORK 源地址
-d ! IP/NETWORK 目标地址
-p (tcp|udp|icmp)指定协议
-i interface 一般不用于output,postrouting
-o interface 一般不用在input,prerouting
扩展匹配:
隐式扩展:一般指对-p选项中指定的协议进行的扩展
-p tcp
--sport
--dport
--tcpflags 要检查的标记,必须为1的标记(剩余位必须为0)
--syn
-p udp
--sport
--dport 53 DNS 端口
-p icmp
--icmp-type
echo-request;8
echo-reply;0
显示扩展:一般指必须使用-m选项明确指定要加载扩展
-m state:连接状态
--state state
NEW:想要新建立的数据包
# iptables -A OUTPUT -o eth1 -m state --state NEW -j DROP
ESTABLISHED:已建立状态的请求数据包
# iptables -P OUTPUT DROP
# iptables -A OUTPUT -s 172.16.100.1 -m state --state ESTABLISHED -j ACCEPT
RELATED:相关联的数据包
INVALID:无效的数据包
-m (mport|multiport)第一个可能不能用,所有尽量用第二个
--source-ports 80,23
--destination-ports
--ports
# iptables -A INPUT -d 172.16.19.1 -p tcp -m multiport --source-ports 80,23 -j ACCEPT
-m iprange
--src-range ip-ip
--dst-range ip-ip
# iptables -A INPUT -m iprange --src-range 172.16.19.10-172.16.19.100 -p tcp --dport 80 -j ACCEPT
-m connlimit
--connlimit-above n 限制某个连接请求上并发请求的个数
-m limit
--limit rate 平均单位时间是几个
--limit-burst number 突发限制的数量
# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second --limit-burst 30 -j ACCEPT
-m time
--timestart value
--timestop
--days listofdays
--datestart date
--datestop date
# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m time --datestart 2012:02:18 --datestop 2012:02:26 --timestart 08:30:00 --timestop 14:30:00 -j ACCEPT
-m string
--algo bm|kmp
--string pattern
# iptables -A OUTPUT -s 172.16.100.1 -p tcp --dport 80 -m string --algo bm --string “wed” -j DROP
21 FTP 22 ssh 23 telent
练习:192.168.1.0/24是“狼窝”,在要求为172.16.x.1写规则,满足以下要求:
1、filter表所有链接的默认规则为DROP;
2、lo接口上进出的所有数据包均放行;
3、Web和ssh开放给非“狼窝”的主机;
1)ssh仅允许在工作时间(每周一至周五的9:00-18:00)被访问,但172.16.0.0/16网络中的主机可在任意时段访问;
2)web服务全时段可被访问,但每秒种接收的新请求的个数不能超过100个;
4、发往本机的ping请求,每秒只各应两个数据包,且最高每秒只响应3个;拒绝来自“狼窝”的ping请求;本机可向任意主机发送Ping请求;
5、本机出口仅将已经建立的连接放行
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARK DROP
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p tcp -m --multiport --source-ports 80,22 -j DROP
# iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -m --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Web,Thu,Fri -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --syn -m limit --limit-burst 100 -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type 8 -j DROP
# iptables -A INPUT -d 172.16.19.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
# iptables -A OUTPUT -s 172.16.19.1 -p icmp --icmp-type 8 -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT