防火墙大纲

一)防火墙基础讲解之常用规则使用

防火墙分为:软件防火墙,硬件防火墙
硬件防火墙:常听说的就是F5.
软件防火墙:iptables,iptables并不是真正的防火墙,只是继续在netfile上以一种软件方式工作在网络层的防火墙。
netfilter:网络过滤器,才是真正的让规则生效的过滤器。

1)防火墙又分为五链,四表,详细的关系下图。

wKiom1M2km2Ct5TEAAL3di9gSb8568.jpg

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。

wKiom1M2yOHCv9oJAAIlP0h6Kmk776.jpg

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数据包后,连接将被断开,这个标志的数据包也经常用于端口扫描。

wKiom1M2zkPQU5cxAAMN3vr22bY068.jpg

发放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常用的操作大致这些。