iptables詳解

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] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

-t table:
raw, mangle, nat, [filter]
chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

COMMAND:
鏈管理:
-N:new, 自定義一條新的規則鏈;
-X:delete,刪除自定義的規則鏈;
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
REJECT:拒絕
-E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能被刪除;
規則管理:
-A:append,追加;
-I:insert, 插入,要指明位置,省略時表示第一條;
-D:delete,刪除;
(1) 指明規則序號;
(2) 指明規則本身;
-R:replace,替換指定鏈上的指定規則;

-F:flush,清空指定的規則鏈;
-Z:zero,置零;
iptables的每條規則都有兩個計數器:
(1) 匹配到的報文的個數;
(2) 匹配到的所有報文的大小之和;
查看:
-L:list, 列出指定鏈上的所有規則;
-n:numberic,以數字格式顯示地址和端口號;
-v:verbose,詳細信息;
-vv, -vvv
-x:exactly,顯示計數器結果的精確值;
–line-numbers:顯示規則的序號;

匹配條件:
基本匹配條件:無需加載任何模塊,由iptables/netfilter自行提供;
[!] -s, –source address[/mask][,…]:檢查報文中的源IP地址是否符合此處指定的地址或范圍;
[!] -d, –destination address[/mask][,…]:檢查報文中的目標IP地址是否符合此處指定的地址或范圍;
[!] -p, –protocol protocol
protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or “all”
{tcp|udp|icmp}
[!] -i, –in-interface name:數據報文流入的接口;只能應用于數據報文流入的環節,只能應用于PREROUTING,INPUT和FORWARD鏈;
[!] -o, –out-interface name:數據報文流出的接口;只能應用于數據報文流出的環節,只能應用于FORWARD、OUTPUT和POSTROUTING鏈;

隱式擴展:不需要手動加載擴展模塊;因為它們是對協議的擴展,所以,但凡使用-p指明了協議,就表示已經指明了要擴展的模塊;
tcp:
[!] –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;
[!] –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍;
[!] –tcp-flags mask comp
mask is the flags which we should examine, written as a comma-separated list,例如 SYN,ACK,FIN,RST
comp is a comma-separated list of flags which must be set,例如SYN
例如:“–tcp-flags SYN,ACK,FIN,RST SYN”表示,要檢查的標志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0;
[!] –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}
echo-request:8
echo-reply:0

擴展匹配條件: 需要加載擴展模塊,方可生效;
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.67 -p tcp -m multiport –dports 22,80 -j ACCEPT

2、iprange擴展
指明連續的(但一般不腦整個網絡)ip地址范圍;

[!] –src-range from[-to]:源IP地址;
[!] –dst-range from[-to]:目標IP地址;

~]# iptables -A INPUT -d 172.16.100.67 -p tcp –dport 80 -m iprange –src-range 172.16.100.5-172.16.100.10 -j DROP

3、string
–algo {bm|kmp}:字符串匹配檢測算法;
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
[!] –string pattern:要檢測的字符串模式;
[!] –hex-string pattern:要檢測的字符串模式,16進制格式;

~]# iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp –sport 80 -m string –algo bm –string “gay” -j REJECT
在入站請求上做檢測意義不大

4、time 時間同步服務器 ntp 202.120.2.101
-m 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…]

[root@localhost ~]# iptables -A INPUT -p tcp -d 192.168.68.134 -m time –timestart 1:00:00 –timestop 2:00:00 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp -s 192.168.68.134 -m time –timestart 1:00:00 –timestop 2:00:00 -j ACCEPT
限制時間段9:00-10:00訪問
看網上說要加–kerneltz 否則默認是UTC時間 親測發現加不加都是UTC時間 按照你的時間-8就行了

5、connlimit擴展
根據每客戶端IP做并發連接數數量匹配;
–connlimit-upto n:連接的數量小于等于n時匹配;
–connlimit-above n:連接的數量大于n時匹配;
[root@localhost ~]# iptables -A INPUT -d 192.168.68.134 -p tcp –dport 22 -m connlimit –connlimit-upto 2 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p tcp –sport 22 -j ACCEPT

6、limit擴展
基于收發報文的速率做匹配;

令牌桶過濾器;

–limit rate[/second|/minute|/hour|/day]
–limit-burst number

[root@localhost ~]# iptables -A INPUT -d 192.168.68.134 -p icmp –icmp-type 8 -m limit –limit 3/min –limit-burst 5 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p icmp –icmp-type 0
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p icmp –icmp-type 0 -j ACCEPT
防DOS攻擊

7、state:是conntrack的子集
conntrack機制:追蹤本機上的請求和響應之間的關系;狀態有如下幾種:
NEW:新發出請求;連接追蹤模板中不存在此連接的相關信息條目,因此,將其識別為第一次發出的請求;
ESTABLISHED:NEW狀態之后,連接追蹤模板中為其建立的條目失效之前期間內所進行的通信狀態;
RELATED:相關聯的連接;如ftp協議中的數據連接與命令連接之間的關系;
INVALID:無效的連接;
UNTRACKED:未進行追蹤的連接;

已經追蹤到的鏈接可以在/proc/net/nf_conntrack中查看
最大追蹤鏈接數 /proc/sys/net/nf_conntrack_max中查看
調整最大數~]# sysctl -w net.nf_conntrack_max=300000
或~]# echo 300001 > /proc/sys/net/nf_conntrack_max

超時的連接會被刪除;當模板滿載時,后續的新連接有可能會超時
1)加大nf_conntrack_max的值
2)降低nf_conntrack條目的超時時常
不同協議的連接追蹤時長/proc/sys/net/netfilter/

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

解決方法一般有兩個:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.ipv4.nf_conntrack_max = 393216
net.ipv4.netfilter.nf_conntrack_max = 393216

(2) 降低 nf_conntrack timeout時間
vi /etc/sysctl.conf
net.ipv4.netfilter.nf_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

實用規則
iptables -A INPUT -d 192.168.68.134 -p tcp -m mulitiport –dports 22,23,80 -m state –state NEW -j ACCEPT
iptables -A INPUT -d 192.168.68.134 -p tcp -m multiport –dports 22,23,80 -m state –state NEW -j ACCEPT
iptables -A INPUT -d 192.168.68.134 -p icmp –icmp-type 8 -m state –state NEW,ESTABLISHED -jACCEPT
iptables -A OUTPUT -m state –state ESTABLISHED -j ACCEPT

 

RELATED 如何放行被動的ftp服務
1)modprobe nf_conntrack_ftp #內核裝載ftp模塊
2)放行命令連接
iptables -A INPUT -d $sip -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

3)放行數據連接
iptables -A INPUT -s $sip -p tcp -m state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d $sip -p tcp -m state ESTABLISHED -j ACCEPT

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

保存規則:
保存規則至指定的文件:
CentOS 6:
~]# service iptables save
將規則保存至/etc/sysconfig/iptables文件中;

~]# iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 7:
~]# iptables-save > /PATH/TO/SOME_RULES_FILE

重新載入預存規則文件中規則:
~]# iptables-restore < /PATH/FROM/SOME_RULES_FILE

CentOS 6:
~]# service iptables restart

自動生效規則文件中的規則:
(1) 用腳本保存各iptables命令;讓此腳本開機后自動運行;
/etc/rc.d/rc.local文件中添加腳本路徑;
/PATH/TO/SOME_SCRIPT_FILE

(2) 用規則文件保存各規則,開機時自動載入此規則文件中的規則;
/etc/rc.d/rc.local文件添加:
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

centos6
service iptables save
chkconfig iptales on

處理動作
-j ACCEPT DROP REJECT
RETURN 返回調用的鏈
REDIRECT 端口重定向
LOG日志
MARK 防火墻標記
DNAT 目標地址轉換
SNAT 源地址轉換
MASQUERADE地址偽裝 POSTROUTING

LOG
iptables -I FORWARD 2 -s 10.0.0.0/24 -p tcp –dport 80 -m state –state NEW -j LOG –log-prefix “new connect:”
在/var/log/messages下看到日志

REDIRECT 端口映射
[root@centos ~]# iptables -t nat -A PREROUTING -d 192.168.68.144 -p tcp –dport 80 -j REDIRECT –to-ports 8080
客戶端訪問的80端口 實際響應的是8080端口

 

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

(0)
N27_flypigN27_flypig
上一篇 2017-11-12 13:10
下一篇 2017-11-12 14:23

相關推薦

  • linux的文件類型

    linux的文件類型 linux其中的一個哲學思想就是一切皆文件,今天我們就來學習一下linux系統中的文件類型。linux不同于windows,有多種多類的文件類型,文件類型的判斷也不是以文件的后綴為標準的。linux中一共有七種文件類型,分別是:普通文件、目錄、字符設備文件、塊設備文件、套接字文件、命名管道文件和符號鏈接文件。那么接下來我們就分別看看每種…

    Linux干貨 2016-10-27
  • shell之變量總結

    1 什么是shell變量 按照定義來說,變量是存儲設備中的一些可讀寫的存儲單元.變量可以定制用戶本身的工作環境。使用變量可以保存有用信息,使系統獲知用戶相關設置。變量也用 于保存暫時信息。例如:一變量為EDITOR,系統中有許多編輯工具,但哪一個適用于系統呢?將此編輯器名稱賦給EDITOR,這樣,在使用cron或其 他需要編輯器的應用時,這就是你將一直使用的…

    Linux干貨 2016-08-15
  • 知乎上推薦的幾款快速上手的UI框架

    1、Flat UI Flat UI是一套精美的扁平風格 UI 工具包,基于 Twitter Bootstrap 實現。地址:designmodo/Flat-UI · GitHub 2、BootMetro 基于 Twitter Bootstrap 框架構建,用于創建 Windows 8 的 Metro 風格的網站,靈感來自于 Metro UI CSS 。地址:…

    2015-03-17
  • 第十周:Linux系統啟動流程及shell腳本練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 一張圖足以說明一切: 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;   (1) 為硬盤新建兩個主分區;并為其安裝grub;   (2) 為硬盤的第一個主分區提供內核和ramdisk文件;為第二個分區提供rootfs;   (3)…

    Linux干貨 2016-11-30
  • 進程管理

    進程概念 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等 Process(進程):運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID (Process ID ,PID )號碼被用來標記各個進程 UID、GID、和SELinux語境決定對文件系統的存取和訪問權限 通常從執行進程的用戶來繼承 存在生命周期 task struc…

    2017-05-09
  • VIM入門及進階

    什么是VIM?     VIM類似于Vi編輯器, 它是一個功能強大、可高度定制的文本編輯器, 是一個純粹的自由軟件。注意:vi和vim不完全相同 為什么要使用VIM?     相信大多數人接觸Linux時使用的第一個文本編輯器都不是VIM,很多人看到VIM復雜的命令操作就望而祛步…

    系統運維 2016-03-04
欧美性久久久久