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功能。

2、COMMAND:命令

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 08:38
下一篇 2017-05-03 17:04

相關推薦

  • 使用Openssl構建私有CA

    使用Openssl構建私有CA Openssl是SSL的開源實現,是一種安全機密程序,主要用于提高遠程登錄訪問的安全性。也是目前加密算法所使用的工具之一,功能很強大。     Openssl為網絡通信提供安全及數據完整性的一種安全協議,包括了主要的密碼算法、常用的密鑰和證書封裝管理功能(CA)以及SSL協議,并提供了豐…

    Linux干貨 2015-10-07
  • 第五周

    顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行 egrep "^[[:space:]]+" /boot/grub/grub.conf 顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行 egrep "^#[[:…

    Linux干貨 2016-09-19
  • 學習積累01#計算機組成#Linux版本#基本命令

    第一周的積累 問題1:描述計算機的組成及其功能 CPU:中央處理器,主要功能是進行運算和邏輯運算,內部大致可分為控制單元、邏輯算術單元、存儲單元; 主板:核心部件,是電腦的“脈絡”,CPU\內存\控制核心電路均安裝在主板上,各種外部設備也通過主板上的插槽相互連接; 硬盤:常見的外存儲器,容量大,保存時間長、安全性高。接口主要分為IDE、SATA、SCSI。 …

    Linux干貨 2016-10-25
  • Linux發行版概述

    Linux發行版概述 Linux發行版有數百種之多,最主流的三個分支為Debain、Slackware、RedHat Debain Debain是三大主流發行版中唯一由社區維護的版本,無商業版本,相對較為輕巧,對使用者的技術要求較高 * Ubuntu、Knopix為Debian的主要子分支,其中Knopix是以安全著稱的 Slackware(SUSE) SU…

    Linux干貨 2017-07-02
  • 對修改提示符引起的一些問題的理解

    有一個練習:提示符修改過后永久保存,每次打開一個新的shell,提示符都為已設定好的格式,不會因為打開新的shell而不同。 在做這個練習的時候遇到了不少問題,通過不斷bing,將起初很陌生的問題一點點的解決,得到了一些理解,因此將理解寫下來。 提示符與變量PS1有關,PS1的值可以被修改或重新賦予。PS1的值變,則提示符也會變。通過搜索得到只要在/etc/…

    Linux干貨 2017-07-15
  • 08.08 筆記總結

    1. 使用sed顯示特定行  sed -n '20p' /etc/passwd  // 顯示/etc/passwd中第20行 命令相當于  cat /etc/passwd | head -20 | tail -1 2. sed -ibak '/^UUID.*/d' /etc/fstab &…

    Linux干貨 2016-08-12
欧美性久久久久