『网安产品开发实践』Linux Bash Shell-编写防火墙脚本

230 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

编写要求

要求1: 修改本机ip为合适IP地址 编写脚本iptest.sh,功能如下: 1、iptest.sh清空所有存在的规则; 2、只开放22号端口(ssh、tcp); 3、禁止发送icmp包; 4、禁止发送DNS查询包 5、INPUT默认规则为DROP; 6、OUTPUT默认规则为ACCEPT; 7、FORWARD默认规则为DROP ; iptest.sh能随系统启动。

要求2: 编写脚本iptest2.sh,功能如下: iptest2.sh不清空所有存在的规则的情况下;(指不使用iptables -t filter -F清空) 1、允许output链icmp通过; 2、允许dns查询并返回; 3、禁止已开启的22号服务。

源码

iptest1.sh

##!/bin/sh
echo -e "iptest.sh is running!\n"

sudo iptables -t filter -F
echo "[-]remove all rules"

sudo iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT
echo "[+]accept port 22"

sudo iptables -t filter -A OUTPUT -p icmp -j DROP
echo "[-]ban ICMP"

sudo iptables -t filter -A OUTPUT -p udp --sport 53 -j DROP
echo "[-]ban DNS port 53"

sudo iptables -t filter -P INPUT DROP
echo "[.]set INPUT DROP"

sudo iptables -t filter -P OUTPUT ACCEPT
echo "[.]set OUTPUT ACCEPT"

sudo iptables -t filter -P FORWARD DROP
echo "[.]set FORWARD DROP"

然后访问/etc/rc.local,把该文件的绝对路径写入、保存即可完成开机自动运行 在这里插入图片描述 如果提示只读,需要修改权限sudo chmod 777 /etc/rc.local后再打开就能保存了

iptest2.sh

由于匹配是顺序匹配,且当匹配到第一条符合的ACCEPT和DROP规则后,就不会再匹配相同的规则了,因此使用-I添加到规则的最前端,优先匹配,-A则是添加到尾部,这样尾部的DROP就不会被匹配

##!/bin/sh
echo -e "iptest.sh is running!\n"

sudo iptables -t filter -I OUTPUT -p icmp -j ACCEPT
sudo iptables -t filter -I INPUT -p icmp -j ACCEPT
echo "[+]accept ICMP"

sudo iptables -t filter -I INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -t filter -I INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -t filter -I OUTPUT -p udp --sport 53 -j ACCEPT
echo "[+]accept DNS port 53"

sudo iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
echo "[-]ban port 22"

说明一下这里的dns:因为INPUT全DROP了,因此要同时配置INPUT的dport和sport的53端口开启,才能使得远方dns53的包发到本地53端口,完成解析

测试

iptest1

在这里插入图片描述 sudo iptables -L查看规则表 在这里插入图片描述

iptest2

使用resolveip domain测试dns解析,ssh被ban 在这里插入图片描述 查看规则表 在这里插入图片描述

欢迎在评论区留言