防火墙大纲
一)防火墙基础讲解之常用规则使用
防火墙分为:软件防火墙,硬件防火墙 硬件防火墙:常听说的就是F5. 软件防火墙:iptables,iptables并不是真正的防火墙,只是继续在netfile上以一种软件方式工作在网络层的防火墙。 netfilter:网络过滤器,才是真正的让规则生效的过滤器。
1)防火墙又分为五链,四表,详细的关系下图。
2)依次介绍表的用处:
mangle:负责修改数据包中特殊的路由标记。 net:负责网络地址转换 filter:默认表,主要是负责过滤本机流入,流出数据包。
3)常用的检查条件:
Ip:SIP(源ip地址),DIP(目标ip地址) TCP:Sport,Dport UDP:Sport,Dport ICMP:icmp-type
4)扩展机制
time(时间匹配),string(字符串匹配),stat(状态机制)
5)处理机制
DROP:拒绝,直接没有回应。 REJECT:拒绝,带有挑衅。 ACCEPT:允许 SNAT:源地址转换 DNAT:目标地址转换 RETURN:返回状态 LOG:日志记录 REDIRECT:改变目的端口的,意为端口转换
6)iptables常见使用格式
iptables --t nat -N chain创建一个新的规则链 iptables -t nat -X chain删除规则链 iptables -t nat -E chain en修改规则链 iptables -P INPUT DROP修改默认策略 -F:清空链中的规则,只能清空INPUT,OUTPUT,FORWARD。 -L:列出表中的所有规则。 -n:数字格式显示IP和port。 -v:以详细信息显示。 -vv:更加详细的信息。 --line-numbers:显示各规则的行号。 -Z:清空。 pkts bytes target prot opt in out source destination pkts:被本规则所匹配到的报文的个数。 bytes:被本规则所匹配到的所有报文的大小之和,单位是字节。 target:目标,即处理机制。 prot:协议,一般为tcp,udp,icmp。 opt:可选项 in:数据包的流入接口 out:数据包的流出接口 source:源地址 destination:目标地址
7)通用匹配:
-s:匹配源地址,可以ip,也可以网络地址。可以使用!操作符取反。 -d:匹配目标地址。 -p:匹配协议,通常只使用tcp,udp,icmp三者之一。 -i:数据报文流入的接口。通常用于input,forward,prerouting。 -o:数据报文流出的接口,通常用于output,forward,postrouting。
8)扩展匹配:
隐含扩展:使用-p{tcp|udp|icmp}指定某特定协议后,自动能够对协议进行扩展。 -p tcp --dport目标端口:匹配的目标端口,可以是连续的多个端口。 --sport源端口:匹配的源端口,可以是连续的多个端口。 -i:数据报文流入的接口。 -o:流出的接口。 --tcp-flags:tcp标志位,指定标志位匹配
6个标志位:URG,PSH,RST,SYN,ACK,FIN。
URG:表示tcp包的紧急指针域,用来保证tcp连接不被中断。并且督促中间层设备尽快处理这些数据。 ACK:表示应答域有效,就是说前面所说的tcp应答号将会包含在tcp数据包中,有两个取值,0和1,1表示应答域有效,反之为0. PSH:表示push操作,push指的是数据包到达接收端以后,立即传送给应用程序,而不是缓冲区中。 RST:表示连接复位请求,用来复位哪些产生错误的连接,也被用来拒绝错误和非法的数据包。 SYN:表示同步序号,用来建立连接,syn标志位和ack标志位搭配使用。当连接请求的时候,syn=1,ack=0,连接被响应的时候,syn=1,ack=1,这个标志的数据包经常被用来进行端口扫描。扫描发送一个只有syn的数据包,如果对方主机响应回来,就标明这台主机存在这个端口,但是由于这种扫描方式只是进行tcp三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不安全,一台安全的主机将会强制要求一个连接严格的进行tcp的三次握手。 FIN:表示发送端已经达到数据结尾,就是双方的数据传送完成。没有数据可以传送了。发送fin标志位的tcp数据包后,连接将被断开,这个标志的数据包也经常用于端口扫描。
发放DNS服务器: iptables -I INPUT -s 192.168.1.10/24 -d 192.168.1.123 -p udp --dport 53 -j ACCEPT iptables -I INPUT -s 192.168.1.10/24 -d 192.168.1.123 -p udp --sport 53 -j ACCEPT iptables -A INPUT -s 192.168.1.123 -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -d 192.168.1.123 -p udp --sport 53 -j ACCEPT 发放TFTP服务器: iptables -A INPUT -s 192.168.0.0/24 -d 192.168.100.1 -p udp --dport 69 -j ACCEPT iptables -A OUTPUT -s 192.168.100.1 -d 192.168.0.0/24 -p udp --dport 69 -j ACCEPT 放行ping其它主机: iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT iptables -A INTPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT 允许别人ping自己: iptables -I INPUT -d 192.168.1.124 -p icmp --icmp-type 8 -j ACCEPT iptables -I OUTPUT -s 192.168.1.124 -p icmp --icmp-type 0 -j ACCEPT 9)显示扩展,必须要指定明确的扩展模块:
-m 扩展模块名称 multiport:多端口匹配,一次指定多个离散端口。 --source-ports=--sport:最多是15个端口 --destination-ports=--dports iptables -I INPUT -d 192.168.1.124 -p tcp -m multiport --dport 22,80 -j ACCEPT iptables -I OUTPUT -s 192.168.1.124 -p tcp -m multiport --sport 22,80 -j ACCEPT
iprange:范围匹配:
--src-range from --dst-range from [!]也可以取反 iptables -I INPUT -d 192.168.1.124 -p tcp --dport 23 -m iprange --src-range 192.168.1.10-192.168.1.20 -j ACCEPT iptables -I OUTPUT -s 192.168.1.124 -p tcp --sport 23 -m iprange --dst-range 192.168.1.10-192.168.1.20 -j ACCEPT
time指定时间范围:
iptables -I INPUT -d 192.168.1.124 -p tcp --dport 901 -m time --weekdays 1,2,3,4,5 --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT iptables -I OUTPUT -s 192.168.1.124 -p tcp --sport 901 -j ACCEPT 901是samba-awst页面管理工具。
字符串匹配:string
iptables -I OUTPUT -s 192.168.1.124 -p tcp --sport 80 -m string --algo kmp --string "janpan" -j DROP
connlimit:每ip对指定服务的最大并发连接数
--connlimit-above iptables -I INPUT -d 192.168.1.124 -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP 超过5个链接的就拒绝 iptables -R INPUT 1 -d 192.168.1.124 -p tcp --dport 80 -m connlimit --connlimit-above 5 -j DROP修改上一条。 limit:报文速率进行控制: iptables -I INPUT -d 192.168.1.124 -p icmp --icmp-type 3 -m limit --limit 2/second --limit-burst 5 -j ACCEPT
state:状态匹配:
NEW:新的回话 ESTABLISHED:已建立的连接。 RELATED:相关联的。 INVALID:无法识别的链接,无效的。 使用state的法则: 已经建立过的链接都应该放行,那就是ESTABLISHED. 对于出去的状态为ESTABLISHED也都应该放行。 严格检查进入的状态为NEW的链接 INVALID所有状态为invalid都应该拒绝。 iptables -A INPUT -d 192.168.1.124 -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.1.124 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT iptables -I INPUT -d 192.168.1.124 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -I OUTPUT -s 192.168.1.124 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
放ftp比较特殊:
首先需要加载两个模块:
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
iptables -I INPUT -d 192.168.1.124 -p tcp --dport 21 -j ACCEPT
iptables -I OUTPUT -s 192.168.1.124 -p tcp --sport 21 -j ACCEPT
iptables -I INPUT -d 192.168.1.124 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -s 192.168.1.124 -p tcp -m state --state ESTABLISHED -j ACCEPT
写的规则要保存:
service iptables save保存防火墙规则,保存的位置为/etc/sysconfig/iptables文件中。
iptables-save > /path/to/some_rulefile把规则写入到某个文件中。
iptables-restore</path/from/some_rulefile输入重定向。
PS:
iptables常用的操作大致这些。