Linux防火墻iptables入門教程
一、關(guān)于iptables
Iptables是一個(gè)基于命令行的防火墻工具,它使用規(guī)則鏈來允許/阻止網(wǎng)絡(luò)流量。當(dāng)一條網(wǎng)絡(luò)連接試圖在你的系統(tǒng)中建立時(shí),iptables會(huì)查找其對(duì)應(yīng)的匹配規(guī)則。如果找不到,iptables將對(duì)其采取默認(rèn)操作。
幾乎所有的Linux發(fā)行版都預(yù)裝了iptables。在Ubuntu/Debian中更新/安裝iptables的命令為:
sudo apt-get install iptables
現(xiàn)有的一些圖形界面軟件也可以替代iptables,如Firestarter。但iptables用起來并不難。配置iptables的規(guī)則時(shí)要特別小心,特別是在你遠(yuǎn)程登陸服務(wù)器的時(shí)候。因?yàn)檫@時(shí)的一個(gè)錯(cuò)誤有可能讓你和服務(wù)器永久失去連接,而你必須要到服務(wù)器面前才能解決它。
二、Iptables規(guī)則鏈的類型
Iptables的規(guī)則鏈分為三種:輸入、轉(zhuǎn)發(fā)和輸出。
1.輸入——這條鏈用來過濾目的地址是本機(jī)的連接。例如,如果一個(gè)用戶試圖使用SSH登陸到你的PC/服務(wù)器,iptables會(huì)首先匹配其IP地址和端口到iptables的輸入鏈規(guī)則。
2.轉(zhuǎn)發(fā)——這條鏈用來過濾目的地址和源地址都不是本機(jī)的連接。例如,路由器收到的絕大數(shù)數(shù)據(jù)均需要轉(zhuǎn)發(fā)給其它主機(jī)。如果你的系統(tǒng)沒有開啟類似于路由器的功能,如NATing,你就不需要使用這條鏈。
有一個(gè)安全且可靠的方法可以檢測(cè)你的系統(tǒng)是否需要轉(zhuǎn)發(fā)鏈:
iptables -L -v

上圖是對(duì)一臺(tái)已經(jīng)運(yùn)行了幾個(gè)星期的服務(wù)器的截圖。這臺(tái)服務(wù)器沒有對(duì)輸入和輸出做任何限制。從中可以看到,輸入鏈和輸出鏈已經(jīng)分別處理了11GB和17GB的數(shù)據(jù),而轉(zhuǎn)發(fā)鏈則沒有處理任何數(shù)據(jù)。這是因?yàn)榇朔?wù)器沒有開啟類似于路由器的轉(zhuǎn)發(fā)功能。
3.輸出——這條鏈用來過濾源地址是本機(jī)的連接。例如,當(dāng)你嘗試ping howtogeek.com時(shí),iptables會(huì)檢查輸出鏈中與ping和howtogeek.com相關(guān)的規(guī)則,然后決定允許還是拒絕你的連接請(qǐng)求。
注意:當(dāng)ping一臺(tái)外部主機(jī)時(shí),看上去好像只是輸出鏈在起作用。但是請(qǐng)記住,外部主機(jī)返回的數(shù)據(jù)要經(jīng)過輸入鏈的過濾。當(dāng)配置iptables規(guī)則時(shí),請(qǐng)牢記許多協(xié)議都需要雙向通信,所以你需要同時(shí)配置輸入鏈和輸出鏈。人們?cè)谂渲肧SH的時(shí)候通常會(huì)忘記在輸入鏈和輸出鏈都配置它。
三、鏈的默認(rèn)行為
在配置特定的規(guī)則之前,也許你想配置這些鏈的默認(rèn)行為。換句話說,當(dāng)iptables無法匹配現(xiàn)存的規(guī)則時(shí),你想讓它作出何種行為。
你可以運(yùn)行如下的命令來顯示當(dāng)前iptables對(duì)無法匹配的連接的默認(rèn)動(dòng)作:
iptables -L
![]() 正如上面所顯示的,我們可以使用grep來使輸出的結(jié)果變得更加簡(jiǎn)潔。在上面的截圖中,所有的鏈默認(rèn)情況下均接受所有的連接。 復(fù)制代碼 代碼如下: iptables --policy INPUT ACCEPT iptables --policy OUTPUT ACCEPT iptables --policy FORWARD ACCEPT 你也可以在使用默認(rèn)配置的情況下,添加一些命令來過濾特定的IP地址或端口號(hào)。我們稍后在本文介紹這些命令。 復(fù)制代碼 代碼如下: iptables --policy INPUT DROP iptables --policy OUTPUT DROP iptables --policy FORWARD DROP 四、對(duì)特定連接的配置
|
五、允許或阻止特定的連接 在配置完基本的規(guī)則鏈之后,你就可以配置iptables來允許或者阻止特定的IP地址或者端口。 來自同一IP地址的連接 復(fù)制代碼 代碼如下: iptables -A INPUT -s 10.10.10.10 -j DROP 來自一組IP地址的連接 下面這個(gè)例子展示了如何阻止來自子網(wǎng)10.10.10.0/24內(nèi)的任意IP地址的連接。你可以使用子網(wǎng)掩碼或者標(biāo)準(zhǔn)的/符號(hào)來標(biāo)示一個(gè)子網(wǎng): 復(fù)制代碼 代碼如下: iptables -A INPUT -s 10.10.10.0/24 -j DROP 或 復(fù)制代碼 代碼如下: iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP 特定端口的連接 這個(gè)例子展示了如何阻止來自10.10.10.10的SSH連接。 復(fù)制代碼 代碼如下: iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP 你可以將“ssh”替換成其它任何協(xié)議或者端口號(hào)。上述命令中的-p tcp告訴iptables連接使用的是何種協(xié)議。 下面這個(gè)例子展示了如何阻止來自任意IP地址的SSH連接。 復(fù)制代碼 代碼如下: iptables -A INPUT -p tcp --dport ssh -j DROP 六、連接狀態(tài) 我們之前提到過,許多協(xié)議均需要雙向通信。例如,如果你打算允許SSH連接,你必須同時(shí)配置輸入和輸出鏈。但是,如果你只想允許來自外部的SSH請(qǐng)求,那該怎么做? 復(fù)制代碼 代碼如下: iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT 七、保存更改 上述方法對(duì)iptables規(guī)則作出的改變是臨時(shí)的。如果你想永久保存這些更改,你需要運(yùn)行額外的命令(不同Linux發(fā)行版下的保存命令也不相同): Ubuntu: 復(fù)制代碼 代碼如下: sudo /sbin/iptables-save Red Hat / CentOS: 復(fù)制代碼 代碼如下: /sbin/service iptables save 或者 復(fù)制代碼 代碼如下: /etc/init.d/iptables save |
列出iptables的當(dāng)前配置:
使用-v選項(xiàng)將顯示數(shù)據(jù)包和字節(jié)信息;使用-n選項(xiàng)將以數(shù)字形式列出信息,即不將IP地址解析為域名。
換句話講,主機(jī)名,協(xié)議和網(wǎng)絡(luò)都以數(shù)字的形式列出。
清除當(dāng)前所有的配置規(guī)則:
iptables -F
相關(guān)文章
阿里云ECS實(shí)例設(shè)置用戶root密碼和遠(yuǎn)程連接的方法
這篇文章主要介紹了阿里云ECS實(shí)例設(shè)置用戶root密碼和遠(yuǎn)程連接的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Ubuntu部署python3.5的開發(fā)和運(yùn)行環(huán)境
這篇文章主要介紹了Ubuntu部署python3.5的開發(fā)和運(yùn)行環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01Win8.1 + CentOS7 雙系統(tǒng) U盤安裝(超詳細(xì)教程)
這篇文章主要介紹了Win8.1 + CentOS7 雙系統(tǒng) U盤安裝(超詳細(xì)教程),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-01-01centos 5.1下的安全設(shè)置(適合所有的linux版本)
因?yàn)閞oot用戶對(duì)系統(tǒng)具有全權(quán)的操作權(quán)限,為了避免一些失誤的操作,建議在一般情況下,以一般用戶登錄系統(tǒng),必要的時(shí)候需要root操作權(quán)限時(shí),再通過“su -”命令來登錄為root用戶進(jìn)行操作。2010-03-03詳解Linux 虛擬機(jī)根分區(qū)磁盤擴(kuò)充空間記錄
這篇文章主要介紹了詳解Linux 虛擬機(jī)根分區(qū)磁盤擴(kuò)充空間記錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06對(duì)send(),recv()函數(shù)的全面理解
下面小編就為大家?guī)硪黄獙?duì)send(),recv()函數(shù)的全面理解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01