iptables簡單配置樣本
iptables防火牆簡介iptables/netfilter是Linux下內建的一款免費且優秀的基於包過濾的防火牆工具,它的功能十分強大,使用非常靈活,可以對流入、流出、流經伺服器的資料包進行精細的控制。iptables是Linux2.4及2.6核心中整合的模組。防火牆果汁的執行順序預設是從前到後依次執行,遇到匹配的規則就不在繼續向下檢查,若果遇到不匹配的規則會繼續向下執行,匹配上了拒絕規則也是匹配,因此不再繼續。在iptables中有三個最常用的表,分別是filter,nat和mangle,每一個表中都包含了各自不同的鏈。filter表:filter是iptables預設使用的表,負責對流入、流出原生資料包進行過濾,該表中定義了3個鏈:
INPOUT 負責過濾所有目標地址是本機地址的資料包,就是過濾進入主機的資料包。
FORWARD負責轉寄流經本機但不進入原生資料包,起到轉寄的作用。
OUTPUT負責處理所有源地址是本機地址的資料包,就是處理從主機發出去的資料包。
NAT表:NAT是Network Address Translation的縮寫,是網路位址轉譯的意思,用來負責來源與目的ip地址和port的轉換。一般用於區域網路多人共用上網或將內網ip映射成外網ip+port轉換的功能。該表主要包含3個鏈:OUTPUT 和主機發出去的資料包有關,在資料包路由之前改變主機產生的資料包的目的地址。PREROUTING 在資料包剛到達防火牆時,進行路由判斷之前執行的規則。改變包的目的地址(DNAT功能)、連接埠等POSTROUTING 在資料包離開防火牆時,進行路由判斷之後執行的規則。改變包的源地址(SNAT功能)、連接埠等Mangle表:Mangle表主要負責修改資料包中的特殊路由標記,如TTL、TOS、MARK等。這個表中包含了5個鏈:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING,這張表與特殊的標記相關,一般情況我們很少使用。
iptables: 0.0.0.0 所有ip
#查看協助iptables -hman iptables
列出iptables規則iptables -L -n列出iptables規則並顯示規則編號iptables -L -n --line-numbers
列出iptables nat表規則(預設是filter表)iptables -L -n -t nat
清除預設規則(注意預設是filter表,如果對nat表操作要加-t nat)#清楚所有規則iptables -F#刪除使用者自訂的鏈iptables -X#將鏈的計數器清零iptables -Z
#重啟iptables發現規則依然存在,因為沒有儲存service iptables restart
#儲存配置service iptables save
#禁止ssh登陸(若果伺服器在機房,一定要小心)iptables -A INPUT -p tcp --dport 22 -j DROP#清除規則iptables -D INPUT -p tcp --dport 22 -j DROPiptables -D INPUT [line-number] // 根據
-A, --append chain 追加到規則的最後一條-D, --delete chain [rulenum] Delete rule rulenum (1 = first) from chain-I, --insert chain [rulenum] Insert in chain as rulenum (default 1=first) 添加到規則的第一條-p, --proto proto protocol: by number or name, eg. 'tcp',常用協議有tcp、udp、icmp、all-j, --jump target 常見的行為有ACCEPT、DROP和REJECT三種,但一般不用REJECT,會帶來安全隱患
注意:INPUT和DROP這樣的關鍵字需要大寫
#禁止192.168.10.0網段從eth0網卡接入iptables -A INPUT -p tcp -i eth0 -s 192.168.10.0/24 -j DROP
#禁止ip地址非192.168.10.10的所有類型資料接入iptables -A INPUT ! -s 192.168.10.10 -j DROP
#禁止ip地址非192.168.10.10的ping請求iptables -I INPUT -p icmp --icmp-type 8 ! -s 192.168.98.10 -j DROP
#擴充匹配:1.隱式擴充 2.顯示擴充#隱式擴充-p tcp--sport PORT 源連接埠--dport PORT 目標連接埠
#顯示擴充:使用額外的匹配規則-m EXTENSTION --SUB-OPT-p tcp --dport 22 與 -p tcp -m tcp --dport 22功能相同
state:狀態擴充,介面ip_contrack追蹤工作階段狀態NEW:新的串連請求ESTABLISHED:已建立的串連請求INVALID:非法串連RELATED:相關聯的串連
#匹配連接埠範圍iptables -I INPUT -p tcp --dport 22:80 -j DROP
#匹配多個連接埠iptables -I INPUT -p tcp -m multiport --dport 22,80 -j DROP
#不允許源連接埠為80的資料流出iptables -I OUTPUT -p tcp --sport 80 -j DROP
#伺服器一般預設規則問拒絕,如果想允某種流量通過需要額外添加 _____Incoming / \ Outgoing -->[Routing ]--->|FORWARD|-------> [Decision] \_____/ ^ | | v ____ ___ / \ / \ |OUTPUT| |INPUT| \____/ \___/ ^ | | ----> Local Process ----
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-6.html
配置防火牆:兩種模式:電劇院模式和逛公園模式
配置一個生產環境的防火牆#1.清空所有規則iptables -Fiptables -Ziptables -X
#2.配置允許ssh協議的22連接埠進入iptables -A INPUT -p tcp --dport 22 -s 192.168.10.0/24 -j ACCEPT
#3.配置允許lo介面資料的進出iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT
#4.設定預設的進出規則,DROP掉INPUT鏈和FORWARD鏈,保留OUTPUT鏈iptables --policy OUTPUT ACCEPTiptables -P INPUT DROPiptables -P FORWARD DROP
#5.開啟信任的IP段iptables -A INPUT -p all -s 192.168.10.0/24 -j ACCEPT
#6.開放http的80連接埠iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#7.允許icmp類型協議通過iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#8.允許關聯狀態包進出iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT#對於FTP而言,就需要 RELATED 才能實現 21 連接埠白名單,如不加此項需要額外開放連接埠,而那些額外開放連接埠是不受串連狀態保護的。
#9.儲存iptables配置到檔案service iptables save
iptables --policy INPUT DROP // 將INPUT表策略修改為DROP
iptables的NAT功能:將Linux伺服器配置為上網網關和連接埠映射功能
上網網關:就是將Linux伺服器配置成路由器或者網關,實現其他伺服器能通過這台伺服器進行上網的功能,如果需要實在該功能,就要藉助iptables的nat表
NAT的兩種方式:DNAT和SNAT
SNAT的全稱是Source Network Address Translation,意思是源網路位址轉譯,這是一種改變資料包源ip地址等功能的技術,經常用來實現使多台電腦共用一個Internet地址訪問互連網的功能,如x小區寬頻、企業內部機器上網。(nat表的POSTROUTING)
DNAT的全稱是Destination Network Address Translation,意思是目的網路位址轉譯,DNAT是一種改變資料包目的ip地址等功能的技術,它可以使多台伺服器共用一個ip地址連入Internet,並且繼續對外提供服務。通過對同一個外部ip地址分配不同的連接埠,可以映射到不同的內部伺服器的ip和連接埠,從而實現提供各種服務的目的。除了進行連接埠映射外,還可以配合SNAT的功能,來實作類別似防火牆裝置才能實現的DMZ功能,即ip的一對一映射。(nat表的PREROUTING)
SNAT實驗步驟:1.準備兩台伺服器,其中一台伺服器作為閘道伺服器,這台伺服器要有兩塊網卡。另外一台作為內網伺服器,有一塊網卡。2.閘道伺服器核心檔案/etc/sysctl.conf需要開啟轉寄功能。編輯/etc/sysctl.conf修改內容為net.ipv4.ip_forward=1,然後執行sysctl -p使修改立即生效。3.設定iptables的filter表的FORWARD鏈允許轉寄。iptables iptables -P FORWARD ACCEPT4.將內網伺服器的網關設定為閘道伺服器的內網ip地址5.在閘道伺服器的iptables的nat表中加一條規則:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 172.16.50.1286.驗證:ping 8.8.8.8可以ping通,但是ping百度不同,需要配置DNS
DNAT實驗步驟在閘道伺服器的iptables的nat表中加一條規則:iptables -t nat -A PREROUTING -d 172.16.50.128 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.10.129:80
一對一映射:ifconfig eth0:1 172.16.50.100/24// 外網對該IP所有連接埠進行轉寄iptables -t nat -A PREROUTING -d 172.16.50.100 -j DNAT --to-destination 192.168.10.129// 內網訪問外網前,先通過VM1 SNAT. 所有連接埠轉寄 這個和上面標綠字型部分差不多iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.129 -j SNAT --to-source 172.16.50.100
一個網卡多個IP的方式:1.網卡別名 ifconfig eth0:1 192.168.50.200
2.?
刪除nat表POSTROUTING 第一條ruleiptables -t nat -D POSTROUING 1
DNAT -> PREROUTING SNAT -> POSTROUTING
迴路走的MAC記錄