文章目录
- 说明
- iptables拒绝所有端口放开特定端口方法流程
- 拒绝所有端口
- 允许特定端口
- 临时规则写入配置文件永久生效
- iptables允许ping和拒绝ping
- 禁止允许ping说明
- 内核参数设置
- 禁止
- 允许
- 防火墙设置
- 禁止
- 允许
- 禁止ping
- 允许ping
- 外部ping通虚拟机内部
- 虚拟机内部使用ping
- 规则详细
- hosts阻止所有ip指定放开ip方法流程
- 允许需要访问ip
- 拒绝所有
说明
- 收到下面一封邮件,简单来说就是需要一个虚拟机,外网能ping同,但端口全封,给他们做渗透用。
- 问了需求 不需要登录,封死所有端口。
所以 就用下面2个方式双重封死。
iptables拒绝所有端口放开特定端口方法流程
拒绝所有端口
-
命令:
-
iptables -P INPUT DROP
【我这就执行了这个进的】 -
iptables -P FORWARD DROP
-
iptables -P OUTPUT DROP
-
注:上面执行以后,看不到具体规则且
iptables -F
是无法清除上面规则的,同时ping也不能使用。 -
测试
允许特定端口
- 我这不需要放开,下面是说明,按需放开端口【特别是ssh,不放开外部无法登录,我这是控制台登录的,所以啥都没放】
#允许已建立的连接通过【不执行也可以,但有些特定版本不执行这个可能下面规则不会生效】
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到底是啥逻辑?
- 但我最后发现,换个方式执行INPUT以后,虚拟机内部就能使用ping了。
规则详细
至此未知,现在的规则详细如下:
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.deny配置文件
vi /etc/hosts.deny
- 拒绝所有所有IP远程登录本机服务器
末尾添加下面内容即可
sshd:ALL