一、原因
遠程(ssh)連接不上linux服務器的大多數原因都是因為本地服務器的防火牆策略導致的,因此我們想ssh遠程能夠連接上服務器,有兩種方法:
- 修改防火牆策略
- 關閉防火牆
二、防火牆服務介紹
1.CentOS7常用的防火牆有:iptables 與 firewalld
2.但需要注意的是:iptables 與 firewalld 都不是真正的防火牆, 它們都只是用來定義防火牆策略的防火牆管理工具,是一種服務。
3.Centos 7默認使用的是firewalld,而實際上iptables與firewalld只是單純的配置規則的客戶端工具,而真正起到防火牆作用(過濾/轉發等功能)是內核netfilter模塊。如果需要改用iptables的話,需要安裝iptables服務:
yum install iptables-services systemctl start iptables # 開啟防火牆 systemctl enable iptables # 設置開機啟動防火牆 systemctl stop iptables # 關閉防火牆 systemctl disable iptables # 設置禁止開機啟動防火牆
4.firewalld與iptables的不同
- firewalld 使用區域和服務而不是鏈式規則。
- firewalld 可以動態修改單條規則,而不需要像iptables那樣,在修改了規則后必須得全部刷新才可以生效。
iptables 服務在 /etc/sysconfig/iptables 中儲存配置,而 FirewallD 將配置儲存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各種 XML 文件里,使用 iptables 的時候每一個單獨更改意味着清除所有舊有的規則和從 /etc/sysconfig/iptables 里讀取所有新的規則,使用 firewalld 卻不會再創建任何新的規則;僅僅運行規則中的不同。因此 FirewallD 可以在運行時改變設置而不丟失現行配置。
FirewallD的配置方法主要有三種:
- firewall-config
- firewall-cmd
- 直接編輯xml文件
其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對於linux來說大家應該更習慣使用命令行方式的操作,所以 firewall-config(適合用於桌面版)
5.圖示

三、具體操作實例
我的linux服務器的發行版本是CentOS7版本。
1、修改防火牆策略
修改防火牆策略,目的是為了開啟22端口,因為ssh遠程的端口就是22
這里進行修改是指直接用客戶機登錄進服務器進行操作,而不是直接xshell連接,因為22端口沒開之前,xshell是連接不上的
1.ifconfig # 查看ip網卡信息,記住eth0,eth1對應哪個ip地址 root@aliyunzbj /tmp o ifconfig eth0: flags=2256<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.53 netmask 255.255.255.0 broadcast 192.168.10.255 ... eth1: flags=2257<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.26.66 netmask 255.255.255.0 broadcast 192.168.26.255 ... lo: flags=82<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.255.255.0 ... 2.查看當前的iptables防火牆配置 root@aliyunzbj /tmp o iptables-save ... -A INPUT -i lo -j ACCEPT -A INPUT -i eth0 -j MANAGE-INPUT # MANAGE-INPUT代表eth0網卡的防火牆策略 -A INPUT -i eth1 -j USER-INPUT # USER-INPUT代表eth1網卡的防火牆策略 ... # 這里可以看到MANAGE-INPUT即eth0網卡開啟了22端口,但是下面的策略並沒有看到USER-INPUT(eth1)開啟22端口 -A MANAGE-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT ... 3.給網卡eth1添加22端口 # 可以直接復制上面的策略,把MANAGE-INPUT改成USER-INPUT即可(如果eth0也沒有開啟,那么只需要把USER-INPUT改成MANAGE-INPUT再配置一次這個命令即可) root@aliyunzbj /tmp o iptables -A USER-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 4.再次查看策略 root@aliyunzbj /tmp o iptables-save ... -A INPUT -i lo -j ACCEPT -A INPUT -i eth0 -j MANAGE-INPUT # MANAGE-INPUT代表eth0網卡的防火牆策略 -A INPUT -i eth1 -j USER-INPUT # USER-INPUT代表eth1網卡的防火牆策略 ... -A MANAGE-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A USER-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT ...
5.也可以把上面新增的策略直接添加到 /etc/sysconfig/iptables,重啟iptables服務
2、關閉防火牆
最直接的方法就是直接把防火牆策略關了
1.查看防火牆狀態 systemctl status iptables.service 2.如果防火牆開啟了,那么直接關閉 systemctl stop iptables.service
