防火墻

iptables筆記整理

 

防火墻

安全技術

入侵檢測與管理系統(instruction detection system):特點是不阻斷任何網絡訪問,量化、定位來自內外網絡的威脅情況,主要是以提供報告和時候監督為主,提供有針對性的知道措施和安全決策依據。一般采用旁路部署方式

入侵防御系統(intrusion prevention system):以透明模式工作,分析數據包的內容如:溢出攻擊。拒絕服務攻擊、木馬、蠕蟲、系統漏洞等進行準確的分析判斷,在判定為攻擊行為后立即予以阻斷,主動而有效的保護網絡的安全,一般采用在線部署方式

防火墻(firewall):隔離功能,工作在網絡或主機邊緣,對進出網絡或主機的數據包基于一定的規則檢查,并在匹配某規則時由規則定義的行為進行處理的一組功能的組件,基本上的實現都是默認情況下關閉所有的通過型訪問,值開放允許訪問的策略

防火墻的分類

主機防火墻:服務范圍為當前主機

網絡防火墻:服務范圍為防火墻一側的局域網

硬件防火墻:在專用硬件級別實現部分功能的防火錢;另一部分功能基于軟件實現,

軟件防火墻:運行于通用平臺之上的防火墻的應用軟件

網絡層防火墻:osi下面三層

應用層防火墻/代理服務器:代理網關,osi七層

網絡層防火墻

包過濾防火墻

網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,被稱為訪問控制列表(ACL),通過檢查數據流中每一個數據的源地址,目的地址,所用端口號和協議狀態等因素,或他們的組合來確定是否允許該數據包通過

優點:對用戶來說透明,處理速度快且易于維護

缺點:無法檢查應用層數據,如病毒等

應用層防火墻

應用層防火墻/代理服務型防火墻(proxy service)

將所有跨越防火墻的網絡通信鏈路分為兩段

內外網用戶的訪問都是通過代理服務器上的鏈接來實現

優點:在應用層對數據進行檢查,比較安全

缺點:增加防火墻的負載

現實生產環境中所使用的防火墻一般都是二者結合體

即先檢查網絡數據,通過之后再送到應用層去檢查

iptables的基本認識

Netfilter組件

內核空間,集成在linux內核中

擴展各種網絡服務的結構化底層框架

內核中選取五個位置放了五個hook(勾子) function(INPUT ?OUTPUT ?FORWARD ?PREROUTING ?POSTROUTINNG ??),而這五個hook function 向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規則

由信息過濾表(table)組成,包括控制ip包處理的規則集(rules),規則被分組放在鏈上

三種報文流向:

流入本機:PREROUTING –> INPUT–>用戶空間

流出本機:用戶空間進程–>OUTPUT–>POSTROUTING

轉發:PREROUTING–> FORWARD–>POSTROUTING

防火墻工具

Iptables

命令行工具,工作在用戶空間

用來編寫規則,寫好的給規則被送往netfilter,告訴內核如何去處理信息包

Firewalld

Centos 7 引入了新的前端管理工具

管理工具:

Firewall-cmd

Firewall-config

Iptables由四個表和五個鏈以及一些規則組成

四個表table:filter ?nat ??mangle ???raw

Filter表:過濾規則表,根據預定義的規則過濾符合條件的數據包

Nat表:network address transaction 地址轉換規則表

Mangle表:修改數據標記位規則表

Raw表:關閉NAT表上啟用的連接跟蹤機制,加快封包穿越防火墻速度

 

優先級由高到低的順序為:raw –>mangle–> nat—> filter

 

五個內置鏈chain

INPUT

OUTPUT

PREROUTING

FORWARD

POSTROUTING

 

Netfilter表和鏈對應關系

 

Filter ?INPUT ?FORWARD ?OUTPUT

數據包過濾匹配流程

IPTABLES和路由

路由功能發生的時間點

報文進入本機后

判斷目標主機是否為本機

是:INPUT

否:FORWORD

報文離開本機之前

判斷由哪個接口送往下一跳

 

 

內核中數據包的傳輸過程

當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,內核根據數據包目的ip判斷是否需要轉送出去

如果數據包就是進入本機的,數據包就會沿著圖向下移動,到達INPUT鏈。數據包到達INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包經過OUTPUT鏈,然后到達POSTROUTING鏈輸出

如果數據包是要轉發出去的,且內核允許轉發,數據包就會向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出

?

Iptables規則

規則rule:根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動作做出處理

匹配條件:默認為與條件,同時滿足

基本匹配:IP,端口,TCP的flags(SyN,ACK等)

擴展匹配:通過復雜高級功能匹配

處理動作:稱為target,跳轉目標

內建處理動作:ACCEPT DROP REJECT SNAT DNAT MASQUERADE MARK LOG

自定義處理動作:自定義chain,利用分類管理復雜情形

規則要添加在鏈上,才生效;添加在自定義上不會自動生效

鏈chain:

內置鏈:每個內置鏈對應于一個勾子函數

自定義鏈:用于對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只有hook勾子調用自定義鏈時,才生效

 

Iptables添加要點:

要實現哪種功能:判斷添加在哪張表上

報文流經的路徑:判斷添加在那個鏈上

報文的流向:判斷源和目的

匹配規則:業務需要

鏈上規則的次序,即為檢查的次序,因此隱含一定的法則

同類規則(訪問同一應用),匹配范圍小的放上面

不同類規則(訪問不同應用),匹配到報文頻率較大的放上面

將哪些可由一條規則描述的多個規則合并為一個

設置默認策略

實驗環境準備

ü Centos7: systemctl stop firewalld.service
systemctl disable firewalld. service
ü Centos6:service iptables stop; chkconfig iptables off

 

Iptables命令

規則格式:

Iptables [ -t table]?SUBCOMMAND ?chain?[-m matchname [per-match-options]]?-j targername?[per-targer-options]

-t table:

Raw mangle ?nat [filter]默認

SUBCOMMAND:

1鏈管理

-N:new,自定義一條新的規則鏈

-X:delete,刪除自定義的空的規則鏈

-P:policy,設置默認策略;對filter表中的鏈而言,其默認策略有;

ACCEPT:接受

DROP:丟棄

-E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能夠被刪除

 

2查看

-L:list,列出指定鏈上的所有規則,本選項須置后

-n: numberric ,以數字格式顯示地址的端口號

-v: verbose 詳細信息

-vv ?更詳細的信息

-x:exactly 顯示計數器結果的精確值,而非單位轉換后的易讀值

–line–numbers:顯示規則的序號

常用組合:

–vnL

–vvnL

-S selected,以iptables-save 命令格式顯示鏈上規則

3規則管理

-A: append,追加

-I: insert 插入,要指明插入至的規則編號,默認為第一條

-D: delete 刪除

(1)指明規則序號

(2)指明規則本身

-R:replace ?替換指定鏈上的指定規則編號

-F:flush ????清空指定的規則鏈

-Z:zero ????置零

Iptables的每條規則都有兩個計數器

(1)匹配到的報文的個數

(2)匹配到的所有報文的大小之和

Chain:PREROUTING ?INPUT ?FORWARD ?OUTPUT ?POSTROUTING

匹配條件

基本:通用的,PARAMETERS

擴展:需加載模塊,MATCH EXTENTIONS

1基本匹配條件:無需加載模塊,由iptables/netfilter自行提供

 

-s:–source address 源IP 或范圍

-d: –destination address:目標地址或范圍

-p:–protocol protocol:指定協議,可使用數字如0(all)

Protocol: tcp ?udp ICMP ?icmpv6

-i: –in-interface name :報文流入的接口;只能應用于數據報文流入環節,只應用于INPUT/FORWARD/PREROUTING鏈

-o: –out-interface name :報文流出的接口;只能應用于數據報文流出的環節,只應用于FORWARD/OUTPUT/POSTROUTING鏈

 

擴展匹配條件:需要加載擴展模塊(/usr/lib64/xtables/*.so)方可生效

查看幫助 man iptables-extensions

  • 隱式擴展:在使用-p選項指明了特定的協議時,無需再用-m選項指明擴展模塊的擴展機制,不需要手動加載擴展模塊

?

Tcp協議的擴展選項

–source-Port,–sport Port[:port] :匹配報文端口,可為端口范圍

–destination-Port, –dport Port[:port]匹配報文目標端口,可為范圍

–tcp-flags mask comp

Mask 需檢查的標志位列表,用,分隔 ?例如 SYN ACK ?FIN ?RST

Comp 在mask列表中必須為1的標志位列表,無指定則為0,用,分隔

 

示例:
–tcp-flags SYN,ACK,FIN,RST SYN 表示要檢查
的標志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0
–tcp-flags SYN,ACK,FIN,RST SYN,ACK
–tcp-flags ALL ALL
–tcp_flags ALL NONE
–syn:用于匹配第一次握手
相當于:–tcp-flags SYN,ACK,FIN,RST SYN

 

udp
–source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍
–destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍
ü

?icmp
[!] –icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp應答
8/0 echo-request icmp請求

 

(2)顯示擴展:必須使用-m選項指明要調用的擴展模塊的擴展機制,要手動加載擴展模塊

[-m matchname [per-match-options]]

處理動作:
-j targetname [per-target-options]

簡單:ACCPET,DROP

擴展:REJECT:–reject-with:icmp-port-unreachable 默認

RETURN :返回調用鏈

REDIRECT:端口重定向

LOG:記錄日志,dmesg

MARK:做防火墻標記

DNAT:目標地址轉換

SNAT:源地址轉換

MASUERADE:地址偽裝

。。。

自定義鏈

顯示擴展:必須顯示地指明使用的擴展模塊進行的擴展

使用幫助

Centos6:man iptables

Centos 7 :man iptables-extensions

 

1,multiPort擴展

以離散方式定義多端口匹配,最多指定15個端口

–source-ports,–sports port[,port|,port:port]…
指定多個源端口
–destination-ports,–dports port[,port|,port:port]…
指定多個目標端口
–ports port[,port|,port:port]…多個源或目標端口

示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p
tcp -m multiport –dports 20:22,80 -j ACCEPT

2,iprange擴展

指明連續的(但一般不是整個網絡)ip地址范圍

–src-range from [-to] 源IP地址范圍

–dst-range from [-to] 目標IP地址范圍

示例:
iptables -A INPUT -d 172.16.1.100 -p tcp –dport
80 -m iprange –src-range 172.16.1.5-172.16.1.10
-j DROP

3,mac擴展

指明源MAC地址

適用于:PREROUTING,FORWARD,INPUT chains

–mac-source XX:XX:XX:XX:XX:XX

示例:
iptables -A INPUT -s 172.16.0.100 -m mac –macsource 00:50:56:12:34:56 -j ACCEPT

4,string擴展

對報文中的應用層數據做字符串模式匹配檢測

–algo{bm|kmp}:字符串匹配檢測算法

Bm:Boyer-Moore

Kmp:Knuth-Pratt-Morris

–from offset 開始偏移

–to offset 結束偏移

–string pattern ?要檢測的字符串模式

–hex-string pattern 要檢測字符串模式 16進制格式

示例

iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp?–sport 80 -m string –algo bm –string “google” -j?REJECT

 

5,time擴展

 

根據將報文到達的時間與指定的時間范圍進行匹配

–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–timestart hh:mm[:ss] 時間
–timestop hh:mm[:ss]
–monthdays day[,day…] 每個月的幾號
–weekdays day[,day…] 星期幾

–kerneltz:內核時區,不建議使用,CentOS7系統默認為UTC
注意: centos6 不支持kerneltz ,–localtz指定本地時區(默認)

示例:
iptables -A?INPUT -s?172.16.0.0/16 -d 172.16.100.10 -p?tcp –dport 80 -m time –timestart 14:30 –timestop?18:30 –weekdays Sat,Sun –kerneltz -j?DROP

 

6,connlimit擴展

根據每客戶端IP 做并發連接數數量匹配

可防止cc(challenge collapsar 挑戰黑洞)攻擊

–connlimit-upto n:連接的數量小于等于n時匹配

–connlimit-above n“連接的數量大于n時匹配

通常分別與默認的拒絕或允許策略配合使用

示例

iptables -A INPUT -d 172.16.100.10 -p tcp –dport?22 -m connlimit –connlimit-above 2 -j REJECT

 

7,limit擴展

基于收發報文的速率做匹配
令牌桶過濾器
–limit rate[/second|/minute|/hour|/day]
–limit-burst number
示例:
iptables -I INPUT ?-d 172.16.100.10 ?-p?icmp –icmptype 8???-m?limit??–limit 3/minute??–limit-burst 5??-j?ACCEPT
前5個不限制,以后每分鐘走3個

iptables -I INPUT 2 -p icmp -j REJECT

 

8,state 擴展

根據“連接追蹤機制”去檢查連接的狀態,較耗資源

Conntrack機制:追蹤本機上的請求和響應之間的關系

狀態有如下幾種

NEW: 新發出請求;連接追蹤信息庫中不存在此連接的相關信息條目,因此,將其識別為第一次發出的請求

ESTABLISHED:NEW狀態之后,連接追蹤信息庫中為其建立的條目失效之前期間內所進行的通信狀態

RELATED:新發起的但與已有連接相關聯的連接,如ftp協議中的數據連接與命令連接之間的關系

INVALID:無效的連接,如flag標記不正確

UNTRACKED:未進行追蹤的連接,如raw表中關閉追蹤

 

示例:
iptables -A?INPUT -d 172.16.1.10 -p?tcp -m?multiport –-dports?22,80 -m?state –state?NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport –sports 22,80 -m state –state ESTABLISHED -j ACCEPT

 

 

已經追蹤到的并記錄下來的連接信息庫

/proc/net/nf_conntrack

調整連接追蹤功能所能夠容納的最大連接數量

/proc/sys/net/nf_conntrack_max

不同協議的連接追蹤時長

/proc/sys/net/netfilter

注意:centos 7 需要加載模塊:modprobe nf_conntrack

Iptables 的連接跟蹤表最大容量為/proc/sys/net/nf_conntrack_max,各種狀態的超時連接會從表中刪除;當模板滿載時,后續連接可能會超時

 

解決方法兩個:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout時間
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
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
iptables -t nat -L -n

 

  • 裝載ftp連接追蹤的專用模塊:
    跟蹤模塊路徑:/lib/modules/kernelversion/kernel/net/netfilter
    vim /etc/sysconfig/iptables-config 配置文件
    IPTABLES_MODULES=” nf_conntrack_ftp ”
    modproble nf_conntrack_ftp
    v

?(2) 放行請求報文:
命令連接:NEW, ESTABLISHED
數據連接:RELATED, ESTABLISHED
iptables –I INPUT -d LocalIP -p tcp -m state –state
ESTABLISH,EDRELATED -j ACCEPT?iptables -A INPUT -d LocalIP -p tcp –dport 21 -m state –state NEW -j ACCEPT
v

(3) 放行響應報文:
iptables -I OUTPUT -s LocalIP -p tcp -m state –state?ESTABLISHED -j ACCEPT

 

開放被動模式的ftp服務示例

yum install vsftpd
v systemctl start vsftpd
v modprobe nf_conntrack_ftp
?iptables -F
v iptables -A INPUT -m state –state?ESTABLISHED,RELATED -j ACCEPT
v iptables -A INPUT -p tcp –dport 21 -m state –state NEW -j ACCEPT
v iptables -A OUTPUT -m state –state?ESTABLISHED -j ACCEPT
v iptables -P INPUT DROP
v iptables -P OUTPUT DROP
v iptables -vnL

Iptables命令

v Target:
ü ACCEPT, DROP, REJECT, RETURN,LOG, SNAT, DNAT, REDIRECT, MASQUERADE,..
ü LOG: 非中斷target,本身不拒絕和允許,放在拒絕和允許規則前
并將日志記錄在/var/log/messages系統日志中
–log-level level 級別: emerg, alert, crit, error,warning, notice, info or debug
–log-prefix prefix 日志前綴,用于區別不同的日志,最多29個字符
ü 示例
iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport –dports 80,21,22,23 -m state –state NEW -j LOG –logprefix “new connections: ” ??日志前綴

 

任何不允許的訪問,應該在請求到達時給予拒絕規則在鏈接上的次序即為其檢查時的生效次序
v 基于上述,規則優化
ü 1 安全放行所有入站和出站的狀態為ESTABLISH
ü 2 謹慎放行入站的新請求
ü 3 有特殊目的限制訪問功能,要在放行規則之前加
ü 4 同類規則(訪問同一應用),匹配范圍小的放在特殊處理
ü 5 不同類的規則(訪問不同應用),匹配范圍大的
ü 6 應該將那些可由一條規則能夠描述的多個規則合
ü 7 設置默認策略,建議白名單(只放行特定連接)
1) iptables -P,不建議
2) 建議在規則的最后定義規則做為默認策略

規則有效期:

使用iptables命令定義的規則,手動刪除之前,其生效期限為kernel存活期限

?

?

保存規則:

Centos6

Service iptables save

將規則覆蓋保存至/etc/sysconfig/iptables文件中

Service iptables restart ?會自動從/etc/sysconfig/iptales 重新載入

Centos7

CentOS 7 可用下面方法保存規則
iptables -S > /PATH/TO/SOME_RULES_FILE(保存成;重新載入有點問題)
iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 7 重新載入預存規則文件中規則:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
-n, –noflush:不清除原有規則
-t, –test:僅分析生成規則集,但不提交

 

v 開機自動重載規則文件中的規則
v (1) 用腳本保存各iptables命令;讓此腳本開機后自動運行
/etc/rc.d/rc.local文件中添加腳本路徑/PATH/TO/SOME_SCRIPT_FILE
v (2) 用規則文件保存各規則,開機時自動載入此規則文件中的規則
/etc/rc.d/rc.local文件添加iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
v (3)自定義Unit File,進行iptables-restore

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91935

(0)
sunchunjiangsunchunjiang
上一篇 2018-03-05 01:21
下一篇 2018-03-05 21:28

相關推薦

  • 計算機基礎入門及Pyhton基礎

    編程基礎 計算機基礎 程序(program識別并執行的指令 計算機是執行程序的機器 現代計算機 艾倫·麥席森·圖靈奠定了現在計算機的邏輯工作方式的基礎 馮·諾依曼提出計算機應該有五大部件組成:輸入/輸出設備、運算器、控制器、輸出設備。這是現代計算機基本框架。 語言基礎 計算機語言:與計算機之間交互的語言 機器語言:一定位數的二進制代碼成為機器指令,指令集合則…

    2017-09-16
  • Linux系統管理基礎

        一、Linux系統初識             1、用戶界面           &nbsp…

    Linux干貨 2015-04-14
  • 15 權限管理及作業

    15 權限管理及作業(作業單獨一篇) 一、雜項知識整理 1、訪問控制列表:ACL:Access Control List,實現靈活的權限管理。     除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限。     centos7.0之后默認創建的ext4文件系統有ACL功…

    Linux干貨 2016-08-04
  • Linux iptables配置應用

                    Linux iptables配置應用 概述:    Linux的防火墻體系主要工作在網絡層,只對tcp/ip數據包實施過濾和限制,屬于典型的包過濾防火墻(或稱為網絡層防火墻)。Linux的防火墻體系基于內核編碼實現,因…

    系統運維 2016-11-18
  • NFS實現共享wordpress

    實驗環境 192.168.68.134 wordpress站點 nfs-server 192.168.68.144 nfs-client   實驗要求 nfs server共享/var/www/html目錄 nfs clinet掛載nfs-server共享的目錄,部署wordpress   nfs server端 先部署wordpress…

    Linux干貨 2017-10-21
  • vim編輯器使用介紹

    vim基礎

    2017-11-09
欧美性久久久久