主頁 > 作業系統 > CentOS防火墻iptables使用

CentOS防火墻iptables使用

2020-10-01 03:04:36 作業系統

1.1 企業安全優化配置原則

盡可能不給服務器配置外網ip ,可以通過代理轉發或者通過防火墻映射.并發不是特別大情況有外網ip,可以開啟防火墻服務
高并發的情況,不能開iptables,會影響性能,利用硬體防火墻提升架構安全

1.1.1 實際環境應用

主要應用方向
1、主機防火墻(filter表的INPUT鏈),
2、局域網共享上網(nat表的POSTROUTING鏈),半個路由器,NAT功能,
3、埠及IP映射(nat表的PREROUTING鏈),硬防的NAT功能,
4、IP一對一映射,
其他內容補充
 ① iptables是基于內核的防火墻,功能非常強大,基于資料包的過濾!特別是可以在一臺非常低的硬體配置下跑的非常好,
iptables主要作業在OSI七層的2.3.4層,七層的控制可以使用squid代理+iptables,
② iptabes:生產中根據具體情況,一般,內網關閉,外網打開,大并發的情況不能開iptables,影響性能,iptables是要消耗CPU的,所以大并發的情況下,我們使用硬體防火墻的各方面做的很仔細,selinux:生產中也是關閉的,可以做ids的入侵檢測,
③ 實際生產中盡可能不給服務器配置外網IP,可以通過代理轉發,比如,nagios就不需要外網,
④ 并發不是很大的情況下,再外網的IP環境,開防火墻,
⑤ 第一次直接默認規則生成組態檔,以后就在組態檔中進行修改(編輯添加洗掉),
⑥ 封掉IP:根據IP地址和網路連接數進行封殺,(定時任務,定時封掉,判斷,存在就不再進行二次封殺)

1.1.2 企業常用案例功能小結

1)linux主機防火墻,單機作為防火墻(表filter),
2)局域網共享上網(表nat postrouting),
3)外部地址映射為內部地址和埠(表nat prerouting)

1.2 iptables防火墻簡介

Netfilter/Iptables(以下簡稱Iptables)
是unix/linux自帶的一款優秀且開放源代碼的完全自由的基于包過濾的防火墻工具,它的功能十分強大,使用非常靈活,可以對流入和流出服務器的資料包進行很精細的控制.特別是它可以在一臺非常低的硬體配置服務器上跑的非常好(賽揚500HZ cpu 64M 記憶體的惲況下部署網關防火墻),提供近400人的上網服務絲毫不遜色企業級專業路由器防火墻, iptables + zebra + squid (企業常用網路開源產品),

iptables是linux2.4及2.6內核中集成的服務,其功能與安全性比其老一蜚ipfwadm,ipchains 強大的多,iptables主要作業在0SI七層的二、三、四層,如果重新編譯內核,iptables也可以支持 7 層控制(squid代理+iptables),

1.2.1 iptables名詞和術語

不少剛接觸到iptables的朋友可能會對iptables防火墻的相關名詞搞的很暈,不知道其所云的具體意思,而是就最基本的能讓大家容易快速理解和掌握的思路來描述:
容器:包含或者說屬于的關系

1.2.2 什么是容器

詞典里解釋說,容器就是用來包裝或裝載物品的貯存器(如箱、罐、壇)或者成形或柔軟不成形的包覆材料.
在iptables里的呢,就是用來描述這種包含或者說屬于的關系,

1.2.3什么是 Netfilter/iptables

Netfilter是表(tables)的容器,這樣解釋大家肯定還是暈,
舉個例子,如果把Netfilter看成是某個小區的一棟樓,那么表(tables)就是樓里的其中的一套房子,這套房子"表(tables)"屬于這棟“Netfilter”,

1.2.4 什么是表(tables)

表(tables)是鏈的容器,即所有的鏈(chains)都屬于其對應的表(tables).如上,如果把Netfilter看成是某個小區的一棟樓.那么表(tables)就是樓里的其中的一套房子,

1.2.5 什么是鏈(chains)

鏈(chains)是規則(Policys)的容器,接上,如果把表(tables)當作有一套房子,那么鏈(chains)就可以說是房子里的家具(柜子等),

1.2.6 什么是規則(Policy)

規則(Policy)就比較容易理解了,就是iptables系列過濾資訊的規范和具體方法條款了.可以理解為柜子如何增加并擺放柜子東西等,

基本術語如下圖所示
image.png

1.3 iptables 表和鏈

描述完iptables術語后,相信大家對iptables的表和鏈有了初步的了解了,默認情況下,iptables根據功能和表的定義劃分包含三個表,filter,nat,mangle,其每個表又包含不同的操作鏈(chains ), 實際iptables包含4張表和五個鏈,巧主要記住兩張表即可filter和nat表即可,

下面表格展示了表和鏈的對應關系,
四個表:

表(tables) 鏈(chains)
Filter 這是默認表,實作防火墻資料過濾功能,
INPUT 對于指定到本地套接字的包,即到達本地防火墻服務器的資料包,
FORWARD 路由穿過的資料包,即經過本地防火墻服務器的資料包,
OUTPUT 本地創建的資料包
NAT 當遇到新創建的資料包連接時將參考這個表
FREROUTING 一進來就對資料包進行改變
OUTPUT 本地創建的資料包在路由前進行改變
POSTROUTING 在資料包即將出去時改變資料包資訊
Mangle 這個表專門用于改變資料包
INPUT 進入到設備本身的包
FORWARD 對路由后的資料包資訊進行修改
FREROUTING 在路由之前更改傳入的包
OUTPUT 本地創建的資料包在路由之前改變
POSTROUTING 在資料包即將離開時更改資料包資訊
raw 此表用處較少,可以忽略不計,
This  table is used mainly for configuring exemptions from connection tracking in combination with the  NOTRACK  target.
PREROUTING for packets arriving via any network interface
OUTPUT for packets  generated by local processes

五個鏈

表(tables) 鏈(chains)
INPUT FORWARD OUTPUT PREROUTING POSTROUTING
Filter × ×
NAT × ×
Managle
raw × × ×
說明:√ 表示有,× 表示無,


       圖 - iptables中的表與鏈的結構關系

1.3.1 filter表的詳細介紹

filter表 主要和主機自身相關,真正負責主機防火墻功能的(過濾流入流出主機的資料包)
filter表是iptables默認使用的表,這個表定義了三個鏈(chains)
企業作業場景:主機防火墻
INPUT 負責過濾所有目標是本機地址的資料包
通俗來說:就是過濾進入主機的資料包
FORWARD 負責轉發流經主機的資料包,起到轉發的作用,和NAT關系很大,
LVS NAT 模式,net.ipv4.ip_forward=0
OUTPUT 處理所有源地址是本機地址的資料包
通俗的講:就是處理從主機發出的資料包

對于filter表的控制是我們實作本機防火墻功能的重要手段,特別是INPUT鏈的控制,

1.3.2 NAT表資訊詳細介紹

NAT表 負責網路地址轉換的,即來源與目的的IP地址和port的轉換,
應用:和主機本身無關,一般用于局域網共享上網或者特殊的埠轉換相關.
作業場景:
1、用于企業路由(zebra)或網關(iptables),共享上網(POSTROUTING)
2、做內部外部IP地址一對一映射(dmz),硬體防火墻映射IP到內部服務器,FTP服務(PREROUTING)
3、WEB,單個埠的映射,直接映射80埠(PREROUTING)
這個表定義了3個鏈,nat功能相當于網路的acl控制,和網路交換機acl類似,
OUTPUT 和主機放出去的資料包有關,改變主機發出資料包的目的地址,
PREROUTING 在資料包到達防火墻時,進行路由判斷之前執行的規則,作用是改變資料包的目的地址、目的埠等
就是收信時,根據規則重寫收件人的地址
例如:把公網IP: xxx.xxx.xxx.xxx 映射到局域網的 x.x.x.x 服務器
如果是web服務,可以把80轉換為局域網的服務器9000埠上,
POSTROUTING 在資料包離開防火墻時進行路由判斷之后執行的規則,作用改變資料包的源地址,源埠等,
寫好收件人的地址,要讓家人回信時能夠有地址可回,
例如,默認筆記本和虛擬機都是局域網地址,在出網的時候被路由器將源地址改為公網地址,
生產應用:局域網共享上網,

1.3.3 Mangle表資訊詳細介紹

Mangle表 主要負責修改資料包中特殊的路由標記,如TTL,TOS,MARK等,這個表定義了5個鏈(chains).

由于這個表與特殊標記相關,一般倩況下,我們用不到這個mangle表,
這里就不做詳細介紹了,

1.4 iptables作業流程

1.4.1 作業流程說明

前面介紹已經提到,iptables是采用資料包過濾機制作業的,所以它會對請求的資料包的包頭資料進行分析,并根據我們預先設定的規則進行匹配來決定是否可以進入主機,
iptables是采用資料包過濾機制作業的,所以它會對請求的資料包的包頭資料進行分析,并根據我們預先設定的規則進行匹配來決定是否可以進入主機,
資料包的流向是從左向右的,
 
圖 - iptables包處理流程圖
 
圖 - iptables包處理流程圖(簡化)

抽象說明:上圖可以用北京地鐵1,2號線來描述:
1號線:主要是NAT功能

企業案例:
   1)局域網上網共享(路由和網關),使用NAT的POSTROUTING鏈,
   2)外部IP和埠映射為內部IP和埠(DMZ功能),使用NAT的PREROUTING鏈

2號線:主要是FILTER功能,即防火墻功能FILTER INPUT FORWARD

企業案例:
  主要應用就是主機服務器防火墻,使用FILTER的INPUT鏈


圖 - iptables資料包轉發流程圖

1.4.2 iptables作業流程小結

1、防火墻是一層層過濾的,實際是按照配置規則的順序從上到下,從前到后進行過濾的,
2、如果匹配上了規則,即明確表明是阻止還是通過,此時資料包就不在向下匹配新規則了,
3、如果所有規則中沒有明確表明是阻止還是通過這個資料包,也就是沒有匹配上規則,向下進行匹配,直到匹配默       認規則得到明確的阻止還是通過,
4、防火墻的默認規則是對應鏈的所有的規則執行完以后才會執行的(最后執行的規則),

1.5 iptables操作

系統環境說明

[root@centos ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@centos~]# hostname -I
10.0.0.188 172.16.1.188

軟體版本

[root@nfsnobody ~]# iptables -V
iptables v1.4.7

1.5.1 iptables引數說明

引數 引數說明
顯示相關引數
-n/--numeric 以數字的方式顯示地址或埠資訊
-L/ --list 列出一個鏈或所有鏈中的規則資訊
--list-rules/-S Print the rules in a chain or all chains
--line-number 當列出規則資訊時,列印規則行號
-v 顯示詳細資訊,可以疊加
-h 顯示幫助資訊
初始化相關引數
iptables -F 清除所有規則,不會處理默認的規則
iptables -X 洗掉用戶自定義的鏈
iptables -Z 鏈的計數器清零(資料包計數器與資料包位元組計數器)
配置常用引數
-t 表名稱 指定配置哪個表,指定配置表名稱,
--append/-A 鏈名稱 附加或追加上相應規則策略,到指定鏈(鏈名稱必須大寫),默認將配置的規則插入到最后一條,
--check/-C Check for the existence of a rule
--insert/-I 鏈名稱 插入相應規則策略,到指定鏈上,默認將配置的規則插入到第一條(可以根據規則序號插入到指定位置)--封IP地址使用,
--delete/-D 鏈名稱 洗掉指定的規則(可以根據規則序號進行洗掉)
--replace/-R Replace rule rulenum (1 = first) in chain
-P(大寫)鏈名稱 改變鏈上的最終默認規則策略
--new/-N 創建新的用戶定義鏈
-p 協議名稱
[!] --proto
指定規則的協議名稱 all tcp udp icmp
--dport 指定匹配的目標埠資訊
--sport 指定匹配的源埠資訊
-j 動作 匹配資料包后的動作
ACCEPT 允許
DROP 丟棄(沒有回應)
REJECT 拒絕(回應請求者明確的拒絕)
MASQUERADE 偽裝上網時使用
SNAT 共享地址上網
DNAT 目的地址改寫
-i
[!] --in-interface
在INPUT鏈配置規則中,指定從哪一個網卡介面進入的流量(只能配置在INPUT鏈上)
-o
[!] --out-interface
在OUTPUT鏈配置規則中,指定從哪一個網介面出去的流量(只能配置在OUTPUT鏈上)
-s
 **[!] --source **
指定源IP地址或源網段資訊
-d
[!] --destination
指定目標IP地址或目標網段資訊
擴展引數
-m 模塊 表示增加擴展,匹配功能擴展匹配(可以加載擴展引數)
multiport 實作不連續多埠擴展匹配
icmp 使用icmp的擴展
state 狀態模塊擴展
--icmp-type 只有型別8是真正會影響ping,或者也可以采用any;了解很多icmp型別_iptables -p icmp -h_
--limit n/{second/minute/hour} 指定時間內的請求速率”n”為速率,后面為時間分別為:秒 分 時
--limit-burst [n] 在同一時間內允許通過的請求”n”為數字,不指定默認為5
--exact/-x 擴展數字(顯示精確數值)

!的使用實體

[root@nfsnobody ~]# iptables ! -V
Not 1.4.7 ;-)
[root@nfsnobody ~]# iptables  -V
iptables v1.4.7

注意:在iptables中所有鏈名必須大寫,表明必須小寫,動作必須大寫,匹配必須小寫,

1.5.2 配置前準備

在配置防火墻首先要其中防火墻

[root@centos ~]# /etc/init.d/iptables start 
iptables: Applying firewall rules:                         [  OK  ]

清除iptables所有規則

[root@centos ~]# iptables -Z
[root@centos ~]# iptables -X
[root@centos ~]# iptables -F

查看iptables的規則

[root@centos ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

查看其他的表配置(-t 引數)

[root@centos ~]# iptables -nL -t raw
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

查看配置規則的順序號

[root@centos ~]# iptables -nvL --number-list
--line-number #  顯示規則的序號

1.6 iptables filter表配置實體

1.6.1 基礎配置

配置實體一:配置22/ssh埠訪問控制規則

iptables -A INPUT -p tcp --dprot 22 -j DROP     # 禁止所有人訪問22埠
iptables -I INPUT -p tcp --dprot 22 -j ACCEPT   # 恢復連接方法
iptables -I INPUT 2 -p tcp --dprot 22 -j ACCEPT # 通過插入指定行號資訊,指定將規則插入到第幾行
iptables -D INPUT -p tcp --dport 22 -j ACCEPT   # 洗掉指定規則
iptables -D INPUT 2                             # 根據規則行號,洗掉相應的規則

只允許10.0.0.1的ip通過ssh連接這臺服務器

iptables -I INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT 

配置實體二:禁止網段連入(禁止172.16.1.0網段訪問172.16.1.188)

iptables -A INPUT  -s 172.16.1.0/24 -d 172.16.1.188  -j DROP

配置實體三:禁止某個172.16.1.0網段訪問服務器主機的22埠

iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188  -p tcp --dport 22 -j DROP

方向說明:

# 在入方向控制
iptables -I INPUT -i eth0  -p tcp --dport 22 -j ACCEPT
# 在出方向控制
iptables -I OUTPUT -o eth0  -p tcp --sport 22 -j DROP

1.6.2 配置實體四:除10.0.0.0網段可以進行連接服務器主機意外,其余網段都禁止

第一種方式:

iptables -A INPUT -s 10.0.0.0/24 -d 172.16.1.8  -j ACCEPT

修改默認規則,將默認規則改為拒絕
第二種方式:
!  --- 表示對規則資訊進行取反

iptables -A INPUT ! -s 10.0.0.0/24 -d 172.16.1.8  -j DROP   --- centos6用法
iptables -A INPUT -s ! 10.0.0.0/24 -d 172.16.1.8  -j DROP   --- centos5用法

說明:只有iptables幫助手冊中指定的引數可以用取反符號(iptables --help)

1.6.3 配置實體五:測驗匹配列舉埠范圍,

iptables -A INPUT -p tcp --dport 22:80 -j DROP                 # 設定連續多埠控制策略
iptables -A INPUT -p tcp -m multiport  --dport 22,80 -j DROP   # 設定不連續多埠控制策略

-m 引數表示增加擴展匹配功能,multiport 實作不連續多埠擴展匹配

1.6.4 配置實體六:匹配ICMP型別

禁止ping策略原則
iptables服務器是ping命令發起者或是接受者
發起者:
input鏈: 禁止icmp-type 0

iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j DROP

output鏈: 禁止icmp-type 8

iptables -A OUTPUT -o eth0 -p icmp --icmp-type 8 -j DROP

接受者:
input鏈: 禁止icmp-type 8

iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP

output鏈: 禁止icmp-type 0

iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -j DROP

簡化配置:

iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type any -j DROP  #禁止所有型別的icmp

指定型別禁止icmp

iptables -A INPUT -p icmp --icmp-type 8
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

說明:只有型別8是真正會影響ping,或者也可以采用any;了解很多icmp型別iptables -p icmp -h
ICMP型別的說明

TYPE CODE Description Query Error
0 0 Echo Reply——回顯應答(Ping應答) x
3 0 Network Unreachable——網路不可達 x
3 1 Host Unreachable——主機不可達 x
3 2 Protocol Unreachable——協議不可達 x
3 3 Port Unreachable——埠不可達 x
3 4 Fragmentation needed but no frag. bit set——需要進行分片但設定不分片位元 x
3 5 Source routing failed——源站選路失敗 x
3 6 Destination network unknown——目的網路未知 x
3 7 Destination host unknown——目的主機未知 x
3 8 Source host isolated (obsolete)——源主機被隔離(作廢不用) x
3 9 Destination network administratively prohibited——目的網路被強制禁止 x
3 10 Destination host administratively prohibited——目的主機被強制禁止 x
3 11 Network unreachable for TOS——由于服務型別TOS,網路不可達 x
3 12 Host unreachable for TOS——由于服務型別TOS,主機不可達 x
3 13 Communication administratively prohibited by filtering——由于過濾,通信被強制禁止 x
3 14 Host precedence violation——主機越權 x
3 15 Precedence cutoff in effect——優先中止生效 x
4 0 Source quench——源端被關閉(基本流控制)
5 0 Redirect for network——對網路重定向
5 1 Redirect for host——對主機重定向
5 2 Redirect for TOS and network——對服務型別和網路重定向
5 3 Redirect for TOS and host——對服務型別和主機重定向
8 0 Echo request——回顯請求(Ping請求) x
9 0 Router advertisement——路由器通告
10 0 Route solicitation——路由器請求
11 0 TTL equals 0 during transit——傳輸期間生存時間為0 x
11 1 TTL equals 0 during reassembly——在資料報組裝期間生存時間為0 x
12 0 IP header bad (catchall error)——壞的IP首部(包括各種差錯) x
12 1 Required options missing——缺少必需的選項 x
13 0 Timestamp request (obsolete)——時間戳請求(作廢不用) x
14 Timestamp reply (obsolete)——時間戳應答(作廢不用) x
15 0 Information request (obsolete)——資訊請求(作廢不用) x
16 0 Information reply (obsolete)——資訊應答(作廢不用) x
17 0 Address mask request——地址掩碼請求 x
18 0 Address mask reply——地址掩碼應答

資料來源:http://www.cnitblog.com/yang55xiaoguang/articles/59581.html

1.6.5 防火墻狀態機制配置

狀態集簡單說明:

狀態集 說明
NEW 表示新建立連接的資料包狀態
ESTABLISHED 表示新建立連接資料包發送之后,回復回應的資料包狀態
RELATED 表示借助已經建立的鏈路,發送新的連接資料包
INVALID 無效無法識別的資料包

注意:允許關聯的狀態包通過(web服務不要使用FTP服務)
防火墻服務配置在FTP服務器上時,需要配置以下策略

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

實作發現sent_syn狀態

iptables -A INPUT -m state --state NEW -j DROP    # 防火墻所連接客戶端上配置

實作發現sent_rcvd狀態

iptables -I INPUT -i eth0 -s 10.0.0.201 -m state --state ESTABLISHED -j DROP  # 防護墻上配置的

1.6.6 使用iptables實作限速功能

limit是iptables的一個匹配模塊,用它結合iptables的其它命令可以實作限速的功能,
不過首先必須明確,limit本身只是一個“匹配”模塊,我們知道,iptables的基本原理是“匹配--處理”,limit在這個作業程序中只能起到匹配的作用,它本身是無法對網路資料包進行任何處理的,我看到網上有些limit的例子里面說只 用一條包含limit匹配規則的iptables陳述句就可以實作限速,那是錯誤的,
實際上,利用imit來限速需要包括兩個步驟:
1.對符合limit匹配規則包放行
2.丟棄/拒絕未放行的包

示例:

iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT 
iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP

陳述句含義:當來自10.0.0.7 的ping包超過5個時進行限速,限制為每10s一個,

引數說明:

引數 引數含義
--limit n/{second/minute/hour} 指定時間內的請求速率”n”為速率,后面為時間分別為:秒 分 時
--limit-burst [n] 在同一時間內允許通過的請求”n”為數字,不指定默認為5

limit模塊具體是如何作業的,?
limit的匹配是基于令牌桶 (Token bucket)模型的,
令牌桶是一種網路通訊中常見的緩沖區作業原理
它有兩個重要的引數,令牌桶容量n和令牌產生速率s,

我們可以把令牌當成是門票,而令牌桶則是負責制作和發放門票的管理員,它手里最多有n張令牌,一開始,管理員開始手里有n張令牌,每當一個資料包到達后,管理員就看看手里是否還有可用的令牌,如果有,就把令牌發給這個資料包,limit就告訴iptables,這個資料包被匹配了,而當管理員把手上所有的令牌都發完了,再來的資料包就拿不到令牌了,這時,limit模塊就告訴iptables,這個資料包不能被匹配,除了發放令牌之外,只要令牌桶中的令牌數量少于n,它就會以速率s來產生新的令牌,直到令牌數量到達n為止,

通過令牌桶機制,即可以有效的控制單位時間內通過(匹配)的資料包數量,又可以容許短時間內突發的大量資料包的通過(只要資料包數量不超過令牌桶n),
limit模塊提供了兩個引數--limit和--limit-burst,分別對應于令牌產生速率和令牌桶容量,除了令牌桶模型外,limit匹配的另外一個重要概念是匹配項,在limit中,每個匹配項擁有一個單獨的令牌桶,執行獨立的匹配計算,

1.6.7 企業級防火墻配置

清除防火墻規則

[root@nfsnobody ~]# iptables -F
[root@nfsnobody ~]# iptables -X
[root@nfsnobody ~]# iptables -Z

修改默認規則為拒絕(修改前先放行22埠,保證自己能夠連上主機)

[root@nfsnobody ~]# iptables -A INPUT -p tcp --dport  22 -j ACCEPT
[root@nfsnobody ~]# iptables -P INPUT DROP 
[root@nfsnobody ~]# iptables -P FORWARD DROP

放行指定的埠

[root@nfsnobody ~]# iptables -A INPUT -i lo -j ACCEPT
[root@nfsnobody ~]# iptables -A INPUT  -p tcp  -m multiport --dport  80,443 -j ACCEPT
[root@nfsnobody ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
[root@nfsnobody ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

保存iptables配置

01. 第一種方式

[root@nfsnobody ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@nfsnobody ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue Apr  4 12:24:43 2017
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [159:10664]
-A INPUT -s 10.0.0.0/24 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A INPUT -s 172.16.1.0/24 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
COMMIT
# Completed on Tue Apr  4 12:24:43 2017

02. 第二種方式

iptables-save >/etc/sysconfig/iptables

1.7 iptables nat表配置實體

1.7.1 iptables實作共享上網


圖 - SNAT 配置原理圖
第一個里程碑:配置內網服務器,設定網關地址

/etc/init.d/iptables stop      # 內網服務器停止防火墻服務
ifdown eth0                    # 模擬關閉內網服務器外網網卡
setup                          # 修改內網網卡網關和DNS地址資訊

也可以使用命令添加默認網關

route add default gw 172.16.1.188

查看默認的路由資訊

[root@test ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         172.16.1.188    0.0.0.0         UG    0      0        0 eth1

說明:內網服務器網關地址指定為共享上網服務器內網網卡地址
第二個里程碑:配置共享上網服務器,開啟共享上網服務器路由轉發功能

[root@nfsnobody ~]# vim /etc/sysctl.conf 
[root@nfsnobody ~]# sysctl -p
~~~
net.ipv4.ip_forward = 1
~~~

第三個里程碑:配置共享上網服務器,實作內網訪問外網的NAT映射

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.188

引數詳解:

引數 引數說明
-s 172.16.1.0/24 指定將哪些內網網段進行映射轉換
-o eth0 指定在共享上網哪個網卡介面上做NAT地址轉換
-j SNAT 將源地址進行轉換變更
-j DNAT 將目標地址進行轉換變更
--to-source ip地址 將源地址映射為什么IP地址
--to-destination ip地址 將目標地址映射為什么IP地址

當filter表中的forward默認為drop策略時,如何配置forward鏈?

圖 - forward作業原理
配置示例

iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
# iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT  # 可以不進行配置
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
# iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT   # 可以不進行配置

當外網ip不固定時如何配置?

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE   # 偽裝共享上網

說明:在企業中如何沒有固定外網IP地址,可以采取以上偽裝映射的方式進行共享上網
配置映射方法小結

01. 指定哪些網段需要進行映射     -s 172.16.1.0/24
02. 指定在哪做映射               -o eth0
03. 用什么方法做映射             -j SNAT/DNAT MASQUERADE
04. 映射成什么地址               --to-source  ip地址/--to-destination ip地址

1.7.2 iptables實作外網IP的埠映射到內網IP的埠

實際需求:將網關的IP和9000埠映射到內網服務器的22埠
埠映射 10.0.0.188:9000 -->172.16.1.180:22
配置實體:

iptables -t nat -A PREROUTING -d 10.0.0.188 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.7:22

引數說明:

引數 引數說明
-d 10.0.0.188 目標地址,
-j DNAT 目的地址改寫,

1.7.3 IP一對一映射


圖 - DNAT 映射原理
實際需求:將ip 地址172.16.1.180 映射到10.0.0.188
通過輔助IP配置:

ip addr add 10.0.0.81/24 dev eth0 label eth0:0   # 添加輔助IP
iptables  -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51
iptables  -t nat -I POSTROUTING -s 172.16.1.51 -o eth0 -j SNAT --to-source 10.0.0.81

適合內網的機器訪問NAT外網的IP

iptables  -t nat -I POSTROUTING -s 172.16.1.0/255.255.240.0 -d 10.0.0.81 -j SNAT --to-source 172.16.1.8

檢查配置:

ping 10.0.0.81 -t
tcpdump|grep -i icmp(兩臺機器上分別監測)
telnet 10.0.0.81 22

1.7.4 映射多個外網IP上網

方法1:

iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16

在三層交換機或路由器,劃分VLAN,

方法2:

iptables -t nat -A POSTROUTING -s 10.0.1.0/22 -o eth0 -j SNAT --to-source 124.42.60.11
iptables -t nat -A POSTROUTING -s 10.0.2.0/22 -o eth0 -j SNAT --to-source 124.42.60.12

擴大子網,會增加廣播風暴,

1.7.5 系統防火墻與網路內核優化標準引數

有關iptables的內核優化
調整內核引數檔案/etc/sysctl.conf
以下是我的生產環境的某個服務器的配置:
解決time-wait過多的解決辦法:

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.ip_local_port_range = 4000  65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1

在dmesg中顯示  ip_conntrack: table full, dropping packet. 的錯誤提示,什么原因?
如何解決?
#iptables優化

net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

1.8 自定義鏈的配置


圖 - 自定義鏈原理
創建自定義鏈

#示例:在filter表中創建NOICMP自定義鏈
iptables -t filter -N NOICMP

參考自定義鏈

#示例:在INPUT鏈中參考剛才創建的自定義鏈
iptables -t filter -I INPUT -p icmp  -j NOICMP

重命名自定義鏈

#示例:將IN_WEB自定義鏈重命名為WEB
iptables -E NOICMP ACCEPTICMP

洗掉自定義鏈

洗掉自定義鏈需要滿足兩個條件
  1、自定義鏈沒有被參考
  2、自定義鏈中沒有任何規則

# 示例: 洗掉參考數為0且不包含任何規則的ACCEPTICMP鏈
iptables -X ACCEPTICMP

1.9 附錄-防火墻狀態機制

狀態機制是iptables中較為特殊的一部分,這也是iptables和比較老的ipchains的一個比較大的區別之一,運行狀態機制(連接跟蹤)的防火墻稱作帶有狀態機制的防火墻,以下簡稱為狀態防火墻.狀態防火墻比非狀態防火墻要安全,因為它允許我們撰寫更嚴密的規則,
在iptables上一共有四種狀態,分別被稱為NEW、ESTABLISHED、INVALID、RELATED,這四種狀態對于TCP、UDP、ICMP三種協議均有效,下面,我們來分別闡述四種狀態的特性.
**  ? NEW
meaning that the packet has started a new connection, or otherwise associated with a connection which has not seen packets in both directions
NEW說明這個包是我們看到的笛一個包,意思就是,這是conntrack橫塊看到的某個連接的第一個包,它即格被匹配了,比如,我們看到一個SYN包,是我們所留意的連接的第一 個包,就要匹配它,

****? ESTABLISHED
meaning that the packet is associated with a connection which has seen packets in both directions
ESTABLISHED已經注意到兩個方向上的資料傳輸,而且會繼續匹配這個連接的包.處于ESTABLISHED狀態的連接是非常容易理解的.只要發送并接到應答,連接就是ESTABLISHED的了,一個連接要從NEW變為ESTABLISHED,只需要接到應答包即可,不管這個包是發往防火墻的,還是要由防火墻轉發的.ICMP的錯誤和重定向等資訊包也被看作是ESTABLISHED,只要它們是我們所發出的資訊的應答,
 
? **RELATED
meaning that the packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error.
RELATED是個比較麻煩的狀態.當一個連接和某個已處于ESTABLISHED狀態的連接有關系時,就被認為是RELATED的了,換句話說,一個連接要想是RELATED的,首先要有一個ESTABLISHED的連接,這個ESTABLISHED連接再產生一個主連接之外的連接,這個新的連接就是RELATED的了,當然前提是conntrack模塊要能理解RELATED,ftp是個很好的例子,FTP-data連接就是和FTP-control有關聯的,如果沒有在iptables的策略中配RELATED狀態,FTP-data的連接是無法正確建立的,還有其他的例子,比如,通過IRC的DCC連接#有了這個狀態,ICMP應答、FTP傳輸、DCC等才能穿過防火墻正常作業.注意,大部分還有一些UDP協議都依賴這個機制,這些協議是很復雜的,它們把連接資訊放在資料包里,并且要求這些資訊能被正確理解,

****? INVALID
meaning that the packet is associated with no known connection
INVALID說明資料包不能被識別屬于哪個連接或沒有任何狀態.有幾個原因可以產生這種情況,比如,記憶體溢位,收到不知厲于哪個連接的ICMP錯誤資訊,一般地,我們DROP這個狀態的任何東西,因為防火墻認為這是不安全的東西
 

1.9.1 iptables配置哲學

如何防止自己被關在門外?

01、去機房重啟系統或者登陸服努器洗掉剛才的禁止規則,
02、讓機房人員重啟服芳器或者讓機房人員拿用戶密碼登錄進去,
03、通過服努器的遠程管理卡管理(推薦),
04、先寫一個定時任務,每5分鐘就停止防火墻,
05、測驗環境測驗好,寫成腳本,批置執行

配置禁用22埠策略:

iptables -I INPUT -p tcp - dport 22 -j DROP
# 說明:利用-I引數,實作強行阻止訪問22埠,將Jffc規則放在第一位

洗掉配置的禁止連接22埠的規則

iptables -t filter -D INPUT -p tcp —dport 22 -j DROP
iptables -F
/etc/init.d/iptables restart

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/143882.html

標籤:Linux

上一篇:安裝ubuntu到移動硬碟(UEFI+GPT),實作在別的電腦也可以使用(詳細教程)

下一篇:(辦公)記事本_Linux查找命令

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more