iptables防火牆規則選項

Linux:網絡防火牆

netfilter:Frame

iptables:數據報文過濾,NAT,mangle等生成工具;

 

網絡:IP報文首部,TCP報文首部

 

防火牆:硬件,軟件:規則(匹配標準,處理辦法)

 

Framework:

默認規則:

開放:堵

關閉:通

 

規則:匹配標準

IP:SIP,DIP

TCP:SPORT,DPORT, SYN=1, FIN=0,RST=0,ACK=0; SYN=1,ACK=1,FIN=0,RST=0; ACK=1,SYN=0RST=0,FIN=0(ESTABLISHED)

UDP:SPORT,DPORT

ICMP:icmp-type

 

數據報文過濾:

 

Linux2.0

ipfw/firewall

Linux2.2

ipchain/firewall

Linux2.4

iptables/netfilter

 

hook function:鉤子函數

prerouting

input

output

forward

postrouting

 

規則鏈:

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

 

filter(過濾) 表

INPUT

OUTPUT

FORWARD

 

nat(地址轉換) 表

PREROUTING

OUTPUT

POSTROUTING

 

mangle(拆開、修改、封裝):表

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

 

raw():

PREROUTING

OUTPUT

 

iptables:

 

500條規則

能否使用自定義鏈?

    可以使用自定鏈,但只在被調用時才能發揮作用,而且如果沒有自定義鏈中的任何規則匹配,還應該有返回機制;

 

用可以刪除自定義的空鏈

默認鏈無法刪除

 

每個規則都有兩個內置的計數器:

被匹配的報文個數

被匹配的報文大小之和

 

規則:匹配標準,處理動作

 

iptables [-t TABLE] COMMAND CHAIN [num] 匹配標準 -j 處理辦法

 

匹配標準:

通用匹配

-s,--src:指定源地址

-d,--dst:指定目標地址

-p,{tcp|udp|icmp}:指定協議

-i,INITERFACE:指定數據報文流入的接口

    可用於標準定義的鏈:OUTPUT,POSTROUTING,FORWARD

-o,INTERFACE:指定數據報文流出的接口

可用於標準定義的鏈:OUTPUT,POSTROUTING,FORWARD

 

擴展匹配

隱含擴展:不用特別指明有那個模塊進行的擴展,因爲此時使用-p {tcp|udp|icmp}

-p tcp

--dport目標端口,支持連續

--sport源端口,支持連續

--tcp-flags mask comp:只檢查mask指定的標誌位,是逗號分隔的標誌位列表;

comp:此列表中出現的標記位必須爲1,comp中沒出現,而mask中出現的,必須爲0;

--tcp-falgs SYN,FIN,ACK,RST SYN=--syn

--syn專門用來匹配tcp三次握手中的第一

 

-p icmp

--icmp-type

0:echo-reply

8:echo-request

 

-p udp

--sport

--dport

顯示擴展:必須指明有哪個模塊進行的擴展,在iptables中使用-m 選項可完成此功能

-m EXTESTION --spe-opt

 

state:狀態擴展

結合ip_conntrack追蹤會話的狀態

NEW:新連接請求

ESTABLISHED:已建立的連接

INVALID:非法連接

RELATED:相關聯的

- m state --state NEW,ESTABLISHED -j ACCEPT

首先要裝載ip_conntrack_ftp和ip_nat_ftp模塊,編輯/etc/sysconfig/iptables-config

 

例:iptables  -A INPUT -d 192.168.100.100 -p tcp -m state --state ESTABLISHED.RELATED -j ACCEPT

 

multiport:離散的多端口匹配擴展

--source-ports

--destination-ports

--ports

例:-m multiport --destion-ports 21,22,80 -j ACCEPT

 

-m iprange

--src-range

--dst-range

 

-s,-d

-s IP,NET

192.168.0.0/16,192.168.100.3-192.168.100.100

 

例:iptables -A INPUT -p tcp -m iprange --src-range 192.168.100.3-192.168.100.100 --dport 22 -m state --state NEW ,ESTABLISHED -j ACCEPT

-m connlimit:連接數限制

! --connlimit-above 數字

 

例:iptables -A INPUT -d 192.168.100.7 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j ACCEPT

 

-m limit

--limit [RATE]數字/時間

--limit-burst 一批放行多少

例:iptables -A INPUT -d 192.168.100.150 -p icmp --icmp-type 8 -m limit --limit 5/minute -j ACCEPT

   iptables -A INPUT -d 192.168.100.150 -p icmp --icmp-type 8 -m limit --limit 5/minute --limit-burst 6 -j ACCEPT

對FORWARD鏈的每個IP進行限速

PS: 所有命令都要區分大小寫。 限速的實現:在linux中有專門限速的軟件--tc,但TC的語法新手難以掌握,我們可以在防火牆上通過限定某個IP或某段IP在一秒內通過的數據
包的 數量來限速。 下面以限制192.168.0.2這個IP的網速爲例說說。 在桌面環境下打開/etc/syscofngi/iptables 有沒有發現,剛纔的設定全記錄在這個文件裏,現在做的就
在這個文件裏添加規則就得了。 

1、先要找到filter 
2、在filter下面一行增加以下兩行 
iptables -A FORWARD -m limit -d 192.168.0.2 --limit 30/sec -j ACCEPT # 這句意思是限定每秒只轉發30個到達192.168.0.2的數據包(約每秒45KB 一個數據包是1.5KB) 
iptables -A FORWARD -d 192.168.0.2 -j DROP #這句作用是超過限制的到達192.168.0.2的數據包不通過)
(3)、重啓系統,限速就實現了。
(4)、限制上傳速度也一樣,把上面兩條中的d 改爲s就得了。 限制每ip連接數 ,內核 2.3以上,否則要打conlimit補丁,重編譯內核。 
iptables -I FORWARD -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT 
iptables -I INPUT -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT

 

-m string 字符串

--algo {bm|kmp}這是兩種算法指定哪一種都行

--string "STRING"

例:iptables -I INPUT -d 192.168.100.150 -m string --algo kmp --string "法輪功" -j REJECT

   iptables -I OUTPUT -s 192.168.100.150 -m string --algo kmp --string "法輪功" -j REJECT

 

-j TARGET

LOG

--log-prefix "STRING"

例:iptables -A INPUT -d 192.168.100.150 -p icmp --icmp-type 8 -j LOG --log-prefix "STRING"

 

保存規則:

# service iptables save

/etc/sysconfig/iptables

# iptables-save > /etc/sysconfig/iptables.2018052901

# iptables-restore < /etc/sysconfig/iptables.2018052901

 

 

    命令:

管理規則:

-A:附加一條規則,添加在鏈的尾部

-I:CHAIN [num]:插入一條規則,插入爲對應的CHAIN上的第num條;

-D:CHAIN [num]:刪除指定鏈中的第num條規則;

-R:CHAIN [num]:替換指定規則;

管理鏈:

-F [CHAIN]:flush,清空指定規則鏈,如果省略CHAIN,則可以實現刪除對應表中的所所有鏈

-P CHAIN:設定指定鏈的默認策略;

-N 自定義一個新的空鏈

-X 刪除一個自定義的空鏈

-Z 置零指定鏈中所有規則的計數器;

-E 重命名自定義的鏈

查看類:

-L:顯示指定表中的規則;

-n:以數字格式顯示的主機地址和端口號;

-v:顯示鏈及規則的詳細信息

-vv:

-x“顯示計數器的精確值

--line-numbers:顯示規則號碼

 

動作(target):

ACCEPT:放行

DROP:丟棄

REJECT:拒絕

DNAT:目標地址轉換

SNAT:源地址轉換

REDIRECT:端口重定向

MASQUERADE:地址僞裝

LOG:日誌

MARK:打標記

 

 

iptables不是服務,但有服務腳本;服務腳本的主要作用在於管理保存的規則

裝載及移除iptables/netfilter相關的內核模塊;

iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack

 

練習:規則的意義

   #iptables -N clean_in       #引用自定義鏈:#iptables -A INPUT -j calean_in

   創建條新的鏈(名字)

   #iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP

   #iptables -A clean_in -d 192.168.255.255 -p icmp -j DROP

   

   #iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP

   #iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP

   #iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP

   #iptables -A clean_in -d 192.168.100.7 -j RETURN

   

   #iptables -A INPUT -d 192.168.100.7 -j clean_in

   

   #iptables -A INPUT -i lo -j ACCEPT

   #iptables -A OUTPUT -o lo -j ACCEPT

   

   #iptables -A INPUT -i eth0 -m multiport -p tcp --dport 53,113,135,137,139,445 -j DROP

   #iptables -A INPUT -i eth0 -m multiport -p udp --dport 53,113,135,137,139,445 -j DROP

   #iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP

   #iptables -A INPUT -i eth0 -m multiport -p tcp --dport 1433,4899 -j DROP

   

   #iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT

 

--comment   #註釋作用

#iptables -I FORWARD -d 192.168.3.150 -j ACCEPT -m comment --comment "radius server"

--reject-with icmp-port-unreachable是針對-j REJECT 用的

#iptables -A FORWARD -d 192.168.0.0/255.255.0.0 -j REJECT --reject-with icmp-port-unreachable

#以下選項控制返回的錯誤包的性質:

--reject-with type
              The type given can be
               icmp-net-unreachable
               icmp-host-unreachable
               icmp-port-unreachable
               icmp-proto-unreachable
               icmp-net-prohibited
               icmp-host-prohibited or
               icmp-admin-prohibited (*)

 

   ssh:遠程連接

   

   iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP

   利用connlimit模塊將單IP 的併發設置爲3 :會誤殺使用NAT上網的用戶,可以根據實際情況增大該值

   

   iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

    記錄訪問tcp 22端口的新鏈接,記錄名爲SSH

 

利用iptables的recent模塊來抵禦DOS攻擊

   iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

   利用recent和state模塊限制單IP在300s內只能與本機建立3個新連接。被限制5分鐘後即可恢復訪問。

   --update 是指每次建立連接都更新列表

   --seconds 必須與--rcheck或者--update同時使用

   --hitcount必須與--rcheck或者--uodate同時使用

1.限制80端口60秒內每個IP只能發起10個新連接,超過記錄日記及丟失數據包,可防CC及非僞造IP的syn flood

iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix '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

備忘:每個IP目標端口爲80的新連接會記錄在案,可在/proc/net/xt_recent/目錄內查看,rcheck檢查此IP是否在案及請求次數,如果超過規則就丟棄數據包,否則進入下條規則並更新列表信息。 
2.發送特定指定執行相應操作,按上例如果自己IP被阻止了,可設置解鎖哦。

iptables -A INPUT -p tcp --dport 5000 --syn -j LOG --log-prefix "WEBOPEN: "
#記錄日誌,前綴WEBOPEN:
iptables -A INPUT -p tcp --dport 5000 --syn -m recent --remove --name webpool --rsource -j REJECT --reject-with tcp-reset
#符合規則即刪除webpool列表內的本IP記錄

3.芝麻開門,默認封閉SSH端口,爲您的SSH服務器設置開門暗語。

iptables -A INPUT -p tcp --dport 50001 --syn -j LOG --log-prefix "SSHOPEN: "
#記錄日誌,前綴SSHOPEN:
iptables -A INPUT -p tcp --dport 50001 --syn -m recent --set --name sshopen --rsource -j REJECT --reject-with tcp-reset
#目標端口tcp50001的新數據設定列表爲sshopen返回TCP重置,並記錄源地址。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
#開啓SSH端口,15秒內允許記錄的源地址登錄SSH。
nc host 50001  #開門鑰匙
telnet host 50001
nmap -sS host 50001

指定端口容易被破解密鑰,可以使用ping指定數據包大小爲開門鑰匙。

iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG --log-prefix "SSHOPEN: "
#記錄日誌,前綴SSHOPEN:
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --set --name sshopen --rsource -j ACCEPT
#指定數據包78字節,包含IP頭部20字節,ICMP頭部8字節。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
ping -s 50 host #Linux下解鎖
ping -l 50 host #Windows下解鎖


可能會遇到

iptables unknown error 2147483648

之類的錯誤

 

問題在於ipt_recent模塊默認的hitcount是有大小限制的

 

  1. #modinfo ipt_recent

  2. parm: ip_list_tot:number of IPs to remember per list (uint)

  3. parm: ip_pkt_list_tot:number of packets per IP to remember (max. 255) (uint)

  4. parm: ip_list_hash_size:size of hash table used to look up IPs (uint)

  5. parm: ip_list_perms:permissions on /proc/net/ipt_recent/* files (uint)

 

方法:

修改/etc/modprobe.conf,增加:

options ipt_recent ip_pkt_list_tot=100

 

  1. #service iptables stop

  2. #modprobe -r ipt_recent

  3. #modprobe ipt_recent

  4. #service iptables start


ps:

如在modprobe -r ipt_recent時提示

WARNING: /etc/modprobe.conf line x: ignoring bad line starting with ´option

多半是/etc/modprobe.conf中的內容增加有問題

man 5 modprobe.conf

可以看到

options modulename option...

   

   iptables的記錄:/proc/net/ipt_recent/SSH

   

   也可以使用下面這句話記錄日誌:

   iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"

  NAT:Network Address Translation

  

  DNAT:目標地址轉換,(PREROUTING)

  SNAT:源地址轉換(POSTROUTING,OUTPUT)

 

-j SNAT

--to-source

 

ADSL:123.2.3.2  公網地址

 

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j SNAT --to-source 123.2.3.2

   

    -j DNAT  需要指定對什麼服務進行轉發

   --to-destination IP[:port]  端口映射

   例:iptables -t nat -A PREROUTING -d 192.168.100.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.150

  監在8080端口的話改爲

  iptables -t nat -A PREROUTING -d 192.168.100.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.150:8080

   

   PNAT:port NAT 端口轉換

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