儘量不給服務器配置外網ip ,能夠經過代理轉發或者經過防火牆映射.併發不是特別大狀況有外網ip,能夠開啓防火牆服務.html
大併發的狀況,不能開iptables,影響性能,利用硬件防火牆提高架構安全linux
主要應用方向ios
一、主機防火牆(filter表的INPUT鏈)。web
二、局域網共享上網(nat表的POSTROUTING鏈)。半個路由器,NAT功能。vim
三、端口及IP映射(nat表的PREROUTING鏈),硬防的NAT功能。centos
四、IP一對一映射。安全
其餘說明:服務器
①iptables是基於內核的防火牆,功能很是強大,基於數據包的過濾!特別是能夠在一臺很是低的硬件配置下跑的很是好。cookie
注:iptables主要工做在OSI七層的2.3.4層。七層的控制可使用squid代理+iptables。網絡
②iptabes:生產中根據具體狀況,通常,內網關閉,外網打開。大併發的狀況不能開iptables,影響性能,iptables是要消耗CPU的,因此大併發的狀況下,咱們使用硬件防火牆的各方面作的很仔細。selinux:生產中也是關閉的。能夠作ids的入侵檢測。
③實際生產中儘量不給服務器配置外網IP。能夠經過代理轉發。好比,nagios就不須要外網。
④併發不是很大的狀況下,再外網的IP環境,開防火牆。
⑤第一次直接默認規則生成配置文件,之後就在配置文件中進行修改(編輯添加刪除)。
⑥封掉IP:根據IP地址和網絡鏈接數進行封殺。(定時任務,定時封掉,判斷,存在就再也不進行二次封殺)
1)linux主機防火牆,單機做爲防火牆(表filter)。
2)局域網共享上網(表nat postrouting)。
3)外部地址映射爲內部地址和端口(表nat prerouting)
Netfilter/Iptables(如下簡稱Iptables)是unix/linux自帶的一款優秀且開放源代碼的徹底自由的基於包過濾的防火牆工具,它的功能十分強大,使用很是靈活,能夠對流入和流出服務器的數據包進行很精細的控制.特別是它能夠在一臺很是低的硬件配置服務器上跑的很是好(賽揚500HZ cpu 64M 內存的惲況下部署網關防火牆),提供近400人的上網服務絲絕不遜色企業級專業路由器防火牆。 iptables + zebra + squid (企業經常使用網絡開源產品)。
iptables是linux2.4及2.6內核中集成的服務,其功能與安全性比其老一蜚ipfwadm,ipchains 強大的多,iptables主要工做在0SI七層的2、3、四層,若是從新編譯內核,iptables也能夠支持 7 層控制(squid代理+iptables)。
很多剛接觸到iptables的朋友可能會對iptables防火牆的相關名詞搞的很暈,不知道其所云的具體意思,而是就最基本的能讓你們容易快速理解和掌握的思路來描述:
容器:包含或者說屬於的關係
誰不知道啊,容器就是裝東西的,如(箱、包、壇)。沒錯,恭喜你答對了.詞典裏解釋說,容器就是用來包裝或裝載物品的貯存器(如箱、罐、壇)或者成形或柔軟不成形的包覆材料.
在iptables裏的呢,就是用來描述這種包含或者說屬於的關係。
Netfilter是表(tables)的容器,這樣解釋你們確定仍是暈。舉個例子,若是把Netfilter當作是某個小區的一棟樓。那麼表(tables)就是樓裏的其中的一套房子。這套房子"表(tables)"屬於這棟「Netfilter」。
表(tables)是鏈的容器,即全部的鏈(chains)都屬於其對應的表(tables).如上,若是把Netfilter當作是某個小區的一棟樓.那麼表(tables)就是樓裏的其中的一套房子。
鏈(chains)是規則(Policys)的容器。接上,若是把表(tables)看成有一套房子,那麼鏈(chains)就能夠說是房子裏的傢俱(櫃子等)。
規則(Policy)就比較容易理解了,就是iptables系列過濾信息的規範和具體方法條款了.能夠理解爲櫃子如何增長並擺放櫃子東西等。
基本術語以下表格所示:
Netfilter |
表(tables) |
鏈(chains) |
規則(Policy) |
一棟樓 |
按裏的房子 |
房子裏的櫃子 |
櫃子裏衣服,擺放規則 |
描述完iptables術語後,相信你們對iptables的表和鏈有了初步的瞭解了,默認狀況下,iptables根據功能和表的定義劃分包含三個表,filter,nat,mangle,其每一個表又包含不一樣的操做鏈(chains )。 實際iptables包含4張表和五個鏈,巧主要記住兩張表便可filter和nat表便可。
下面表格展現了表和鏈的對應關係。
四個表:
表(tables) |
鏈(chains) |
|
Filter |
這是默認表,實現防火牆數據過濾功能。 |
|
INPUT |
對於指定到本地套接字的包,即到達本地防火牆服務器的數據包。 |
|
FORWARD |
路由穿過的數據包,即通過本地防火牆服務器的數據包。 |
|
OUTPUT |
本地建立的數據包 |
|
NAT |
當遇到新建立的數據包鏈接時將參考這個表 |
|
FREROUTING |
一進來就對數據包進行改變 |
|
OUTPUT |
本地建立的數據包在路由前進行改變 |
|
POSTROUTING |
在數據包即將出去時改變數據包信息 |
|
Mangle |
這個表專門用於改變數據包 |
|
INPUT |
進入到設備自己的包 |
|
FORWARD |
對路由後的數據包信息進行修改 |
|
FREROUTING |
在路由以前更改傳入的包 |
|
OUTPUT |
本地建立的數據包在路由以前改變 |
|
POSTROUTING |
在數據包即將離開時更改數據包信息 |
|
raw |
此表用處較少,能夠忽略不計。 This table is used mainly for configuring exemptions from connection tracking in combination with the NOTRACK target. |
|
PREROUTING |
for packets arriving via any network interface |
|
OUTPUT |
for packets generated by local processes |
五個鏈
表(tables) |
鏈(chains) |
||||
INPUT |
FORWARD |
OUTPUT |
PREROUTING |
POSTROUTING |
|
Filter |
√ |
√ |
√ |
× |
× |
NAT |
× |
× |
√ |
√ |
√ |
Managle |
√ |
√ |
√ |
√ |
√ |
raw |
× |
× |
√ |
√ |
× |
說明:√ 表示有,× 表示無。 |
圖 - iptables中的表與鏈的結構關係
filter表 |
主要和主機自身相關,真正負責主機防火牆功能的(過濾流入流出主機的數據包) filter表是iptables默認使用的表,這個表定義了三個鏈(chains) 企業工做場景:主機防火牆 |
INPUT |
負責過濾全部目標是本機地址的數據包 通俗來講:就是過濾進入主機的數據包 |
FORWARD |
負責轉發流經主機的數據包。起到轉發的做用,和NAT關係很大。 LVS NAT 模式,net.ipv4.ip_forward=0 |
OUTPUT |
處理全部源地址是本機地址的數據包 通俗的講:就是處理從主機發出的數據包 |
對於filter表的控制是咱們實現本機防火牆功能的重要手段,特別是INPUT鏈的控制。
NAT表 |
負責網絡地址轉換的,即來源與目的的IP地址和port的轉換。 應用:和主機自己無關,通常用於局域網共享上網或者特殊的端口轉換相關. 工做場景: 一、用於企業路由(zebra)或網關(iptables),共享上網(POSTROUTING) 二、作內部外部IP地址一對一映射(dmz),硬件防火牆映射IP到內部服務器,FTP服務(PREROUTING) 三、WEB,單個端口的映射,直接映射80端口(PREROUTING) 這個表定義了3個鏈,nat功能至關於網絡的acl控制。和網絡交換機acl相似。 |
OUTPUT |
和主機放出去的數據包有關,改變主機發出數據包的目的地址。 |
PREROUTING |
在數據包到達防火牆時,進行路由判斷以前執行的規則,做用是改變數據包的目的地址、目的端口等 就是收信時,根據規則重寫收件人的地址 例如:把公網IP: xxx.xxx.xxx.xxx 映射到局域網的 x.x.x.x 服務器 若是是web服務,能夠把80轉換爲局域網的服務器9000端口上。 |
POSTROUTING |
在數據包離開防火牆時進行路由判斷以後執行的規則,做用改變數據包的源地址,源端口等。 寫好收件人的地址,要讓家人回信時可以有地址可回。 例如。默認筆記本和虛擬機都是局域網地址,在出網的時候被路由器將源地址改成公網地址。 生產應用:局域網共享上網。 |
Mangle表 |
主要負責修改數據包中特殊的路由標記,如TTL,TOS,MARK等,這個表定義了5個鏈(chains). |
因爲這個表與特殊標記相關,通常倩況下,咱們用不到這個mangle表。
這裏就不作詳細介紹了。
前面介紹已經提到,iptables是採用數據包過濾機制工做的,因此它會對請求的數據包的包頭數據進行分析,並根據咱們預先設定的規則進行匹配來決定是否能夠進入主機。
iptables是採用數據包過濾機制工做的,因此它會對請求的數據包的包頭數據進行分析,並根據咱們預先設定的規則進行匹配來決定是否能夠進入主機。
數據包的流向是從左向右的。
圖 - iptables包處理流程圖
圖 - iptables包處理流程圖(簡化)
抽象說明:上圖能夠用北京地鐵1,2號線來描述:
1號線:主要是NAT功能
企業案例:
1)局域網上網共享(路由和網關),使用NAT的POSTROUTING鏈。
2)外部IP和端口映射爲內部IP和端口(DMZ功能),使用NAT的PREROUTING鏈
2號線:主要是FILTER功能,即防火牆功能FILTER INPUT FORWARD
企業案例:
主要應用就是主機服務器防火牆,使用FILTER的INPUT鏈
圖 - iptables數據包轉發流程圖
一、防火牆是一層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。
二、若是匹配上了規則,即明確代表是阻止仍是經過,此時數據包就不在向下匹配新規則了。
三、若是全部規則中沒有明確代表是阻止仍是經過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。
四、防火牆的默認規則是對應鏈的全部的規則執行完之後纔會執行的(最後執行的規則)。
系統環境說明
[root@coolpale ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@coolpale ~]# hostname -I 10.0.0.188 172.16.1.188
軟件版本
[root@coolpale ~]# iptables -V iptables v1.4.7
參數 |
參數說明 |
||
顯示相關參數 |
|||
-n/--numeric |
以數字的方式顯示地址或端口信息 |
||
-L/ --list |
列出一個鏈或全部鏈中的規則信息 |
||
--list-rules/-S |
Print the rules in a chain or all chains |
||
--line-number |
當列出規則信息時,打印規則行號 |
||
-v |
顯示詳細信息,能夠疊加 |
||
-h |
顯示幫助信息 |
||
初始化相關參數 |
|||
iptables -F |
清除全部規則,不會處理默認的規則 |
||
iptables -X |
刪除用戶自定義的鏈 |
||
iptables -Z |
鏈的計數器清零(數據包計數器與數據包字節計數器) |
||
配置經常使用參數 |
|||
-t 表名稱 |
指定配置哪一個表,指定配置表名稱。 |
||
--append/-A 鏈名稱 |
附加或追加上相應規則策略,到指定鏈(鏈名稱必須大寫),默認將配置的規則插入到最後一條。 |
||
--check/-C |
Check for the existence of a rule |
||
--insert/-I 鏈名稱 |
插入相應規則策略,到指定鏈上,默認將配置的規則插入到第一條(能夠根據規則序號插入到指定位置)--封IP地址使用。 |
||
--delete/-D 鏈名稱 |
刪除指定的規則(能夠根據規則序號進行刪除) |
||
--replace/-R |
Replace rule rulenum (1 = first) in chain |
||
-P(大寫)鏈名稱 |
改變鏈上的最終默認規則策略 |
||
--new/-N |
建立新的用戶定義鏈 |
||
-p 協議名稱 [!] --proto |
指定規則的協議名稱 all tcp udp icmp |
||
--dport |
指定匹配的目標端口信息 |
||
--sport |
指定匹配的源端口信息 |
||
-j 動做 |
匹配數據包後的動做 |
||
ACCEPT |
容許 |
||
DROP |
丟棄(沒有響應) |
||
REJECT |
拒絕(迴應請求者明確的拒絕) |
||
MASQUERADE |
假裝上網時使用 |
||
SNAT |
共享地址上網 |
||
DNAT |
目的地址改寫 |
||
-i [!] --in-interface |
在INPUT鏈配置規則中,指定從哪個網卡接口進入的流量(只能配置在INPUT鏈上) |
||
-o [!] --out-interface |
在OUTPUT鏈配置規則中,指定從哪個網接口出去的流量(只能配置在OUTPUT鏈上) |
||
-s [!] --source |
指定源IP地址或源網段信息 |
||
-d [!] --destination |
指定目標IP地址或目標網段信息 |
||
擴展參數 |
|||
-m 模塊 |
表示增長擴展,匹配功能擴展匹配(能夠加載擴展參數) |
||
multiport |
實現不連續多端口擴展匹配 |
||
icmp |
使用icmp的擴展 |
||
state |
狀態模塊擴展 |
||
--icmp-type |
只有類型8是真正會影響ping,或者也能夠採用any;瞭解不少icmp類型iptables -p icmp -h |
||
--limit n/{second/minute/hour} |
指定時間內的請求速率」n」爲速率,後面爲時間分別爲:秒 分 時 |
||
--limit-burst [n] |
在同一時間內容許經過的請求」n」爲數字,不指定默認爲5 |
||
--exact/-x |
擴展數字(顯示精確數值) |
||
!的使用實例
[root@coolpale ~]# iptables ! -V Not 1.4.7 ;-) [root@coolpale ~]# iptables -V iptables v1.4.7
注意:在iptables中全部鏈名必須大寫,代表必須小寫,動做必須大寫,匹配必須小寫。
在配置防火牆首先要其中防火牆
[root@coolpale ~]# /etc/init.d/iptables start iptables: Applying firewall rules: [ OK ]
清除iptables全部規則
[root@coolpale ~]# iptables -Z [root@coolpale ~]# iptables -X [root@coolpale ~]# iptables -F
查看iptables的規則
[root@coolpale ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
查看其餘的表配置(-t 參數)
[root@oolpale ~]# iptables -nL -t raw Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
查看配置規則的順序號
[root@coolpale ~]# iptables -nvL --number-list --line-number # 顯示規則的序號
配置實例一:配置22/ssh端口訪問控制規則
iptables -A INPUT -p tcp --dprot 22 -j DROP # 禁止全部人訪問22端口 iptables -I INPUT -p tcp --dprot 22 -j ACCEPT # 恢復鏈接方法 iptables -I INPUT 2 -p tcp --dprot 22 -j ACCEPT # 經過插入指定行號信息,指定將規則插入到第幾行 iptables -D INPUT -p tcp --dport 22 -j ACCEPT # 刪除指定規則 iptables -D INPUT 2 # 根據規則行號,刪除相應的規則
只容許10.0.0.1的ip經過ssh鏈接這臺服務器
iptables -I INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
配置實例二:禁止網段連入(禁止172.16.1.0網段訪問172.16.1.188)
iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188 -j DROP
配置實例三:禁止某個172.16.1.0網段訪問服務器主機的22端口
iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188 -p tcp --dport 22 -j DROP
方向說明:
# 在入方向控制 iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # 在出方向控制 iptables -I OUTPUT -o eth0 -p tcp --sport 22 -j DROP
第一種方式:
iptables -A INPUT -s 10.0.0.0/24 -d 172.16.1.8 -j ACCEPT
修改默認規則,將默認規則改成拒絕
第二種方式:
! --- 表示對規則信息進行取反
iptables -A INPUT ! -s 10.0.0.0/24 -d 172.16.1.8 -j DROP --- centos6用法 iptables -A INPUT -s ! 10.0.0.0/24 -d 172.16.1.8 -j DROP --- centos5用法
說明:只有iptables幫助手冊中指定的參數能夠用取反符號(iptables --help)
iptables -A INPUT -p tcp --dport 22:80 -j DROP # 設置連續多端口控制策略 iptables -A INPUT -p tcp -m multiport --dport 22,80 -j DROP # 設置不連續多端口控制策略
-m 參數表示增長擴展匹配功能,multiport 實現不連續多端口擴展匹配
禁止ping策略原則
iptables服務器是ping命令發起者或是接受者
發起者:
input鏈: 禁止icmp-type 0
iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j DROP
output鏈: 禁止icmp-type 8
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 8 -j DROP
接受者:
input鏈: 禁止icmp-type 8
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
output鏈: 禁止icmp-type 0
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -j DROP
簡化配置:
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type any -j DROP #禁止全部類型的icmp
指定類型禁止icmp
iptables -A INPUT -p icmp --icmp-type 8 iptables -A INPUT -p icmp --icmp-type 8 -j DROP iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
說明:只有類型8是真正會影響ping,或者也能夠採用any;瞭解不少icmp類型iptables -p icmp -h
ICMP類型的說明
TYPE |
CODE |
Description |
Query |
Error |
0 |
0 |
Echo Reply——回顯應答(Ping應答) |
x |
|
3 |
0 |
Network Unreachable——網絡不可達 |
|
x |
3 |
1 |
Host Unreachable——主機不可達 |
|
x |
3 |
2 |
Protocol Unreachable——協議不可達 |
|
x |
3 |
3 |
Port Unreachable——端口不可達 |
|
x |
3 |
4 |
Fragmentation needed but no frag. bit set——須要進行分片但設置不分片比特 |
|
x |
3 |
5 |
Source routing failed——源站選路失敗 |
|
x |
3 |
6 |
Destination network unknown——目的網絡未知 |
|
x |
3 |
7 |
Destination host unknown——目的主機未知 |
|
x |
3 |
8 |
Source host isolated (obsolete)——源主機被隔離(做廢不用) |
|
x |
3 |
9 |
Destination network administratively prohibited——目的網絡被強制禁止 |
|
x |
3 |
10 |
Destination host administratively prohibited——目的主機被強制禁止 |
|
x |
3 |
11 |
Network unreachable for TOS——因爲服務類型TOS,網絡不可達 |
|
x |
3 |
12 |
Host unreachable for TOS——因爲服務類型TOS,主機不可達 |
|
x |
3 |
13 |
Communication administratively prohibited by filtering——因爲過濾,通訊被強制禁止 |
|
x |
3 |
14 |
Host precedence violation——主機越權 |
|
x |
3 |
15 |
Precedence cutoff in effect——優先停止生效 |
|
x |
4 |
0 |
Source quench——源端被關閉(基本流控制) |
|
|
5 |
0 |
Redirect for network——對網絡重定向 |
|
|
5 |
1 |
Redirect for host——對主機重定向 |
|
|
5 |
2 |
Redirect for TOS and network——對服務類型和網絡重定向 |
|
|
5 |
3 |
Redirect for TOS and host——對服務類型和主機重定向 |
|
|
8 |
0 |
Echo request——回顯請求(Ping請求) |
x |
|
9 |
0 |
Router advertisement——路由器通告 |
|
|
10 |
0 |
Route solicitation——路由器請求 |
|
|
11 |
0 |
TTL equals 0 during transit——傳輸期間生存時間爲0 |
|
x |
11 |
1 |
TTL equals 0 during reassembly——在數據報組裝期間生存時間爲0 |
|
x |
12 |
0 |
IP header bad (catchall error)——壞的IP首部(包括各類差錯) |
|
x |
12 |
1 |
Required options missing——缺乏必需的選項 |
|
x |
13 |
0 |
Timestamp request (obsolete)——時間戳請求(做廢不用) |
x |
|
14 |
|
Timestamp reply (obsolete)——時間戳應答(做廢不用) |
x |
|
15 |
0 |
Information request (obsolete)——信息請求(做廢不用) |
x |
|
16 |
0 |
Information reply (obsolete)——信息應答(做廢不用) |
x |
|
17 |
0 |
Address mask request——地址掩碼請求 |
x |
|
18 |
0 |
Address mask reply——地址掩碼應答 |
數據來源:http://www.cnitblog.com/yang55xiaoguang/articles/59581.html
狀態集簡單說明:
狀態集 |
說明 |
NEW |
表示新創建鏈接的數據包狀態 |
ESTABLISHED |
表示新創建鏈接數據包發送以後,回覆響應的數據包狀態 |
RELATED |
表示藉助已經創建的鏈路,發送新的鏈接數據包 |
INVALID |
無效沒法識別的數據包 |
注意:容許關聯的狀態包經過(web服務不要使用FTP服務)
防火牆服務配置在FTP服務器上時,須要配置如下策略
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
實現發現sent_syn狀態
iptables -A INPUT -m state --state NEW -j DROP # 防火牆所鏈接客戶端上配置
實現發現sent_rcvd狀態
iptables -I INPUT -i eth0 -s 10.0.0.201 -m state --state ESTABLISHED -j DROP # 防禦牆上配置的
limit是iptables的一個匹配模塊,用它結合iptables的其它命令能夠實現限速的功能。
不過首先必須明確,limit自己只是一個「匹配」模塊。咱們知道,iptables的基本原理是「匹配--處理」,limit在這個工做過程當中只能起到匹配的做用,它自己是沒法對網絡數據包進行任何處理的。我看到網上有些limit的例子裏面說只 用一條包含limit匹配規則的iptables語句就能夠實現限速,那是錯誤的。
實際上,利用imit來限速須要包括兩個步驟:
1.對符合limit匹配規則包放行
2.丟棄/拒絕未放行的包
示例:
iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP
語句含義:當來自10.0.0.7 的ping包超過5個時進行限速,限制爲每10s一個。
參數說明:
參數 |
參數含義 |
--limit n/{second/minute/hour} |
指定時間內的請求速率」n」爲速率,後面爲時間分別爲:秒 分 時 |
--limit-burst [n] |
在同一時間內容許經過的請求」n」爲數字,不指定默認爲5 |
limit模塊具體是如何工做的。?
limit的匹配是基於令牌桶 (Token bucket)模型的。
令牌桶是一種網絡通信中常見的緩衝區工做原理,它有兩個重要的參數,令牌桶容量n和令牌產生速率s。
咱們能夠把令牌當成是門票,而令牌桶則是負責製做和發放門票的管理員,它手裏最多有n張令牌。一開始,管理員開始手裏有n張令牌。每當一個數據包到達後,管理員就看看手裏是否還有可用的令牌。若是有,就把令牌發給這個數據包,limit就告訴iptables,這個數據包被匹配了。而當管理員把手上全部的令牌都發完了,再來的數據包就拿不到令牌了。這時,limit模塊就告訴iptables,這個數據包不能被匹配。除了發放令牌以外,只要令牌桶中的令牌數量少於n,它就會以速率s來產生新的令牌,直到令牌數量到達n爲止。
經過令牌桶機制,便可以有效的控制單位時間內經過(匹配)的數據包數量,又能夠允許短期內突發的大量數據包的經過(只要數據包數量不超過令牌桶n)。
limit模塊提供了兩個參數--limit和--limit-burst,分別對應於令牌產生速率和令牌桶容量。除了令牌桶模型外,limit匹配的另一個重要概念是匹配項。在limit中,每一個匹配項擁有一個單獨的令牌桶,執行獨立的匹配計算。
清除防火牆規則
[root@coolpale ~]# iptables -F [root@coolpale ~]# iptables -X [root@coolpale ~]# iptables -Z
修改默認規則爲拒絕(修改前先放行22端口,保證本身可以連上主機)
[root@coolpale ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT [root@coolpale ~]# iptables -P INPUT DROP [root@coolpale ~]# iptables -P FORWARD DROP
放行指定的端口
[root@coolpale ~]# iptables -A INPUT -i lo -j ACCEPT [root@coolpale ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT [root@coolpale ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT [root@coolpale ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
保存iptables配置
01. 第一種方式
[root@coolpale ~]# /etc/init.d/iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] [root@coolpale ~]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Tue Apr 4 12:24:43 2017 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [159:10664] -A INPUT -s 10.0.0.0/24 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT -A INPUT -s 172.16.1.0/24 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT COMMIT # Completed on Tue Apr 4 12:24:43 2017
02. 第二種方式
iptables-save >/etc/sysconfig/iptables
圖 - SNAT 配置原理圖
第一個里程碑:配置內網服務器,設置網關地址
/etc/init.d/iptables stop # 內網服務器中止防火牆服務 ifdown eth0 # 模擬關閉內網服務器外網網卡 setup # 修改內網網卡網關和DNS地址信息
也可使用命令添加默認網關
route add default gw 172.16.1.188
查看默認的路由信息
[root@coolpale ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1 0.0.0.0 172.16.1.188 0.0.0.0 UG 0 0 0 eth1
說明:內網服務器網關地址指定爲共享上網服務器內網網卡地址
第二個里程碑:配置共享上網服務器,開啓共享上網服務器路由轉發功能
[root@coolpale ~]# vim /etc/sysctl.conf [root@coolpale~]# sysctl -p ~~~ net.ipv4.ip_forward = 1 ~~~
第三個里程碑:配置共享上網服務器,實現內網訪問外網的NAT映射
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.188
參數詳解:
參數 |
參數說明 |
-s 172.16.1.0/24 |
指定將哪些內網網段進行映射轉換 |
-o eth0 |
指定在共享上網哪一個網卡接口上作NAT地址轉換 |
-j SNAT |
將源地址進行轉換變動 |
-j DNAT |
將目標地址進行轉換變動 |
--to-source ip地址 |
將源地址映射爲何IP地址 |
--to-destination ip地址 |
將目標地址映射爲何IP地址 |
當filter表中的forward默認爲drop策略時,如何配置forward鏈?
圖 - forward工做原理
配置示例
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT # iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT # 能夠不進行配置 iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT # iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT # 能夠不進行配置
當外網ip不固定時如何配置?
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE # 假裝共享上網
說明:在企業中如何沒有固定外網IP地址,能夠採起以上假裝映射的方式進行共享上網
配置映射方法小結
01. 指定哪些網段須要進行映射 -s 172.16.1.0/24
02. 指定在哪作映射 -o eth0
03. 用什麼方法作映射 -j SNAT/DNAT MASQUERADE
04. 映射成什麼地址 --to-source ip地址/--to-destination ip地址
實際需求:將網關的IP和9000端口映射到內網服務器的22端口
端口映射 10.0.0.188:9000 -->172.16.1.180:22
配置實例:
iptables -t nat -A PREROUTING -d 10.0.0.188 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.7:22
參數說明:
參數 |
參數說明 |
-d 10.0.0.188 |
目標地址。 |
-j DNAT |
目的地址改寫。 |
圖 - DNAT 映射原理
實際需求:將ip 地址172.16.1.180 映射到10.0.0.188
經過輔助IP配置:
ip addr add 10.0.0.81/24 dev eth0 label eth0:0 # 添加輔助IP iptables -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51 iptables -t nat -I POSTROUTING -s 172.16.1.51 -o eth0 -j SNAT --to-source 10.0.0.81
適合內網的機器訪問NAT外網的IP
iptables -t nat -I POSTROUTING -s 172.16.1.0/255.255.240.0 -d 10.0.0.81 -j SNAT --to-source 172.16.1.8
檢查配置:
ping 10.0.0.81 -t tcpdump|grep -i icmp(兩臺機器上分別監測) telnet 10.0.0.81 22
方法1:
iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16
在三層交換機或路由器,劃分VLAN。
方法2:
iptables -t nat -A POSTROUTING -s 10.0.1.0/22 -o eth0 -j SNAT --to-source 124.42.60.11 iptables -t nat -A POSTROUTING -s 10.0.2.0/22 -o eth0 -j SNAT --to-source 124.42.60.12
擴大子網,會增長廣播風暴。
有關iptables的內核優化
調整內核參數文件/etc/sysctl.conf
如下是個人生產環境的某個服務器的配置:
解決time-wait過多的解決辦法:
net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1
在dmesg中顯示 ip_conntrack: table full, dropping packet. 的錯誤提示,什麼緣由?
如何解決?
#iptables優化
net.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
圖 - 自定義鏈原理
建立自定義鏈
#示例:在filter表中建立NOICMP自定義鏈 iptables -t filter -N NOICMP
引用自定義鏈
#示例:在INPUT鏈中引用剛纔建立的自定義鏈 iptables -t filter -I INPUT -p icmp -j NOICMP
重命名自定義鏈
#示例:將IN_WEB自定義鏈重命名爲WEB iptables -E NOICMP ACCEPTICMP
刪除自定義鏈
刪除自定義鏈須要知足兩個條件
一、自定義鏈沒有被引用
二、自定義鏈中沒有任何規則
# 示例: 刪除引用數爲0且不包含任何規則的ACCEPTICMP鏈 iptables -X ACCEPTICMP
狀態機制是iptables中較爲特殊的一部分,這也是iptables和比較老的ipchains的一個比較大的區別之一,運行狀態機制(鏈接跟蹤)的防火牆稱做帶有狀態機制的防火牆,如下簡稱爲狀態防火牆.狀態防火牆比非狀態防火牆要安全,由於它容許咱們編寫更嚴密的規則。
在iptables上一共有四種狀態,分別被稱爲NEW、ESTABLISHED、INVALID、RELATED,這四種狀態對於TCP、UDP、ICMP三種協議均有效。下面,咱們來分別闡述四種狀態的特性.
🔔 NEW
meaning that the packet has started a new connection, or otherwise associated with a connection which has not seen packets in both directions
NEW說明這個包是咱們看到的笛一個包。意思就是,這是conntrack橫塊看到的某個鏈接的第一個包,它即格被匹配了。好比,咱們看到一個SYN包,是咱們所留意的鏈接的第一 個包,就要匹配它。
🔔 ESTABLISHED
meaning that the packet is associated with a connection which has seen packets in both directions
ESTABLISHED已經注意到兩個方向上的數據傳輸,並且會繼續匹配這個鏈接的包.處於ESTABLISHED狀態的鏈接是很是容易理解的.只要發送並接到應答,鏈接就是ESTABLISHED的了。一個鏈接要從NEW變爲ESTABLISHED,只須要接到應答包便可,無論這個包是發往防火牆的,仍是要由防火牆轉發的.ICMP的錯誤和重定向等信息包也被看做是ESTABLISHED,只要它們是咱們所發出的信息的應答。
🔔 RELATED
meaning that the packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error.
RELATED是個比較麻煩的狀態.當一個鏈接和某個已處於ESTABLISHED狀態的鏈接有關係時,就被認爲是RELATED的了,換句話說,一個鏈接要想是RELATED的,首先要有一個ESTABLISHED的鏈接。這個ESTABLISHED鏈接再產生一個主鏈接以外的鏈接,這個新的鏈接就是RELATED的了,固然前提是conntrack模塊要能理解RELATED。ftp是個很好的例子,FTP-data鏈接就是和FTP-control有關聯的,若是沒有在iptables的策略中配RELATED狀態,FTP-data的鏈接是沒法正確創建的,還有其餘的例子,好比,經過IRC的DCC鏈接#有了這個狀態,ICMP應答、FTP傳輸、DCC等才能穿過防火牆正常工做.注意,大部分還有一些UDP協議都依賴這個機制。這些協議是很複雜的,它們把鏈接信息放在數據包裏,而且要求這些信息能被正確理解。
🔔 INVALID
meaning that the packet is associated with no known connection
INVALID說明數據包不能被識別屬於哪一個鏈接或沒有任何狀態.有幾個緣由能夠產生這種狀況,好比,內存溢出,收到不知厲於哪一個鏈接的ICMP錯誤信息。通常地,咱們DROP這個狀態的任何東西,由於防火牆認爲這是不安全的東西
如何防止本身被關在門外?
0一、去機房重啓系統或者登錄服努器刪除剛纔的禁止規則。
0二、讓機房人員重啓服芳器或者讓機房人員拿用戶密碼登陸進去。
0三、經過服努器的遠程管理卡管理(推薦)。
0四、先寫一個定時任務,每5分鐘就中止防火牆。
0五、測試環境測試好,寫成腳本,批置執行
配置禁用22端口策略:
iptables -I INPUT -p tcp - dport 22 -j DROP # 說明:利用-I參數,實現強行阻止訪問22端口,將Jffc規則放在第一位
刪除配置的禁止鏈接22端口的規則
iptables -t filter -D INPUT -p tcp —dport 22 -j DROP iptables -F /etc/init.d/iptables restart