iptables/netfilter入門到進階

一、iptables/netfilter的簡介:

iptables:規則管理工具;該系統工具有利于在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。防火墻在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信
息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP 信息包過濾系統是一款功能強大的工具,可用于添加、編輯和移除規則。

netfilter:防火墻框架,承載并生效規則;netfilter的架構就是在整個網絡流程的若干位置放置了一些檢測點(HOOK),而在每個檢測點上登記了一些處理函數進行處理。

 

二、iptables命令組成:

iptables [-t table] COMMAND [chain]
[PARAMETERS] [-m matchname [per-match-options]] [-j targetname
[per-target-options]]

1、table:即功能表。主要分為filter、nat、mangle、raw,其優先級由高到低:raw
–> mangle –> nat –> filter
,一般默認為filter功能。

2COMMAND:命令

a)鏈管理:

-N, –new-chain chain:新建一個自定義的規則鏈;

-X, –delete-chain [chain]:刪除用戶自定義的引用計數為0的空鏈;

-F, –flush [chain]:清空指定的規則鏈上的規則;

-E, –rename-chain old-chain new-chain:重命名鏈;

-Z, –zero [chain [rulenum]]:置零計數器;

注意:每個規則都有兩個計數器

packets:被本規則所匹配到的所有報文的個數;

bytes:被本規則所匹配到的所有報文的大小之和;

            -P, –policy chain target

b)規則管理:

-A, –append chain rule-specification:追加新規則于指定鏈的尾部;

-I, –insert chain [rulenum]
rule-specification
:插入新規則于指定鏈的指定位置,默認為首部;

-R, –replace chain rulenum
rule-specification
:替換指定的規則為新的規則;

-D, –delete chain rulenum:根據規則編號刪除規則;

-D, –delete chain rule-specification:根據規則本身刪除規則;                                    

c)規則顯示:

-L, –list [chain]:列出規則;

-v, –verbose:詳細信息;

-vv

-n, –numeric:數字格式顯示主機地址和端口號;

-x, –exact:顯示計數器的精確值,而非圓整后的數據;

–line-numbers:列出規則時,顯示其在鏈上的相應的編號;

-S, –list-rules [chain]:顯示指定鏈的所有規則;       

3、chain:鏈,主要分為prerouting,
input, forward, output, postrouting
,也就是我們平時所說的路由前,輸入,轉發,輸出,路由后,在不同功能表上其所包含的鏈也是不一樣的。比如:

filterinput, forward,
output

natprerouting, input,
output, postrouting

mangleprerouting, input,
forward, output, postrouting

rawprerouting, output

4、PARAMETERS:匹配條件,一般分為通用匹配和擴展匹配。

通用匹配(PARAMETERS):

[!] -s, –source address[/mask][,…]:檢查報文的源IP地址是否符合此處指定的范圍,或是否等于此處給定的地址;

[!] -d, –destination address[/mask][,…]:檢查報文的目標IP地址是否符合此處指定的范圍,或是否等于此處給定的地址;

[!] -p, –protocol protocol:匹配報文中的協議,可用值tcp,
udp,  udplite, icmp,  icmpv6,esp, 
ah, sctp, mh
或者  “all”, 亦可以數字格式指明協議;

-m, –match match:調用指定的擴展匹配模塊來擴展匹配條件檢查機制;

[!] -i, –in-interface name:限定報文僅能夠從指定的接口流入;only
for packets entering the INPUT, FORWARD 
and  PREROUTING  chains.

[!] -o, –out-interface name:限定報文僅能夠從指定的接口流出;for packets entering the FORWARD, OUTPUT and POSTROUTING chains.

擴展匹配(MATCH EXTENSIONS

                   -m
tcp

                   –sport,
–dport

5、-j targetname
[per-target-options]
:處理動作(跳轉目標)

簡單targetACCEPT, DROP

擴展targetREJECT,

LOG

                                     –log-level

                                     –log-prefix

三、iptables的簡單使用

1、開放本機22 端口給多有主機訪問

[root@localhost ~]#iptables -A INPUT -d
172.18.24.1 -p tcp –dport 22 -j ACCEPT

[root@localhost ~]#iptables -A OUTPUT -s
172.18.24.1 -p tcp –sport 22 -j ACCEPT

[root@localhost ~]#iptables -R INPUT 2  -d 172.18.24.1  -j REJECT 
#
禁止其他任何地址訪問

[root@localhost ~]#iptables -R OUTPUT
2  -s 172.18.24.1  -j REJECT

2、開放本機的Samba服務,以上述1標準為防火墻

[root@localhost ~]#systemctl start nmb smb

[root@chenxu html]#smbclient -L 172.18.24.1
-U centos #
此時在客戶端登錄,訪問超時,登錄不上

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p udp –dport 137:138 -j ACCEPT

[root@localhost ~]#iptables -I OUTPUT 2 -s
172.18.24.1 -p udp –sport 137:138 -j ACCEPT

開放137,138,端口,此時客戶端也是連接不上的

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport  139 -j ACCEPT

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport  445 -j ACCEPT

[root@localhost ~]#iptables -I OUTPUT 2 -s
172.18.24.1 -p tcp –sport 139 -j ACCEPT

[root@localhost ~]#iptables -I OUTPUT 2 -s
172.18.24.1 -p tcp –sport 445 -j ACCEPT

開放 139445 端口,此時客戶能連接上Samba服務

3、把Samba服務單獨創建一個鏈

[root@localhost ~]#iptables -N
samba_input_rules
創建自定義鏈

然后添加規則

[root@localhost ~]#iptables -A
samba_input_rules -d 172.18.24.1 -p udp –dport 137:138 -j ACCEPT

[root@localhost ~]#iptables -A
samba_input_rules -d 172.18.24.1 -p tcp –dport 139 -j ACCEPT

[root@localhost ~]#iptables -A
samba_input_rules -d 172.18.24.1 -p tcp –dport 445 -j ACCEPT

布置默認規則

[root@localhost ~]#iptables -A INPUT -d
172.18.24.1 -p tcp –dport 22 -j ACCEPT

[root@localhost ~]#iptables -A INPUT -d
172.18.24.1  -j REJECT

調用Samba規則

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -j samba_input_rules #
這樣客戶端就能夠連接Samba服務了

4、如何刪除自定義鏈?

a)首先取消引用

[root@localhost ~]#iptables -D INPUT 2

b)再把自定義鏈內的規則刪除

[root@localhost ~]#iptables -F
samba_input_rules

c)最后刪除自定義鏈

[root@localhost ~]#iptables -X
samba_input_rules

5、設置iptables使本機可以ping出去,其它機器不能ping進來

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p icmp –icmp-type 0 -j ACCEPT

別的機器可以ping進來

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p icmp –icmp-type 8 -j ACCEPT

或者直接定義icmp的規則

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p icmp -j ACCEPT

這樣既可以ping出去,又能讓別的機器ping進來

6、一次性開放多個端口

[root@localhost ~]#iptables -R INPUT 1 -d
172.18.24.1 -p tcp -m multiport –dports 22,80,139,445 -j ACCEPT

7、開放多個IP端口

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport 23 -m iprange –src-range 172.18.0.100-172.18.0.120
-j ACCEPT 
這個區間的IP都能夠訪問目標地址的23 端口

8、在某個時間段開放端口

[root@localhost ~]#iptables -I INPUT -d
172.18.24.1 -p tcp –dport 80 -m time –timestart 20:00:00 –timestop 23:00:00
–kerneltz -j REJECT

9、對指定報文字符串匹配禁止端口或者開放端口

[root@localhost ~]#iptables -I INPUT  1 -d 172.18.24.1 -p tcp -m multiport –dports
80,443  -m string –algo bm –string
“boy” -j REJECT   #
– – algo是指定算法

[root@localhost ~]#iptables -I OUTPUT  -s 172.18.24.1 -p tcp -m multiport –sports
80,443  -m string –algo bm –string
“boy” -j REJECT

10、在規定單客戶端并發連接數下開放端口,超過則限行

[root@localhost ~]#iptables -I INPUT 2 -d 172.18.24.1
-p tcp –dport 22 -m connlimit –connlimit-above 2 -j REJECT

11、平均時間內放行多少連接,超過則限行

~]# iptables –I INPUT -d 172.16.0.7 -p icmp
–icmp-type 8 – -limit 20/minute – -limit-burst 4 -j ACCEPT

12、設置連接跟蹤state

State連接跟蹤,首先要清除防火墻規則,然后如下

[root@localhost ~]#iptables -A INPUT -d 172.18.24.1
-m state –state ESTABLISHED -j ACCEPT

[root@localhost ~]#iptables -A OUTPUT -s
172.18.24.1 -m state –state ESTABLISHED -j ACCEPT

所有建立連接狀態的進棧出棧都保持放行(已經建立連接的)

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp -m multiport –dports 21
,22,80,443,3306,139,445
-m state –state NEW -j ACCEPT
放行這些端口的new請求(即第一次連接)

[root@localhost ~]#iptables -R INPUT  1 -d 172.18.24.1 -m state –state
ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]#modprobe
nf_conntrack_ftp

追蹤到的連接放置在文件/proc/net/nf_conntrack                                                     

調整可記錄的連接數量最大值的文件/proc/sys/net/nf_conntrack_max                                       

設置超時時長的文件/proc/sys/net/netfilter/*timeout*

13、把連接到特定端口的記錄記錄到日志中

[root@localhost ~]#iptables -I INPUT 2 -d
172.18.24.1 -p tcp –dport 22 -j LOG –log-prefix “ssh daemon”

[root@localhost ~]#tail /var/log/messages查看日志

四、iptables規則的保存

保存:iptables-save > /PATH/TO/SOME_RULE_FILE

重載:iptabls-restore < /PATH/FROM/SOME_RULE_FILE

                            -n,
–noflush
:不清除原有規則

                            -t,
–test
:僅分析生成規則集,但不提交

CentOS 6中:

         保存規則:

         service
iptables save>/etc/sysconfig/iptables

         保存規則于/etc/sysconfig/iptables文件,覆蓋保存;

         重載規則:

         service
iptables restore</etc/sysconfig/iptables

         默認重載/etc/sysconfig/iptables文件中的規則

         配置文件:/etc/sysconfig/iptables-config                      

CentOS 7中:

          (1) 自定義Unit File,進行iptables-restore;

          (2) firewalld服務;

          (3) 自定義腳本;

五、注意事項

1、添加規則時需要考量的因素:

 (1) 實現的功能:用于判定將規則添加至哪個表;

 (2) 報文的流經位置:用于判斷將規則添加至哪個鏈;

 (3) 報文的流向:判定規則中何為”源“,何為”目標“;

 (4) 匹配條件:用于編寫正確的匹配規則;

          (a) 專用于某種應用的同類規則,匹配范圍小的放前面;

          (b) 專用于某些應用的不同類規則,匹配到的可能性較多的放前面;同一類別的規則可使用自定義鏈單獨存放;

          (c) 用于通用目的的規則放前面;                                

2、規則優化的思路:

使用自定義鏈管理特定應用的相關規則,模塊化管理規則;

 (1) 優先放行雙方向狀態為ESTABLISHED的報文;

 (2) 服務于不同類別的功能的規則,匹配到報文可能性更大的放前面;

 (3) 服務于同一類別的功能的規則,匹配條件較嚴格的放在前面;

 (4) 設置默認策略:白名單機制

          (a) iptables -P,不建議;

          (b) 建議在規則的最后定義規則做為默認策略;

原創文章,作者:chenxu@magedu.com,如若轉載,請注明出處:http://www.www58058.com/74725

(0)
chenxu@magedu.comchenxu@magedu.com
上一篇 2017-05-03
下一篇 2017-05-03

相關推薦

  • 磁盤配額

    配置配額系統     綜述        ?在內核中執行        ?以文件系統為單位啟用        ?對不同組或者用戶的策略不同 …

    Linux干貨 2016-09-02
  • LVM 邏輯卷管理器

    1、什么是LVM:PV、PE、VG、LV的意義    LVM:Logical Volume Manager(邏輯卷管理器),可以將多個物理分區整合成看起來像一個磁盤一樣,并可隨意增加或減少邏輯卷大小 dm:device mapper,將一個或多個底層塊設備組織成一個邏輯設備的模塊; /dev/mapper/VG_NAME-LV_NAME …

    Linux干貨 2016-09-19
  • Lamp應用

    練習:分別使用CentOS 7和CentOS 6實現以下任務 (1) 配置三個基于名稱的虛擬主機; (a) discuzX (b) wordpress (c) https: phpMyAdmin (2) 對discuzX的主頁做壓測; 分別給出并發10, 100, 200, 500等每秒的響應數 建立私有CA (umask 077;openssl genrs…

    Linux干貨 2016-10-12
  • Linux終端類型

    在linux系統中,用戶經常要使用各種終端和操作系統進行交互,實現用戶的任務。Linux各種終端的工作方式基本都通過字符命令行的方式完成,通過終端輸入命令完成相應結果。通過who命令可查看用戶通過哪些終端方式連接到操作系統。通過tty命令查看當前是通過第幾個tty登錄的。 Linux系統的終端包含如下幾種類型: 1) 物理終端 物理終端,又稱控制臺…

    Linux干貨 2016-10-17
  • 使用sudo對用戶進行權限管理

    使用sudo對用戶進行權限管理 因為root用戶權限太大,一般在實際應用的時候 ,為了避免造成錯誤泛濫和找不到責任人都需要對使用服務器人員進行權限分配,除了系統管理員外,其他人禁止使用root,但可以通過sudo命令,給自己提權。同時通過日志審計進行監控操作,操作如下: 1.禁止普通用戶使用su命令到root # usermod -g wheel user0…

    Linux干貨 2017-03-26
  • 基于Keepalived+Nginx實現高可用負載均衡

    練習貼,測試keepalived+lvs_dr高可用負載均衡

    2017-12-11
欧美性久久久久