1. 程式人生 > >簡單粗暴的iptables命令說明和windows下telnet驗證

簡單粗暴的iptables命令說明和windows下telnet驗證

    先說一個場景,我因為在開發環境中需要連線linux伺服器的memcache服務,但伺服器肯定是開了iptables的,所以直接連肯定是連不上。但我本身有伺服器的root賬號密碼,所以能登入伺服器並且有許可權。現在我面臨一個問題,我直接使用命令把iptables全部關掉我覺得很危險,因為伺服器上畢竟還是有專案在跑。而我現在的開發環境是用的普通寬頻,ip是不固定的,所以我的問題來了,修改伺服器的iptables配置,讓我本機能連上,但不需要永久連上,不用了還可以刪掉,而且還需要能簡單的測試下配置是否生效,本機確定能連上。說完場景,我們開始:

1、知道本機的外網IP

    我一般常用的辦法是直接登入

www.ip138.com網站,首頁就能顯示IP

    也有對李彥巨集有愛的,直接在百度裡面輸入“我的IP”,也一樣能查到

2、到linux伺服器上修改防火牆(iptables)

在伺服器上直接執行命令

iptables -nvL

就能看到iptables目前的情況,大概樣子如下:

原理我就不講了,假設伺服器上memcache服務的埠是預設的11211,我們本機的外網IP地址是123.119.110.11,那麼讓iptables允許我們訪問的命令如下:

iptables -A INPUT -s 123.119.110.11 -ptcp --dport 11211 -j ACCEPT

簡單說下引數的意義:

-A 表示我這個規則是跟在上圖這一堆的防火牆規則後面的,排隊尾,如果覺得我這條規則要插隊,排第一,用 -I,但是很多時候你的規則排隊尾很容易被前面的規則擋掉,如果是臨時性的,我都是用-I 直接插到第一位。

INPUT 表示是我要訪問伺服器,我是要進去(input)伺服器的

-s 這個猜都能猜到,表示後面的ip是要訪問伺服器的ip,就是現在場景下我本機的ip

-p 表示我打算用什麼協議訪問伺服器,最常用的用tcp就行了

-d 又是一個好猜到的,我要訪問伺服器的那個埠,我需要訪問的是11211,如果是訪問頁面,用80的多

-j 表示這條規則是打算允許訪問還是拒絕訪問,允許用ACCEPT,拒絕用REJECT,還一個選項是DROP,這個引數就像被女神當備胎,它不拒絕你,但是也不接納你,它晾著你,等你自個覺得沒回應而自己退出。

-----------------------------------------我是已經勾搭完了的分割線----------------------------------------

看完上面,我們就能訪問伺服器的指定埠了,但是如果我配錯了咋辦,我用完了需要刪除這個規則咋辦,下面是事後煙的說明時間:

先要查下我們的這條規則是什麼編號,用這個命令

iptables --line -vnL

看到的介面如下:

前面的num就是--line 引數弄出來的,我們需要看到我們自己的規則是哪個num,比如我們的命令num是1,執行這個命令:

iptables -D INPUT 1

這個引數就簡單多了,-D 就是刪除這條規則,1就是規則的num,完事。

3、windows下的驗證

弄完後我們還需要驗證本地機器是否真的可以訪問了,這時候我用的是telnet,本來呢它為使用者提供了在本地計算機上完成遠端主機工作的能力的,但就像百度的主要工作是為了驗證網路通不通,telnet很多時候也是為了驗證一個遠端服務是不是通,下面我們用下telnet。

但預設我們是用不了,我們用win+r撥出執行框,輸入cmd開啟命令框,輸入telnet命令是沒啥用的,提示這個命令不存在。

我們需要把telnet命令啟動起來才行,跟著我做(提醒一下,我用的是win10)。開啟設定->應用

開啟相關設定的程式和功能

開啟啟動或關閉windows功能

勾選裡面的telnet client即可

再回到命令列,輸入telnet,可以用啦。

但我們不是為了登入telnet搞事情,我們是為了驗證遠端伺服器能不能訪問,我知道你手腳快,已經進去了telnet,按q退出telnet。我們要執行的是下面這行命令

telnet 111.222.11.11 11211

這個111.222.11.11就是遠端伺服器ip,11211就是埠號,執行後如果不能訪問,就會顯示失敗:

    如果成功了,會這個樣子

到此為止,整個的過程就結束了,就能開心的連上伺服器了,如果是臨時性的,記得最後刪