iptables防火牆

IT_luo關注0人評論219人閱讀2018-10-24 21:33:40
防火牆的幾個知識點
一、防火牆的概念
二、iptables的基本認識
三、iptables的組成
四、iptables的基本語法
五、iptables之forward的概念
六、iptables之地址轉換法則
七、SNAT源地址轉換的具體實現
八、DNAT目標地址轉換的具體實現
九、firewalld介紹
十、firewalld配置命令
十一、rich規則
防火牆概念
防火牆通常分爲硬件防火牆和軟件防火牆。但實際上,無論是硬件和軟件防火牆,它們都須要使用硬件來做爲聯機介質,
也須要使用軟件來設定安全政策,嚴格來講,二者間的差異並不太大,所以只能從使用的硬件與操做系統來加以區分:硬件防火牆使用專用的硬件,
而軟件式防火牆則使用通常的計算機硬件、硬件防火牆使用專有的操做系統,而軟件式防火牆則使用通常的操做系統。
根據工做方式,防火牆仍是能夠分爲封包過濾式防火牆,應用層網關防火牆兩種,其中廣爲採用的是封包過濾式防火牆,本次介紹的iptables防火牆就屬於這一種。
iptables是Linux系統內嵌的一個防火牆軟件,它集成在系統內核中,所以執行效率很是高。iptables經過設置一些封包過濾規則,來定義什麼數據能夠接受,什麼數據須要拒絕,所以,用戶經過iptables能夠對進出計算機的數據包進行IP過濾以達到保護主機的目的。html

一、安全技術:
檢測與管理系統(Intrusion Detection Systems):
特色是不阻斷任何網絡訪問,量化、定位來自內外網絡的威脅狀況,主要以提供報告和過後監督爲主,提供有針對性的指導措施和安全決策依據。通常採用旁路部署方式
防護系統(Intrusion Prevention System):
以透明模式工做,分析數據包的內容如:溢出、拒絕服務、蠕蟲、系統漏洞等進行準確的分析判斷,在斷定爲行爲後當即予以阻斷,主動而有效的保護網絡的安全,通常採用在線部署方式
防火牆(FireWall):
隔離功能,工做在網絡或主機邊緣,對進出網絡或主機的數據包基於必定的規則檢查,並在匹配某規則時由規則定義的行爲進行處理的一組功能的組件,基本上的實現都是默認狀況下關閉全部的經過型訪問,只開放容許訪問的策略
通常而然,對一臺主機來說網絡通訊就是經過網絡通訊接口設備,通常叫作網卡,經過報文交換來實現
而主機所謂的防火牆,無非就是對此類的報文通訊的來回交換給它予以隔離,稱爲"防火牆"
防火牆功能自己是如何具體實施規則的,是須要用戶根據本身的實際需求進行設置的
防火牆防火是靠報文過濾實現的(Packet filter)
定義一些特殊的訪問行爲特徵前端

二、防火牆的分類:
防火牆的分類
主機防火牆:
服務範圍爲當前主機
網絡防火牆:
服務範圍爲防火牆一側的局域網
硬件防火牆:
在專用硬件級別實現部分功能的防火牆;另外一個部分功能基於軟件實現,Checkpoint,NetScreen
軟件防火牆:
運行於通用硬件平臺之上的防火牆的應用軟件
網絡層防火牆:
OSI模型下四層
應用層防火牆/代理服務器:
代理網關,OSI模型七層node

要想達到識別越透徹目的,所消耗的時間成本就越大,這是必然的
        從平均的角度來說,所以應用層防火牆和網絡層防火牆的主要區別在於:
            網絡層防火牆性能好、可是識別的精確度就沒有應用層那樣高,可是應用層的識別很顯然,它們對於時間的消耗或者對用戶的訪問帶來的延遲略大、越長

三、網絡型防火牆:
包過濾防火牆
網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,被稱爲訪問控制列表(ACL),經過檢查數據流中每一個數據的源地址,目的地址,所用端口號和協議狀態等因素,或他們的組合來肯定是否容許該數據包經過
優勢:
對用戶來講透明,處理速度快且易於維護
缺點:
沒法檢查應用層數據,如病毒等
iptables防火牆linux

四、應用層防火牆:
應用層防火牆/代理服務型防火牆(Proxy Service)
將全部跨越防火牆的網絡通訊鏈路分爲兩段
內外網用戶的訪問都是經過代理服務器上的「連接」來實現
優勢:在應用層對數據進行檢查,比較安全
缺點:增長防火牆的負載
現實生產環境中所使用的防火牆通常都是兩者結合體
即先檢查網絡數據,經過以後再送到應用層去檢查
端口表明進程地址
iptables防火牆web

iptables的基本認識
一、Netfilter組件:
內核空間,集成在linux內核中
擴展各類網絡服務的結構化底層框架
內核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶能夠經過一個命令工具(iptables)向其寫入規則
由信息過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在鏈(chain)上
二、三種報文流向:
流入本機:
PREROUTING --> INPUT-->用戶空間進程
流出本機:
用戶空間進程-->OUTPUT--> POSTROUTING
轉發:
PREROUTING --> FORWARD --> POSTROUTING
三、防火牆工具
四、iptables
命令行工具,工做在用戶空間
用來編寫規則,寫好的規則被送往netfilter,告訴內核如何去處理信息包
五、firewalld
CentOS7 引入了新的前端管理工具
管理工具:
firewall-cmd命令行
firewall-config圖形
iptables的組成
iptables由五個表和五個鏈以及一些規則組成
五個表table:
filter、nat、mangle、raw、security
filter表:
過濾規則表,根據預約義的規則過濾符合條件的數據包
nat表:
network address translation 地址轉換規則表
mangle:
修改數據標記位規則表
raw:
關閉NAT表上啓用的鏈接跟蹤機制,加快封包穿越防火牆速度
security:
用於強制訪問控制(MAC)網絡規則,由Linux安全模塊(如SELinux)實現
優先級由高到低的順序爲:security -->raw-->mangle-->nat-->filter
conntrack
五個內置鏈chain:
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING算法

表和鏈的對應關係:
    不一樣的功能,實現位置是不同的
        filter:
            INPUT,FORWARD, OUTPUT
        nat:
            PREROUTING, INPUT, OUTPUT, POSTROUTING
        mangle:
            PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
        raw:
            PREROUTING, OUTPUT

配置文件保存路徑
    /etc/sysconfig/iptables
從指定目錄中讀取或加載配置文件
    iptables-restore  < /etc/sysconfig/iptables

Netfilter表和鏈對應關係
iptables防火牆數據庫

數據包過濾匹配流程
iptables防火牆centos

IPTABLES和路由
路由功能發生的時間點
報文進入本機後
判斷目標主機是否爲本機
是:INPUT
否:FORWARD
報文離開本機以前
判斷由哪一個接口送往下一跳
iptables防火牆安全

內核中數據包的傳輸過程
內核中數據包的傳輸過程
當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否須要轉送出去
若是數據包就是進入本機的,數據包就會沿着圖向下移動,到達INPUT鏈。數據包到達INPUT鏈後,任何進程都會收到它。本機上運行的程序能夠發送數據包,這些數據包通過OUTPUT鏈,而後到達POSTROUTING鏈輸出
若是數據包是要轉發出去的,且內核容許轉發,數據包就會向右移動,通過FORWARD鏈,而後到達POSTROUTING鏈輸出服務器

進入,流出
進入本機:PREROUTING
    目標爲本機IP:INPUT
    目標非爲本機IP:FORWARD
流出本機:POSTROUTING
    轉發:FORWARD
    本機發出:OUTPUT

一、進入本機:從PREROUTING進來,而後到達INPUT
二、轉發:從PREROUTING進來,而後送給FORWARD,隨後再路由就從選定哪塊網卡發出之後,再由網卡離開的時候經由POSTROUTING
三、本機發出:進入OUTPUT,隨後進入POSTROUTING離開本機
鏈接追蹤機制;
    斷定一個出去的報文是否是跟某個進來的請求有關聯,若是對進來的某個請求進行響應,就是安全的,若是是本機莫名其妙的鏈接別人就由於是不安全的,所以咱們能夠把出行的時候策略設置爲拒絕,並且咱們也不明確放行任何出去的報文,也就是說跟進來的請求有關聯纔給予放行,要用到鏈接機制
鏈接追蹤,其實就是數據庫,在本地保存一個會話數據庫、每一次請求來了在數據庫裏面查下這個請求以前是否有請求記錄
鏈接追蹤是把雙刃劍,能幫咱們識別鏈接,但也可以消耗不少系統資源
面向互聯網服務的高併發支撐的服務器必定不要啓用鏈接追蹤,除非內存資源足夠大,mangle足夠寬,不然這個鏈接是致命的

iptables規則
規則rule:
根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動做做出處理
匹配條件:
默認爲與條件,同時知足
基本匹配:
IP,端口,TCP的Flags(SYN,ACK等)
擴展匹配:
經過複雜高級功能匹配
隱式擴展:
TCP, UDP, ICMP
顯示擴展:
必須明確指定擴展模塊進行的擴展
處理動做:
稱爲target,跳轉目標
內建處理動做:
ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...
自定義處理動做:
自定義chain,利用分類管理複雜情形
規則要添加在鏈上,才生效;
添加在自定義上不會自動生效
鏈chain:
內置鏈:
每一個內置鏈對應於一個鉤子函數
自定義鏈:
用於對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只有Hook鉤子調用自定義鏈時,才生效
iptables添加要點
iptables規則添加時考量點
要實現哪一種功能:
判斷添加在哪張表上
報文流經的路徑:
判斷添加在哪一個鏈上
報文的流向:
判斷源和目的
匹配規則:
業務須要
實驗環境準備:
Centos7:
systemctl stop firewalld.service
systemctl disable firewalld.service
Centos6:
service iptables stop
chkconfig iptables off
擴展匹配又分爲兩類:
一、隱式擴展
端口、TCP屬於隱式擴展
二、顯示擴展:
咱們本身必須明確手動指定如何擴展

iptables命令
一、man 8 iptables
iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
二、規則格式:
iptables[-t table] SUBCOMMAND chain [-m matchname[per-match-options]] -j targetname[per-target-options]
三、-t table:
raw, mangle, nat, [filter]默認
四、SUBCOMMAND:
一、鏈管理:
-N:new, 自定義一條新的規則鏈
-X:delete,刪除自定義的空的規則鏈
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
-E:重命名自定義鏈;引用計數不爲0的自定義鏈不可以被重命名,也不能被刪除
二、查看:
-L:
list, 列出指定鏈上的全部規則,本選項須置後
-n:
numberic,以數字格式顯示地址和端口號
[root@node7 ~]#iptables -vnL
-v:
verbose,詳細信息
-vv更詳細
-x:
exactly,顯示計數器結果的精確值,而非單位轉換後的易讀值
--line-numbers:
顯示規則的序號
經常使用組合:
-vnL
-vvnxL--line-numbers

[root@node7 ~]#iptables -vnL --line-number
        -S:
            selected,以iptables-save 命令格式顯示鏈上規則

    三、規則管理:
            -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
七、基本匹配條件:
無需加載模塊,由iptables/netfilter自行提供
[!] -s, --source address[/mask][,...]:源IP地址或範圍
[!] -d, --destination address[/mask][,...]:目標IP地址或範圍
[!] -p, --protocol protocol:指定協議,可以使用數字如0(all)
protocol: tcp, udp, icmp, icmpv6,udplite,esp, ah, sctp, mhor「all「
參看:/etc/protocols
[!] -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,--dportport[:port]:匹配報文目標端口,可爲範圍
[!] --tcp-flags mask comp
mask 需檢查的標誌位列表,用,分隔
例如SYN,ACK,FIN,RST
comp 在mask列表中必須爲1的標誌位列表,無指定則必須爲0,用,分隔
udp
[!] --source-port, --sport port[:port]:匹配報文的源端口或端口範圍
[!] --destination-port,--dportport[:port]:匹配報文的目標端口或端口範圍

icmp
    [!] --icmp-type {type[/code]|typename}
        type/code
            0/0 echo-replyicmp應答
            8/0 echo-request icmp請求
顯式擴展:
    必須使用-m選項指明要調用的擴展模塊的擴展機制,要手動加載擴展模塊   
    [-m matchname[per-match-options]]

十一、處理動做:
-j targetname[per-target-options]
簡單:
ACCEPT,DROP
擴展:
REJECT:
--reject-with:icmp-port-unreachable默認
RETURN:
返回調用鏈
REDIRECT:
端口重定向
LOG:
記錄日誌,dmesg
MARK:
作防火牆標記
DNAT:
目標地址轉換
SNAT:
源地址轉換
MASQUERADE:
地址假裝
...
自定義鏈:
十二、顯式擴展:
必須顯式地指明使用的擴展模塊進行的擴展
使用幫助:
CentOS 6: man iptables
CentOS 7: man iptables-extensions
12.一、multiport擴展
以離散方式定義多端口匹配,最多指定15個端口
[!] --source-ports,--sports port[,port|,port:port]...
指定多個源端口
[!] --destination-ports,--dportsport[,port|,port:port]...
指定多個目標端口
[!] --ports port[,port|,port:port]...多個源或目標端口
示例:
iptables -A INPUT -s 192.168.137.0/24 -d 192.168.137.56 -p tcp -m multiport --dports 20:22,80,445 -j ACCEPT

12.二、iprange擴展:
    指明連續的(但通常不是整個網絡)ip地址範圍
    [!] --src-range from[-to]源IP地址範圍
    [!] --dst-range from[-to]目標IP地址範圍

    示例:
    iptables -A INPUT -d 192.168.137.56 -p tcp --dport 80 -m iprange --src-range 192.168.137.100-192.168.137.200 -j DROP

12.三、mac擴展
    指明源MAC地址
    適用於:PREROUTING, FORWARD,INPUT chains
    [!] --mac-source XX:XX:XX:XX:XX:XX
    示例:
        iptables-A INPUT -s 192.168.137.56 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT
        iptables-A INPUT -s 192.168.137.56 -j REJECT

12.四、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 192.168.137.56 -d 0/0 -p tcp --sport 80 -m string --algobm --string 「google" -j REJECT

12.五、time擴展
    根據將報文到達的時間與指定的時間範圍進行匹配
        --datestartYYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
        --datestopYYYY[-MM[-DD[Thh[:mm[:ss]]]]]
        --timestarthh:mm[:ss] 時間
        --timestophh:mm[:ss]
        [!] --monthdaysday[,day...] 每月的幾號
        [!] --weekdays day[,day...] 星期幾,1 –7 分別表示星期一到星期日
        --kerneltz:內核時區,不建議使用,CentOS7系統默認爲UTC
        注意:centos6 不支持kerneltz,--localtz指定本地時區(默認)
    示例:
    iptables -A INPUT -s 192.168.137.0/24 -d 192.168.137.56 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP

12.六、connlimit擴展
    根據每客戶端IP作併發鏈接數數量匹配
    可防止CC(Challenge Collapsar挑戰黑洞)***--connlimit-upto#:鏈接的數量小於等於#時匹配
    --connlimit-above #:鏈接的數量大於#時匹配
    一般分別與默認的拒絕或容許策略配合使用
    示例:
        iptables -A INPUT -d 192.168.137.56 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

12.七、limit擴展
    基於收發報文的速率作匹配
    令牌桶過濾器
        --limit #[/second|/minute|/hour|/day]
        --limit-burst number
    示例:
    iptables -I INPUT -d 192.168.137.56 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
    iptables -I INPUT 2 -p icmp -j REJECT

12.八、state擴展
    根據」鏈接追蹤機制「去檢查鏈接的狀態,較耗資源

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

    狀態有以下幾種:
        NEW:新發出請求;鏈接追蹤信息庫中不存在此鏈接的相關信息條目,所以,將其識別爲第一次發出的請求
        ESTABLISHED:NEW狀態以後,鏈接追蹤信息庫中爲其創建的條目失效以前期間內所進行的通訊狀態
        RELATED:新發起的但與已有鏈接相關聯的鏈接,如:ftp協議中的數據鏈接與命令鏈接之間的關係
        INVALID:無效的鏈接,如flag標記不正確
        UNTRACKED:未進行追蹤的鏈接,如raw表中關閉追蹤

    [!] --state state       
    示例:
    iptables -A INPUT -d 192.168.137.56 -p tcp-m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -s 192.168.137.56 -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/
    注意:
        CentOS7 須要加載模塊:modprobenf_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_conntracktimeout時間
        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

iptables總體命令大致上歸併成 iptables [-t table][subcommand][chain][rulenum][rule-specifiacation]
子命令當中簡單歸類:
subcommand
    規則管理:
        增長:-A -I
        修改:-R
        查看:-L
        刪除:-D
    鏈管理:
        自定義:-N
        刪:-X
        查:-L
        清空:-F 
        置零:-Z
        重命名: -E
        設定鏈的默認策略:-P
對於不一樣表來說,可用鏈不一樣,究竟把規則放在哪一個表的哪一個鏈上,則取決咱們對報文請求如何響應發送方向的判別來決定,而後rulenum不一樣的選項支持不同

規則編寫時,定義rule-specifiacation時候是如何定義規則的
    rule specifiacation
        常見的兩類:
            基本匹配表達式:
                    匹配報文源地址:-s
                    匹配報文目標地址:-d
                    匹配報文四層協議類型:-p
                    匹配報文流入和流出的接口: -i, -o
            擴展匹配表達式:
                隱式擴展
                顯示擴展

    target

tcp協議的擴展選項
示例:
--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_flagsALL NONE
[!] --syn:
用於匹配第一次握手
至關於:--tcp-flags SYN,ACK,FIN,RST SYN
iptables簡單示例
如下實驗的默認ACCEPT都被修改爲DROP下進行的
白名單設置:
先把ssh遠程鏈接容許鏈接的IP添加進去
[root@node7 ~]#iptables -A INPUT -s 192.168.137.0/24 -d 192.168.137.57 -p tcp --dport 22 -j ACCEPT
[root@node7 ~]#iptables -A OUTPUT -d 192.168.137.0/24 -p tcp --sport 22 -j ACCEPT
而後把默認容許改爲拒絕
[root@node7 ~]#iptables -P OUTPUT DROP

刪除規則用 -D
刪除INPUT和OUTPUT中的第二條規則,
    [root@node7 ~]#iptables -D INPUT 2
    [root@node7 ~]#iptables -D OUTPUT 2 

只開放特定web80端口容許訪問
    [root@node7 ~]#iptables -A  INPUT -d 192.168.137.57 -p tcp --dport 80 -j ACCEPT
    [root@node7 ~]#iptables -A OUTPUT -s 192.168.137.57 -p tcp --sport 80 -j ACCEPT
而後經過網頁測試或者Linux客戶端用curl來訪問
    [root@node6 ~]#curl http://192.168.137.57
    welcome dklwj.com

修改規則 -R
修改只從指定接口出去
[root@node7 ~]#iptables -R INPUT 2 -p tcp --dport 80 -i ens33 -j ACCEPT
[root@node7 ~]#iptables -R OUTPUT 2 -p tcp --sport 80 -o ens33 -j ACCEPT

只容許本機ping別的主機,不容許別的主機ping本機
[root@node7 ~]#iptables -A OUTPUT -s 192.168.137.57 -o ens33 -p icmp --icmp-type 8 -j ACCEPT
[root@node7 ~]#iptables -A INPUT -d 192.168.137.57 -i ens33 -p icmp --icmp-type 0 -j ACCEPT

開放多個零散端口
[root@node7 ~]#iptables -I INPUT -d 192.168.137.57 -i ens33 -p tcp -m multiport --dports 21:22,80,139,445 -j ACCEPT
[root@node7 ~]#iptables -I OUTPUT -s 192.168.137.57 -o ens33 -p tcp -m multiport --sports 21,22,80,139,445 -j ACCEPT

只容許網段中的其中哪些IP段
[root@node7 ~]#iptables -I INPUT 2 -d 192.168.137.57 -i ens33 -p tcp --dport 23 -m iprange --src-range 192.168.137.50-192.168.137.60 -j ACCEPT
[root@node7 ~]#iptables -I OUTPUT 2 -s 192.168.137.57 -o ens33 -p tcp --sport 23 -m iprange --dst-range 192.168.137.50-192.168.137.60 -j ACCEPT
[root@node7 ~]#iptables -vnL

過濾網頁中的某敏感字符
[root@node7 ~]#echo this is 1024 > /var/www/html/test.html
[root@node7 ~]#iptables -I OUTPUT -m string --string "1024" --algo kmp -j DROP

[root@node6 ~curl http://192.168.137.57
welcome dklwj.com
[root@node6 ~]#curl http://192.168.137.57/test.html

基於時間控制訪問:
[root@node7 ~iptables -I INPUT -d 192.168.137.57 -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
不過這裏的時區是爲UTC時區,還得須要用其餘模塊來控制
[root@node7 ~]#iptables -R INPUT 1 -d 192.168.137.57 -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --kerneltz --weekdays Mon,Tue,Wed,The,Fri -j DROP
[root@node7 ~]#

設置ssh鏈接的併發數爲2
[root@node7 ~]#iptables -I INPUT -d 192.168.137.57 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

鏈接追蹤示例:

先把默認規則改爲drop
[root@node6 ~]#iptables -A INPUT -j DROP 
[root@node6 ~]#iptables -A OUTPUT -j DROP
[root@node6 ~]#iptables -A INPUT -d 192.168.137.56 -p tcp -m multiport --dports 22,80,443,139,445 -m state --stete NEW,ESTABLISHED -j ACCEPT
[root@node6 ~]#iptables -A OUTPUT -s 192.168.137.56 -p tcp -m multiport --sports 22,80,443,139,445 -j ACCEPT

修改除本地接口lo除外其它都拒絕
[root@node6 ~]#iptables -R INPUT 3 ! -i lo -j DROP
[root@node6 ~]#iptables -R OUTPUT 2 ! -o lo -j DROP

放行ftp服務
[root@node6 ~]#iptables -I INPUT 1 -d 192.168.137.56 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@node6 ~]#iptables -I INPUT 2 -d 192.168.137.56 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@node6 ~]#iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT

RELATED是個單獨的模塊,須要手動加載到內核中去
[root@node6 ~]#lsmod | grep conntrack
nf_conntrack_ipv4      15053  5 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
xt_conntrack           12760  5 
nf_conntrack          133053  2 xt_conntrack,nf_conntrack_ipv4
libcrc32c              12644  2 xfs,nf_conntrack
[root@node6 ~]#modprobe nf_conntrack_ftp
[root@node6 ~lsmod | grep conntracktp   
nf_conntrack_ftp       18638  0 
nf_conntrack_ipv4      15053  5 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
xt_conntrack           12760  5 
nf_conntrack          133053  3 xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4
libcrc32c              12644  2 xfs,nf_conntrack

客戶端測試:
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:~> ls
drwxr-xr-x 2 0 0 19 Oct 22 12:26 pub
drwxr-xr-x 2 14 50 6 Oct 22 13:11 upload
lftp 192.168.137.56:/>

優化規則
[root@node6 ~]#iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@node6 ~]#iptables -R INPUT 2 -d 192.168.137.56 -p tcp -m multiport --dports 21:22,80,443,139,445 -m state --state N -j ACCEPT
[root@node6 ~]#iptables -D INPUT 3
[root@node6 ~]#iptables -D INPUT 3

放行本身出去請求別的服務器的80和443
[root@node6 ~iptables -R OUTPUT 2 -s 192.168.137.56 -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT

保存和恢復規則:
先保存
[root@node6 ~]#iptables-save > /etc/sysconfig/iptables
而後清空規則
[root@node6 ~]#iptables -F
[root@node6 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 67 packets, 3568 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 53 packets, 3248 bytes)
pkts bytes target prot opt in out source destination
恢復以前保存的規則
[root@node6 ~]#iptables-restore < /etc/sysconfig/iptables
[root@node6 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
868 26292 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.137.56 multiport dports 21:22,80,443,139,445 state NEW
0 0 DROP all -- !lo * 0.0.0.0/0 0.0.0.0/0

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 852 27188 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED 0 0 ACCEPT tcp -- * * 192.168.137.56 0.0.0.0/0 multiport dports 80,443 state NEW 0 0 DROP all -- * !lo 0.0.0.0/0 0.0.0.0/0 [root@node6 ~]#

相關文章
相關標籤/搜索