防火墻的分類
systemctl stop firewalld.service
:service iptables stop
關閉本機的防火墻并不意味者將防火墻禁用了,只是禁用系統默認的防火墻設置,自己可以再重新配置防火墻策略。
主機防火墻:服務范圍為當前主機
網絡防火墻:服務范圍為防火墻一側的局域網
硬件防火墻:在專用硬件級別實現部分功能的防火墻;另一個部分功能基于軟件 實現,Checkpoint,NetScreen
軟件防火墻:運行于通用硬件平臺之上的防火墻的應用軟件 ?網絡層防火墻:OSI下面第三層
iptables的基本認識
內核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、 PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶可以通過一 個命令工具(iptables)向其寫入規則
五個內置鏈chain的順序:
當有客戶端有數據通過本機時先經過FORWARD過濾,在通過路由,如果是訪問自己的http服務的數據就轉到http前的input防火墻,輸出數據時在經過output過濾;如果不是訪問本機的http服務的數據就直接轉發,通通forword過濾,轉發到其他服務器上去的。
五個內置鏈chain
INPUT ? ? ? (本機服務前的防火墻)
OUTPUT ? ? (本機服務后的防火墻)
FORWARD ? ?? (通過轉發數據的防火墻過濾)
PREROUTING ? ? (進入本機前的防火墻過濾)
POSTROUTING ? ? ? (輸出本機后的防火墻過濾)
iptables由四個表和五個鏈以及一些規則組成
四個表table:filter、nat、mangle、raw
filter表:過濾規則表,根據預定義的規則過濾符合條件的數據包
nat表:network address translation 地址轉換規則表
mangle:修改數據標記位規則表
Raw:關閉NAT表上啟用的連接跟蹤機制,加快封包穿越防火墻速度
iptables規則
內建處理動作:ACCEPT, ? DROP ? ,REJECT ?? ,SNAT ? ,DNAT MASQUERADE, ? MARK,LOG…
鏈chain:
內置鏈:每個內置鏈對應于一個鉤子函數
自定義鏈:用于對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只 有Hook鉤子調用自定義鏈時,才生效
iptables規則添加時考量點 ?
要實現哪種功能:判斷添加在哪張表上 ?
報文流經的路徑:判斷添加在哪個鏈上 ?
報文的流向:判斷源和目的 ?
匹配規則:業務需要 ?
鏈上規則的次序,即為檢查的次序,因此隱含一定的法則 ?
同類規則(訪問同一應用),匹配范圍小的放上面 ?
不同類規則(訪問不同應用),匹配到報文頻率較大的放上面 ?
將那些可由一條規則描述的多個規則合并為一個 ?
設置默認策略 ?
實驗環境準備: ?
Centos7:
systemctl stop firewalld.service
systemctl disable firewalld. service ?
Centos6:
service iptables stop;
chkconfig iptables off
1、鏈管理:
-N:new, 自定義一條新的規則鏈
-X:delete,刪除自定義的空的規則鏈
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
-E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能被刪除
2、查看:防火墻? (IP tables? –vnl)
-L:list, 列出指定鏈上的所有規則,本選項須置后
-n:numberic,以數字格式顯示地址和端口號
-v:verbose,詳細信息 -vv 更詳細 -x:exactly,顯示計數器結果的精確值,而非單位轉換后的易讀值
–line-numbers:顯示防火墻有幾條規則并帶有序列號
常用組合:
–vnL
–vvnxL
–line-numbers
-S selected,以iptables-save 命令格式顯示鏈上規則
3、規則管理:
-A:append,追加
-I:insert, 插入,要指明插入至的規則編號,默認插入到第一條
-D:delete,刪除防火墻策略
(1) 指明規則序號
(2) 指明規則本身
-R:replace,替換指定鏈上的指定規則編號
-F:flush,清空所有的防火墻策略
-Z:zero,將接收的報文信息清零
iptables的每條規則都有兩個計數器
(1) 匹配到的報文的個數
(2) 匹配到的所有報文的大小之和
chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
簡單示例 ? (增,刪,查,改 的執行)
iptables -t filter -A INPUT -s 192.168.60.4 -j DROP ? (在本機設置詞條策略的意思是:只要是192.168.60.4的主機訪問自己都被drop丟棄 :-t filter :意思是在filter表上添加的策略;? 可以不用寫,因為默認的設置 ;?-A INPUT ?? 代表從遠程的主機發送數據包 ? ? -j drop;如何處理遠程主機發送過來數據包)
iptables -nvL ? ? (查看防火墻策略的列表)
iptables -nvL –line ? (查看防火墻策略列表,但是添加了序列號)
iptables -A INPUT -s 192.168.60.4 -j DROP ? ? (追加一條防火墻策略)
iptables -A INPUT -s 192.168.60.0/24 -j ACCEPT ? (可以寫網段;意思是:整個網段都可以訪問)
iptables -I INPUT -s 192.168.60.4 -j DROP ? ? (插入一條防火墻策略,不添加序列號指定默認插入到第一行)
iptables -I INPUT 2 -s 192.168.60.8 -j DROP ? (指定插入到第2條防火墻策略,自己就成為第二條了)
iptables -D INPUT 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (刪除防火墻策略列表中的第一條)
原本是ACCEPT允許的可以通過-R 來修改原本的選線
iptables -R INPUT 2 -s 192.168.60.4 -j REJECT ?? (-R 修改第二項防火墻策略原本的選項)
組和使用:
iptables -A INPUT -s 192.168.60.4 -j DROP
iptables -A INPUT -s 192.168.60.0/24 -j ACCEPT
(192.168.60.0/24整個網段都允許訪問,但只拒絕192.168.60.4的主機的訪問;此策略的順序不可顛倒)
如果規則1和規則2都不匹配自己的防火墻策略;則會執行他的默認規則,如下圖
2 擴展匹配條件的策略:(man iptables-extensions:查看iptables的擴展用法只在centos7上)
iptables -A INPUT -s 192.168.60.4 -p icmp -j DROP? (只要是來自192.168.60.4的icmp協議的數據就拒絕,icmp協議就是ping包,在192.168.60.4上ping 本機就會ping不通? ;-p 后面跟的是)
iptables -A INPUT -s 192.168.60.4 -d 192.168.60.20 -p tcp -j DROP ? (-d 后面跟的是目標地址;只要是tcp協議的就拒絕;ssh 也屬于tcp協議所以會拒絕ssh的連接)
tcp協議的擴展選項 ;
rpm -ql iptables;(此命令還可以查看擴展的協議模塊)
–source-port, –sport port[:port]:匹配報文源端口,可為端口范圍
–destination-port,–dport port[:port]:匹配報文目標端口,可為范圍
iptables -A INPUT -s 192.168.60.4 -p tcp –dport 445 -j REJECT
iptables -A INPUT -s 192.168.60.4 -p tcp –dport 139 -j REJECT
(上面的兩條為拒絕tcp 的目標端口445和139端口的訪問;及拒絕smb的訪問因為smb服務使用的就是445和139兩個端口號;拒絕目標端口及本機文smb服務器;60.4主機訪問本機的目標端口號? 被拒絕)
1、multiport擴展
拒絕多個服務的多個端口的訪問:(如:http;ftp;vsftp等服務一起都拒絕)
iptables -A INPUT -p tcp -m multiport –dport 21,80,445 -j REJECT
–dport 表示的是目標端口的意思;如果在本機輸入此條防火墻策略,就表示其他主機無法連接本機的21,80,445,端口所對應的服務;但本機可以連接其他主機的這些服務則不會受限制。
iptables -A INPUT -p tcp –syn -j REJECT ? (拒絕tcp/ip協議的syn=1的第一次握手,自然就連不到本機上了;新建的連接是不行的,已經連接上的繼續連接)
iptables -I INPUT -p tcp -m multiport –dports 22, 80,139,445 -j ACCEPT? (允許http,smb,ssh的訪問)
iptables -I INPUT -p udp -m multiport –dports 137,138 -j ACCEPT ?? (因為smb服務頭udp協議的端口)
iptables -A INPUT -j REJECT? (拒絕所有的訪問)
(總的實現目標:拒絕所有的外部訪問只允許訪問本機smb和http服務)
type/code
0/0 echo-reply icmp應答 ?? (對本機出去的請求)
8/0 echo-request icmp請求 (對來的請求)
iptables -A INPUT -p icmp –icmp-type 8 -j REJECT (本機能夠ping通其它主機,而其他主機ping不同本機)
iptables -A INPUT -p icmp –icmp-type 0? -j REJECT ? (正好和上面相反,本機ping不同其他主機而其他主機都可以ping通本主機)
(在tcp/ip協議中通過控制目標端口和源端口來控制上述的控制實現)
2、iprange擴展
指明連續的(但一般不是整個網絡)ip地址范圍
[!] –src-range from[-to] 源IP地址范圍
[!] –dst-range from[-to] 目標IP地址范圍
iptables -A INPUT -d 192.168.60.2 -p tcp –dport 80 -m iprange –src-range 172.16.1.5-172.16.1.10 -j DROP
(意思 :從172.16.1.5-172.16.1.10這個網段訪問本機的192.168.60.2 的http服務被拋棄)
-m iprange :想使用連續的地址段必須添加此模塊。
3、mac擴展 ? (通過MAC地址來控制更加精準)
指明源MAC地址 適用于:PREROUTING, FORWARD,INPUT chains
[!] –mac-source XX:XX:XX:XX:XX:XX
iptables -A INPUT -s 172.16.0.100 -m mac –mac-source 00:50:56:12:34:56 -j ACCEPT
-m mac –mac-source 00:50:56:12:34:56? :此為源地址MAC地址
-s 172.16.0.100? : 源地址
他們是并且的意思必須滿足連個條件才被拒絕:既IP地址為:172.16.0.100且MAC地址為00:50:56:12:34:56
4、string擴展
對報文中的應用層數據做字符串模式匹配檢測 (匹配到字符:包含某一特定的字符就可以拒絕)
–algo {bm|kmp}:字符串匹配檢測算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
–from offset 開始偏移
–to offset 結束偏移
示例:本機上有http的goole網站;拒絕其他機器訪問本機的goole網頁,其他網站可以正常訪問:
思路;此屬于應用層的限制,應該設置在output上,當本機輸出帶有goole的字符則給他截斷:
iptables -A OUTPUT -m string –algo bm –string “goole” -j REJECT
(由于對于源和目標主機沒有限定,所以是外面的所有主機都是限定的)
5、time擴展
根據將報文到達的時間與指定的時間范圍進行匹配
–kerneltz:內核時區,不建議使用,CentOS7系統默認為UTC
注意: centos6 不支持kerneltz ,–localtz指定本地時區(默認)
–timestart hh:mm[:ss] 時間
–timestop hh:mm[:ss]
[!] –monthdays day[,day…] 每個月的幾號
[!] –weekdays day[,day…] 星期幾
示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp –dport 80 -m time –timestart 14:30 –timestop 18:30 –weekdays Sat,Sun –kerneltz -j DROP
(時間限定:每周的6,7 14:30—18:30從源地址172.16.0.0/16訪問目標主機 172.16.100.10 的80端口被拒絕)
6、connlimit擴展
根據每客戶端IP做并發連接數數量匹配
–connlimit-upto n:連接的數量小于等于n時匹配
–connlimit-above n:連接的數量大于n時匹配
iptables -A INPUT -d 172.16.100.10 -p tcp –dport 22 -m connlimit –connlimit-above 2 -j REJECT
(外面的所有主機對目標主機172.16.100.10 訪問22端口被限制連接的數量最大為兩個,多余的被拋棄)
7、limit擴展
基于收發報文的速率做匹配
–limit rate[/second|/minute|/hour|/day]
–limit-burst number
iptables -I INPUT -d 172.16.100.10 -p icmp –icmp-type 8 -m limit –limit 10/minute –limit-burst 5 -j ACCEPT(外面的所有主機對目標主機172.16.100.10訪問ping的請求,前5次不限制之后被限制每分鐘10次)
iptables -I INPUT 2 -p icmp -j REJECT ? ?? (此兩條配合使用,不滿足上述條件的ping都會被拒絕;如果不添加此條規則,則當不滿足上述條件的話會執行默認的規則還是會ping通的;所以要添加此規則)
8、state擴展
狀態有如下幾種:
NEW:新發出請求;連接追蹤信息庫中不存在此連接的相關信息條目,因 此,將其識別為第一次發出的請求 ?? (第一次訪問我包:雙方通信的第一個報文)
ESTABLISHED:NEW狀態之后,連接追蹤信息庫中為其建立的條目失效之 前期間內所進行的通信狀態(不是第一次訪問我的包)
RELATED:新發起的但與已有連接相關聯的連接,如:ftp協議中通21端口發起命令請求;但要通過其他隨機端口來傳送數據。
INVALID:無效的連接,如flag標記不正確
UNTRACKED:未進行追蹤的連接,如raw表中關閉追蹤
示例:
iptables -A INPUT -p tcp –dport 80 -m state –state NEW -j ACCEPT? (新發起的連接接受)
iptables -I INPUT 1 -m state –state ESTABLISHED -j ACCEPT ?? (已經連接的請求接受;但新發起的連接不接受了;此條規則沒有定義端口和類型所以對任何服務都有效)
已經追蹤到的并記錄下來的連接信息庫
/proc/net/nf_conntrack ?
調整連接記錄功能所能夠容納的最大連接數量
/proc/sys/net/nf_conntrack_max ?
echo 1000000 > /proc/sys/net/nf_conntrack_max? (臨時調整)
echo net.nf_conntrack_max=2000000 >> /etc/sysctl.conf ? (永久修改)
sysctl -p ? (讓修改的配置文件生效)
設置的連接數量不能是過大,否則會對服務器的資源消耗過大
不同的協議的連接追蹤時長
/proc/sys/net/netfilter/ ?? (此處是查看的)
降低 nf_conntrack timeout時間
vi /etc/sysctl.conf ? (此處是修改的)
net.netfilter.nf_conntrack_tcp_timeout_established = 300 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
sysctl -p (讓修改的配置文件生效)
iptables -t nat -L -n
注意:CentOS7 需要加載模塊: modprobe nf_conntrack 才能監控連接狀態。
開放被動模式的ftp服務? (vsftp服務分為主動模式和被動模式;主動模式的端口號是不變的,但被動模式下的端口號是隨機的,所以防火墻的設置不同)
(1) 裝載ftp連接追蹤的專用模塊: 跟蹤模塊路徑:/lib/modules/kernelversion/kernel/net/netfilter
vim /etc/sysconfig/iptables-config 配置文件
IPTABLES_MODULES=“nf_conntrack_ftp”
modproble nf_conntrack_ftp ?? (ftp連接追蹤的專有模塊;默認是沒有加載的)
(2) 放行請求報文:
命令連接:NEW, ESTABLISHED
數據連接:RELATED, ESTABLISHED
iptables –I INPUT -d LocalIP -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -d LocalIP -p tcp –dport 21 -m state –state NEW -j ACCEPT
(3) 放行響應報文:
iptables -I OUTPUT -s LocalIP -p tcp -m state –state ESTABLISHED -j ACCEPT
開放被動模式的ftp服務示例
yum install vsftpd ?
systemctl start vsftpd ?
modprobe nf_conntrack_ftp ?? (加載ftp追蹤功能的專有模塊)
iptables -F ? (清除原有的規則)
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT ?(允許已經建立的連接和新發起的但與已有連接相關聯的連接)啟用此功能必須加載相對應的模塊。
iptables -A INPUT -p tcp –dport 21 -m state –state NEW -j ACCEPT ?(新鏈接的21端口都允許)
iptables -vnL
iptables日志:
LOG: 當滿足設定的規則條件后 ,將日志記錄在/var/log/messages系統日志中
–log-level level 級別: emerg, alert, crit, error, warning, notice, info or debug
–log-prefix prefix 日志前綴,用于區別不同的日志,最多29個字符 ?
示例:
iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport –dports 80,21,22,23 -m state –state NEW -j LOG –log-prefix “new connections: ” ? (當從源地址10.0.1.0/24發起的tcp的80,21,22,23端口的請求并且是新發起的請求就記錄日志里并加上關鍵字“new connections: “)
iptables內部端口的連接:iptables -A INPUT -i lo -j ACCEPT(都被允許)
當服務器內部有多個應用時,每個應用需要轉發到其他應用的端口號上時就需要允許其內部的連接
iptables規則的有效期限:
使用iptables命令定義的規則,手動刪除之前,其生效期限為kernel存活期限
保存規則至指定的文件 CentOS 6
service iptables save
執行上面的命令后就會將規則覆蓋保存至/etc/sysconfig/iptables文件中
service iptables restart
會自動從/etc/sysconfig/iptables 重新載入規則
實現開機自啟:
將iptables設為開機自啟,就會自動加載保存的防火墻規則
chkconfig? iptables on
CentOS 7 可用下面方法保存規則
iptables-save >?/etc/iptables ? (路徑及文件名可以自定義)
iptables-restore <?/etc/iptables ? (還原防火墻的規則)
-n, –noflush:不清除原有規則
-t, –test:僅分析生成規則集,但不提交
開機自動重載規則文件中的規則? (在centos7上)
/etc/rc.d/rc.local在開機自動加載執行命令腳本的文件里添加:
iptables-restore <?/etc/iptables ? ? (開機時就會自動還原保存的防火墻規則,但前提時在重啟機器前需要保存修改過后的防火墻規則)
自定義鏈來實現規則
-N:new, 自定義一條新的規則鏈 ?? (iptables -N WEB)
-X:delete,刪除自定義的空的規則鏈 ? ? ?? (iptables -X ? WEB)
-E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能被刪除
首先新建一個自定義的鏈:
iptables -N WEB ? ?? (創建一個WEB鏈)
在自定義的鏈里添加防火墻規則:
iptables -A WEB -p tcp -m multiport –dports 80,443 -j ACCEPT ? (只允許訪問本機的http,https)
最后將自定義的鏈關聯到本機的鏈上去才能讓其生效
iptables -I INPUT -s 192.168.60.0/24 -j WEB(當192.168.60.0/24 訪問本機時,交給WEB鏈來決定規則)
刪除自定義鏈的順序:
首先刪除input的關連:
iptables -D INPUT 1
再次刪除WEB鏈上的規則:
iptables -D WEB 1
最后刪除自定義的WEB鏈:
iptables -X WEB
小結:1? .如果有多條防火墻規則,生效的順序為從第一條開始一次向下執行。如果兩條策略有沖突,就會執行在前面的那一條防火墻規則。
2 .? 添加防火墻策略應該是精確的范圍小的寫在前面,范圍大的防火墻規則寫在后面。
實驗:網絡防火墻
實驗要求:內部主機可以訪問外部網絡,外部主機不能訪問內部網絡
實驗結構:三臺主機:一臺內部網絡的主機;一臺充當路由器防火墻的主機;一臺外部網絡的主機
具體實驗步驟:
1 在充當路由器的虛擬機上:
添加兩塊網卡在不同網段:并配置讓其生效:(例如:10網段和11網段)
配置兩塊網卡的IP地址:IP地址為內網和外網兩個網段的網關192.168.52.2和192.168.56.2兩個網關
2 . 在充當內部主機的虛擬機上設一塊網卡:讓其在10網段并配置讓其生效(要在網卡的配置文件上添加網關)主機:192.168.56.5 ? ?? 網關:192.168.56.2
3 . 在充當外部主機的虛擬機上設一塊網卡:讓其在11網段上并配置讓其生效(要在網卡的配置文件上添加網關)主機:192.168.52.8 ? ? ? 網關:192.168.52.2
實驗環境搭好了:現在內部應該可以ping通外部網絡 (都是在路由防火墻上添加的規則)
4 :要實現內部網絡訪問外部網絡的限制;訪問外網的youku 禁止;但訪問magedu.com允許
在路由器防火墻上添加規則:
iptables -I FORWARD -m string –algo bm –string “youku.com” -j REJECT (拒絕通向優酷的轉發)
(使用forward鏈是因為服務不是訪問自己的而是通過自己轉發的)
5 ,要實現在某個時間段也不可以訪問外部的所有網站:
iptables -A FORWARD -m time –timestart 14:30 –timestop 18:30 –weekdays 1,3,5 -j DROP
(注意此時間為格林尼治時間需要自己做加減法,因為此模塊內核定義的就是格林尼治時間)
6 .實現內部網絡可以訪問外部網絡,外部網絡不能訪問內部網絡:
思路:如果是從B發向A的回應包是允許的,如果是B主動的發起請求A則給與拒絕。
iptables -A FORWARD -j REJECT(拒絕所有的訪問:既A到B和B到A的所有數據放在最后)
iptables -I FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT (插入一條規則,只要是已經建立連接的和建立連接相關的連接都允許)
iptables -I FORWARD 2 -s 192.168.60.0/24 -d 10.0.0.0/16 -m state –state NEW -j ACCEPT(在定義內網的源地址發起的新請求都是允許的,沒有定義的按照第一條規則都應該是拒絕的)
7 .現在內部有一個服務器希望能夠被外部訪問,僅限內部的某一臺服務器;(在第六題的基礎上)
iptables -I FORWARD 2 -d 192.168.60.4 -m state –state NEW -j ACCEPT(加在上面的第二條,源地址不定義,目標地址為內網段的某一臺主機,新建的所有連接都允許;也可以指定確定的服務端口)
上述實驗實現的條件是在基于內網和外網都是公網IP地址的前提下;一般不會用到
實驗從私網地址(局域網)去訪問公網地址:(NAT技術)
局域網訪問公網的過程:
當A主機通過中間設備發送請求到B;由于A是私網地址,在公網里沒有路由解析不到私有地址則無法到達B
但通過NAT技術,當A的請求到達中間防火墻轉換成公網地址,發送到B去,B收到請求返回數據到防火墻處使用NAT技術再將公網地址替換成私網地址,轉發到A處。
此處有一個問題,當有多個私網地址去訪問公網時由于中間的NAT只有一個公網地址就無法同時轉發多個地址了,這時可以申請一段公網地址池,來供私網地址來使用,但是如果私網地址過多的話,地址池內的公網地址不多就又會造成擁堵;
這時會采用通過端口號來實現多個私網地址使用一個公網地址來訪問外網,IP地址是相同的但使用的端口號是不同的。端口也要跟著轉發(此技術為PAT)PATT+NAT可以實現多個私網地址轉化成一個公網地址來訪問外網的。
這種方式局域網可以訪問互聯網;但互聯網無法訪問局域網
SNAT
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT –to-source ExtIP
(ExtIP :外網地址 ?? LocalNET:私網地址)
示例:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24? -j SNAT? – -to-source 172.18.1.6
(如果是來自私網的10.0.1.0/24的這個網段就做轉換,轉換成172.18.1.6這個公網的IP地址來訪問外網)
在上面的環境下實現SNAT:
搭建環境在上面的1,2,3 步驟來實現:(在外網的地址配過網關現在不需要網關了,去掉也可以訪問)
iptables -t nat -A POSTROUTING -s 192.168.52.2 -j SNAT – -to-source 192.168.60.2
(-s 192.168.52.2:此為內部網的主機IP,source 192.168.60.2:此為實驗環境下外網在路由器上設的網關IP地址路由器eth1的地址)
當內網訪問外網時經過中間的 防火墻通過SNAT技術將本網段轉換成;外網的網關,然后再訪問外網是不需要網關的,在同一網段通過廣播的方式就可以到達了。
DNAT
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp –dport PORT -j DNAT –to-destination InterSeverIP[:PORT]
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp –dport 22 -j DNAT –todestination 10.0.1.22
(當外網-s 0/0不限地址訪問本機的防火墻上的唯一一個公網IP時172.18.100.6 -p tcp –dport 22的22端口時就給他轉發到10.0.1.22 內網的地址上去)
在上面的環境下實現SNAT:
搭建環境在上面的1,2,3 步驟來實現:(下面的規則再防火墻主機上添加)
iptables -t nat -A PREROUTING -D 192.168.52.2? -p tcp –dport 22-j destination 192.168.56.5 22
(192.168.52.2 :當訪問防火墻的外網IP也就是實驗環境的路由的外網IP網關22端口時,就給他轉發到內網主機的22端口192.168.56.5 22)
ssh 192.168.52.2(此IP為外網的網關地址) 就會連接到指定的內網192.168.56.5的主機上去
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101905