1.什么是防火墙?
架设在私网与公网之间的一台或一组设备。内外网之间通信的桥梁,控制两者之间的数据包的进出许可。对经过自己的数据包进行控制,通过自己编写防火墙规则来达到保护私网的目的。控制的方式:放行ACCEPT或拒绝DROP/REJECT。
防火墙的分类:
按设备分:软件防火墙和硬件防火墙。软防火墙:在OS上安装具有防火墙功能的软件,Windows下是ISA-SERVER,Linux下是iptables。硬防火墙:一台单独的设备具有防火墙的功能,思科硬件防火墙,华为。
按技术分:
包过滤型防火墙/代理型防火墙/状态防火墙。
包过滤型防火墙,工作在网络层,对经过自己的数据包的进行匹配过滤,根据自己写的规则。
代理型防火墙,对通过代理主机的访问请求尽心限制,sqid软件。
状态防火墙,对数据包的状态进行跟踪和监测,数据包的状态有:新建立的数据包NEW发送的请求包;已建立的连接ESTABLELISHED有请求有回应的状态;与已建立的连接相关的数据包状态RELITED;错误的包,有请求无回应的包,别人扫描你时也会产生这种状态的包INVALID。ULA课程里会讲解什么情况下会产生这些状态的包。
OSI七层模型——对比——TCP/IP四层应用模型
7.应用层
6.表达层
5.会话层
架设在私网与公网之间的一台或一组设备。内外网之间通信的桥梁,控制两者之间的数据包的进出许可。对经过自己的数据包进行控制,通过自己编写防火墙规则来达到保护私网的目的。控制的方式:放行ACCEPT或拒绝DROP/REJECT。
防火墙的分类:
按设备分:软件防火墙和硬件防火墙。软防火墙:在OS上安装具有防火墙功能的软件,Windows下是ISA-SERVER,Linux下是iptables。硬防火墙:一台单独的设备具有防火墙的功能,思科硬件防火墙,华为。
按技术分:
包过滤型防火墙/代理型防火墙/状态防火墙。
包过滤型防火墙,工作在网络层,对经过自己的数据包的进行匹配过滤,根据自己写的规则。
代理型防火墙,对通过代理主机的访问请求尽心限制,sqid软件。
状态防火墙,对数据包的状态进行跟踪和监测,数据包的状态有:新建立的数据包NEW发送的请求包;已建立的连接ESTABLELISHED有请求有回应的状态;与已建立的连接相关的数据包状态RELITED;错误的包,有请求无回应的包,别人扫描你时也会产生这种状态的包INVALID。ULA课程里会讲解什么情况下会产生这些状态的包。
OSI七层模型——对比——TCP/IP四层应用模型
7.应用层
6.表达层
5.会话层
iptables的结构:
包含有4个表,每个表里都有链,每个链里都有规则。表和链的功能需要自己记忆。表相当于功能接口。链相当于这个功能接口/表的某个通道/路径。
必须知道有哪些表、哪些链,哪些规则是写在哪个链里。
iptables->表->链->规则
raw表,对数据包做跟踪,内核2.4以前没有提供这个表。对进入防火墙本机的数据包作跟踪。生产环境中使用并不多。raw表里有2种链:PREROUTING链和OUTPUT链。
mangle表,对数据包进行以下修改:TOS,记录服务类型,举例:scp命令和sshd服务占用的都是22号端口,如果关闭了22号端口,那这两个服务都不能运行了,这时就可以在TOS里修改,通过服务来过滤数据包。TTL,生存时间,这个包能够在网络中存活多久。MARK,对数据包打标记。mangle表里5种链都有。
nat表,对数据包里的源地址和目的地址作修改。
filter表,对数据包作过滤决定是否放行数据包。对包里的源ip/端口/mac和目的ip/端口/mac作过滤。
iptables链,就是数据包走的路径。链名区分大小写。
链的种类有5条:
INPUT链,匹配进入防火墙本机的数据包。
OUTPUT链,匹配从防火墙本机出去的数据包。
FORWARD链,匹配经过防火墙本机的数据包(决定是否转发源和目的ip地址都不是防火墙本机的数据包)。
POSTROUTING链,数据包就要离开防火墙本机时修改数据包中的源地址。
PREROUTING链,数据包到达防火墙本机时修改数据包中的目的地址。???怎么修改,修改成啥样了呢?
链规则:由管理员自定义,存放在链里,匹配经过防火墙的数据包决定是允许通过还是丢弃拒绝。
每条链都有默认规则,如果管理员不写规则时,启用每条链的默认规则。当开启iptables服务时,系统默认所有的链规则都是ACCEPT,即允许所有数据包通过本机,生产环境中最好设置成默认不允许所有数据包通过本机,即把所有的链规则都设置成DROP或REJECT。
ULE课程中重点学习nat表和filter表。
iptables防火墙处理数据包的顺序:
当有一个数据包到达防火墙时,表的匹配顺序是:raw-->mangle-->nat-->filter。
当有一个数据包到达防火墙时,表的匹配顺序是:raw-->mangle-->nat-->filter。
当一个数据包到一个链时,链的匹配顺序,要看数据包的走向决定。数据包走向的参照物是防火墙本机。
1.进入防火墙本机的数据包走的链的顺序是:PREROUTING-->INPUT
2.离开防火墙本机的数据包走的链的顺序是:OUTPUT-->POSTROUTING
3.经过防火墙本机的数据包:数据包中的源地址和目的地址都不是防火墙本机的,而只是经过防火墙本机的需要转发的数据包。数据包走的顺序是:PREROUTING-->FORWARD-->POSTROUTING。
链里规则间的匹配顺序:
规则存放在链里,每条链可以自定义设置多条规则,且每条链都有默认规则。默认规则只有两种:放行或拒绝。匹配规则是顺序的从上到下依次匹配,遇到匹配的就执行,后面的规则就忽略了。如果某个数据包与所有的规则都不匹配,就使用链的默认规则来处理这个数据包。在编写规则时,一定要把小范围精细的规则写在前面上面,把大范围的规则写在后面下面。使用-I插入的规则会放在所有已存在规则的最上面,可以指定插入的规则放在当前已有规则的哪条上面,例子:???。
3.自定义防火墙规则:使用iptables。格式:
iptables [-t 表名] 管理选项 <链名> 匹配条件 -j 处理动作
使用iptables防火墙管理工具时,如果命令里不跟-t 表名,那么系统默认你设置的规则是针对filter表。
管理选项:
匹配条件:
-s源ip地址,可以是网段或某个具体的ip地址。172.16.0.0/24 172.16.0.1
例子:
[root@sun ~]# iptables -t filter -A INPUT -s 172.16.0.0/24 -j DROP---给filter表的INPUT链设置规则:源地址是这个172.16.0.0/24网段的数据包丢弃。
[root@sun ~]# iptables -t filter -A INPUT -s 172.16.0.1 -j ACCEPT源ip是172.16.0.1的数据包放行。
-d目的ip地址,也可以是网段或某个具体的ip地址。
--sport源端口。
例子:
[root@sun ~]# iptables -t filter -A OUTPUT --sport 80 s 192.168.0.0/24 -p tcp -j DROP
--dport目的端口
-p使用的传输协议,tcp/udp/icmp。icmp是ping使用的协议。
-i匹配数据包从哪个网卡接口进入的。例子:-i eth0
-o匹配数据包从哪个网卡接口进入的。
处理动作:
ACCEPT,放行。*
DROP,丢弃。* 不返回信息,停顿到那里一直等待。
REJECT,拒绝。*返回信息,告知为何不能ping通。
REDIRECT,端口重定向。
SNAT,改变数据包的源地址。*
DNAT,改变数据包的目的地址。*
LOG,把与规则匹配的信息写到日志文件里,然后把数据包交给下一条规则处理。
MARK,给数据包打标记。
管理选项:
-A添加规则。新添加的规则会追加在已有规则的下方。
-I插入规则。用-I插入的规则会在所有已存在规则的上方,已有的规则编号顺延。注意:添加规则时注意插入规则的位置是在上方还是下方,因为插入规则的顺序会影响到防火墙规则的执行。
-D删除某条规则。
-L查看规则。
-F删除链里的所有规则。
-X删除自定义链名。在删除自定义链时,自定义链是不能被其他联调用的。
filter表是iptables的默认表,当不指定表名时操作的就是filter表。链名不可省略必须写。写规则时必须指定链名。
主机防火墙:控制数据包从本机出去和进入本机。控制数据包进出本机。{filter-->OUTPUT INPUT}
例子1:
1.不允许任何主机访问我。包过滤防火墙,使用filter表来实现。
iptables-save > /etc/sysconfig/iptables
[root@sun ~]# iptables -L -t filter
[root@sun ~]# iptables -t filter -P INPUT -j DROP ----P为某个链设置规则。-j指定具体的规则是什么,在这里可以省略。
[root@sun ~]# iptables -t filter -P INPUT DROP
[root@sun ~]# iptables -t filter -P OUTPUT DROP
[root@sun ~]# iptables-save > /etc/sysconfig/iptables
[root@sun ~]# iptables -L
[root@sun ~]# ping -c 4 192.168.18.188
例2:只允许ip地址是192.168.18.188的主机访问本机192.168.18.210的web服务。
[root@sun ~]# iptables -t filter -A INPUT -s 192.168.18.188 -p tcp --dport 80 -j ACCEPT
[root@sun ~]# iptables -t filter -L INPUT
[root@sun ~]# elinks --dump http://192.168.18.210
[root@sun ~]# ping 192.168.18.210
[root@sun ~]# iptables -t filter -A OUTPUT -d 192.168.18.188 -p tcp --sport 80 -j ACCEPT
[root@sun ~]# elinks --dump http://192.168.18.210
例子3:别人不能ping我,但我可以ping别人。
iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
只有产生了三次握手后传输的数据包才会有标记。所有的使用tcp协议传输的数据包都有标记。
新建立的连接NEW-SYN
应答建立连接的确认标记ACK
紧急标记PUSH
访问服务失败,数据包会有RST重置标记
--icmp-type echo-request,
--icmp-type echo-reply,
MAC地址匹配
ping时会把对方的主机的ip地址和对应的mac地址信息缓存到本地arp,15秒更新一次。
======
创建自定义链:
iptables -t filter -A pingdeny -p icmp -j DROP
iptables -t filter -A INPUT -s 192.168.18.0/24 -j pingdeny
满足某条链的规则的数据包信息写入日志中。
发布局域网内的服务器使用DNAT。
让局域网内的主机能够访问公网上网使用NAT。
iptables
nat表,作地址转换。ip,端口,传输协议。
OUTPUT链。
POSTROUTING链。
PREROUTING链。
ifconfig eth0:0 172.16.0.254
echo 1 > /proc/sys/net/ipv4/ip_forward---开启当前系统的内核路由转发功能。
elinks --dump http://192.168.18.26
iptables -t nat -L
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o eth0 -j SNAT --to-source 192.168.18.210---数据包中的源地址是172.16.0.0,局域网网段,从eth0接口出去,源地址ip转换SNAT,转换成源地址为192.168.18.210。
目的地址转换DNAT:
iptables -t nat -A PREROUTING -d 192.168.18.210 -p tcp --dport 80 -i eth0 -j DNAT --to-destination 172.16.0.26
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE---内网通过ADSL通过拨号访问公网ip地址不固定时,使用防火墙的这种nat设置。
编辑回复