我是 CentOS7 的新手,目前正在开发一个项目,该项目需要非常有限的用户通过 SSH 访问 Cent OS 7 服务器,因此使用 IPtables 命令仅向某些用户提供访问权限。
下面是我用来允许访问具有 MAC 地址的一个用户的命令:
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
它可以工作并按照以下输出添加到 iptables 中:
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh MAC XX:XX:XX:XX:XX:XX
当添加第二条规则以阻止所有其他人访问端口 22 时,我与 Cent OS 7 盒子断开连接:
iptables -A INPUT -p tcp --destination-port 22 -j DROP
任何我可能出错的想法
答案1
“出错”的是你在第二个命令中告诉 iptables:删除目标端口 22 上的所有连接,这显然包括你自己到盒子的连接。您是否从具有第一条规则中指定的 MAC 地址的客户端计算机进行连接?
我建议您使用 iptables 规则文件来解决此问题。并使用命令iptables-save
和iptables-restore
。基本上,您创建一个文本文件 ( iptables_rulesv4
),然后告诉 iptables 根据此规则恢复自身。这是一个具有两个规则的基本示例。
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT ACCEPT
-A INPUT -p tcp --destination-port 22 -m mac --mac-source XX:XX:XX:XX:XX:XX -m comment --comment "Allow ssh connections from specific MAC address" -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -m comment --comment "Maintain open connections" -j ACCEPT
COMMIT
1: *filter
- 这是要操作的iptables表,过滤器表
2-4:这些文件是默认状态:INPUT和FORWARD默认被丢弃(DROP),OUTPUT默认被允许(ACCEPT)。
5:规则 1 - 允许源自 MAC 地址的端口 ssh 连接XX:XX:XX:XX:XX:XX
。
6:规则 2 - 允许所有已建立或打开的连接。
7:将这些规则提交到 iptables。
注意:iptables 的工作原理是将数据包与它发现的第一个匹配的规则进行匹配,然后如果没有规则匹配,则使用相应的默认规则。
然后你可以运行命令
sudo iptables-restore iptables_rulesv4
将这些规则应用到计算机上。然后你可以查看你的规则集
sudo iptables -L -n -t filter
请注意:不要盲目地将上述规则集用于您的服务器。它仅作为示例。您必须确定您的安全需求是什么以及您的组织的安全需求是什么,并设计满足您的安全需求的规则集。