Linux防火牆iptables基礎

IPtables基礎bash

    簡介app

    iptables命令可用於配置Linux的包過濾規則,經常使用於實現防火牆、NAT。運維

    iptables裏面有4張表,分別是filter,NAT,mangle,raw表。運維人員的話主要關注的是filter和NAT表。tcp

  1. filter:主要是過濾包的,內建三個鏈INPUT、OUTPUT以及FORWARD。INPUT做用於進入本機的包;OUTPUT做用於本機送出的包;FORWARD做用於那些跟本機無關的包。ide

  2. NAT:主要用戶地址轉換和端口映射,內建三個鏈,分別是PREOUTING、OUTPUT、POSTROUTING。spa




    iptables命令基本結構
rest

    iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET日誌

    iptables [ –t 表名 ]命令選項 [ 鏈名 ] [ 條件匹配 ] [ –j 目標動做或跳轉 ]xml

    注:若是-t默認表是filter表。
blog

wKioL1hjdq7Rph5TAACqfp3Emt0027.jpg-wh_50

    Command(命令)   

-F:flush, 清空規則鏈; 省略鏈, 表示清空指定表上的全部的鏈;

  -N: new, 建立新的自定義規則連;

  -X: delete/drop, 刪除用戶自定義的空的規則鏈;

   -Z: zero, 清零, 置零規則計數器

   -P: Policy, 爲指定鏈設置默認策略,未符合過濾條件之封包,預設的處理方式;

  filter表中的鏈而言, 默認策略一般有ACCEPT(容許,放行), DROP(丟棄), REJECT(拒絕);

  -E: rEname, 重命名自定義鏈; 引用計數不爲0的自定義鏈, 沒法更名, 也沒法刪除;

  -L, --list:列出某規則鏈中的全部規則。

 規則管理:

  -A: append, 將新規則追加於指定鏈的尾部;

  -I: insert, 將新規則插入至指定鏈的指定位置;  //不指明插入的行數時默認插入到第一行.

  -D: delete, 刪除指定鏈上的指定規則;

    有兩種指定方式:

      (1) 指定匹配條件;

      (2) 指定規則編號;

  -R: replace, 替換指定鏈上的指定規則;


        查看:

     -L: list, 列出指定鏈上的全部規則;

     -n: numberic, 以數字格式顯示地址和端口號;

     -v: verbose, 顯示詳細信息;

        -vv, -vvv:詳細更詳細信息.

     --line-numbers: 顯示規則編號;

     -x: exactly, 顯示計數器計數結果的精確值;


    Parameter(參數)

  [!] -s IP|Netaddr: 檢查報文中的源IP地址是否符合此處指定的地址範圍;

  [!] -d IP|Netaddr: 檢查報文中的目標IP地址是否符合此處指定的地址範圍;

  -p {tcp|udp|icmp}: 檢查報文中的協議, 即ip首部中的protocols所標識的協議;

  -i IFACE: 數據報文的流入接口; 僅能用於PREROUTING, INPUT及FORWARD鏈上;

  -o IFACE: 數據報文的流出接口; 僅能用於FORWARD, OUTPUT及POSTROUTING鏈上;

    

    Target:

      ACCEPT: 接收

      DROP: 丟棄

      REJECT: 拒絕

      LOG: 記錄日誌

      MARK: 作防火牆標記

      DNAT: 目標地址轉換

      SNAT: 原地址轉換

      MASQUERADE: 地址假裝


   基礎命令

  •  iptables -nvL               //iptables -nvL 查看規則

[root@ACtest ~]# iptables -nvL
Chain INPUT (policy ACCEPT 45 packets, 8317 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1284  149K ACCEPT     tcp  --  *      *       172.31.11.189        0.0.0.0/0           tcp dpt:22 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
    3   152 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 916 packets, 230K bytes)
 pkts bytes target     prot opt in     out     source               destination


  • iptables -t filter -A INPUT -p tcp --dport 80 -s X.X.X.X -j DROP //-A 表示插入到最後一行

  • iptables -t filter -I INPUT -p tcp --dport 80 -s X.X.X.X -j DROP //-A 表示插入到最後一行

[root@chumjtest02 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -s 172.31.24.150 -j DROP
[root@chumjtest02 ~]# iptables -t filter -I INPUT -p tcp --dport 80 -s 172.31.24.151 -j DROP
[root@chumjtest02 ~]# iptables -nvL        
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       172.31.24.151        0.0.0.0/0           tcp dpt:80 
  466 41872 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    2   473 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
    0     0 DROP       tcp  --  *      *       172.31.24.150        0.0.0.0/0           tcp dpt:80 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
Chain OUTPUT (policy ACCEPT 10 packets, 1888 bytes)
 pkts bytes target     prot opt in     out     source               destination


  • iptables -nvL --line-numbers     //查看規則帶有id

  • iptables -D INPUT 6    //根據規則的id號刪除對應規則

[root@chumjtest02 ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      311 27704 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5        2   473 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
6        0     0 ACCEPT     tcp  --  *      *       172.31.24.150        0.0.0.0/0           tcp dpt:80
  • service iptables save //iptables若是不保存的話重啓服務就會丟失,因此配置好以後必定要保存下,保存的路徑在/etc/sysconfig/iptables

[root@chumjtest02 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
  • iptables-save > X.bak //能夠指定文件進行保存。

  • iptables-restore <3.bak  //能夠將備份的文件導入。

[root@chumjtest02 ~]# iptables-save > 3.bak      //將iptables配置文件導出
[root@chumjtest02 ~]# cat 3.bak 
# Generated by iptables-save v1.4.7 on Thu Dec 29 10:38:16 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [108:16105]
-A INPUT -s 172.31.24.151/32 -p tcp -m tcp --dport 80 -j DROP 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A INPUT -s 172.31.24.150/32 -p tcp -m tcp --dport 80 -j DROP 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Thu Dec 29 10:38:16 2016
# Generated by iptables-save v1.4.7 on Thu Dec 29 10:38:16 2016
*nat
:PREROUTING ACCEPT [833:120780]
:POSTROUTING ACCEPT [11:681]
:OUTPUT ACCEPT [11:681]
COMMIT
# Completed on Thu Dec 29 10:38:16 2016
[root@chumjtest02 ~]# iptables-restore <3.bak        //將備份的文件導入
  • iptables -Z    //-Z: zero, 清零, 置零規則計數器



案例

    針對filter表,預設策略INPUTDROP,其餘兩個鏈ACCEPT,而後針對172.31.24.0/24開通22端口,對全部網段開放80端口,對全部網段開放21端口。寫腳本執行是爲了方便。:

#!/bin/bash
ips="/sbin/iptables"
$ips -F                  //對iptables配置進行清空下
$ips -P INPUT DROP        //請謹慎使用,執行後就會斷開一切INPUT鏈接,因此這裏用腳本導入。
$ips -P OUTPUT ACCEPT
$ips -P FORWARD ACCEPT
$ips -A INPUT -s 172.31.24.0/24 -p tcp --dport 22 -j ACCEPT
$ips -A INPUT -s 172.31.11.189 -p tcp --dport 22 -j ACCEPT 
$ips -A INPUT -p tcp --dport 80 -j ACCEPT
$ips -A INPUT -p tcp --dport 22 -j DROP
相關文章
相關標籤/搜索