天天看點

Iptables防火牆

 Iptables防火牆

防火牆的實作既有基于硬體的又有基于軟體的

硬體 CISCO的     PIX    ASA

     Juniper    netscreen  ssg

     神州數位的    DCFW

     H3C 的       secpath

     天融信

軟體     windows 下的  IAS  Internet Security Acceleration

         Linux下的     netfilter架構/iptables

Iptables是網絡層防火牆

如果想精确控制 iptables+L7+squid 建構

Iptables的鍊(規則的集合)

INPUT   OUTPUT  FORWARD  PREROUTING POSTROUTING  

Iptables的表

Nat 表 包含以下幾個鍊

PREROUTING   (路由判斷之前主要用于DNAT)

POSTROUTING   (路由判斷之後 主要用于SNAT)

INPUT           (一般不用)

Filter表 包含以下幾個鍊 

INPUT  (主要用于對防火牆本身的通路)

OUTPUT  (用于從防火牆本身出發的控制)

FORWARD (對經過防火牆的規則控制)

Mangle 表  (主要用于qos的設定)

Iptables   -t filter  -L   -v  -n    

-t  表示後接那個表 (如果沒有-t 表名 預設是filter表)

-L    list  列出所用

-v    詳細資訊

-n    數字顯示

iptables  -P  INPUT  DROP

将INPUT鍊的預設規則設為禁止

Service  iptables  stop start restart  save

停止、開啟、重新開機、儲存iptables

Iptables的文法

iptables  -t  表名 指令 鍊名稱  選項  參數

指令  

 -A   --apennd   是添加一條規則

-D   --delete   鍊名稱   規則編号

-I    --insert   鍊名稱   規則編号   (在編号之前插入一條規則)

-R   --replace  鍊名稱   規則編号    (替換該規則)

-N   --new    自定義鍊名稱    (自定義的鍊必須被引用才能起作用)

-X   删除空的自定義鍊

-F  --flash   清空鍊

-P   --policy  設定預設規則

選項

來源

-s   位址/子網/網絡

-i   網卡接口名稱   【-i eth0】  (表示從eth0網卡進入的)

目标

-d  位址/子網/網絡

-o   網卡接口名稱   【-o eth1】  (表示從eth1網卡進入的)

協定

網絡層協定  ip  icmp

傳輸層協定   tcp  udp  --sport   --dport

狀态

NEW   (三次握手的SYN 建立連接配接狀态) 

ESTABLISHED  (含ACK的确認狀态)

RELATED  (含二次連接配接的 多端口的服務狀态 像FTP 的主被動模式)

動作

-j   --jump (跳轉)  ACCEPT

                     REJECT

                     DROP

                     SNAT 或(MESQUERADE 它支援通過動态擷取的ip snat)

                     DNAT 

                     REDIRECT  (重定向)

子產品

-m  (time  state  string  iprange  Layer7)

例如1 将INPUT 和 OUTING鍊預設規則設為DROP 并能通過ssh連接配接到linux,進行遠端管理 及能ping 通linux伺服器

Iptables  -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

Iptables  -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT

Iptables  -t filter -A INPUT -p icmp --icmp-type  echo-request -j ACCEPT

Iptables  -t filter -A OUTPUT -p icmp --icmp-type  echo-reply -j ACCEPT

Iptables  -P INPUT  DROP

Iptables  -P OUTPUT  DROP

例2

通過狀态控制,是我的client 192.168.2.1 能連上linux server 

Iptables -t filter -A INPUT -s 192.168.2.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

Iptables -t filter -A OUTPUT -d 192.168.2.1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

例3

對内外做SNAT轉換 并且内網裡有一台 伺服器(192.168.2.100)可以遠端管理

打開linux的資料包轉發功能

Iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to 192.168.101.10

這樣内網就基本上可以通路外網了

通路外網的FTP 在執行如下指令

Modprobe   ip_nat_ftp   加載一下ftp轉換子產品

如果外網卡的接口是通過撥号擷取的動态ip的話可以這樣做

iptables -t nat -R POSTROUTING1-s 192.168.2.0/24 -o eth1 -j MESQUERADE 

iptables -t nat -A PREROUTING -d 192.168.101.2 -p tcp --dport 3389 -i eth1 -j DNAT --to 192.168.2.100

Iptables  -P OUTPUT  DROP    --設定預設政策拒絕

iptables子產品介紹

1、string(字元串比對,可以用做内容過濾) 

iptables -I FORWARD -m string --string "騰訊" -j DROP 

iptables -I FORWARD -s 192.168.2.100 -m string --string "qq.com" -j DROP 

iptables -I FORWARD -s 192.168.2.0/24 -m string --string "寬頻影院" -j DROP 

iptables -I FORWARD -s 192.168.2.0/24 -m string --string "色情" -j DROP 

iptables -I FORWARD -s 192.168.2.0/24 -p tcp --sport 80 -m string --string "廣告" -j DROP 2. 

2、comment (備注比對,可以支援最多256個字元) 

Supported options: 

--comment COMMENT 

翻譯:這個選項增加CONFIG_IP_NF_MATCH_COMMENT,補充一個注釋比對子產品.這個匹允許你增加一個備注都任何規則,這個備注最多支援256個字元,例如 

(例子:) 

-A INPUT -s 192.168.0.0/16 -m comment --comment "A privatized IP block" 

譯者:我是這樣測試使用這個comment 

iptables -I FORWARD -s 192.168.2.100 -p tcp --dport 80 -j DROP -m comment --comment "the bad guy can not online" 

iptables -I FORWARD -s 192.168.2.100 -m string --string "qq.com" -j DROP -m comment --comment "denny go to qq.com" 

這樣在iptables -L時,就看到每條規則後面出現備注的内容.可以提高可讀和了解該條規則的作用. 

3. connlimit(同時連接配接個數限制比對) 

:這個增加一個iptables比對允許你限制每個客戶ip位址的并發tcp連接配接,即同時連接配接到一個伺服器個數. 

例子: 

 (允許每個客戶機同時兩個telnet連接配接) 

iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT 

(你也可以比對其他的方法:) 

iptables -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT 

(限制80端口最多同時16個連接配接請求) 

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT 

子產品 connlimit 作用:連接配接限制 

--connlimit-above n 限制為多少個 

--connlimit-mask n 這組主機的掩碼,預設是connlimit-mask 32 ,即每ip. 

這個主要可以限制内網使用者的網絡使用,對伺服器而言則可以限制每個ip發起的連接配接數...比較實用 

例如:隻允許每個ip同時5個80端口轉發,超過的丢棄: 

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP 

例如:隻允許每組C類ip同時10個80端口轉發: 

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP 

例如:為了防止DOS太多連接配接進來,那麼可以允許最多15個初始連接配接,超過的丢棄. 

/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP 

/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT 

4. time(時間比對,iptables預設麼加載) 

Match only if today is one of the given days. (format: Mon,Tue,Wed,Thu,Fri,Sat,Sun ; default everyday) 

(隻是比對已經給出的天,格式Mon,Tue,Wed,Thu,Fri,Sat,Sun ;預設每天) 

(開始日期 日期) 

Match only if it is after `date' (Inclusive, format: YYYY]]]] h,m,s start from 0 ; default to 1970) 

(隻是比對這個開始日期值之後的(包括,格式: YYYY]]]] h,m,s start from 0 ; 預設是1970): 

Match only if it is before `date' (Inclusive, format: YYYY]]]] h,m,s start from 0 ; default to 2037) 

(隻是比對這個開始日期值之前的(包括,格式: YYYY]]]] h,m,s start from 0 ; 預設是2037): 

-A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri 

will match packets that have an arrival timestamp in the range 8:00->18:00 from Monday to Friday. 

(上面将比對從到達日期是星期一至星期五時間從8:00至18:00的包) 

-A OUTPUT -m time --timestart 8:00 --timestop 18:00 --Days Mon --date-stop 2010 

will match the packets (locally generated) that have a departure timestamp in the range 8:00->18:00 on Monday only, until 2010 

(上面将比對本地産生的時間範圍直到2010年為止的每個星期一8:00至18:00的包) 

NOTE: the time match does not track changes in daylight savings time 

5. iprange (ip範圍比對,iptables預設沒有加載該子產品)   

這個更新檔名令比對源/目标 IP位址可以倚着給出的位址範圍進行比對 

(例子) 

iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT 

這個例子是允許源ip位址範圍192.168.1.5-192.168.1.124的包通過 

iptables -A FORWARD -m iprange --dst-range 10.0.0.0-10.255.255.255 -j ACCEPT 

這個例子是允許目标ip位址範圍10.0.0.0-10.255.255.255的包通過 

等等 iptables支援多達上百個子產品(在/lib/iptables/),功能很豐富。關于iptables就介紹到這吧!!!!!!。

本文轉自 abc16810 51CTO部落格,原文連結:http://blog.51cto.com/abc16810/1097173

繼續閱讀