iptables

如今防火牆主要分爲三種:包過濾,應用代理,狀態檢查前端


Iptables:支持包過濾和狀態檢查web



  • filter: 策略過濾 iptables 默認的表格  包含三個鏈 INPUT, OUTPUT, FORWARD 應該在此三道門中作過濾緩存

  • nat: 地址轉換啦  PREROUTING, POSTROUTING, OUTPUT服務器

  • mangle: 做用是改變服務類型而使用的表  PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING網絡

  • 其中nat  filter 是配置和使用iptables中最經常使用的兩個,務必要熟悉。負載均衡

iptables作的反向代理與squid區別在於,squid能更好的作好訪問的控制,而且能夠緩存提升訪問的速度,還能夠作負載均衡。
ssh

iptables 反向代理:tcp

現有三臺pcABCide

A192.168.2.166(網關設置爲192.168.2.105web服務器網站

Beth0192.168.1.104(連接外網),eth1:192.168.2.105(內網)

C192.168.1.164

目的:想讓客戶端C機經過代理機B訪問到A機上web內容

在代理機上作

打開代理機的路由轉發功能

nat

iptables  -t  nat -A PREROUTING  -s 192.168.1.0/24  -d 192.168.1.104 -p tcp - -dport 80 -j SNAT  --to-dest 192.168.2.166

這裏作DNAT目的是簡單,,


1.通用匹配:源地址目標地址的匹配

-s:指定做爲源地址匹配,這裏不能指定主機名稱,必須是IP

IP | IP/MASK | 0.0.0.0/0.0.0.0

並且地址能夠取反,加一個「!」表示除了哪一個IP以外

-d:表示匹配目標地址

-p:用於匹配協議的(這裏的協議一般有3種,TCP/UDP/ICMP

-i eth0:從這塊網卡流入的數據

流入通常用在INPUTPREROUTING

-o eth0:從這塊網卡流出的數據

流出通常在OUTPUTPOSTROUTING


-p icmpicmp數據報文的擴展

--icmp-type

echo-request(請求回顯),通常用8來表示

因此--icmp-type 8 匹配請求回顯數據包

echo-reply (響應的數據包)通常用0來表示


iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT (容許本身ping時的請求回顯包出去)

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT(容許本身的響應包進來)

詳解-j ACTION


經常使用的ACTION

DROP:悄悄丟棄

通常咱們多用DROP來隱藏咱們的身份,以及隱藏咱們的鏈表

REJECT:明示拒絕

ACCEPT:接受

custom_chain:轉向一個自定義的鏈

DNAT

SNAT

MASQUERADE:源地址假裝

REDIRECT:重定向:主要用於實現端口重定向

MARK:打防火牆標記的

RETURN:返回

在自定義鏈執行完畢後使用返回,來返回原規則鏈



IPtables中能夠靈活的作各類網絡地址轉換(NAT
  網絡地址轉換主要有兩種:SNATDNAT

  SNATsource network address translation的縮寫,即源地址目標轉換
  好比,多個PC機使用ADSL路由器共享上網,每一個PC機都配置了內網IP
  PC機訪問外部網絡的時候,路由器將數據包的報頭中的源地址替換成路由器的ip
  當外部網絡的服務器好比網站web服務器接到訪問請求的時候
  他的日誌記錄下來的是路由器的ip地址,而不是pc機的內網ip
  這是由於,這個服務器收到的數據包的報頭裏邊的「源地址」,已經被替換了
  因此叫作SNAT,基於源地址的地址轉換

  DNATdestination network address translation的縮寫
  即目標網絡地址轉換
  典型的應用是,有個web服務器放在內網配置內網ip,前端有個防火牆配置公網ip
  互聯網上的訪問者使用公網ip來訪問這個網站
  當訪問的時候,客戶端發出一個數據包
  這個數據包的報頭裏邊,目標地址寫的是防火牆的公網ip
  防火牆會把這個數據包的報頭改寫一次,將目標地址改寫成web服務器的內網ip
  而後再把這個數據包發送到內網的web服務器上
  這樣,數據包就穿透了防火牆,並從公網ip變成了一個對內網地址的訪問了
  即DNAT,基於目標的網絡地址轉換

  MASQUERADE,地址假裝,在iptables中有着和SNAT相近的效果,但也有一些區別
  但使用SNAT的時候,出口ip的地址範圍能夠是一個,也能夠是多個,例如:
  以下命令表示把全部10.8.0.0網段的數據包SNAT192.168.5.3ip而後發出去
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3
  以下命令表示把全部10.8.0.0網段的數據包SNAT192.168.5.3/192.168.5.4/192.168.5.5等幾個ip而後發出去
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3-192.168.5.5
  這就是SNAT的使用方法,便可以NAT成一個地址,也能夠NAT成多個地址
可是,對於SNAT,不論是幾個地址,必須明確的指定要SNATip
  假如當前系統用的是ADSL動態撥號方式,那麼每次撥號,出口ip192.168.5.3都會改變
  並且改變的幅度很大,不必定是192.168.5.3192.168.5.5範圍內的地址
  這個時候若是按照如今的方式來配置iptables就會出現問題了
  由於每次撥號後,服務器地址都會變化,而iptables規則內的ip是不會隨着自動變化的
  每次地址變化後都必須手工修改一次iptables,把規則裏邊的固定ip改爲新的ip
  這樣是很是很差用的
  MASQUERADE就是針對這種場景而設計的,他的做用是,從服務器的網卡上,自動獲取當前ip地址來作NAT
  好比下邊的命令:
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
  如此配置的話,不用指定SNAT的目標ip
  無論如今eth0的出口得到了怎樣的動態ipMASQUERADE會自動讀取eth0如今的ip地址而後作SNAT出去
  這樣就實現了很好的動態SNAT地址轉換


案例:

Aip 192.168.2.164(內網)B機有兩塊網卡(eth0192.168.1.104連接外網,eth1192.168.2.105連接內網,只設置了ip和子網掩碼)

B機上作nat

作以前執行iptables -t nat -F

iptables -t nat -A POSTROUTING -o eth0 --source 192.168.2.0/24 -j MASQUERADE(表示動態的假裝)

若是不行再加上下面的

讓外網消息到達內網

iptables -A FORWARD --source 192.168.1.0/24 -j ACCEPT

容許內網的消息轉發出去

iptables -A FORWARD --source 192.168.2.0/24 -j ACCEPT

FTP的主動模式(active mode)和被動模式(passive mode)

大多數的TCP服務是使用單個的鏈接,通常是客戶向服務器的一個周知端口發起鏈接,而後使用這個鏈接進行通信。可是,FTP協議卻有所不一樣,它使用雙向的多個鏈接,並且使用的端口很難預計。通常,FTP鏈接包括:
一個控制鏈接(control connection)
這個鏈接用於傳遞客戶端的命令和服務器端對命令的響應。它使用服務器的21端口,生存期是整個FTP會話時間

1、FTP服務簡介

  FTP服務器有兩種工做模式:主動模式和被動模式。這兩種方式的特色以下:

 1)主動模式下:
  tcp, 20
20號端口用於數據傳輸),2121號端口用於控制鏈接)
 
2)被動模式:
  tcp
21(用於控制鏈接)>1023(端口號大於1023的隨機端口用於數據傳輸)
  
因此若是FTP工做在被動模式下,沒法指定數據傳輸的端口,因而引入了RELATED狀態。RELATED主要用於  追蹤與其相關的端口。注意:ftp工做在主動模式或者被動模式與客戶端的請求有關。

2、開放被動模式下的FTP服務。
 
具體步驟以下:
  1
、先開放ssh
   iptables -A INPUT -i lo -j ACCEPT
   iptables -A OUTPUT -i lo -j ACCEPT
(先開放本地鏈接)
   
   iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
   iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
(放行全部的ESTABLISHED鏈接)
   
   iptables -A INPUT -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 3 -j ACCEPT  (
放行ssh鏈接,並將其最大鏈接數設爲3)
   
   iptables -P INPUT DROP
   iptables -P OUTPUT DROP (
將默認策略設置爲禁止)
     
    iptables -L -n -v (
查看iptables詳細信息)
  2
、開放ftp服務:
   
注意要開放被動模式下的服務須要用到,ftp的追蹤模塊:
   #cat /etc/sysconfig/iptables-config(
查看iptables須要的模塊,主要是ip_nat_ftp模塊,屬於內核模塊)
   #lsmod | grep ftp
(查看是否加載ftp模塊)
   #modprobe ip_nat_ftp
(加載ftp模塊)
   #lsmod | grep ftp (
查看模塊是否被加載)
   
這樣RELATED就能夠被使用了:
   iptables -A INPUT -d 172.16.100.1 -p tcp --dport 21 -m state --state NEW -j ACCEPT
(容許21號端口進入,即:開放控制鏈接)   iptables -A INPUT -m state --state RELATED -j ACCEPT   iptables -A OUTPUT -m state --state RELATED -j ACCEPT

相關文章
相關標籤/搜索