iptables拒绝所有端口放开特定端口方法流程,iptables允许ping和拒绝ping、hosts阻止所有ip指定放开ip方法流程、脚本检测日志异常并自动执行封堵

说明

  • 收到下面一封邮件,简单来说就是需要一个虚拟机,外网能ping同,但端口全封,给他们做渗透用。
    在这里插入图片描述
  • 问了需求 不需要登录,封死所有端口。
    所以 就用下面2个方式双重封死。

iptables拒绝所有端口放开特定端口方法流程

拒绝所有端口

  • 命令:

  • iptables -P INPUT DROP【我这就执行了这个进的】

  • iptables -P FORWARD DROP

  • iptables -P OUTPUT DROP

  • 注:上面执行以后,看不到具体规则且iptables -F是无法清除上面规则的,同时ping也不能使用。

  • 测试
    在这里插入图片描述

允许所有端口

  • 命令:iptables -P INPUT ACCEPT
    注:只有这个端口能放开上面拒绝的所有端口,iptables -F是不能删除上面规则的。

  • 验证
    之前默认是已经封堵了,无法访问百度,允许以后,百度可以访问
    在这里插入图片描述

允许特定端口

  • 我这需要放开2个ip段的22端口【这是放开端口,下面hosts是ip策略,分开做的】
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    在这里插入图片描述

  • 更多说明

#允许已建立的连接通过【不执行也可以,但有些特定版本不执行这个可能下面规则不会生效】
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# 允许 SSH 连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP 连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许 HTTPS 连接
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

临时规则写入配置文件永久生效

  • 上面做的是临时生效的,重启以后就没了,想要永久生效,执行下面命令【下面配置文件中的规则是基于iptables服务的,如果服务没启动,重启后下面规则依然不会生效】
  • 命令iptables-save > /etc/sysconfig/iptables

在这里插入图片描述

iptables允许ping和拒绝ping

  • 首先,我执行iptables -P INPUT DROP命令以后,外部就ping不通了,我执行iptables -F以后依然ping不通,折腾许久外部都无法ping通,我以为我网络出问题了,但每次重启就好,后来才发现这个命令的规则-F清除不掉,卧槽。

禁止允许ping说明

  • 下面内容来源网络整理,自行测试。

内核参数设置

禁止
  • 临时禁止ping设置
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
  • 永久禁止ping设置
echo net.ipv4.icmp_echo_ignore_all=1 >> /etc/sysctl.conf
  • 使/etc/sysctl.conf 配置文件生效
    注意:如果 /etc/sysctl.conf 配置文件里已经有net.ipv4.icmp_echo_ignore_all字段了,那么直接用 vim 进去直接修改0或1即可。
sysctl -p 
允许
  • 临时允许ping设置
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
  • 永久允许ping设置
echo net.ipv4.icmp_echo_ignore_all=0 >> /etc/sysctl.conf
  • 使/etc/sysctl.conf 配置文件生效
    注意:如果 /etc/sysctl.conf 配置文件里已经有net.ipv4.icmp_echo_ignore_all字段了,那么直接用 vim 进去直接修改0或1即可
sysctl -p 

防火墙设置

  • 注:使用以下方法的前提是内核配置是默认值,也就是内核没有禁ping
禁止
  • 禁止PING设置
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
  • 上面代码参数说明
    • --icmp-type 8 echo request 表示回显请求(ping请求)
    • 0/0 表示所有 IP
允许
  • 允许PING设置 【方式1】
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  • 允许PING设置 【方式2】
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
  • 允许PING设置 【方式1】
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
  • 允许PING设置 【方式2】
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT

禁止ping

  • 我这用的是这种方式 iptables -P INPUT DROP【慎用,所以端口都无法进出】

允许ping

外部ping通虚拟机内部

  • 我执行了下面命令以后
    iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT【这条命令执行完外部就通虚拟机了】
    iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT【好像这个没生效?】
    外部就可以ping通该虚拟机ip
    在这里插入图片描述

虚拟机内部使用ping

  • 但我发现,虚拟机内部不能使用ping了。我以为是面中的output没生效。
    • 但我最后发现,换个方式执行INPUT以后,虚拟机内部就能使用ping了。
      iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    • 所以这里的output到底是啥逻辑?

在这里插入图片描述

规则详细

至此未知,现在的规则详细如下:
在这里插入图片描述

hosts阻止所有ip指定放开ip方法流程

其实上面的iptables已经限制的死死的了,但怕iptables出意外,所以用hosts加固一下

允许需要访问ip

  • 这里以sshd服务为例,配置完成后,只允许配置允许的IP才能ssh连接本机服务器,其他IP拒绝
    注:一定要先允许在拒绝所有
  • 编辑hosts.allow配置文件

vi /etc/hosts.allow     
  • 允许1个或多个ip
    末尾添加允许的IP远程登录本机服务器,如果有多个IP,以逗号隔开连续写即可
sshd:111.2.3.4,111.6.7.8.9   
  • 以段添加
    添加允许的111.2.3网段的IP远程登录本机服务器
sshd:111.2.3.

内网地址出公网hosts放开地址说明

  • 假如你现在用的内网ip地址访问的公网,你在虚拟机上放开你现在用的ip地址是没用的
    如,我现在用的内网ip绑定的路由器,我把内网地址和我路由器地址都放开了,依然无法访问,放开ALL就能访问
    在这里插入图片描述

  • 如何看内网地址转换后访问过来的地址?
    先放开all,正常登录上虚拟机,然后虚拟机里面执行lastlog【这个命令会记录登录信息】
    如下,可以看到我这公网出口地址是70.92结尾的ip
    在这里插入图片描述

  • 现在回到虚拟机内部,放开这个70.92的ip地址,注释ALL,即可正常访问了
    在这里插入图片描述

拒绝所有

  • 编辑hosts.deny配置文件
vi /etc/hosts.deny
  • 拒绝所有所有IP远程登录本机服务器
    末尾添加下面内容即可
sshd:ALL         
  • 我有控制台,为了验证生效,我先做的拒绝,再放开
    在这里插入图片描述

脚本检测日志异常并自动执行封堵

  • 可以动态封锁ip的,脚本如下,如果怕死循环影响虚拟机性能,可以把死循环去掉,用定时任务执行,比如每分钟、每小时执行一次这样。
#!/bin/bash

while true; do
    # 读取系统日志文件进行监测
    grep -E "sgdifi|wa/xzwas|wa/higehfd|wa" /var/log/system.log | while read -r log; do
        # 解析日志行,获取用户信息和相关IP地址
        username=$(echo "$log" | grep -oE "sgdifi|wa/xzwas|wa/higehfd|wa")
        ip_address=$(echo "$log" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")

        # 锁定用户账户
        lock_user_account "$username"
        # 实施IP封堵
        block_ip_address "$ip_address"
    done

    sleep 300  # 暂停5分钟后再次监测
done

lock_user_account() {
    # 锁定用户账户的实际操作,这里作为示例,将用户添加到黑名单
    echo "$1" >> /etc/blacklist.txt
}

block_ip_address() {
    # 封堵IP地址的实际操作,这里作为示例,使用iptables命令封堵IP
    iptables -A INPUT -s "$1" -j DROP
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

҉人间无事人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值