TCP/IP基本概念:
TCP/IP将网络分为四层:应用层,传输层,网络层,链路层。
传输层:定义了两种通信协议,分别为TCP协议和UDP协议。
TCP协议:TCP协议在传输 数据过程中会检查数据的完整性,因此传输的数据是不会丢失的。
UDP协议:当选择UDP协议作为数据传输方法时,其目的通常在于满足效率方面的要求,而非数据正确性方面的要求。
防火墙的分类:数据包过滤防火墙&应用层防火墙
NETfilter的四个表:
filter:filter是NETfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用
nat:比较通俗的 方式说,其功能就是IP分享器,只不过其所能执行的 功能,比一般市场上的IP分享器功能强大得多
mangle:可以通过mangle机制来修改经过防火墙内数据包的内容
raw:负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能
iptables中所有链的默认规则有DROP和ACCEPT两个值,默认的值为ACCEPT.
1.修改FORWARD链的默认策略设置为DROP:
#iptables -t filter -p FORWARD DROP #-t指定所要操作的表,如果没有指定,则默认的表为filter.
iptables的-F参数不会影响到默认的策略状态,要改变默认策略的状态,一定要使用-P的参数来设置。
2.将规则添加到filter表的INPUT链:
#iptables -t filter -A INPUT -p icmp -j ACCEPT
3.在INPUT链中插入新的规则:
#iptables -t filter -I INPUT 2 -p tcp -j ACCEPT #插入到第二条规则的位置,iptables规则的优先级别为:由上而下.
4.取代INPUT链内已经存在的规则:
#iptables -t filter -R INPUT -p tcp -j ACCEPT
5.删除INPUT链中已经存在的规则:
#iptables -t filter -D INPUT 2 #删除原来的第二条规则
iptables规则语法:
基本语法:iptables -t filter -A INPUT -p icmp -j DROP
高级语法:iptables -t filter -A INPUT -m mac --mac-source 00:E0:18:00:7C:A4 -j DROP
1.将192.168.0.83进入本机的icmp协议包都丢弃
#iptables -t filter -A INPUT -p icmp -s 192.168.0.83 -j DROP
2.不允许192.168.0.83主机通过本机的DNS服务来执行名称解析
#iptables -A INPUT -p udp -s 192.168.0.83 --dport 53 -j REJECT
3.允许192.168.0.83主机连接到本机的TELNET服务
#iptables -A INPUT -p tcp -s 192.168.0.83 --dport 23 -j ACCEPT
4.允许192.168.1.0/24网段的主机向本机192.168.0.1提出任何服务请求
#iptables -A INPUT -p all -s 192.168.1.0/24 -d 192.168.0.1 -j ACCEPTT
5.只允许客户端主机从eth1这个接口访问本机的SSH服务
#iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT
6.不允许本机的应用程序从eth0接口发送数据包去访问edu.uuu.com.tw以外的网站
#iptables -A OUTPUT -o eth0 -p tcp -d !edu.uuu.com.tw --dport 80 -j REJECT
7.不允许本企业内部的主机访问企业以外的任何网站
#iptables -A FORWARD -i eht1 -o eth0 -p tcp --dport 80 -j DROP
简单的单机防火墙:
1.网络上的任何主机都能正常访问192.168.0.1主机上的SSH和TENNET服务
2.网络上只有192.168.0.200这台主机可正常访问192.168.0.1上的所有服务
iptables -P INPUT DROP
iptables -A INPUT -p tcp -d 192.168.0.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.0.1 --dport 23 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 80 -j ACCEPT
解决应用程序无法从防火墙主机上对外建立新连接的问题:
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
本规则使用state模块--ESTABLISHED、NEW、RELATED、INVALID
iptables -A INPUT -p all -m state --state INVALID -j DROP
管理防火墙规则数据库的方法:
1.在修改完netfilter的会泽之后,可以使用service iptables save将所有的命令存储到/etc/sysconfig/iptables文件中,接着使用chkconfig iptables on,设置iptables开机自动启动.但是在修改的时候并不方便.
2.使用shell脚本管理规则数据库
优点:提升管理防火墙规则的简便性
可以在shell脚本中使用变量
防火墙规则容易阅读
备份防火墙规则数据库极为方便
缺点:无法在开机后自动载入规则数据库
该shell文件的属主和属组,需要修改为root,权限为700.
使用filter构建网关式防火墙:
1.192.168.0.200这台主机只能访问10.0.1.100主机的SMTP和POP3服务
2.192.168.0.0/24网段上的其他主机只可以访问因特网上的DNS、SMTP、HTTP、HTTPS服务
3.因特网上的主机不得访问企业内任何的主机
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -A INPUT -p tcp -m state --state INVALID -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state INVALID -j DROP
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp -s 192.168.0.200 -d 10.0.1.100 --dport 25:110 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p all -d 192.168.0.200 -j DROP
iptables -A FORWARD -i eth1 -o eth1 -p tcp --dport 25,110 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth1 -p tcp --dport 80,443 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth1 -p udp --dport 53 -j ACCEPT
netfilter的NAT机制:
PREROUTING:当我们下发规则要去修改数据包的”Destination IP”时,该规则放在PREROUTING链中.
POSTROUTING:修改数据包内的来源IP.
OUTPUT:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 10.0.1.200
内网的ip访问因特网时,将其数据包的sourceIP转换为其公网IP,即可实现内网对因特网的访问.
接口名称的问题:-o后面的“接口名称”务必设置为当前所使用的公网IP的地址.
如果公网IP不是固定的:#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
netfilter的mangle机制:
修改IP包头的TTL值:可以修改Linux主机所发送的数据包,将这些数据包的TTL值改为128,让黑客误以为是Windows操作系统,也可以将所有Windows操作系统所发送的数据包的TTL值改为64,让黑客误以为是Linux系统.
修改IP包头的DSCP值或对特定的数据包设置特征:
通过IP包内的DSCP值来分类:
我们可以通过mangle机制来修改IP包内的DSCP值,例如:把DSCP值改为0000-01,接着在“带宽分配器”上设置,如果数据包内的DSCP值为0000-01,就给予64KB/s的带宽
使用mangle机制为数据包标示识别码;
mangle机制可以为特定的数据包来标示不同的识别码,例如:如果数据包内的source port为80,就标示该数据包的识别码为80,接着在“带宽分配器”上设置,如果数据包的识别码为80,就给予512KB/s的带宽
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 43
netfilter的raw机制:
Netfilter/iptables的高级技巧:
防火墙性能的最优化:
1.调整防火墙规则顺序:匹配命中次数越高者越靠前(设置防火墙一段时间后执行iptables -L -n -v来查看匹配的次数)
2.巧妙地使用multiport和iprange模块
iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 22,23,25,80,110 -j ACCEPT #这样不管哪个服务器所需的匹配次数都会是一样的
iptables -A INPUT -m iprange --src-range 192.168.1.12-192.168.1.16 -j ACCEPT
3.巧妙使用用户自定义的链
Netfilter连接处理能力与内存消耗:
1.计算最大连接数:(nf_conntrack: table full, dropping packet)
2.调整连接跟踪器:
3.连接跟踪数量与内存消耗:
使用raw表:
nf_conntrack模块默认会自动跟踪所有链接,在raw表加入以下规则,即可不被nf_conntrack跟踪:
iptables -t raw -A PREROUTING -i eth2 -o eth1 -p tcp --dport 25 -j NOTRACK
iptables -t raw -A PREROUTING -i eth1 -o eht2 -p tcp --sport 25 -j NOTRACK
raw表的好处在于“加速”以及增加可跟踪的连接数量,因为raw表所定义的连接不会被跟踪,也就不会算作连接跟踪数量。
PREROUTING:如果是网关式防火墙,PREROUTING链可以用来处理防火墙两侧网络之间所建立的连接,另外,PREROUTING链也可以处理任何主动连接到防火墙本机的连接。
OUTPUT:用来处理本机对外建立的连接。
简单及复杂通信协议的处理:
1.简单通信协议:
2.复杂通信协议:
客户端与服务器端之间,需要多条连接才能完成应用的协议,就属于复杂通信协议。
FTP通信协议的两种工作模式:被动模式&主动模式
常见的网络攻击手段及防御方法:
1.PortScan攻击:PortScan是一种极常见的攻击行为,其目的是在探测特定主机上有哪些服务是开启的,接着,再从这些信息来分析可能有机会入侵的通道在哪里。因此,PortScan的攻击通常只是真正入侵之前的准备,而真正的攻击行动可能随之展开。
使用netfilter来防御portscan的攻击:
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -P all -m state --state NEW -m recent --name port_scan --update --seconds 1800 --hitcount 10 -j DROP
itables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 22,25,80,110 -j ACCEPT
iptables -A INPUT -p all -m recent --name port_scan --set
半个小时内客户端访问22,25,80,110端口的次数超过10次,就判定为portscan攻击
2.密码攻击:
a.未加密通信协议下的密码攻击防御:
iptables -A OUTPUT -p tcp --sport 110 -m string --algo bm --string “ERR Authentication failed” -m recent --name pop3 --ipdate --seconds 600 --hitcount 6 -j REJECT
iptables -A OUTPUT -p tcp --sport 110 -m string --algo bm --string “ERR Authentication failed” -m reecent --name pop3 --set
认证失败次数超过6次,则认为是密码攻击
b.加密通信协议下的密码攻击防御
a.改变SSH服务器所能接受的最大密码错误次数:
vi /etc/ssh/sshd_config
修改MaxAuthTries参数的值
b.将送至SSH服务器的SYN数据包数量作为匹配依据:
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --update --seconds 600 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --set
3.DOS和DDOS网络攻击:
DOS:严重消耗被攻击者的系统或网络资源,由此达到干扰需要访问该服务的正常使用者.
DDOS:
4.URL攻击防御:
5.管理病毒感染时的连接消耗: