iptables四表五鏈及默認規則使用,

網絡基礎

TCP/IP模型:html

    應用層===傳輸層===網絡層===數據鏈裏層===物理層node

  數據封裝:mysql

    MAC幀頭+IP報頭+TCP/UDP報頭===HTTP請求web

    數據幀sql

     TCP/UDP報頭:vim

       隨機產生一個大於1024的端口服務器

       目的端口:80網絡

     IP報頭:tcp

       源IP地址函數

       目的IP地址

     MAC幀頭:

       源MAC地址

       目的MAC地址

端口號Port:

  做用:標識不一樣應用程序

  數字:0---65535,小於1024端口爲著名端口

  經常使用端口:

http         tcp/80
https        tcp/443
SSH          tcp/22
telnet        tcp/23
ftp            tcp/21(命令鏈接),tcp/20(數據鏈接)
mysql        tcp/3306
smtp         tcp/25
pop3        tcp/110
dns            tcp/53,udp/53
dhcp           udp/67(服務端),udp/68(客戶端)
SAMBA        tcp/139,tcp/445,udp/137.udp/138
ntp              udp/123
zabbix         tcp/10050(agent),tcp/10051(server)

 ARP-----Address Resolution Protocol 地址解析協議

  做用:根據已知的IP地址獲取對應的MAC地址

 

Linux iptables 

  做用:

    進行數據過濾:入方向,出方向,轉發穿過服務器的

    爲數據打標記

    網絡地址轉換

  Linux防火牆

    內核集成的模塊netfilter

    iptables工具:實現添加,刪除,修改,查看防火牆規則

鉤子函數,用來鉤數據的

input:處理進來的數據

output:處理出去的數據

forward:處理轉發的數據

prerouting:截獲路由前的操做,數據處理沒進網卡前

postrouting:截獲路由後的操做,數據處理完了,從網卡流出去後

五條鏈

存規則的:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

 

iptables四表:

    filter(實現實現數據過濾):INPUT,OUTPUT,FORWARD

    nat (實現實現網絡地址轉換,換ip的):PREROUTING,OUTPUT,POSTROUTING

    mangle(爲數據打標記):INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING

    raw(數據跟蹤的)PREROUTING,OUTPUT

iptables工具的使用

# iptales <command> <chain> <rule>

命令command

查看類:

  -L:顯示指定表中得規則

    -n:以數字的格式顯示IP及端口號

    -v:顯示規則相關的詳細信息

    -x:顯示計數器顯示精確的數字

    --line-numbers:顯示規則的號碼

    -t:<table>:指定表名,默認爲filter表

# iptables -nL --line-numbers -v

管理規則

1)添加規則

  -A:追加一條規則,添加到鏈的尾部

  -I CHAI【number】:插入一條規則,插入爲CHAIN的第number條;number不寫表示插入到第一條。-I INPUT

2)刪除規則

  -D CHAIN【number】:刪除指定鏈的第number條規則

3)修改規則

  -R CHAIN【number】:替換指定的規則

4)清空全部規則

  -F  CHAIN

5)修改鏈的默認規則

  -P CHAIN <處理方法> 

規則的匹配標準

1)源IP地址

  -s address

    ! -s 192.168.1.1

    -s 192.168.1.0/24

2)目的IP地址

  -d address

    !-d 10.1.1.1

    -d 10.1.1.0/24

3)協議

  -p tcp  -sport port1[:port2]

  -p tcp --dport port1[:port2]

  -p udp --sport port1[:port2]

  -p udp --dport port1[:port2]

  -p icmp

    --icmp-type 8    echo-request

    --icmp-type 0  echo-reply

4)匹配數據包進行的網卡接口

  -i eth0

5)匹配數據包流出的網卡接口

  -o eth1

數據包的處理行爲 -j target

  ACCEPT  容許

  REJECT  拒絕

  DROP     丟棄

  LOG    記錄日誌

先堵後通

主機IP是192.168.150.163d

實例1:容許客戶端訪問SSH服務  -P(修改某一條鏈的默認規則)

[root@node1 ~]# iptables -P INPUT DROP
[root@node1 ~]# iptables -P OUTPUT DROP
[root@node1 ~]# iptables -P FORWARD DROP

[root@node1 ~]# iptables -A INPUT -s 192.168.122.1 -d 192.168.122.135 -p tcp --dport 22 -j ACCEPT
[root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -d 192.168.122.1 -p tcp --sport 22 -j ACCEPT

實例2:容許全部客戶端訪問web服務器

[root@node1 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 80 -j ACCEPT
[root@node1 ~]# iptables -I OUTPUT -s 192.168.122.135 -p tcp --sport 80 -j ACCEPT

實例3:容許客戶端10.1.2.101  ping服務器

[root@node1 ~]# iptables -A INPUT -s 192.168.122.1 -d 192.168.122.135 -p icmp --icmp-type 8 -j ACCEPT
[root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -d 192.168.122.1 -p icmp --icmp-type 0 -j ACCEPT

實例4:容許服務器ping其餘主機

[root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -p icmp --icmp-type 8 -j ACCEPT
[root@node1 ~]# iptables -A INPUT -d 192.168.122.1 -p icmp --icmp-type 0 -j ACCEPT

實例5:容許服務器ping本機

[root@node1~]# iptables -A INPUT -i lo -j ACCEPT

[root@node1~]# iptables -A OUTPUT -o lo ACCEPT

實例6:容許DNS服務器解析全部主機名

[root@node1~]# iptables -A INPUT -d 192.168.122.135 -p udp --dport 53 -j ACCEPT

[root@node1~]# iptables -A OUTPUT -s 192.168.122.135 -p udp --sport 53 -j ACCEPT

[root@node1~]# iptables -A INPUT -s 192.168.122.135 -p udp --dport 53 -j ACCEPT

[root@node1~]# iptables -A INPUT -d 192.168.122.135 -p udp --sport 53 -j ACCEPT 

[root@node1~]# iptables -A INPUT -d 192.168.122.135 -p tcp --dport 53 -j ACCEPT

[root@node1~]# iptables -A OUTPUT -s 192.168.122.135 -p tcp -sport 53 -j ACCEPT

[root@node1~]# iptables -A INPUT -s 192.168.122.135 -p tcp --dport 53 -j ACCEPT

[root@node1~]# iptables -A OUTPUT -d 192.168.122.135 -p tcp --sport 53 -j ACCEPT

保存防火牆規則

Centos 6:

[root@node1~]# service iptables save

iptables:將防火牆規則保存到 /etc/sysconfig/iptables:    [肯定]

Centos 7:

[root@node1~]# iptables-save > /iptables.rule

恢復規則

[root@node1~]# iptables-restore < /iptables.rule

實例7:刪除規則

[root@node1~]# iptables -D INPUT 3

實例8:修改規則

[root@node1~]# iptables -R INPUT 7 -d 192.168.122.135 -p icmp --icmp-type 0 -j ACCEPT

iptables模塊

一、multiport 離散多端口

  -m multiport

    --sports port1,port2,port3

    --dports port1,port2,port3

[root@node01 ~]# iptables -I INPUT -s 192.168.122.1 -d 192.168.122.135 -p tcp -m multiport --dports 80,139,445,22 -j ACCEPT

二、iprange

  -m iprange

    --src-range IP1[-IP2]  連續寫多個連續的源ip

    --dst-range IP1[-IP2]  連續寫多個連續的目的ip

[root@node01 ~]# iptables -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.10 -d 192.168.122.135 -p tcp --dport 80 -j ACCEPT

 

常說的加入白名單

 

三、state 狀態,用鏈接的狀態進行數據過濾

  -m state --state <狀態>  決定什麼樣狀態接收,什麼樣狀態拒絕,像ftp根據端口放行就很麻煩,使用-m state --state模塊就簡單不少

  state狀態:

    NEW狀態

      針對某個服務的首次訪問

    ESTABLISHED狀態

      一、某服務的後續全部訪問狀態

      二、表示服務器的響應數據

    RELATED狀態

      相關聯的鏈接,給ftp用的。好比ftp服務器,只有命令鏈接完成,才能進行創建數據鏈接

      ftp兩種工做模式

        主動鏈接:

            20/tcp:數據鏈接

            21/tcp:命令鏈接

               當客戶端向服務端經過21端口創建命令鏈接,命令鏈接就是傳輸命令的,像get,put等,命令鏈接建立好後會經過20號端口主動向客戶端創建數據鏈接

        被動鏈接:

               當客戶端訪問ftp服務器時候,經過21號端口創建命令鏈接後,ftp服務器會在本地隨機產生一個大於1024的隨機端口,完了告訴客戶端,客戶端在經過那個隨機端口創建數據鏈接

    INVALID狀態

      無效的鏈接

一、就不用每條都寫OUTPUT的規則了,有一條ESTABLISHED就能所有能出去(響應)OUTPUT

[root@node01 ~]# iptables -I OUTPUT -s 192.168.122.135 -m state --state ESTABLISHED -j ACCEPT

二、保證首次訪問和後續的全部訪問均可以正常

[root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

實例:容許ftp服務的訪問

首先要卸載ip_nat_ftp和ip_conntrack_ftp

[root@node01 ~]# yum install -y iptables-services

# vim /etc/sysconfig/iptables-config

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

# systemctl restart iptables

[root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@node01 ~]# iptables -I INPUT 2  -d 192.168.122.135 -m state --state RELATED,ESTABLISHED -j ACCEPT

相關文章
相關標籤/搜索