CentOS7 下iptables安裝與iptables使用

一、iptables安裝

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

查看安裝情況

[root@localhost ~]# rpm -qa|grep iptables
iptables-1.4.21-24.1.el7_5.x86_64
iptables-services-1.4.21-24.1.el7_5.x86_64
修改配置文件

[root@localhost ~]# vi /etc/sysconfig/iptables

#firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

保存退出

[root@localhost ~]#systemctl start iptables.service

啓動正常,安裝成功。

[root@localhost ~]# systemctl enable iptables
[root@localhost ~]# iptables -nv -L --line-number  //查看IP規則 ,--line-number 標上序號

二、iptables使用

iptables的使用規則:

1、表    (table) 包含4個表(哪個表是當前表取決於內核配置選項和當前模塊):
4個表的優先級由高到低:raw-->mangle-->nat-->filter
raw---RAW表只使用在PREROUTING鏈和OUTPUT鏈上,因爲優先級最高,從而可以對收到的數據包在連接跟蹤前進行處理。一但用戶使用了RAW表,在某個鏈上,RAW表處理完後,將跳過NAT表和ip_conntrack處理,即不再做地址轉換和數據包的鏈接跟蹤處理了。
filter---這個規則表是預設規則表,擁有 INPUT、FORWARD 和 OUTPUT 三個規則鏈,這個規則表顧名思義是用來進行封包過濾的理動作。
net----此規則表擁有prerouting和postrouting兩個規則鏈, 主要功能爲進行一對一、一對多、多對多等網址轉譯工作(SNAT/DNAT)。
mangle--此規則表擁有prerouting、FORWARD、postrouting三個規則鏈,除了進行網址轉譯工作會改寫封包外,在某些特殊應用可能也必須去改寫封包(ITL、TOS)或者是設定MARK(將封包作記號,以進行後續的過濾)這時就必須將這些工作定義在mangles規則表中。

-t 指定使用個表( 3個表:filter,nat,mangle)(filter:INPUT(處理進入的包),FORWORD(處理通過的包),OUTPUT(處理本地生成的包);nat:PREROUTING (修改到來的包),OUTPUT(修改路由之前本地的包),POSTROUTING(修改準備出去的包);mangle:PREROUTING(修改路由之前進入的包),OUTPUT(修改路由之前本地的包))
例:iptable -t nat -A  PREROUTING

2、鏈管理命令(這都是立即生效的)
-F 清空所選鏈 --> iptables -t nat -F 清空nat表的所有鏈
-N 根據給出的名稱建立一個新的用戶定義鏈 --> iptables -N inbound_tcp_web 表示附在tcp表上用於檢查web的。
-X 刪除指定的用戶自定義鏈, 使用方法跟-N相同,但是在刪除之前必須要將裏面的鏈給清空了
-P 設置鏈的目標規則,設置默認策略, iptables -P INPUT (DROP|ACCEPT)默認是關的/默認是開的,比如: iptables -P INPUT DROP
-E 根據用戶給出的名字對指定鏈進行重命名,-E oldname newname
-Z 清空鏈,及鏈中默認規則的計數器的(有兩個計數器,被匹配到多少個數據包,多少個字節)--> iptables -Z :清空

1)INPUT鏈
INPUT鏈作爲iptables的構建快,作用是控制目標爲本地系統的數據包是否可以和本地套接字通信,如果INPUT鏈中的第一條規則要求IPtables丟棄所以得數據包(或者INPUT鏈的策略設置爲DROP),那麼所有試圖通過任何ip通信方式(如TCP、UDP或ICMP)與系統直接通信的努力都將失敗。ARP工作在數據鏈路層而不是網絡層,而iptables只過濾ip及其之上協議的數據包,所以iptables不能過濾arp協議的報文。

$IPTABLES -A INPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID" --log-ip-OPTIONS --log-tcp-options
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

建立OUTPUT鏈規則集的命令如下所示:

$IPTABLES -A OUTPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID" --log-ip-options --log-tcp-options
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

2)FORWARD 鏈
filter表中的forward鏈提供了對通過防火牆接口轉發數據包進行訪問控制的能力:

$IPTABLES -A FORWARD -m state --state INVALID -j LOG --log-prefix "DROP INVALID" -- log-ip-options --log-tcp-options
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

3)網絡地址轉換
iptables的nat表專用於定義所有的NAT規則,在這個表中有兩個鏈:PREROUTING和POSTROUTING,利用PREROUTING鏈將nat表中的規則應用到還沒有通過內核中路由算法確定應從哪個接口傳輸的數據包,在這個鏈中處理的數據包也尚未經過filter表中的INPUT或PREROUTING鏈的處理
POSTROUTING鏈負責處理經過內核中的路由算法確定傳輸的物理接口並即將從該接口出去的數據包,由這個鏈處理的數據包已通過filter表中的output或forward鏈的檢查

$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.10.3:80
$IPTABLES -t nat -A PREROUTING -p tcp --dport 443 -i eth0 -j DNAT --to 192.168.10.3:443
$IPTABLES -t nat -A PREROUTING -p tcp --dport 53 -i eth0 -j DNAT --to 192.168.10.4:53

3、規則,常用命令:
-N 新的規則-->iptables -N allowed 定義新的規則
-A 追加規則-->iptables -A INPUT
-D 刪除規則-->iptables -D INPUT 1(編號)
-R 修改規則-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代現行規則,順序不變(1是位置)
-I 插入規則-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一條規則,原本位置上的規則將會往後移動一個順位
-L 查看規則-->iptables -L INPUT 列出規則鏈中的所有規則
    -n:以數字的方式顯示ip,它會將ip直接顯示出來,如果不加-n,則會將ip反向解析成主機名。
    -v:顯示詳細信息
     -vv
    -vvv :越多越詳細
     -x:在計數器上顯示精確值,不做單位換算
   --line-numbers : 顯示規則的行號
    -t nat:顯示所有的關卡的信息

4、匹配 (包含匹配擴展和目標擴展,大多數都可以通過在前面加上!來表示相反的意思)
擴展匹配模塊:tcp,udp,icmp,mac,limit,multiport,mark,owner,state,unclean,tos,多數後面會有參數,部分沒有。
寫法如(模塊 參數):
state --state NEW , state --state ESTABLISHED,RELATED
tcp --tcp-flags SYN, ACK, FIN, RST SYN,    tcp --syn
icmp --icmp-type echo-request
limit --limit 1/s --limit-burst 5 //每秒中最多允許5個新連接
擴展目標模塊:LOG,MARK,TOS,MIRROR,SNAT,MASQUERADE,REDIRECT,DIAGNOSTICS,BUGS,COMPATIBILITY WITH IPCHAINS。
寫法如(模塊 參數):LOG --log-level 5 --log-prefix "IPTABLES:" 

通用參數:
-p 協議  例:iptables -A INPUT -p tcp
-s 源地址 例:iptables -A INPUT -s 192.168.1.1
-d 目的地址 例:iptables -A INPUT -d 192.168.12.1
--sport 源端口 例:iptables -A INPUT -p tcp --sport 22
--dport 目的端口 例:iptables -A INPUT -p tcp --dport 22
-i 指定入口網卡 例:iptables -A INPUT -i eth0
-o 指定出口網卡 例:iptables -A FORWARD -o eth0

source--匹配源ip地址或網絡
state 匹配一組連接狀態, 這裏state是一個逗號分割的匹配連接狀態列表。可能的狀態是:INVALID表示包是未知連接,ESTABLISHED表示是雙向傳送的連接,NEW 表示包爲新的連接,否則是非雙向傳送的,而RELATED表示包由新連接開始,但是和一個已存在的連接在一起,如FTP數據傳送,或者一個ICMP錯誤。
string--匹配應用層數據字節序列
comment--在內核內存中爲一個規則關聯多達256個字節的註釋數據

擴展匹配
1)隱含擴展:對協議的擴展
-p tcp :TCP協議的擴展。一般有三種擴展
--dport XX-XX:指定目標端口,不能指定多個非連續端口,只能指定單個端口,比如
--dport 21  或者 --dport 21-23 (此時表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的標誌位(SYN,ACK,FIN,PSH,RST,URG)
    對於它,一般要跟兩個參數:
    1.檢查的標誌位
    2.必須爲1的標誌位
    --tcpflags syn,ack,fin,rst syn   =    --syn
    表示檢查這4個位,這4個位中syn必須爲1,其他的必須爲0。所以這個意思就是用於檢測三次握手的第一次包的。對於這種專門匹配第一包的SYN爲1的包,還有一種簡寫方式,叫做--syn
-p udp:UDP協議的擴展
    --dport
    --sport
-p icmp:icmp數據報文的擴展
    --icmp-type:
    echo-request(請求回顯),一般用8 來表示
    所以 --icmp-type 8 匹配請求回顯數據包
    echo-reply (響應的數據包)一般用0來表示
2)顯式擴展(-m)
擴展各種模塊
  -m multiport:表示啓用多端口擴展
  之後我們就可以啓用比如 --dports 21,23,80

5、目標(target)
-j 指定要進行的處理動作,常用的有:
DROP:丟棄
REJECT:明示拒絕
ACCEPT:接受
SNAT:基於原地址的轉換
--to-source:指定原地址
    比如我們現在要將所有192.168.10.0網段的IP在經過的時候全都轉換成172.16.100.1這個假設出來的外網地址:

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1(外網有效ip)

這樣,只要是來自本地網絡的試圖通過網卡訪問網絡的,都會被統統轉換成172.16.100.1這個IP.
MASQUERADE(動態僞裝)--家用帶寬獲取的外網ip,就是用到了動態僞裝

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

DNAT目標地址轉換
--to-destination:指定目標地址

iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2

10.18訪問80端口轉換到100.2上
MASQUERADE:源地址僞裝
REDIRECT:重定向:主要用於實現端口重定向
MARK:打防火牆標記的
RETURN:返回 在自定義鏈執行完畢後使用返回,來返回原規則鏈
LOG: 將數據包信息記錄到syslog

參考:

https://www.cnblogs.com/zclzhao/p/5081590.html

https://www.cnblogs.com/yinzhengjie/p/6256727.html

https://www.ibm.com/developerworks/cn/opensource/os-iptables/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章