校内课设七:Linux环境下iptables防火墙的配置
实验目的
1、理解Iptables的原理和功能
2、通过实际操作理解运用Iptables 的各种规则,策略等
实验环境及原理
实验环境:主机:windows10,靶机:Kali Linux
实验工具:secureCTR(winx64) secureCTR下载安装教程
一.实验原理:
防火墙为实验目标机,在其上运行iptables规则
登录控制台连接windows和linux靶机,以linux靶机作为防火墙,
在其上运行iptables规则,windows则以linux为网关,通过linux连网
二.需求分析:
1、iptables有关的重要名词解释
netfilter提供了一系列的表,每个表由若干条链组成,而每条链又是 由一条或数条规则组成。下面介绍一下在应用iptables会碰到的一些名 词。
(1)规则:设置过滤数据包的具体条件,如IP地址、端口、协议、网络接口等。
(2)动作:当netfilter检测数据包符合制定的规则后,则会对该数据包进行相应的处理,处理的方式如下:
动作 说明
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包并返回错误信息
LOG 将符合该规则的数据写入日志
QUEUE 传送给应用程序处理该数据包
(3)链:数据包在传递过程中,
不同情况下所要遵循的规则组合形成了链
链可以分为内置链和用户自定义链
我们常用的是内置链,它一共有5个链,如下所示:
链名 相关的动作
PREROUTING 数据包进入路由表之前
INPUT 通过路由表后目的地为本机
FORWARDING 通过路由表后,目的地不为本机
OUTPUT 由本机产生,向外转发
POSTROUTIONG 发送到网卡接口之前
(4)表:Netfileter根据处理数据的需要设计了三张表,表名分别是filter(该表为netfilter默认的表)、nat和mangle,这三张表的相关功能及分别对应的内置链如下所示:
表名 作用 内置链
filter netfilter默认的表,用于过滤设置 INPUT、FORWARDING、OUTPUT
nat 完成地址转换 ORWARDING、OUTPUT、POSTROUTIONG
mangle 用在数据包特殊变更操作 全部的内置链
2、netfilter的工作原理
我们以系统缺省的表为“filter”为例进行讲解。该表中包含了INPUT、 FORWARD和OUTPUT
3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件:
如果满足,系统
根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(policy)来处理该数据包。当有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有以下三种情况:
(1)如果数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
(2)如果数据包的目的地址不是本机,也就是说,这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
(3)如果数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉。
3、iptablesr的基本语法格式及分析
iptables的基本语法格式如下: iptables [-t table] command [match] -j
[target/jump ] –t参数来设置对哪一张表生效,默认是filter表。如果是要对nat操作,则需要注明-t nat。
Command告诉程序该做什么,如:插入、或删除一个规则。如-A是代表在所选择的链的最后添加一条规则;而-D则是从所选的链中删除规则。
Match是用来指定过滤数据包所参照的条件。如源IP地址、网络接口、端口、协议类型等。如-p tcp代表针对TCP协议;
-s10.0.0.1是指针对源地址 为10.0.0.1的数据包;
-i eth0是针对本地所使用的eth0网络接口。
Target/jump:通过对数据包与所有规则的匹配结果,内核将做出相应的处理动作。
-j ACCEPT表示当信息包与具有ACCEPT目标的规则完全匹配时会被接受(允许它前往目的地)。
实验内容
一:开启靶机的ssh远程连接服务
cd /etc/ssh/
ls
vim sshd_config
将#PasswordAustentication no 的注释去掉,并将no改为yes
将PermitRootlogin without-password 改为PermitRootlogin yes(kali中可能写好为#PermitRootlogin yes,去掉注释即可 )
开启ssh服务:
/etc/init.d/ssh start
或者service ssh start
查看ssh服务状态:
/etc/init.d/ssh status
或者service ssh status
关闭ssh服务:
/etc/init.d/ssh stop
或者service ssh stop
远程连接kali:(SecureCRT)
连接到Kali靶机(防火墙)
查看靶机开放端口:
netstat -tnl
二:通过iptables实现TCP包的过滤
规则讲解:
-A 参数就看成是添加一条 INPUT 的规则
-p 指定是什么协议 我们常用的tcp 协议,当然也有udp 例如53端口的DNS,到时我们要配置DNS用到53端口,大家就会发现使用udp协议的,而–dport
就是目标端口,当数据从外部进入服务器为目标端口,反之数据从服务器出去则为数据源端口使用 --sport
-j 就是指定是 ACCEPT 接收 或者 DROP 不接收
查看iptables设置的链规则
iptables -L -n
添加规则关闭某端口(如TCP的22端口)
然后,查看已有规则,并试图访问该端口。
关闭靶机22端口后,访问该端口
添加规则关闭某端口(如TCP的22端口)
iptables -A INPUT -P tcp --dport 22 -j DROP #禁止外部访问kali的22端口
iptables -A OUTPUT -p tcp --dport 22 -j DROP #禁止kali通过22端口链接外部
iptables -n -L 查看链规则
ssh远程连接该靶机
发现靶机连接超时,连接失败
删除刚才创建的规则
iptables -D INPUT 1
iptables -D OUTPUT 1
iptables -L -n
再次远程连接:
连接成功
三:通过iptables实现ICMP包的过滤
记录ICMP日志
iptables -A INPUT -p icmp -j LOG
再打开一个终端“Terminal”(此实验简称T2)
“cd /var”
“cd \log”
“tail –f syslog”
主机上ping 目标靶机IP地址并查看icmp日志
关闭靶机ICMP服务后,访问该端口
iptables -I INPUT -p ICMP -j REJECT :拒绝外部通过icmp报文访问目标靶机
ping 目标主机,发现不能ping通
tail –f syslog:查看日志,发现并无ping命令的icmp报文
删除上述规则允许ICMP包通过
iptables -D INPUT 1 删除INPUT链中的1号规则
iptables -L -n 查看防火墙配置
试图执行ping命令
发现可以ping 通
关闭ssh服务
service ssh stop:
实验总结:明确防火墙原理,掌握ssh服务的配置使用能力,熟悉secureCTR的使用