iptables 學習筆記總結

Iptables學習筆記

*規則順序從上到下執行,上面查詢到有符合條件的規則下面不再執行

1,iptables –t 命令規則 –j 動作

表:filternat mangle 默認是filter

Iptables –L 查看filter

-P 等於 --policy 定義默認測量

例如:更改默認策略

Iptables –t filter  --policyFORWARD DROP

Iptables –t filter  -P FORWARD ACCEPT

-A 等於 --append 在規則列表的最後添加一條規則

-I 等於 --insert 在指定的位置插入一條規則

  例如:

      Iptalbes –t filter –I INPUT –p icmp –jDROP

           Iptalbes –t filter –I INPUT 3 –p icmp –j DROP

-D 等於 --delete 刪除一條規則

   例如:刪除第一天規則

       Iptables –t filter –D INPUT 1

-R 等於 --replace 替換規則列表中的某條規則

     例如:

         Iptables –t filter -R INPUT 2 –p icmp–j DROP  

-F 等於 --flush 刪除表中所以規則

      例如:可以指定鏈,也可以不指定鏈,不指定鏈,清除表

          Iptables –t filter –F INPUT

-L 查看iptables 信息

      例如:iptables –t filter -L

                        iptables –t filter -L –v-v:查看更多信息)

                         -n 以數字的形式顯示

 

Iptables 匹配選項

-i --in-interface 指定數據包從那個網絡接口進入,如 ppp0 ,eth0eth1等;

-o –out-interface 指定數據包從哪塊網絡接口輸出,如:ppp0,eth0eth1等;

-p –protocol 協議類型指定數據包匹配的協議,如 tcp,udp icmp等;

-s –source 指定數據包匹配的源地址;

-d –destination 指定數據包匹配的目標地址;

--sport 指定數據包匹配的源端口號,可以使用起始端口:結束端口的格式指定一個範圍的端口;

--dport 目標端口號,指定數據包匹配的目標端口號,可以使用起始端口:結束端口的格式指定一個範圍的端口。

例:

Iptables  -t filter -I INPUT –p icmp -i eth0 –jDROP 

Iptables–t filter –I FORWARD –p tcp –s 172.17.31.233/32 –d 172.16.31.8/32 –dport 3389–j DROP

 

Iptables 擴展參數

 

1,       -m state --state <狀態>

狀態有:

1,NEW:想要新建立的封裝包;

2,ESTABLISHED:已經連接成功的封裝包;

3,INVALID:無效的封裝包,例如數據損壞的封裝包;

4,RELATED:這個最常用!表示這個封裝包是與我們主機發送出去的封裝包有關,可能是響應封裝包或者是連接成功後的傳輸數據包。

2,       icmp協議 –m icmp --icmp-type <狀態實現單方向ping

  icmp 狀態類型:

       echo-request 8

             echo-reply  0

實例:拒絕172.16.31.2 ping 172.16.31.7

例如:iptables –t filter –I INPUT –s 172.16.31.2/32 –d172.16.31.7/32 –p icmp –m icmp --icmp-type echo-request –j DORP

3,       參數 –m multiport 指定多端口號

-m multiport

   --sports

     --dports

   --ports

實例:拒絕192.168.80.0/24 訪問 192.168.10.0/24 1-1024 3389

例如:iptables –t filter –I FORWARD –p tcp –d192.168.10.0/24 –s 192.168.80.0/24 –m multiport --dports 1:1024,3389 –j DROP

4,       指定IP

-m iprange

   --src-range   ip-ip

   --dst-range   ip-ip

實例:禁止192.168.80.1-100 地址段訪問 192.168.10.0/24

例如:iptables –t filter –I FORWARD –m iparnge --src-range192.168.80.1-192.168.80100  –j DROP

5,       最大連接數限制

-m connlimit

    --connlimit-above  <限制的最大連接數>

示例:只允許192.168.80.0/24 使用遠程桌面連接192.168.10.123/32最多兩個會話

例如:iptables –t filter –I FORWARD –s 192.168.80.0/24 –d192.168.10.123/32 –p tcp –dport 3389 –m connlimit --connlimit-above 2 –j DROP

6,       使用擴至選項限速

-m limit --limit

可以每秒鐘、每分鐘、每小時或每天平均一次,默認值爲每小時平均一次,參數如:/second, /minute, /hour, /day

示例:192.168.10.0/24 發送數據包不能超過300個,(一個包最大1500字節)1500*300=450 000=450k

例如(需要兩條命令,這是對網段進行限制)#iptables –t filter –I FORWARD –s192.168.10.0/24 –d 192.168.80.0/24 –m limit --limit 300/second –j ACCEPT

          #Iptables –t filter –A FORWARD –s 192.168.10.0/24 –d192.168.80.0/24 –j DROP

對每個ip進行限制

公司使用Linux服務器來當網關,配置iptables NAT上網,使用iptables對每一個用戶進行帶寬限制:

vi /etc/sysconfig/limit.sh

#!/bin/bash

for((i=2; i<254; i++))

do

iptables –I FORWARD –s 192.168.10.$i –j DROP

iptables –I FORWARD –s 192.168.10.$I –m limit --limit 300/sec --limit-burst400 –j ACCEPT

done

注:--limit-burst (瞬間流量)上面的腳步是對192.168.10.1-254 限制每秒只運行最多300個數據包通過的限制。

7,       瞬間流量控制

參數--limit-burst 用來比對瞬間最大封裝包數量,超過數量的封裝包將直接丟棄。

示例:允許192.168.10.123/32 ping 192.168.80.123/32 4個包

例如:iptables –t filter –I FORWARD –s 192.168.10.123/32 –d192.168.80.123/32 –p icmp –m limit --limit-burst 4 –j ACCEPT

           iptables –t filter –IFORWARD –s 192.168.10.123/32 –d 192.168.80.123/32 –p icmp –j DROP

# iptables –t filter –Z     #清除filter表的計數器

8,       基於mac地址的過濾流量

參數–m mac --mac-source

說明:用來對比封裝包來源網絡接口地址的硬件地址,這個參數不能用在OUTPUTPSOTROUTING鏈上,這是因爲封裝包要送出到網卡後,才能由網卡驅動程序通過ARP通訊協議查出目的地的MAC地址,所以iptables在進行封裝包對比時,並不知道封裝包會送到哪個網絡接口去。

示例:拒絕xp計算機的mac能夠訪問192.168.80.0/24 網段

例如:iptables –t filter –I FORWARD –d 192.168.80.0/24 –mmac --mac-source  00-50-56-C0-00-08 –jDROP

Filter表處理動作介紹

-j 參數用來指定要進行的處理動作,常用的處理動作有:ACCEPT, DROP, REJECT,  LOG , REDIRECT , MASQUERADE , DNAT , SNAT,MIRROR , QUEUE ,RETURN ,MARK .

Filter 表使用的主要動作

    ACCEPT : 封裝包放行,進行完此處理後,將不再匹配其他規則,直接跳往下一個規則鏈。

    DROP : 丟棄封裝包不予處理,進行完此處理後,將不在匹配其他規則,直接中斷過濾程序。

    REJECT : 攔截封裝包,並傳送封裝包通知對方,可以傳送的封裝包有下列選擇:ICMP port-unreachable ICMP echo-reply tcp-reset(這個封裝包要求對方關閉連接),進行完此處理後,將不再匹配其它規則,直接中斷過濾程序。

示例:攔截192.168.10.0/24 ping 192.168.10.0/24 3389端口

例如:iptables –t filter –I FORWARD –s 192.168.10.0/24 –picmp –j REJECT

    Iptables –t filter –I FORWARD–s 192.168.10.0/24 –p tcp --dport 3389 –j REJECT

    LOG : 將封裝包相應通訊記錄在/var/log中,詳細位置請查閱/etc/syslog.conf 配置文件,進行完此處理動作後,將會繼續匹配其它規則。

示例:記錄192.168.10.0/24網段連接遠程桌面和ping過服務器

例如:iptables –t filter –I FORWARD –s 192.168.10.0/24 –ptcp –dport 3389 –j LOG --log-prefix “iptables-rdp”

           iptables –t filter –IFORWARD –p icmp –j LOG --log-prefix “iptables-icmp”

注:--log-prefix 是給日誌添加一個標記,方便以後查詢

保存還原iptable設置

顯示防火牆狀態

Service iptables status

防火牆配置文件位置

/etc/sysconfig/iptables

防火牆服務配置文件

/etc/sysconfig/iptables-config

IPTABLES_MODULES=”ip_connrack_ftp ip_nat_ftp” #是否需要支持其它模塊例如在地址轉換的情況下支持FTP

IPTABLES_MODULES_UNLOAD=”yes” #iptables服務停止的時候自定義的模塊是否被卸載,yes是卸載;

IPTABLES_SAVE_ON_STOP=”no” #當服務停止的時候定義的規則是否保存,默認是不保存;

IPTABLES_SAVE_ON_RESTART =”no” #當服務重啓的時候默認規則是否保存,默認是不保存;

IPTABLES_SAVE_COUNTER=”no” #當配置保存的時候,防火牆計數器是否保存,默認是不保存;

IPTABLES_STATUS_NUMERIC=”yes”#當顯示防火牆狀態時,是否以數字的形式顯示端口號和ip地址;

IPTABLES_STATUS_VERBOSE=”no” #當顯示防火牆狀態時,顯示網卡接口;

IPTABLES_STATUS_LINENUMBERS=”yes”#查看時,是否顯示行號;

清空防火牆配置

iptables –F

保存配置文件

/etc/rc.d/init.d/iptables save

把配置文件保存到另爲一個文件

iptables-save > iptables.conf.bak

導入配置文件

Iptables-restored < iptables.conf.bak

Recent模塊實現服務器網絡安全

常用參數:

--name  #設定列表名稱,默認DEFAULT

--rsource #源地址,此爲默認

--rdest   #目的地址

--seconds #指定時間內

--hitcount #命中次數

--set     #將地址添加進列表,並更新信息,包含地址加入的時間戳

--rcheck  #檢測地址是否在列表,以第一匹配開始計算時間

--update  #rcheck類似,以最後一個匹配計算時間

--remove  #在列表裏刪除相應地址,後跟列表名稱及地址

示例1

           SSH連接一個客戶端60秒內只允許連接2

1,用來設置多長時間,幾次拒絕

#iptables –t filter –A INPUT –p tcp --dport 22 –m state --state NEW –m

 recent --name SSHPOOL --rcheck--seconds 60 --hitcount 2 –j DROP

2,連接計算

#iptables –t filter –A INPUT –p tcp --dport 22 –m state --state NEW –mrecent --name SSHPOOL --set –j ACCEPT

3,建立的會話就允許進入

#iptables –t filter –A INPUT –m state --state ESTABLISHED –j ACCEPT

示例2

限制TCP 80 端口 60 秒內每個IP只能發10個新建連接,超過記錄日誌及丟棄數據包,可防CC及非僞造IPsyn flood

#iptables –A INPUT –p tcp --dport 80 --syn –m recent --name webpool--rcheck --seconds 60 --hitcount 10 –j LOG --log-frefix “DDOS” --log-ip-options

#iptables –A INPUT –p tcp --dport 80 --syn –m recent --name webpool--rcheck ---seconds 60 --hitcount 10 –j DROP

#iptables –A INPUT –p tcp --dport 80 --syn –m recent --name webpool--set –j ACCEPT

設置打開端口的鑰匙

#記錄日誌,前綴是SSHOPEN(可選)

iptables –A INPUT –p icmp –icmp-type echo-request –m length –length 1078–j LOG –log-prefix “SSHOPEN:”

#指定數據包1078字節,包含IP頭部20字節,icmp頭部8字節。(1078=1050+20+8ping 172.16.31.7 –l 1050

iptables –A INPUT –p icmp --icmp-type echo-request –m length --length 1078–m recent --set --name sshoopen --rsource –j ACCEPT

#檢查sshopen表中60秒內的記錄如果有有源地址則允許訪問tcp22端口;

iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds60 --name sshopen --rsource -j ACCEPT

#發送ping包指定數據包1178個字節,將客戶端地址從sshopen表中移除,客戶端將不能使用tcp22端口建立連接;

iptables -A INPUT -p icmp --icmp-type echo-request -m length --length1178 -m recent --set --name sshopen -rmove -j ACCEPT

#已經連接的保持連接

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

NAT地址轉換

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth3 -j SNAT--to-source 192.168.20.10-192.168.20.11

NAT端口映射

端口映射選做地址轉換

iptables -t nat -A PREROUTING -i eth3 -d 192.168.20.10/32 -p tcp--dport 3389 -j DNAT --to 192.168.10.110:3389

iptables -t nat -A PREROUTING -i eth3 -d 192.168.20.10/32 -p tcp--dport 4000 -j DNAT --to 192.168.10.222:3389


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章