iptables/netfilter的網絡防火牆html
接上文繼續講解網絡防火牆和nat功能的基礎功能;
網絡防火牆的功能簡單講就是,全部經由本機的一個接口進來的報文在本地路由決策後路由的目標地址不是本機,須要幫忙轉發到其它網絡當中或來源網絡中去的這種請求時的場景,咱們就稱爲轉發功能;
那麼轉發的報文必須是經由forward鏈(含三個鏈,prerouting,forward,postrouting),不過過濾只能在forward實現;
請注意:定義在forward鏈上的策略只對那些經由本機轉發的報文才有效,進出本主機的報文沒有任何效用;
其它的咱們就很少說了,上一些規則測試語句,想必均可以看得懂;web
添加規則於FORWARD鏈,注意幾個問題安全
(1) 請求和響應報文均會經由FORWARD鏈,要注意規則的方向性;
如:iptables -I FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
(2) 若是能夠啓用conntrack機制,注意網關主機所可以追蹤的鏈接數的最大數量要符合須要;bash
如何使用iptables構建網絡防火牆環境服務器
一、環境構建並作相應服務應用測試
主機1臺,CentOS 7.2 構建模型爲網關接口
NIC 01:172.16.5.40/16 外網主機地址;
NIC 02:192.168.22.1/24 內網主機地址;
~]# cat /proc/sys/net/ipv4/ip_forward (這時轉發功能未打開 );
主機1臺,CentOS 7.2 搭建模型爲內網主機客戶端
IP:192.168.22.2/24;
Gateway:192.1.68.22.1;
主機1臺,CentOS 7.2 構建模型爲外網主機客戶端
IP:172.16.5.50/16;
在內網主機客戶端安裝測試環境;
~]# yum install -y vsftpd httpd telnet-server samba
測試ping 172.16.5.40能通,由於ip工做與內核只在本機未轉發;
可抓包看地址解析過程;
~]# tcpdump -i eno16777736 -nn icmp
開啓轉發後報文仍是沒法響應,最簡單需在本機更改默認網關或添加路由;
~]# route del -net 0.0.0.0 gw 172.16.5.1
~]# route add default gw 172.16.5.40
增長一個應用服務,並在外網客戶端主機上去測試內網主機客戶端可否訪問;
~]# systemctl start httpd
~]# echo 192.168.22.2 > /var/www/html/index.html
在外網主機客戶端測試;
~]# curl http://192.168.22.2(通證實網絡之間通訊沒問題)
同理在外網客戶端安裝一個應用,並在內網主機作測試能連同網絡之間鏈接正常;
二、在網關上添加策略
先作個黑名單
~]# iptables -A FORWORAD -j DROP
內網客戶端測試;
~]# curl http://192.168.22.2
示例以下:
放行由內而外訪問任意外部服務 ;
~]# iptables -I FORWARD -s 192.168.22.0/24 -p tcp –dport 80 -j ACCEPT
開放請求報文出去;
~]# iptables -I FORWARD 2 -d 192.168.22.0/24 -p tcp –sport 80 -j ACCEPT
放響應報文進來;
注意: 由於咱們作的是黑名單,任何能請求出去的響應報文都是安全的,爲了不規則愈來愈多,咱們可使用狀態追蹤機制;
~]# iptables -D FORWARD 2
添加一條規則,不管從內而外只要是響應報文均可正常容許進行;
~]# iptables -I FORWARD -m state –state ESTABLISHED -j ACCEPT
之後只要寫請求策略就能夠了;
如:內網主機開放ssh連入到外網;
~]# iptables -R FORWARD 2 -s 192.168.22.0/24 -p tcp -m multiport –dport 80,22,23,21 139,445 -m state –state new
-j ACCEPT
開放由內網主機去訪問外網主機客戶端的ftp服務;
在網關主機上裝載ftp狀態追蹤模塊;
~]# modprobe nf_conntrack_ftp,lsmod | grep nf_conntrack_ftp
~]# iptables -R FORWARD 1 -m state –state established,related -j ACCEPT
注意:必定要在寫規則時別把本身擋在牆外面,可定義任務計劃,20分鐘策略失效 @指定iptables -F ;網絡
NAT功能ssh
NAT是什麼我想不用我在這裏嗷述,它的全稱是(Network Address Translation即網絡地址轉換);
它的出現減緩甚至代替了IP地址空間的枯竭;
更詳細的介紹可參考360百科或官方RFC 1632技術文檔作參考;curl
**功能** 源地址轉換:SNAT,僅能應用於POSTROUTING INPUT鏈 只考慮報文的前半段; 靜態轉換:地址是固定的,動態轉換:地址是隨機的; 目標地址轉換:DNAT,僅能應用於PREROUTING OUTPUT鏈; 基於IP+端口轉換,地址作轉換,端口作判斷; MASQUERADE:地址假裝 REDIRECT: 端口映射 RETURN:返回,自定義鏈功能,基於地址池定義等
SNAT:源IP地址轉換
對於有Internet訪問需求而內部又使用私有地址的網絡,就要在組織的出口位置部署NAT網關,在報文離開私網進入Internet時,將源IP替換爲公網地址,一般是出口設備的接口地址。一個對外的訪問請求在到達目標之後,表現爲由本組織出口設備發起,所以被請求的服務端可將響應由Internet發回出口網關。出口網關再將目的地址替換爲私網的源主機地址,發回內部。這樣一次由私網主機向公網服務端的請求和響應就在通訊兩端均無感知的狀況下完成了。依據這種模型,數量龐大的內網主機就再也不須要公有IP地址了;
DNAT:目的IP地址轉換
一、發佈內部服務器,讓外面的internet用戶能訪問到內網的服務器;
二、網絡重定向;
(摘自網絡)tcp
NAT的功能測試ide
實驗的環境仍是沿用以前的環境;
多個示例襲來:
全部來自內網中的主機請求都轉發到外網中去(在網關中加入) ;
~]# iptables -t nat -A POSTROUTING -s 192.168.22.0/24 -j SNAT –to-source 172.16.5.40
~]# iptables -t nat -vnL
在外網主機客戶端抓包看一下;
~]# tcpdump -i eno16777736 -nn icmp (目標地址轉換自動完成);
全部來自於外網對公網地址上某一個端口的請求,通通都轉發自內網中某一服務器上去;
~]# iptables -t nat -A PREROUTING -d 172.16.5.40 -p tcp –dport 80 -j DNAT –to-destination 192.168.22.2
~]# iptables -t nat -vnL
外網主機客戶端測試 curl http://172.16.5.40;
~]# iptables -t nat -A PREROUTING -d 172.16.5.40 -j DNAT –to-destination 192.168.22.2:80
任意端口任意地址;
端口映射httpd 8080;
~]# iptables -t nat -A PREROUTING -d 172.16.5.40 -p tcp –dport 80 -j DNAT –to-destination 192.168.22.2:8080
~]# iptables -t nat PREROUTING 2 -d 172.16.5.40 -p tcp –dport 22022 -j DNAT –to-destination 192.168.22.3:22
在外網主機客戶端測試;
~]# ssh -p 22022 root@172.16.5.40
自定義鏈、RETURN
自定義鏈:需被引用;
~]# iptables -A web_in -d 192.168.22.0/24 -p tcp –dport 80 -m state --state NEW-j ACCEPT
~]# iptables -A FORWARD -j REJECT
在默認規則前調用上面的規則;
~]# iptables -I FORWARD 2 -d 192.168.22.0/24 -p tcp –dport 80 -j web_in
~]# iptables -A web_in -j RETURN
注意:自定義鏈沒法被刪除,需清除鏈規則後在刪除;
~]# iptables -F web_in
~]# iptables -X web_in
其它未講的可自行參考Linux內核編譯系列叢書和最大的***指導性網站Google;
done