实验十二
防火墙实验
任务一:实现一个简单的防火墙
在这个任务中,我们将实现一个简单的包过滤类型的防火墙,它检查每个传
入和传出的数据包,并执行管理员设置的防火墙策略。由于数据包处理是在内核
中完成的,因此过滤也必须在内核中完成。在过去,实现这样的防火墙必须通过
修改和重建内核来完成。
现代
Linux
操作系统提供了几种新机制来促进数据包
的操作,而无需重建内核映像。这两种机制是可加载内核模块
(LKM)
和
Netfilter
。
任务
1.1
实现一个简单的
Kernel
模块
LKM
能够往
Kernel
内核添加一个新模块。这个新模块使我们能够扩展内核
的功能,而无需重建内核。防火墙的包过滤部分可以实现为
LKM
。
在这个任务
中,我们将熟悉
LKM
。
将
Labsetup12
放入虚拟机共享文件夹中,并将其复制到桌面上,进入到如下
目录
/home/seed/Desktop/Labsetup12/Files/kernel_module
在
kernel_module
目录下,有两个文件。
hello.c
是一个加载内核模块的简单
例子。当模块被加载时,会打印
” Hello World!”
;当模块从内核中被移除时打印
”
Bye-bye World!.”
。不过这些消息不会在屏幕上打印出来,它们实际上被打印到
/var/log/syslog
文件中。您可以使用“
dmesg
”查看消息。
另一个文件
包含了编译
hello.c
的内容。只需输入“
make
”,
hello.c
程序就会
被编译成一个可加载的内核模块。
在编译没有报错后,可以看到当前目录多了几个文件。
生成的内核模块在
hello.ko
中,可以使用以下命令加载模块、列出所有模块
和删除模块。此外,可以使用“
modinfo hello.ko
”来显示有关
Linux
内核模块的
信息。
$ sudo insmod hello.ko
【加载一个模块】
$ lsmod | grep hello
【查看已加载的所有模块】
$ sudo rmmod hello
【移除一个模块】
$ dmesg
【查看打印内容】
任务
1.2
使用
Netfilter
来实现一个简单的防火墙
来到这个目录
/home/seed/Desktop/Labsetup12/Files/netfilter_hello
以同样的方法编译
helloFilter.c
加载模块
dmesg -C
来清空内容
尝试
ping 1.1.1.1
我们分析一下这个
C
语言程序
当我们向
kernel
加入自定义的