Ssh

儘管接受規則,iptables 在埠更改後阻止通過 ssh 連接

  • July 5, 2013

我有兩台機器連接到路由器,一台帶有 PuTTY 的 Windows,以及一台帶有 sshd 且仍啟用預設 SELinux 的 CentOS 6.4。他們都可以成功地相互ping通。

我安裝了 policycore-python 包以便我可以使用semanage,然後按照這些說明進行操作。

第 4 步看起來像是新的預設設置,因為它已經以這種方式設置。

第 5 步有效,我假設這些內容~/.ssh/config是為了在另一台機器上設置你的 ssh 客戶端,所以它不適用(我可以在 PuTTY 中做類似的事情。)

第 6 步我認為最短和最適用的事情是第三個選項,所以我執行:

iptables -A INPUT -p tcp --dport 2345 --syn -m limit --limit 1/m --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 2345 --syn -j DROP
service iptables save
service iptables restart

此時,我還可以在 CentOS 盒子上做ssh -p 2345 localhostssh -p 2345 192.168.1.4登錄到自己正常,但我不能再將 PuTTY 放入 CentOS 盒子。我將正確的 IP 和埠 2345 放在連接視窗中,但在嘗試連接時,我得到一個帶有純綠色游標的黑屏,幾秒鐘後,會出現一個 GUI 彈出視窗,說Network error: Connection timed out.

如果我停止 iptables 服務,我可以使用 PuTTY 以同樣的方式登錄。所以看來問題肯定出在iptables而不是sshd(也不是semanage?)。

我的怎麼了iptables

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:2345 flags:FIN,SYN,RST,ACK/SYN limit: avg 1/min burst 3
DROP       tcp  --  anywhere             anywhere            tcp dpt:2345 flags:FIN,SYN,RST,ACK/SYN

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

REJECT規則必須在新規則之後。做這個:

$ sudo service iptables stop
[sudo] password for kev:
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
$ sudo nano /etc/sysconfig/iptables
$ sudo service iptables start

當 nano 打開時,REJECT在兩條新規則下方剪斷線並取消它,然後寫出並退出。

此外,您只需要從 localhost 進行 ssh 一次,然後才能從外部執行此操作。

引用自:https://unix.stackexchange.com/questions/81761