本文已参与「新人创作礼」活动,一起开启掘金创作之路。
编写要求
要求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
查看规则表
完
欢迎在评论区留言