Linux設置iptables防火墻的詳細步驟
添加時間:2019-3-1 20:32:42
添加:
思海網絡
iptables是Linux內核中內置的防火墻,可以允許管理員通過設置table, chain以及相關的規則來進行數據包過濾和NAT。 一般來講,iptables防火墻已經內置于CentOS 6及其他Linux版本中,而且iptables服務默認都是啟動的。 iptables應用于IPv4, 如果要用IPv6,需要使用ip6tables.
iptables的命令格式:
iptables[-ttable]command[chain][rules][-jtarget]
[-ttable]:用來指明使用的表,有三種選項:filter,nat和mangle,如果未指定,則使用filter作為缺省表。事實上,對于單個服務器的防火墻配置,一般來講,我們只需要對filter表進行配件就OK了。filter表包括INPUT,OUTPUT,和FORWARD三個chain.
command表明iptables命名要做什么,比如
-A(–append):該命令會把一條規則附件到chain的末尾。
-D(–delete)用來刪除某個規則。
-F(–flush)如果指定了chain,刪除該chain中的所有規則,如果未指定chain,則刪除所有chain中的所有規則。
target:是由規則指定的操作。包括下面幾種:
ACCEPT:接收信息包(允許它前往目的地),并且將停止遍歷chain.
DROP:拒絕,
此外還有REJECT,RETURN,LOG,REDIRECT,MARK,MIRROR,MAQUERADE等。
具體的iptables的語法和概念就不再多說了,請參照iptablesmanpage官方文檔.
簡單來說,iptables防火墻是由一系列的規則(rule)組成,一個數據請求進來,會依次和這些規則進行比較,如果正好符合規則的定義,那這個數據請求要么會被接收ACCEPT,要么被拒絕DRIP。如果不符合任何規則的定義,最后缺省的規則會被應用。
開始操作之前:
注意:一定要把你在DigitalOcean/Linode/阿里云上的服務器做一下快照備份,否則一旦你iptables的配置出了問題,極有可能把你自己擋在門外,你自己都無法連接到服務器了!!出現這種情況可是會欲哭無淚呀,除了重新做系統好像沒有更好的辦法了。(DigitalOcean提供了一個webconsole的界面,有時候會給你反悔和擦除iptables設置的機會,但阿里云沒有)
決定哪些端口需要開放
首先,SSH的端口22自然是需要開放的,否則我們就無法登錄服務器了。
一般來講,CentOS的VPS經常作為用LAMP搭建的Web服務器,FTP服務器,Mail服務器等。
對于Web服務來說,需要開放80端口,如果是HTTPS/SSL協議的話,還需用開放443端口
對于Mail服務來說,由于涉及SMTP,POP3,IMAP協議,需要開放的端口如下:
SMTP:25SecureSMTP:465POP3:110SecurePOP3:995IMAP:143IMAPoverSSL:993
對于FTP服務來說,需要開放20,21兩個端口
第一步:屏蔽最常見的攻擊
缺省情況下,CentOS的iptables的設置是允許任何數據通過的。
我們首先要清空iptables中的所有的規則:
iptables-F
然后我們加上阻止簡單掃描和攻擊的規則
iptables-AINPUT-ptcp--tcp-flagsALLNONE-jDROP#NONE包(所有標識bit都沒有設置)主要是掃描類的數據包
iptables-AINPUT-ptcp!--syn-mstate--stateNEW-jDROP#防止sync-flood攻擊
iptables-AINPUT-ptcp--tcp-flagsALLALL-jDROP#ALL包(所有的標注bit都被設置了)也是網絡掃描的數據包
關于sync-flood,請參照wikipedia的解釋。
第二步:為相應的服務開放對應的端口
首先我們應該接受本機localhost的任何請求,否則,數據庫連接等將無法工作
iptables-AINPUT-ilo-jACCEPT
對于不同的服務需要開放不同的端口
iptables-AINPUT-ptcp--dport22-jACCEPT#SSH
iptables-AINPUT-ptcp--dport80-jACCEPT#HTTP
iptables-AINPUT-ptcp--dport443-jACCEPT#HTTPS
iptables-AINPUT-ptcp--dport25-jACCEPT#SMTP
iptables-AINPUT-ptcp--dport465-jACCEPT#SecureSMTP
iptables-AINPUT-ptcp--dport110-jACCEPT#POP3
iptables-AINPUT-ptcp--dport995-jACCEPT#SecurePOP3
iptables-AINPUT-ptcp--dport143-jACCEPT#IMAP
iptables-AINPUT-ptcp--dport993-jACCEPT#SecureIMAP
第三步:加上通用的規則
首先要允許所有從服務器端發起的連接,由此返回的響應數據應該是允許的!比如VPS發起的yumupdate,必須要允許外部的update數據進來
iptables-IINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT
最后,設置缺省的策略:屏蔽任何進入的數據請求,允許所有從Server發出的請求
iptables-POUTPUTACCEPT</p> <p>iptables-PINPUTDROP
至此,規則設置完畢
第四步:保存設置
首先通過下面的命令查看一下我們的設置是否正確!
iptable-L-n
確認沒有問題后,執行下面的命令
serviceiptablessave
執行上述命令后,相應的規則會寫入/etc/sysconfig/iptables這個文件,你可以檢查一下看看。
最后執行
serviceiptablesrestart.
重新啟動iptables防火墻,以使上述設置生效。
為了更方便的修改和維護自己的iptables的設置,我一般是把所有的iptables的設置先寫到一個單獨文件中,測試沒有問題后。然后再保存到iptable的配置文件中。
下面是我自己的iptables文件~//firewall.sh
代碼如下:
#!/bin/bash
#Asimpleiptablesfirewallconfiguration</p> <p>PATH=/sbin:/bin:/usr/sbin:/usr/bin;exportPATH</p> <p>#flush/eraseoriginalrules
iptables-F#清除所有已制定的rule
iptables-X#清除用戶自定義的chain/table
iptables-Z#將所有的chain的計數和流量統計歸零</p> <p>#Acceptlocalhostconnetting,nomatterwhatitis
iptables-AINPUT-ilo-jACCEPT</p> <p>#Acceptanyresponsepackagewhichisinitiatedfrominside
iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT</p> <p>#blockmostcommonnetworkattacks(reconpacketsandsyn-floodattack)
iptables-AINPUT-ptcp--tcp-flagsALLNONE-jDROP
iptables-AINPUT-ptcp!--syn-mstate--stateNEW-jDROP
iptables-AINPUT-ptcp--tcp-flagsALLALL-jDROP</p> <p>#openportsfordifferentservices
iptables-AINPUT-ptcp--dport22-jACCEPT#SSH
iptables-AINPUT-ptcp--dport80-jACCEPT#HTTP
#iptables-AINPUT-ptcp--dport443-jACCEPT#HTTPS
#iptables-AINPUT-ptcp--dport25-jACCEPT#SMTP
#iptables-AINPUT-ptcp--dport465-jACCEPT#SecureSMTP
#iptables-AINPUT-ptcp--dport110-jACCEPT#POP3
#iptables-AINPUT-ptcp--dport995-jACCEPT#SecurePOP</p> <p>#ICMPconfiguration
#TopreventICMPDDOS,wedonotallowICMPtype8(echo-request)orlimitthisrequestwith1/second
#someICMPrequestsareallowed.
icmp_type="0341112141618"
forticmpin$icmp_type
do
iptables-AINPUT-picmp--icmp-type$ticmp-jACCEPT
done
#iptables-AINPUT-picmp--icmp-type8-mlimit--limit1/second-jACCEPT</p> <p>#defaultpolicies
iptables-POUTPUTACCEPT
iptables-PINPUTDROP</p> <p>#saveto/etc/sysconfig/iptables
/etc/init.d/iptablessave
你可以根據你的需要進行相應的修改。
關鍵字:Linux、iptables、防火墻
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解