目錄
1. SNAT 策略及應(yīng)用
1.1 SNAT策略概述
?1. 只開(kāi)啟路由轉(zhuǎn)發(fā),未設(shè)置地址轉(zhuǎn)換的情況
2. 開(kāi)啟路由轉(zhuǎn)發(fā),并設(shè)置SNAT轉(zhuǎn)換的情況
1.2 SNAT策略的應(yīng)用
1. 2.1 共享固定IP上網(wǎng)
(1)打開(kāi)網(wǎng)關(guān)的路由轉(zhuǎn)發(fā)
(2)設(shè)置正確的SNAT策略
(3)測(cè)試SNAT共享接入結(jié)果
1.2.2 共享動(dòng)態(tài)IP 地址上網(wǎng)
2. DNAT策略及應(yīng)用
2.1 DNAT 策略概述
2.2 DNAT策略的應(yīng)用
2.2.1? 發(fā)布企業(yè)內(nèi)部的Web服務(wù)器
(1)打開(kāi)網(wǎng)關(guān)的路由轉(zhuǎn)發(fā)
(3)測(cè)試DNAT發(fā)布結(jié)果
2.2.2 發(fā)布企業(yè)內(nèi)部的 OpenSSH服務(wù)器
(1)配置OpenSSH服務(wù)
? (2)打開(kāi)網(wǎng)關(guān)的路由轉(zhuǎn)發(fā)
? (3)?正確設(shè)置DNAT策略
(4)測(cè)試DNAT發(fā)布結(jié)果
3. 規(guī)則的導(dǎo)入、導(dǎo)出
3.1 規(guī)則的備份及還原
3.1.1 iptables-save 命令
3.1.2? iptables-restore 命令
3.2 使用iptables服務(wù)
3.2.1 自動(dòng)啟用防火墻規(guī)則
3.2.2 清空所有防火墻規(guī)則
4. 使用防火墻腳本
4.1 防火墻腳本的構(gòu)成
4.1.1 定義基本變量
4.1.2 加載內(nèi)核模塊
4.1.3 調(diào)整/proc 參數(shù)
4.1.4 設(shè)置具體的iptables規(guī)則
(1)清理已有規(guī)則
(2)設(shè)置規(guī)則鏈的默認(rèn)策略
(3)設(shè)置nat表中的各種規(guī)則
(4)設(shè)置filter表的各種規(guī)則
1. SNAT 策略及應(yīng)用
1.1 SNAT策略概述

?1. 只開(kāi)啟路由轉(zhuǎn)發(fā),未設(shè)置地址轉(zhuǎn)換的情況

2. 開(kāi)啟路由轉(zhuǎn)發(fā),并設(shè)置SNAT轉(zhuǎn)換的情況

在上述 SNAT 轉(zhuǎn)換地址的過(guò)程中,網(wǎng)關(guān)服務(wù)器會(huì)根據(jù)之前建立的 SNAT 映射,將響應(yīng)數(shù)據(jù)包正確返回局域網(wǎng)中的源主機(jī)。因此,只要連接的第一個(gè)包被 SNAT 處理了,那么這個(gè)連接及對(duì)應(yīng)數(shù)據(jù)流的其他包也會(huì)自動(dòng)地被進(jìn)行 SNAT 處理。另一方面,Internet 中的服務(wù)器并不知道局域網(wǎng) PC 的實(shí)際 IP 地址,中間的轉(zhuǎn)換完全由網(wǎng)關(guān)主機(jī)完成,一定程度上也起到了保護(hù)內(nèi)部網(wǎng)絡(luò)的作用。????
1.2 SNAT策略的應(yīng)用
1. 2.1 共享固定IP上網(wǎng)
- Linux 網(wǎng)關(guān)服務(wù)器通過(guò)兩塊網(wǎng)卡 ens33、ens37 分別連接 Internet 和局域網(wǎng),其中 ens33的 IP 地址為 218.29.30.31,ens37 的 IP 地址為 192.168.1.1。
- 所有局域網(wǎng) PC 的默認(rèn)網(wǎng)關(guān)設(shè)為 192.168.1.1,且已經(jīng)設(shè)置了正確的 DNS 服務(wù)器。
- 要求 192.168.1.0/24 網(wǎng)段的 PC 能夠通過(guò)共享方式正常訪(fǎng)問(wèn) Internet。
根據(jù)上述環(huán)境,推薦的操作步驟如下。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-775368.html
(1)打開(kāi)網(wǎng)關(guān)的路由轉(zhuǎn)發(fā)
[root@node1 ~]# cat /etc/sysctl.conf
...... ## 省略
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@node1 ~]#
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
或者
[root@node1 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@node1 ~]#
(2)設(shè)置正確的SNAT策略
[root@node1 ~]# iptables -t nat -A POSTROUTING -s 192.168.136.131/24 -o ens33 -j SNAT --to-source 218.39.30.31
[root@node1 ~]#
(3)測(cè)試SNAT共享接入結(jié)果
1.2.2 共享動(dòng)態(tài)IP 地址上網(wǎng)
[root@node1 ~]# iptables -t nat -A POSTROUTING -s 192.168.136.131/24 -o ppp0 -j MASQUERADE
[root@node1 ~]#
2. DNAT策略及應(yīng)用
DNAT(Destination Network Address Translation,目標(biāo)地址轉(zhuǎn)換)是 Linux 防火墻的另一種地址轉(zhuǎn)換操作,同樣也是 iptables 命令中的一種數(shù)據(jù)包控制類(lèi)型,其作用是根據(jù)指定條件修改數(shù)據(jù)包的目標(biāo) IP 地址和目標(biāo)端口。
2.1 DNAT 策略概述

在 Internet 環(huán)境中,企業(yè)所注冊(cè)的網(wǎng)站域名(如 www.benet.com)必須對(duì)應(yīng)合法的公網(wǎng) IP 地址(如 218.29.30.31)。在這種情況下,Internet 中的客戶(hù)機(jī)將無(wú)法訪(fǎng)問(wèn)公司內(nèi)網(wǎng)的服務(wù)器,除非在網(wǎng)關(guān)服務(wù)器中正確設(shè)置 DNAT 策略。
使用 DNAT 策略的效果如下:當(dāng) Internet 中的客戶(hù)機(jī)提交的 HTTP 請(qǐng)求到達(dá)企業(yè)的網(wǎng)關(guān)服務(wù)器時(shí),網(wǎng)關(guān)首先判斷數(shù)據(jù)包的目標(biāo)地址和目標(biāo)端口,若發(fā)現(xiàn)該數(shù)據(jù)包需要訪(fǎng)問(wèn)本機(jī)的80 端口,則將其目標(biāo) IP 地址(如 218.29.30.31)修改為內(nèi)網(wǎng)中真正的網(wǎng)站服務(wù)器的 IP 地址(如 192.168.1.6),然后才發(fā)送給內(nèi)部的網(wǎng)站服務(wù)器,如圖 3.5 所示。
?在上述 DNAT 轉(zhuǎn)換地址的過(guò)程,網(wǎng)關(guān)服務(wù)器會(huì)根據(jù)之前建立的 DNAT 映射,修改返回的 HTTP 應(yīng)答數(shù)據(jù)包的源 IP 地址,最后再返回給 Internet 中的客戶(hù)機(jī)。Internet 中的客戶(hù)機(jī)并不知道企業(yè)網(wǎng)站服務(wù)器的真實(shí)局域網(wǎng)地址,中間的轉(zhuǎn)換完全由網(wǎng)關(guān)主機(jī)完成。通過(guò)設(shè)置恰當(dāng)?shù)?DNAT 策略,企業(yè)內(nèi)部的服務(wù)器就可以面向 Internet 提供服務(wù)了。
2.2 DNAT策略的應(yīng)用
2.2.1? 發(fā)布企業(yè)內(nèi)部的Web服務(wù)器
- 公司注冊(cè)的網(wǎng)站域名為 www.benet.com,IP 地址為 218.29.30.31(網(wǎng)卡 ens33)。
- 公司的網(wǎng)站服務(wù)器位于局域網(wǎng)內(nèi),IP 地址為 192.168.1.6。
- 要求能夠從 Internet 中通過(guò)訪(fǎng)問(wèn) www.benet.com 來(lái)查看公司的網(wǎng)站內(nèi)容。?
根據(jù)上述環(huán)境,推薦的操作步驟如下。
(1)打開(kāi)網(wǎng)關(guān)的路由轉(zhuǎn)發(fā)
[root@node1 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@node1 ~]#
?(2)正確設(shè)置DNAT策略文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-775368.html
[root@node1 ~]# iptables -t nat -A PREROUTING -i ens33 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.201.131
[root@node1 ~]#
(3)測(cè)試DNAT發(fā)布結(jié)果
2.2.2 發(fā)布企業(yè)內(nèi)部的 OpenSSH服務(wù)器
- 網(wǎng)關(guān)的公網(wǎng) IP 地址為 218.29.30.31,在 2345 端口啟用 OpenSSH 服務(wù)。
- 網(wǎng)站服務(wù)器位于局域網(wǎng)內(nèi),IP 地址為 192.168.1.6,在 22 端口啟用 OpenSSH 服務(wù)。要求能夠從 Internet 中遠(yuǎn)程管理網(wǎng)關(guān)服務(wù)器和網(wǎng)站服務(wù)器,訪(fǎng)問(wèn) 218.29.30.31 的 2345端口時(shí)對(duì)應(yīng)網(wǎng)關(guān)服務(wù)器,而訪(fǎng)問(wèn) 218.29.30.31 的 2346 端口時(shí)對(duì)應(yīng)網(wǎng)站服務(wù)器。
(1)配置OpenSSH服務(wù)
? (2)打開(kāi)網(wǎng)關(guān)的路由轉(zhuǎn)發(fā)
[root@node1 ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl -p
? (3)?正確設(shè)置DNAT策略
[root@node1 ~]# iptables -t nat -A PREROUTING -i ens33 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.201.131:22
[root@node1 ~]#
(4)測(cè)試DNAT發(fā)布結(jié)果
3. 規(guī)則的導(dǎo)入、導(dǎo)出
3.1 規(guī)則的備份及還原
3.1.1 iptables-save 命令
[root@node1 ~]# iptables-save
# Generated by iptables-save v1.4.21 on Fri Dec 29 10:06:31 2023
*mangle
:PREROUTING ACCEPT [1161:92458]
:INPUT ACCEPT [1161:92458]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [723:64195]
:POSTROUTING ACCEPT [756:69795]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Fri Dec 29 10:06:31 2023
# Generated by iptables-save v1.4.21 on Fri Dec 29 10:06:31 2023
*nat
:PREROUTING ACCEPT [3:687]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [14:1064]
:POSTROUTING ACCEPT [14:1064]
-A PREROUTING -d 218.29.30.31/32 -i ens33 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.201.131
-A PREROUTING -d 218.29.30.31/32 -i ens33 -p tcp -m tcp --dport 2346 -j DNAT --to-destination 192.168.201.131:22
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
......
[root@node1 ~]# iptables-save > /opt/iprules_all.txt ###備份所有表的規(guī)則
3.1.2? iptables-restore 命令
[root@node1 ~]# iptables-restore < /opt/iprules_all.txt ###從備份文件恢復(fù)規(guī)則
3.2 使用iptables服務(wù)
3.2.1 自動(dòng)啟用防火墻規(guī)則
[root@node1 ~]# iptables-save > /etc/sysconfig/iptables
[root@node1 ~]# systemctl enable iptables
[root@node1 ~]# systemctl list-unit-files | grep iptables
iptables.service enabled
[root@node1 ~]#
[root@node1 ~]# systemctl start iptables ## 啟動(dòng)防火墻服務(wù)
[root@node1 ~]# service iptables start
Redirecting to /bin/systemctl start iptables.service
## 也支持service iptables start 方式啟動(dòng),實(shí)際上還是跳轉(zhuǎn)到了systemctl 方式
3.2.2 清空所有防火墻規(guī)則
[root@node1 ~]# systemctl stop iptables.service
[root@node1 ~]# systemctl status iptables.service
● iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
Active: inactive (dead) since 五 2023-12-29 10:15:39 CST; 6s ago
Process: 2575 ExecStop=/usr/libexec/iptables/iptables.init stop (code=exited, status=0/SUCCESS)
Main PID: 631 (code=exited, status=0/SUCCESS)
12月 29 09:40:52 node1 systemd[1]: Starting IPv4 firewall with iptables...
12月 29 09:40:52 node1 iptables.init[631]: iptables: Applying firewall rules: [ 確定 ]
12月 29 09:40:52 node1 systemd[1]: Started IPv4 firewall with iptables.
12月 29 10:15:39 node1 systemd[1]: Stopping IPv4 firewall with iptables...
12月 29 10:15:39 node1 iptables.init[2575]: iptables: Setting chains to policy ACCEPT: mangle nat filter [ 確定 ]
12月 29 10:15:39 node1 iptables.init[2575]: iptables: Flushing firewall rules: [ 確定 ]
12月 29 10:15:39 node1 systemd[1]: Stopped IPv4 firewall with iptables.
[root@node1 ~]#
4. 使用防火墻腳本
4.1 防火墻腳本的構(gòu)成
4.1.1 定義基本變量
[root@node1 ~]# vim /opt/myipfw.sh //創(chuàng)建腳本文件
#!/bin/bash
INET_IF= "ens33" //外網(wǎng)接口
INET_IP= "218.29.30.31" //外網(wǎng)接口地址
LAN_IF= "ens37" //內(nèi)網(wǎng)接口
LAN_IP= "192.168.1.1" //內(nèi)網(wǎng)接口地址
LAN_NET= "192.168.1.0/24" //內(nèi)網(wǎng)網(wǎng)段
LAN_WWW_IP= "192.168.1.6" //網(wǎng)站服務(wù)器的內(nèi)部地址
IPT= "/sbin/iptables" //iptables 命令的路徑
MOD= "/sbin/modprobe" //modprobe 命令的路徑
CTL= "/sbin/sysctl" //sysctl 命令的路徑
4.1.2 加載內(nèi)核模塊
$MOD ip_tables //iptables 基本模塊
$MOD ip_conntrack //連接跟蹤模塊
$MOD ipt_REJECT //拒絕操作模塊
$MOD ipt_LOG //日志記錄模塊
$MOD ipt_iprange //支持 IP 范圍匹配
$MOD xt_tcpudp //支持 TCP、UDP 協(xié)議
$MOD xt_state //支持狀態(tài)匹配
$MOD xt_multiport //支持多端口匹配
$MOD xt_mac //支持 MAC 地址匹配
$MOD ip_nat_ftp //支持 FTP 地址轉(zhuǎn)換
$MOD ip_conntrack_ftp //支持 FTP 連接跟蹤
4.1.3 調(diào)整/proc 參數(shù)
$CTL -w net.ipv4.ip_forward=1 //打開(kāi)路由轉(zhuǎn)發(fā)功能
$CTL -w net.ipv4.ip_default_ttl=128 //修改 ICMP 響應(yīng)超時(shí)
$CTL -w net.ipv4.icmp_echo_ignore_all=1 //拒絕響應(yīng) ICMP 請(qǐng)求
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts //拒絕響應(yīng) ICMP 廣播
$CTL -w net.ipv4.tcp_syncookies=1 //啟用 SYN Cookie 機(jī)制
$CTL -w net.ipv4.tcp_syn_retries=3 //最大 SYN 請(qǐng)求重試次數(shù)
$CTL -w net.ipv4.tcp_synack_retries=3 //最大 ACK 確認(rèn)重試次數(shù)
$CTL -w net.ipv4.tcp_fin_timeout=60 //TCP 連接等待超時(shí)
$CTL -w net.ipv4.tcp_max_syn_backlog=3200 //SYN 請(qǐng)求的隊(duì)列長(zhǎng)度
4.1.4 設(shè)置具體的iptables規(guī)則
(1)清理已有規(guī)則
$IPT -t filter –X //刪除各表中自定義的鏈
$IPT -t nat -X
$IPT -t mangle -X
$IPT -t raw -X
$IPT -t filter –F //清空各表中已有的規(guī)則
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t raw -F
(2)設(shè)置規(guī)則鏈的默認(rèn)策略
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
(3)設(shè)置nat表中的各種規(guī)則
$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-dest
ination $LAN_WWW_IP
(4)設(shè)置filter表的各種規(guī)則
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 20:21 -j ACCEPT
$IPT -A FORWARD -d $LAN_NET -i $INET_IF -m state --state ESTABLISHED, RELATED
-j ACCEPT
......
[root@node1 ~]# chmod +x /opt/myipfw.sh //添加執(zhí)行權(quán)限
[root@node1 ~]# /opt/myipfw.sh //執(zhí)行腳本文件
[root@node1 ~]# iptables -nL FORWARD //查看部分防火墻規(guī)則
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 192.168.1.0/24 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpts:20:21
ACCEPT all -- 0.0.0.0/0 192.168.1.0/24 state RELATED,ESTABLISHED
到了這里,關(guān)于iptables 防火墻(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!