这是我的/etc/sysconfig/iptables
:
它有两个端口,80 apache 和 22 ssh。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Run Code Online (Sandbox Code Playgroud)
对于端口 22 ( SSH ),我想确保除了特定的 IP 地址之外,没有人可以连接到此端口。
示例IP:
1.2.3.4
Run Code Online (Sandbox Code Playgroud)
如果我的 ip 发生变化并且我无法再通过 SSH 连接到我的服务器,请忽略任何疏忽/顾虑。
Nid*_*dal 54
如果我以正确的方式提出问题,您希望您的服务器只能从端口 22 上的特定 IP 地址访问,您可以为此更新 Iptables:
iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果您需要为内部网络打开 DNS,则您只向 YourIP 开放 ssh 端口:
iptables -A INPUT -p udp -s YourIP --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s YourIP --dport 53 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
为这些 IP 添加并打开它们后,您需要关闭其余 IP 的门
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 --dport 53 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 53 -j DROP
Run Code Online (Sandbox Code Playgroud)
(确保将规则设置在规则集中的正确位置。iptables -A INPUT
将规则添加到当前的末尾INPUT
。)
或者正如乔尔所说,您可以添加一条规则:
iptables -A INPUT -p tcp ! -s <permittedIP> -j DROP
Run Code Online (Sandbox Code Playgroud)
或者你可以在防火墙上设置默认策略
iptables -P INPUT DROP
Run Code Online (Sandbox Code Playgroud)
简而言之,如关于 SO 的这个问题所示:
iptables -A INPUT -p tcp --dport 22 -s YourIP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Run Code Online (Sandbox Code Playgroud)
虽然我建议使用 SSH 密钥,但我会给你一个解释。
您不必使用 IPtables 来实现您想要实现的目标,有多种方法。这是IPtables的方式:
iptables -I INPUT -s [YOUR_HOME_IP] -p tcp -m tcp --dport [SSH_PORT] -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
[YOUR_HOME_IP]
= 您的家庭 IP(非常简单)
[SSH_PORT]
= 运行 SSH 的端口(默认为 22)
iptables -I INPUT -p tcp -m tcp --dport [SSH_PORT] -j REJECT
Run Code Online (Sandbox Code Playgroud)
这确保除了您的 IP 之外没有任何人可以登录到 SSH。
还有另一种方法,就是在sshd_config
.
添加以下内容:
AllowUsers root@[YOUR_HOME_IP]
PermitRootLogin without-password
Run Code Online (Sandbox Code Playgroud)
这允许您root
从您的 IP以用户身份登录到 SSH,而无需输入密码。
请记住,与
iptables -X
iptables -F
Run Code Online (Sandbox Code Playgroud)
可能很聪明,因此您不会被 SSH 锁定在服务器之外(cronjob 将重置 IPtables,因此您将再次获得访问权限)。如果您仍然可以访问,您可以删除 cronjob 并再次设置您的 IPtables。
其他答案iptables -I
在他们的示例中使用,这通常不是您应该使用的。
iptables 会执行第一个匹配的规则,所以规则的顺序很重要。 -I
是“插入”命令,应该与索引参数一起使用以指定给定规则在列表中的位置。 -A
是“append”命令,它将规则添加到列表的末尾。
在某些发行版中(可能是所有发行版),-I
不使用索引参数会将规则添加到索引中,使其成为第一个检查的规则。在这种情况下,如果您运行的最后一个命令是iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP
iptables,则 iptables 将丢弃所有流量,无论您ACCEPT
在链中是否有任何规则。
这是设置仅允许来自单个 IP 的 SSH 的规则的示例:
无规则开始:
#> iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Run Code Online (Sandbox Code Playgroud)
添加新的“允许来自 1.2.3.4 的 SSH”规则:
#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
阻止来自所有其他 IP 的 SSH:
#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
现在您的 INPUT 链将如下所示:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Run Code Online (Sandbox Code Playgroud)
稍后,如果您需要将第二个 IP 列入白名单,您可以使用该-I
参数将其置于黑名单规则之前。
#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 4.3.2.1 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Run Code Online (Sandbox Code Playgroud)
请注意, using-I INPUT 2
添加了新规则作为规则编号 2,并将 DROP 规则提高到编号 3。
归档时间: |
|
查看次数: |
216196 次 |
最近记录: |