我有以下的iptables条目麻烦。 我想停止服务器与外部世界进行通信,除了ssh,但是当我input第四个命令(iptables -P OUTPUT DROP)时,我失去了SSH连接,即使我把它打开了。 任何帮助将不胜感激?
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT iptables -A OUTPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT iptables -A FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT iptables -P OUTPUT DROP iptables -P FORWARD DROP
谢谢
而是尝试在第2行:
iptables -A OUTPUT -p tcp -m conntrack --ctstate ESTABLISHED --sport ssh -j ACCEPT
假设当你说“停止服务器与除ssh以外的外部世界进行通信”时,你的意思是“通过ssh阻止世界与服务器通信”,那么出站数据包来自ssh服务器,所以有--sport 22 ,不是dport。
如果你确实意味着你应该只能通过ssh 从服务器到全世界,那么第一行应该有--sport ,因为INPUT包是来自ssh服务器的。
如果你想让ssh在两个方向上工作,你需要更复杂的规则。 如果你想允许新的 ssh连接,而不仅仅是当你使用规则集时打开的连接,你需要更复杂的规则。
我假设iptables规则在你的服务器上,你的问题意味着你只想让SSH连接到服务器。 让我们分析一下你的规则:
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT
此规则意味着:只有处于“ESTABLISHED”状态的TCP连接才能连接到SSH端口。 这有效地阻止了所有连接到SSH的连接尝试,因为当有人(你)想连接到SSH端口时,状态仍然是“NEW”而不是“ESTABLISHED”
iptables -A OUTPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT
此规则意味着:只允许从服务器访问SSH端口,并且只允许“ESTABLISHED”TCP连接。 所以,这是一个types: – --dport应该是 – 运动
iptables -A FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --dport ssh -j ACCEPT
如果您的服务器不起路由器的作用, 则不需要FORWARD规则。
iptables -P OUTPUT DROP iptables -P FORWARD DROP
基本的和推荐的“强化”,没有明确允许的所有stream量。
所以,你必须改变你的规则到以下内容:
iptables -A INPUT -p tcp --dport ssh -j ACCEPT iptables -A OUTPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED --sport ssh -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT DROP
允许所有尝试连接到SSH端口
允许来自SSH端口的所有回复(TCP状态== ESTABLISHED)
删除所有其他连接尝试
删除所有其他来自服务器的stream量
重要笔记:
通常你会想让 ICMP进出你的服务器
通常, OUTPUT链的默认策略是ACCEPT而不是DROP
尝试这个:
只允许在某些临时端口上使用SSH
iptables -A INPUT -p tcp --sport 513:65535 --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 --dport 513:65535 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 513:65535 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --sport 22 --dport 513:65535 -j ACCEPT
确保没有任何东西进入或离开这个盒子
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP