一、防火墙概述
工作于主机或网络边缘,依据策略决定数据报文的出入规则,可以防范报文进出网络或主机内部,此策略包括ip、进出口、mac、port等规则。
TCP三次握手、4次断开
syn、ack、fin、urg、psh、rst
2、应用层网关:varnish、squid
3、入侵检测系统(IDS):NIDS(网络入侵检测系统,软件:snort),HIDS(主机入侵检测系统,软件:)
4、入侵防御系统(IPS):实际上是入侵检测系统和防火墙的联动结合。
5、filesystem:tripwire
二、防火墙内部关键词
input:通往防火墙内部主机的输入报文检查口
output:防火墙主机本身要出去访问外部的检查口
forward:防火墙本身处理数据包转发的检查口。 这个检查口就是可以放规则的位置,也经常被称为钩子函数,hook function。
三、防火墙规则的主要功能:四个表、五个内置链表
表:
1、filter:包过滤
2、NAT:地址转换,SNAT/DNAT/PAT
3、mangle:修改报文属性
4、raw:
内置链
perrouting、input、forward、output、postrouting、
四、创建和保存
1、通过iptables来创建的规则会在重启iptables时丢失。
2、自动备份:service iptables save
3、手动备份:iptables-save。
4、恢复策略:iptables-restore</path/filename
5、默认保存位置:/etc/sysconfig/iptables
规则的属性定义
1、网络层协议属性:ip
2、传输层协议属性:tcp/udp/icmp
tcp三次握手:
1、请求方发送syn,包含主机的随机序列号100
2、接收方收到syn,回应syn和ack,syn为自己的随机序列号200,ack为希望收到对方的下一个序列号101
3、接收方收到syn和ack,继续发送syn为101,ack为201
iptables
大写字母选项:子命令
小写字母选项:用来匹配标准及其他
-t:指定表类型
-L:list,
-n:数字显示IP和port
-v:显示详细信息
-vv:更详细信息
--line-number:显示行号
-x:显示精确值
规则和默认策略都有两个计数器
packets:匹配的报文数
bytes:报文数的大小
五、表和链的对于关系
filter表:
INPUT(处理来自外部 的数据)
FORWARD(处理将数据转发到本机其他网卡上的策略)
OUTPUT(处理来自内部的数据)
nat表
PERROUTTING(处理刚到达本机并在路由转发前的数据包,它会转换数据包中的目标ip地址,通常用于DNAT)
POSTROUTING(处理即将离开本机的数据包,它会转换数据包中的原ip地址,通常用于SNAT)
OUTPUT
mangle表
PERROUTTING、POSTROUTING、OUTPUT、INPUT、FORWARD
raw表
PERROUTING、OUTPUT
六、管理链
--flush -F:清空所有链中的策略
-P:设定默认策略
iptables -P INPUT DROP
-N:创建自定义链
-X:删除自定义空链
-Z:计数器清零
-E:重命名自定义链
七、管理规则
-A:append,追加一条新规则rules,默认追加到链尾部。
-I[n]:在第n条位置插入新的规则
-D[n]:删除第n条规则
-R[n]:替换第n条规则
编写规则语法
iptables [-t 表名] 大写选项字命令 [规则号] 链名 匹配标准 -j 目标
目标:
drop:丢弃,无声无息
reject:丢弃,有信息提示
accept:接受
描绘规则的匹配标准
通用匹配:用于描述数据包的协议、原地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。
-
-s--src --source [!] ip:参数可以是ip地址、网络地址、主机名
-
-d --dst --destination [!] ip/network
-
-i :指定数据报文流入接口(网卡)
-
-o:指定数据报文流出接口
iptables -L --line-number //查看规则编号
iptables -t filter -R 1 INPUT -s 192.168.1.0/24 -d 192.168.1.9 -i eth0 -j ACCEPT
-
-p:指定协议{tcp|upd|icmp|all}默认是all,匹配所有协议。
-
-j:代表“jump to target”目的可以是accept、drop、return、queue。
扩展匹配:除了通用匹配,这里主要指定端口、tcp标志、icmp类型等内容。
-
“ -m 扩展名称”来引用,每个模块都有自己特有的专用选项,有些是必须提供的。
-
-sport:缺省情况下是所有端口,可以使用冒号匹配范围
-
-dport:
-
--tcp-flags:指定多个参数用“逗号”分隔
-
--icmp-type:
隐藏扩展
-p tcp
--sport 22-30
--dport
--tcp-flags:要检查的标记,检查是否为1
练习:1、放行对web服务的访问
iptables -t filter -A INPUT -d 192.168.1.9 -p tcp --dport 80 -j ACCEPT
iptalbes -t filter -A OUTPUT -s 192.168.1.9 -p tcp --sport 80 -j ACCEPT
2、本机是DNS服务器,放心本地的DNS服务,并为本地客户端做递归解析,本机ip:192.168.1.9
iptables -t -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t -A OUTPUT -p tcp --sport 53 -j ACCEPT //作为服务器端
iptables -t -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -t -A OUTPUT -p tcp --dport 53 -j ACCEPT //作为客户端替用户递归查询
-p icmp
--icmp-type
请求:8
响应:0
3、本机能ping通对方主机(此为单方向发送,如果要远程可以ping本地,需要另写一组)
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
显示扩展 /lib/xtablies/
-m state --state
NEW,ESTABLISHED,RELATED,INVALID
4、允许NEW、ESTABLISHED通过iptables。
5、允许防火墙放行ftp服务。
模块位置: ll /lib/modules/2.6.32-431.el6.i686/kernel/net/netfilter/
6、多端口匹配,可以指定15个以内的离散端口(分散)
-m multiport
--source-ports
--destination-ports
--ports
练习: iptables -I INPUT 1 -p tcp -m multiport --destination-ports 53,21,22 -j ACCEPT
7、多ip范围
-m iprange 192.168.1.1-192.168.1.22
-m iprange --src-range 192.168.1.1-192.168.1.20
--dst-range
8、速率配置
-m limit
--limit 表示单位时间内可以有多少数据包进入/days/min/hours
--limit-burst 表示一次同时可以进入几个
9、字符串匹配
-m string
--string “”
--algo {bm|kmp}
10、时间限制
-m time
--timestart
--timestop
需要安装nf_conntrack_ftp模块,可以手动装载modeprobe nf_conntrack_ftp ,也可以通过修改配置文件/etc/sysconfig/iptables-config配置文件中IPTABLES_MODULES=""
添加模块名称
练习:INPUT和OUTPUT策略默认为DROP
1、限制本地主机的web服务器在周一不允许访问:且新请求的速率不能超过100个/秒,web服务包含admin字符串的页面不允许访问,仅允许响应报文离开本地。
iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT
1、iptables -A INPUT -d 127.0.0.1 -p tcp --dport 80 -m time --weekdays Tue,Web,Thu,Fri,Sat,Sun -m limit --limit 100/sec -m string --algo kmp ! --string "admin" -m state --state NEW -j ACCEPT
2、 iptables -A OUTPUT -m state --state ENSTABLISHED RELATED -j ACCEPT
2、在工作时间,即周一至周五的8:30-18:30,开发本机的ftp服务给172.16.0.0网络中的主机访问,数据下载请求的次数为每秒5个。
1、iptables -A INPUT -p tcp -d 127.0.0.1 -s 192.168.1.0/24 --dport 21 -m time --weekdays Mon-Fri --timestart 08:30 -j ACCEPT
2、iptables -A INPUT -s 192.168.1.0/24 -d 127.0.0.1 -p tcp --dport 21 -m state --state RELATED -m limit --limit 5/min -j ACCEPT
3、开发本机的ssh服务给192.1681.1-55的主机,新请求建立的速率一分钟不超过2个,仅允许响应报文离开本地
iptables -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.55 -m limit --limit 2/min -p tcp --dport 22 -m state --state NEW -j ACCEPT
4、拒绝tcp标志位全部为1和全部为0的报文访问本机。
iptables -N clean-in
iptables -I clean-in 1 -p tcp --tcp-flags ALL ALL -j DROP
iptables -I clean-in 1 -p tcp --tcp-flags ALL NONE -j DROP
iptables -A clean-in -d 192.168.1.1 -j RETURN
iptables -I INPUT 1 -d 192.168.1.1 -j clean-in
5、允许本机ping别的主机,不许其他主机ping本地。
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
-m connlimit
--connlimit-above 设置连接数上限,默认是超出后采取的措施,通常采用取反的方法来实现其功能。
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -m connlimit ! --connlimit-above 5 -j ACCEPT
利用iptables的recent模块来抵御DOS攻击,建立一个列表,保存所有访问过指定服务的客户端ip地址
1、创建访问指定服务的访问列表
iptables -I INPUT 1 -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh
文件存储在/proc/net/ipt_recent/ssh
2创建规则,指定访问22端口的链接在超过3个链接就拒绝再链接,拒绝时间为5分钟
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m --recent --update --second 300 --hitcount 3 --name ssh -j ACCEPT
ipv4的内核管理功能
主要用于阻挡外部攻击
1、/proc/sys/net/ipv4/tcp_syncookies
用于预防dos攻击,(通过发送大量的无效连接请求syn,来阻止正常请求访问),方法是服务器在响应客户端发送的请求时,要求客户端对自己的请求内容进行一次验证,如果能够对自己发送的内容进行确定,就建立连接。
2、/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
预付死亡ping攻击,通过不响应ping broadcast来阻止。
3、/proc/sys/net/ipv4/conf/eth*/
rp_filter:逆向路径过滤,通过分析网络接口的路由信息,配合数据包的来源,来分析数据包合理性。
log_martians:记录不合法的IP地址到/var/log/message
accept_redirects:
send_redirects:
NAT技术
私网
C:192.168.1.0-192.168.254.0
B:172.16.0.0-192.31.0.0
A:10.0.0.0
私网地址实现访问互联网的方法
1、NAT
2、PROXY
SNAT:内部客户机访问外部网络,iptables配置在postrouting
-j SNAT --to-source IP
-j MASQUERADE 适合外网ip地址是动态的,类似adsl获取的外网ip地址。
设置方法:
1、设置SNAT
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 192.168.1.9
2、设置forward策略
iptables -A FORWARD -s 192.168.100.0/24 -p tcp --dport 80 -m time --timestart 08:30 --timestop 10:30 -j ACCEPT
iptables -A FORWARD -d 192.168.100.0/24 -m time --timestart 08:30 --timestop 10:30 -j ACCEPT
注意此限制时间是以防火墙的时间为准。
DNAT:实现内部服务器可以被外部网络访问,prerouting
-j DNAT --to-destination IP:p ort
iptables -t nat -A -p tcp -dport 80 -j --to-destination 192.168.1.1:8080
linux内核打补丁
1、比较文件的区别,创建补丁:diff
-c:文件比较
-u:放在一起比较
打补丁:diff oldfile newfile >1.patch
2、打补丁:patch
进入需要打补丁的文件目录
cd old_dir
打补丁
-p:忽略补丁路径的“/”数目。建议直接将补丁文件放在需要打补丁到的文件里,方便打补丁。
patch oldfile <1.patch
还原会未打补丁状态
patch -R old_file 1.patch
SRC格式的rpm源程序包:ftp://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/