iptabes的使用

来源:http://www.cnblogs.com/shenxm/archive/2017/10/23/7716790.html
-Advertisement-
Play Games

iptables的使用 基本用法: 詳細用法說明: 1)table 2)subcommand選項 1》鏈管理 2》查看: 3》規則管理: 3)鏈chain: 4)match,匹配條件 1》基本匹配條件: 2》擴展匹配條件: 1 隱式擴展 :對某一種協議的擴展 1.tcp 協議, m tcp,擴展選項 ...


iptables的使用

基本用法:

iptables [-t table] [subcommand] chain [rulenum] [options...] [match] [target]
iptables [-t 表名] <-A|-I|-D|-R> 鏈名 [規則編號][-i|o 網卡名稱][-p 協議類型][-s 源ip地址][源子網][--sport 源埠號][-d 目標ip地址|目標子網][--dport 目標埠號][-j 處理動作]

詳細用法說明:

1)table

filter:一般的過濾功能,包含input,forward,output。預設選項
nat:用於地址轉換、映射、埠映射等,包含prerouting,postrouting
mangle:用於對特定數據包的修改,包含prerouting,output,forward,input,postrouting
raw:一般是為了不再讓iptables做數據包的連接跟蹤處理,從而提供性能,包含prerouting,output

2)subcommand選項

1》鏈管理

-N :new,  自定義一條新的規則鏈
-X :delete ,刪除自定義的空的規則鏈
-P :Policy ,設置預設策略;對filter 表中的鏈而言,其預設策略有:ACCEPT :接受,DROP :丟棄
-E :重命名自定義鏈;引用計數不為0 的自定義鏈不能夠被重命名,也不能被刪除

2》查看:

-L :list,  列出指定鏈上的所有規則,本選項須置後
-n :numberic ,以數字格式顯示地址和埠號
-v :verbose ,詳細信息
-vv:更詳細
-x :exactly ,顯示計數器結果的精確值, 而非單位轉換後的易讀值
--line-numbers :顯示規則的序號
-S :selected, 以iptables-save命令格式顯示鏈上規則 
常用組合:
    --vnL
    --vvnxL --line-numbers

3》規則管理:

-A :append,追加
-I :insert,插入,要指明插入的規則編號,預設為第一條。
-D :delete,刪除。(1)指明規則序號,(2)指明規則本身
-R :replace ,替換指定鏈上的指定規則編號
-F :flush ,清空指定的規則鏈
-Z :zero ,置零
iptables 的每條規則都有兩個計數器
(1)匹配到的報文的個數
(2)匹配到的所有報文的大小之和

3)鏈chain:

INPUT:通過路由表判斷後目的地是本機,然後進入本機內部資源
OUTPUT:有本機產生的數據向外部轉發
FORWARD:通過路由表判斷後目的地不是本機,然後通過路由轉發到其他地方
PREROUTING:流入的數據包進入路由表之前
POSTROUTING:傳出的數據包到達網卡出口之前

4)match,匹配條件

基本:通用的,parameters
擴展:需載入模塊,match extentions

1》基本匹配條件:

無需載入模塊,由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,mh or “all“ 參看:/etc/protocols
[!] -i, --in-interface name :報文流入的介面;只能應用於數據報文流入環節,只應用於 INPUT 、FORWARD 、PREROUTING 鏈
[!] -o, --out-interface name :報文流出的介面;只能應用於數據報文流出的環節,只應用於 FORWARD 、OUTPUT 、 POSTROUTING 鏈

2》擴展匹配條件:

需要載入擴展模塊(/usr/lib64/xtables/*.so),方可生效,是對某一種功能的擴展,經由擴展模塊引入的匹配機制。
查看幫助:man iptables-extensions
1>隱式擴展 :對某一種協議的擴展
在使用-p 選項指明瞭特定的協議時,無需再用-m 選項指明擴展模塊的擴展機制,不需要手動載入擴展模塊。
-p做協議匹配,協議有:tcp,udp,icmp,icmpv6,ah,esp,sctp,mh,all
1.tcp 協議,-m tcp,擴展選項
[!] --source-port, --sport port[:port] :匹配報文tcp首部源埠,可為埠範圍
[!] --destination-port,--dport port[:port] :匹配報文目標埠,可為範圍
[!] --tcp-flags mask comp:mask需檢查的標誌位列表,用逗號分隔,如 SYN,ACK,FIN,RST,PSH,URG,ALL,NONE.comp在mask列表中必須為1的標誌位列表,無指定則必須為0,用逗號分割
[!] --syn :用於匹配第一次握手。相當於:--tcp-flags SYN,ACK,FIN,RST,SYN
2.udp 協議,-m udp,擴展選項
[!] --source-port, --sport port[:port] :匹配報文udp首部的源埠;可以是埠範圍
[!] --destination-port,--dport port[:port] :匹配報文udp首部的目標埠;可以是埠範圍
3.icmp
ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網路通不通、主機是否可達、路由是否可用等網路本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起著重要的作用。)
-m  icmp:專有選項
[!] --icmp-type {type[/code]|typename}:type/code為 0/0 echo-reply表示icmp 應答,type/code為8/0 echo-request表示icmp 請求
2>顯式擴展 :
額外附加的更多的匹配規則,功能性擴展
必須使用-m 選項指明要調用的擴展模塊的擴展機制,要手動載入擴展模塊,即[-m matchname [per-match-options]
-m 模塊名稱
每個模塊會引入新的匹配機制
可以通過rpm -ql iptables 來獲得那些模塊可用,模塊是以.so結尾的。
使用幫助:
man iptables (centos6)
man iptables-extensions(centos7)
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.100.10 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.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 --mac-source 00:50:56:12:34:56 -j ACCEPT 
    iptables -A INPUT -s 172.16.0.100 -j REJECT
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 :匹配,限定併發連接數的上限
--connlimit-above 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 --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
    iptables -I INPUT 2 -p icmp -j REJECT
8. state 擴展
狀態檢測擴展,根據“連接追蹤機制”去檢查連接的狀態,較耗資源。
追蹤本機上的請求和響應之間的關係,狀態有如下幾種:
    NEW :新發出請求;連接追蹤信息庫中不存在此連接的相關信息條目,因此,將其識別為第一次發出的請求
    ESTABLISHED :NEW 狀態之後,連接追蹤信息庫中為其建立的條目失效之前期間內所進行的通信狀態
    RELATED :新發起的但與已有連接相關聯的連接,如:ftp 協議中的數據連接與命令連接之間的關係
    INVALID :無效的連接,如flag 標記不正確
    UNTRACKED :未進行追蹤的連接,如raw
[!] --state:state就是NEW等狀態
示例:
    iptables -A INPUT -d 172.16.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -s 172.16.100.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

1>

以上連接追蹤功能內核會在記憶體中開闢一段專用的空間用於存儲連接的狀態等,由於此段記憶體空間是有限的,因此就必須對連接追蹤功能進行一些調整限制。
有關的內核參數由以下提供:
    已經追蹤到的並記錄下來的連接信息庫
        /proc/net/nf_conntrack
    調整連接追蹤功能所能夠容納的最大連接數量
        /proc/sys/net/nf_conntrack_max
    不同的協議的連接追蹤時長
        /proc/sys/net/netfilter/
    註意:CentOS7  需要載入模塊: modprobe nf_conntrack

2>

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
iptables -t nat -L -n

3>

開放被動模式的ftp服務
(1)裝載ftp 連接追蹤的專用模塊:
    跟蹤模塊路徑:/lib/modules/kernelversion/kernel/net/netfilter
    vim /etc/sysconfig/iptables-config  配置文件
        IPTABLES_MODULES=" nf_conntrack_ftp "
        modproble nf_conntrack_ftp
(2)放行請求報文:
    命令連接:NEW, ESTABLISHED
    數據連接:RELATED, ESTABLISHED
    iptables –I INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
(3)放行響應報文:
    iptables -I  OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

5)terget,處理動作

-j targetname [per-target-options]:跳轉目標
    簡單:
        ACCEPT :接受
        DROP :丟棄
    擴展:
        REJECT :明確拒絕,預設
        RETURN :返回調用鏈
        REDIRECT :埠重定向
        LOG :記錄日誌,dmesg
        MARK :做防火牆標記
        DNAT :目標地址轉換
        SNAT :源地址轉換
        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 multimport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、lvs介紹 LVS的英文全名為“Linux Virtual Server”,即Linux虛擬伺服器,是一個虛擬的四層交換器集群系統,根據目標地址和目標埠實現用戶請求轉發,本身不產生流量,只做用戶請求轉發,目前是負載均衡性能最好的集群系統。 二、lvs集群的類型: lvs nat:修改請求報文的 ...
  • 一、簡介 1、認識 Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。Rsync使用所謂的“Rsync演算法”來使本地和遠 程兩個主機之間的文件達到同步,這個演算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快 Rsy ...
  • 摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。 一、httpd-2.2常見文件介紹 (1)配置文件: 主配置文件儘量別改,改自己的子配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 自配置文件 檢查 ...
  • nohup命令 起因 ssh到機器上,然後執行某個程式,再登錄發現程式早就不運行了。 原因 ssh過去之後,執行的大部分命令(守護進程不會斷開),都是ssh進程的子進程,ssh斷開,命令自然會中斷 解決辦法 命令前面加nohup就可以了,比方說: 局限性 當再次ssh過去的時候程式可能在運行,但是無 ...
  • 兩個命令df 、du結合比較直觀 df -h 查看整台伺服器的硬碟使用情況 cd / 進入根目錄 du -sh * 查看每個文件夾的大小 du -lh --max-depth=1 : 查看當前目錄下一級子文件和子目錄占用的磁碟容量。 這樣的組合可以快速定位大文件和分區滿了 ...
  • 本文目錄:1. 背景知識 1.1 java和jdk概念 1.2 jsp、servlet是什麼 1.3 web伺服器、web容器、應用程式伺服器 1.4 tomcat體繫結構2. 安裝tomcat 2.1 安裝jdk 2.2 安裝tomcat 1. 基礎背景知識 1.1 java和jdk概念 無論是何 ...
  • Vsftp服務 服務功能:文件傳輸 1.環境部署 ip=192.168.1.50 [root@localhost /]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-11.el6_4.1.x86_64.rpm 2.匿名訪問 1)設置配置文件 [root@localhost ...
  • keepalived是什麼 keepalived直譯就是保持存活,在網路裡面就是保持線上了,也就是所謂的高可用或熱備,用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生,keepalived實現的基礎是vrrp,至於vrrp是什麼請直接看這裡 "vrrp" ,下麵我 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...