1. 自述
关于监控,可能我们用到防火墙的案例并不多,甚至少之又少,在公安网中有网闸,在政府网中可能会有单独的防火墙或者网闸,但在这里DZ先生建议,只要厂家的平台是基于linux系统,我建议您还是了解下,因为当遇到问题的时候,至少您知道从哪里下手,或者自己就能解决,就不必要等待二线或者别人的帮助,也可以获得客户对你的认可。了解知道的越多,就越能更加快速的处理问题,提高效率。
2. 防火墙规则
如下图所示,internet网中一个报文想要访问服务器,当进入服务器的那一刻,保安(防火墙)就会对这个报文的身份进行确认,看是否符合进入的规则,如果有10条规则,从第一条开始匹配,只要匹配中一条,则下面的规则就无需在匹配,且放此报文进入。一般防火墙的最后一条都会有一条拒绝所有进入的规则。另外防火墙就跟办公大楼一样,保安只能决定放不放人进入,但不能知道和决定此人会在里面干些什么事情。
3. 防火墙表table和链chain
防火墙里有三张表 filter nat mangle
每个表里有各自的链(chain),这个链是用来干嘛的?主要控制方向报文的,如INPUT是控制进来的报文,OUTPUT是控制出去的报文。
filter : INPUT OUTPUT FORWARD 链
INPUT 控制外面报文进入防火墙
OUTPUT 控制防火墙里面报文出去
FORWARD控制内外网报文
nat : POSTROUTING PREROUTING 链
POSTROUTING 主要用于源NAT转换(SNAT)
PREROUTING 主要用于目的NAT转换(DNAT)
OUTPUT 主要在目的NAT中,让防火墙可以访问自己,下文会有详细介绍
mangle:此种环境用的很少,暂不做介绍
4. 防火墙语法
(a) iptables [-t table] command chains [creteria] -j action
(b) 详细点的规则:
iptables -t filter -A{I,D} INPUT{OUTPUT,FORWARD} {n} -p tcp{udp,icmp} \
> {!} {-s 来源IP/网域 ,-d 目标IP/网域} {--sport m:n,--dport x:y} -j {ACCEPT,DROP,REJECT,LOG}
上面为两种语法规则,根据自己的需求,记住其中一种规则写法
-t : table就是表名,filter/nat/mangle三个表中的一个,默认是filter表
command: 告诉程序如何做,比如:插入一个规则,还是删除等
chains 链: 有五个,PREROUTING POSTROUTING INPUT OUTPUT FORWARD
action: 处理动作,有ACCEPT DROP REJECT SNAT DNAT LOG
DROP:丢弃报文,没有信息反馈
REJECT:丢弃报文,丢了有信息反馈
防火墙语法图
command
command指定iptables对我们提交的规则要做什么样的操作。这些操作可能是在某个表里增加或删除一些东西,或其他的动作。一下是iptables可用的command(如不做说明,默认表是filter)
举例:
1. iptables -t filfer -A INPUT -s 192.168.0.1 -p tcp --dport 22 -j ACCEPT
#在现有防火墙规则列表的末尾增加一条允许主机192.168.0.1访问防火墙后面端口为22的主机
2. iptables -I INPUT 1 -s !192.168.1.0/24 -d 192.168.2.0/24 -p tcp --dport 22 -j DROP
#插入一条规则,将此规则放在第一条,除了192.168.1.0/24段,其他段访问192.168.2.0/24段目的端口为22的服务包都丢弃
# iptables后面没有-t filter,默认就是写入filter表里
# INPUT 1 意思为将此规则置位第一条
# !感叹号在这边就是除了,如! 192.168.1.0/24 意思为除了192.168.1.0段。其他段XXXXXX
3. iptables -D INPUT 2 删除第二条规则,可以用iptables -nL --line-numbers 查看规则序列号
4. iptables -F 清除规则,包含内置
iptables -X 清除自定义规则
iptables -Z 数据包匹配的数清0
5. iptables-save 保存规则,如果不保存,之前写的规则都是在缓存里的,系统或者服务重启就没有了
6. 防火墙的开启,状态,开机启动如何设置
/etc/init.d/iptables start | stop | status #开启防火墙 | 关闭 | 查看状态
chkconfig iptables off | on #开机启动还是关闭防火墙
7. 默认防火墙规则设置(filter表)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#一般在内网中,防火墙对内部是信任的,主要是控制外网进入内网的报文
和命令结合常用的选项
举例:
1. iptables -L 显示所有规则
2. iptables -n -L 显示所有规则,-n 不要反向解析即: 不讲ip地址解析为主机名
3. iptables -nvL -v显示详细信息,可以看到匹配的字节
4. iptables -nL --line-numbers 显示规则,把序列号也显示出来
5. 在系统里查看配置文件cat /etc/sysconfig/iptables
如果你的系统没有iptables,但是可以通过iptables -n -L查看到防火墙规则,可以通过以下方法恢复:
iptables -P OUTPUT ACCEPT
/etc/init.d/iptables save
creteria
1)基本匹配
2)隐含匹配
这种匹配操作是自动的或隐含的装入内核的。例如使用-p tcp时,不需要再装入任何东西就可以匹配只有IP包才有的特点。隐含匹配针对三种不同的协议,即TCP UDP ICMP。它们分别有一套适用于相应协议的判断标准
TCP匹配 只能匹配TCP包的细节,必须有-p tcp作为前提
--sport port 基于TCP包的源端口来匹配包
--dport port 基于TCP包的目的端口来匹配包
--tcp-flags tcp标志位 有两个参数列表。第一个是指定要检查的标识位;第二个是指定为1的标识位
UDP匹配
--sprot port
--dport port
ICMP匹配
--icmp-type
8 request 请求
0 reply 回复 响应
3)显示匹配
(1)多端口匹配:-m multiport --sports 源端口列表
-m multiport --sports 目的端口列表
例:iptables -A INPUT -p tcp -m multiport --dports 25,80,110,143 -j ACCEPT
#外网访问内网的25,80,110,143端口都放行
(2)IP范围匹配:-m iprange --src-range IP范围
例:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
#对源地址192.168.4.21至4.28的报文进行转发
(3)MAC地址匹配:-m mac --mac-source MAC地址
例:iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
#基于mac地址进行过滤
(4)状态匹配:-m state --state 连接状态
NEW:与任何连接无关的
ESTABLISHED:响应请求或已建立连接的
RELATED:与已有连接有相关性的,如FTP数据连接
例:只开放本机的Web服务,但对发给本机的TCP应答报文予以放行,其他入站报文均丢弃
iptables -P INPUT DROP
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
例:默认出去的报文都丢弃,但只对外面访问内部端口为22的报文给予回应
iptables -P OUTPUT DROP
iptables -I OUTPUT -p tcp --sport 22 -m state --state RELATED, ESTABLISHED -j ACCEPT
#外网访问内网,进来时目的端口是22,出去时源端口为22,对已有的连接相关性的报文进行放行。
5. 防火墙NAT
1)源NAT
步骤:
1) echo 1 > /proc/sys/net/ipv4/ip_forward ----开启防火墙转发功能
2) vi /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 0 -------------改为1,开机自己开启
sysctl -p 立即生效
防火墙规则
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.1.1
#源地址为10.0.0.0/24段的地址在访问公网时转换为192.168.1.1地址进行访问,这个是固定公网地址的方式
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
#源地址为10.0.0.0/24段的地址在访问公网时,公网地址不固定,是自动获取来的,这个是固定公网地址不固定的时候使用
NAT表的一些命令
iptables -t nat -n -L 一定要指明是nat表
iptables -t nat -A POSTROUTING 源NAT用链POSTROUTING
iptables -t nat -A PREROUTING 目的NAT用链PREROUTING
-j SNAT 源NAT -j 后面的动作为SNAT
-j DNAT 目的NAT -j 后面的动作为DNAT
2) 目的NAT
目的NAT的由来,如防火墙内的一台www服务器要让公网访问它的80端口,正常情况下,外网是没法直接访问至内网的,只能内网将此服务器的ip和端口映射出来,公网才能进行访问。公网访问www服务器的公网地址和端口,到达服务器内部时,公网地址会被替换为私网地址。
外网访问内网服务器80端口 做DNAT过程:
[root@CENTOS ~]# iptables -t nat -A PREROUTING -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80
#将外网访问192.168.1.1端口为80,转换为10.0.0.1端口为80
3) NAT中的OUTPUT
之前在filter表中说过OUTPUT链的作用,这边OUTPUT是干嘛的呢?在防火墙NAT中,防火墙自己访问192.168.1.1:80,其自己是不能把192.168.1.1转换为10.0.0.1的,这边的OUTPUT的作用,就是能够让防火墙访问自己也能做DNAT转换。
[root@CENTOS ~] iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80
用完这条命令后,防火墙访问自己的公网地址192.168.1.1的80端口时,其地址可以被转化为192.168.1.1
DZ先生个人官方微信
***关注DZ君,让监控变得更简单***