1. 程式人生 > >Centos7防火牆iptables

Centos7防火牆iptables

防火牆配置iptables,filewalld

https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#DNATTARGET

三張表介紹:

filter負責過濾資料包,包括的規則鏈有,input,output和forward;

nat則涉及到網路地址轉換,包括的規則鏈有,prerouting,postrouting和output;

mangle表則主要應用在修改資料包內容上,用來做流量整形的,給資料包打個標識,預設的規則鏈有:INPUT,OUTPUT、forward,POSTROUTING,PREROUTING;

五個鏈:

input匹配目標IP是本機的資料包,

output  出口資料包 ,  一般不在此鏈上做配置

forward匹配流經本機的資料包,

prerouting用來修改目的地址,用來做DNAT 。如:把內網中的80埠對映到路由器外網埠上

postrouting用來修改源地址用來做SNAT。 如:內網通過路由器NAT轉換功能實現內網PC機通過一個公網IP地址上網。

總結:iptables三個表,5個連結,結構如圖:

安裝安裝iptables防火牆

yum installiptables-services            #安裝

iptable [-t 表名] 管理選項 [鏈名][條件匹配][-j目標動作或跳轉]

配置檔案位置:

[[email protected] ~]#ls /etc/sysconfig/iptables

[[email protected] ~]#systemctl start iptables.service

[[email protected] ~]# chkconfig --listiptables

iptables            0:off       1:off       2:on 3:on 4:on 5:on    6:off

-A <鏈名>    APPEND,追加一條規則(放到最後)

-I <鏈名> [規則號碼]     INSERT,插入一條規則

-R num:Replays替換/修改第幾條規則

-D <鏈名> <規則號碼 | 具體規則內容>    DELETE,刪除一條規則

ptables -D INPUT1(按號碼匹配)

iptables -D INPUT-s 192.168.0.1 -j DROP(按內容匹配)

-P <鏈名> <動作>    POLICY,設定某個鏈的預設規則

iptables -P INPUTDROP(不用加-j

-F [鏈名]       FLUSH,清空規則

-L [鏈名]       LIST,列出規則

v:顯示詳細資訊,包括每條規則的匹配包數量和匹配位元組數

    x:在 v 的基礎上,禁止自動單位換算(K、M)

    n:只顯示 IP 地址和埠號碼,不顯示域名和服務名稱

    --line-number  可以檢視到規則號

匹配條件

£ 流入、流出介面(-i、-o)

£ 來源、目的地址(-s、-d)

£ 協議型別      (-p)

£ 來源、目的埠(--sport、--dport)

£  -i <匹配資料進入的網路介面>   #此引數主要應用於nat表,例如目標地址轉換

£  -o 匹配資料流出的網路介面

£  -s <匹配來源地址>

£  -d <匹配目的地址>

£  -p <匹配協議型別>

£  --sport <匹配源埠>

£  --dport <匹配目的埠>

注意:--sport --dport 必須配合 -p 引數使用

動作(處理方式)

-j ACCEPT

    通過,允許資料包通過本鏈而不攔截它

-j DROP

    丟棄,阻止資料包通過本鏈而丟棄它

-j SNAT --toIP[-IP][:-]nat 表的 POSTROUTING 鏈)

  源地址轉換,SNAT 支援轉換為單 IP,也支援轉換到 IP 地址池(一組連續的 IP 地址)

-j DNAT --to IP[-IP][:埠-埠](nat 表的 PREROUTING鏈)

  目的地址轉換,DNAT 支援轉換為單 IP,也支援轉換到 IP 地址池

-j MASQUERADE    偽裝

附加模組

£ 按包狀態匹配   (state)

£ 按來源 MAC 匹配(mac)

£ 按包速率匹配   (limit)

£ 多埠匹配     (multiport)

按包狀態匹配   state

-m state --state 狀態

狀態:NEW、RELATED、ESTABLISHED、INVALID

      NEW:有別於 tcp 的 syn   #如果我們傳送一個流的初始化包,狀態就會在OUTPUT鏈 裡被設定為NEW,當我們收到迴應的包時,狀態就會在PREROUTING鏈裡被設定為ESTABLISHED。如果第一個包不是本地產生的,那就會在PREROUTING鏈裡被設定為NEW狀 態。

      ESTABLISHED:連線態

      RELATED:衍生態,與 conntrack 關聯(FTP)

      INVALID:不能被識別屬於哪個連線或沒有任何狀態

按來源 MAC 匹配(mac

-m mac --mac-source MAC

匹配某個 MAC 地址

按包速率匹配   limit

-m limit --limit 匹配速率 [--burst 緩衝數量]

    用一定速率去匹配資料包

多埠匹配     multiport

-m multiport<--sports|--dports|--ports> 埠1[,埠2,..,埠n]

一次性匹配多個埠,可以區分源埠,目的埠或不指定埠

儲存:service iptables save

1、開放20、21埠:
   iptables -A INPUT -p tcp --dport 21 -j ACCEPT
   iptables -A INPUT -p tcp --dport 20 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT #預設情況一般服務與本機通訊以127.0.0.1來通訊的。

iptables -A INPUT -p tcp -m multiport --dports21,22,80 -j ACCEPT

-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 -jACCEPT

使用iptables搭建路由器,通過SNAT功能

啟用核心路由轉發功能:臨時生效

[[email protected] ~]#echo"1" > /proc/sys/net/ipv4/ip_forward

永久生效:

[[email protected] ~]#vim /etc/sysctl.conf

改:#net.ipv4.ip_forward =0

為: net.ipv4.ip_forward =1

改完使配置生效:

[[email protected] ~]# sysctl –p

配置之前,把前面的規則去除了,否認會達不到一定的效果

iptables -P INPUT ACCEPT

iptables –F

配置SNAT

[[email protected] ~]#iptables-t nat -A POSTROUTING -s 192.168.2.0/24  -j  SNAT  --to 192.168.1.63

或:

[[email protected] ~]#iptables -t nat -APOSTROUTING -s 192.168.2.0/24  -oeth0  -j MASQUERADE   # ADSL撥號上網.

使用DNAT 功能,把內網web伺服器埠對映到路由器外網

做DNAT埠對映:

xuegod63

[[email protected] ~]#  iptables -t nat -A PREROUTING -i eth0 -p tcp--dport 80 -j DNAT --to 192.168.2.2:80

或:

[[email protected] ~]# iptables -t nat -APREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80

£  所有鏈名必須大寫

INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING

£  所有表名必須小寫

filter/nat/mangle

£  所有動作必須大寫

ACCEPT/DROP/SNAT/DNAT/MASQUERADE

£  所有匹配必須小寫

-s/-d/-m <module_name>/-p

修改配置的話只需要將/usr/lib/firewalld中的配置檔案複製到/etc/firewalld中修改。恢復配置的話直接刪除/etc/firewalld中的配置檔案即可。

就需要把/usr/lib/firewalld/ssh.xml 檔案拷貝到 /etc/firewalld/services/