iptables防火墙策略
環(huán)境:
foundation1???? 172.25.1.250??? 172.25.254.1
server1???????????? 172.25.1.1
server2???????????? 172.25.1.2
server3???????????? 172.25.1.3
四個(gè)主機(jī)都做解析
iptables簡(jiǎn)介:
netfilter/iptables(簡(jiǎn)稱為iptables)組成Linux平臺(tái)下的包過(guò)濾防火墻,與大多數(shù)的Linux軟件一樣,這個(gè)包過(guò)濾防火墻是免費(fèi)的,它可以代替昂貴的商業(yè)防火墻解決方案,完成封包過(guò)濾、封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。
iptables采用“表”和“鏈”的分層結(jié)構(gòu),在linux中iptables主要有三張表五條鏈:
三張表即filter表、nat表、mangle表,分別用于實(shí)現(xiàn)包過(guò)濾,網(wǎng)絡(luò)地址轉(zhuǎn)換、包重構(gòu)(修改)功能
filter表有三個(gè)鏈:INPUT、FORWARD、OUTPUT
作用:過(guò)濾數(shù)據(jù)包?
Nat表有三個(gè)鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用于網(wǎng)絡(luò)地址轉(zhuǎn)換(IP、端口)
Mangle表有五個(gè)鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數(shù)據(jù)包的服務(wù)類型等
iptables命令中設(shè)置數(shù)據(jù)過(guò)濾或處理數(shù)據(jù)包的策略叫做規(guī)則,將多個(gè)規(guī)則合成一個(gè)鏈,叫規(guī)則鏈。
規(guī)則鏈則依據(jù)處理數(shù)據(jù)包的位置不同分類:
PREROUTING: 在進(jìn)行路由判斷之前所要進(jìn)行的規(guī)則(DNAT/REDIRECT)
INPUT:處理入站的數(shù)據(jù)包
OUTPUT:處理出站的數(shù)據(jù)包
FORWARD:處理轉(zhuǎn)發(fā)的數(shù)據(jù)包
POSTROUTING: 在進(jìn)行路由判斷之后所要進(jìn)行的規(guī)則(SNAT/MASQUERADE)
iptables中的規(guī)則表是用于容納規(guī)則鏈,規(guī)則表默認(rèn)是允許狀態(tài)的,那么規(guī)則鏈就是設(shè)置被禁止的規(guī)則,而反之如果規(guī)則表是禁止?fàn)顟B(tài)的,那么規(guī)則鏈就是設(shè)置被允許的規(guī)則。
raw表:確定是否對(duì)該數(shù)據(jù)包進(jìn)行狀態(tài)跟蹤
mangle表:為數(shù)據(jù)包設(shè)置標(biāo)記(較少使用)
nat表:修改數(shù)據(jù)包中的源、目標(biāo)IP地址或端口
filter表:確定是否放行該數(shù)據(jù)包(過(guò)濾)
另外注意:
1.沒(méi)有指定規(guī)則表則默認(rèn)指filter表。
2.不指定規(guī)則鏈則指表內(nèi)所有的規(guī)則鏈。
3.在規(guī)則鏈中匹配規(guī)則時(shí)會(huì)依次檢查,匹配即停止(LOG規(guī)則例外),若沒(méi)匹配項(xiàng)則按鏈的默認(rèn)狀態(tài)處理。
注意:
你所定義的所有內(nèi)容,當(dāng)你重啟的時(shí)候都會(huì)失效,要想我們能夠生效,需要使用一個(gè)命令將它保存起來(lái)
1.service iptables save 命令
它會(huì)保存在/etc/sysconfig/iptables這個(gè)文件中
? ? 2.iptables-save 命令
iptables-save > /etc/sysconfig/iptables
為了不影響實(shí)驗(yàn)去除干擾,將 firewalld 關(guān)閉,安裝 iptables,并啟動(dòng)
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# systemctl status firewalld
[root@server1 ~]# yum install iptables-services????????????????????? //下載防火墻服務(wù),server1、server2、server3均下載
[root@server1 ~]# systemctl start iptables.service??????????????? //開啟服務(wù)
[root@server1 ~]# iptables -nL?????????? //查看防火墻策略
Chain INPUT (policy ACCEPT)
target???? prot opt source?????????????? destination??????? ?
Chain FORWARD (policy ACCEPT)
target???? prot opt source?????????????? destination??????? ?
Chain OUTPUT (policy ACCEPT)
target???? prot opt source?????????????? destination??????? ?
[root@server1 ~]# iptables -F??????????? //刷新策略
[root@server1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target???? prot opt source?????????????? destination??????? ?
Chain FORWARD (policy ACCEPT)
target???? prot opt source?????????????? destination??????? ?
Chain OUTPUT (policy ACCEPT)
target???? prot opt source?????????????? destination??
[root@server1 ~]# yum install -y httpd????????????????????? //下載http服務(wù)
[root@server1 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@server1 ~]# systemctl start httpd????????????????? ?? //開啟http服務(wù)
[root@server1 ~]# iptables -P INPUT ACCEPT???????? //設(shè)置接受模式
此時(shí)所有主機(jī)瀏覽器都可以訪問(wèn)httpd頁(yè)面,這里用curl命令
給server1寫一個(gè)Apache的發(fā)布頁(yè)面
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# ls
[root@server1 html]# vim index.html
[root@foundation1 Desktop]# curl server1
[root@server2 ~]# curl server1
server1
[root@server3 ~]# curl server1
server1
[root@server1 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT?????????????? //添加策略,使http為拒絕
[root@server1 ~]# iptables -nL?????????? //查看策略是否已添加
Chain INPUT (policy ACCEPT)
target???? prot opt source?????????????? destination??????? ?
REJECT???? tcp? --? 0.0.0.0/0??????????? 0.0.0.0/0??????????? tcp dpt:80 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target???? prot opt source?????????????? destination??????? ?
Chain OUTPUT (policy ACCEPT)
target???? prot opt source?????????????? destination?
此時(shí):
[root@server2 ~]# curl server1
[root@server3 ~]# curl server1
curl: (7) Failed connect to server1:80; Connection refused
[root@server1 ~]# iptables -A INPUT -s 172.25.1.2 -p tcp --dport 80 -j ACCEPT??????? //指定ip為server2可以訪問(wèn)該主機(jī)的http服務(wù)
[root@server1 ~]# iptables -nL
[root@server2 ~]# curl server1
curl: (7) Failed connect to server1:80; Connection refused
防火墻策略讀取方式:
讀取時(shí)從第一條開始讀取,當(dāng)滿足第一條時(shí)停止讀取。
可以看到雖然有策略,但是server2還是不能訪問(wèn),因?yàn)榈谝粭l策略讀完就拒之門外,所以因采用:
[root@server1 ~]# iptables -D INPUT 2
[root@server1 ~]# iptables -I INPUT 1 -s 172.25.1.2 -p tcp --dport 80 -j ACCEPT [root@server1 ~]# iptables -nL
[root@server1 ~]# iptables -nL
此時(shí):
[root@server2 ~]# curl server1
[root@server3 ~]# curl server1
[root@server1 ~]# iptables -R INPUT 2 -s 172.25.1.3 -p tcp --dport 80 -j ACCEPT?? ?? //修改第二條策略,修改為允許server3訪問(wèn)
[root@server1 ~]# iptables -nL
此時(shí)server3也可進(jìn)行訪問(wèn)
[root@server3 ~]# curl server1
[root@server1 ~]# iptables -F?????? //刷新策略
[root@server1 ~]# iptables -nL???? //察看是否已刷新
[root@server1 ~]# iptables -N xx??????????? //添加名為xx的鏈
[root@server1 ~]# iptables -nL
[root@server1 ~]# iptables -E xx cc????????????????? //修改鏈名,將名為xx的鏈修改為cc
[root@server1 ~]# iptables -nL
[root@server1 ~]# iptables -X cc??????????????? //刪除鏈cc
[root@server1 ~]# iptables -nL
?
NAT (Net Address Trancelate:網(wǎng)絡(luò)地址轉(zhuǎn)換)
*************************源地址轉(zhuǎn)換:SNAT*********************************
(源地址轉(zhuǎn)換)是指在數(shù)據(jù)包從網(wǎng)卡發(fā)送出去的時(shí)候,把數(shù)據(jù)包中的源地址部分替換為指定的 IP,這樣,接收方就認(rèn)為數(shù)據(jù)包的來(lái)源是被替換的那個(gè) IP 的 主機(jī)
*************************目的地址轉(zhuǎn)換:DNAT*******************************
(目標(biāo)地址轉(zhuǎn)換),就是指數(shù)據(jù)包從網(wǎng)卡發(fā)送出去的時(shí)候,修改數(shù)據(jù)包中的目的 IP,表現(xiàn)為如果你想訪問(wèn) A,可是因?yàn)榫W(wǎng)關(guān)做了 DNAT,把所有訪問(wèn) A 的數(shù) 據(jù)包的目的 IP 全部修改為 B,那么,你實(shí)際上訪問(wèn)的是 B
注意:實(shí)現(xiàn)配置iptables的NAT功能需要 開啟內(nèi)核的轉(zhuǎn)發(fā)功能
?
1、SNAT
環(huán)境:
server1:172.25.1.1
server2: 172.25.1.2??????? 172.25.254.2???????????????? 開啟iptables服務(wù)
server3:172.25.254.3
## 所有主機(jī)刷新策略,并關(guān)閉防火墻firewalld
##? 打開轉(zhuǎn)發(fā)IP功能(IP forwarding):
echo "1" > /proc/sys/net/ipv4/ip_forward
要想永久有效:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
如果使用PPP、DHCP等動(dòng)態(tài)IP,需要打開:
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
[root@server2 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@server2 ~]# systemctl status iptables
[root@server2 ~]# ip address add 172.25.254.2/24 dev eth1?????????????????? //添加網(wǎng)卡eth1:172.25.254.2
[root@server1 ~]# ip addr
[root@server3 ~]# ip addr
原本不同網(wǎng)段ip是ping不通的,即server1和server3是ping不通的
[root@server1 ~]# ping 172.25.254.3
[root@server2 ~]# iptables -nL -t nat???????? //查看nat策略
[root@server2 ~]# iptables -t nat -I POSTROUTING -s 172.25.1.0/24 -j MASQUERADE
//在路由后,將172.25.1.0/24網(wǎng)段過(guò)來(lái)的主機(jī)轉(zhuǎn)發(fā)出去
[root@server2 ~]# iptables -nL -t nat
[root@server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0????????? //添加網(wǎng)關(guān)
GATEWAY=172.25.1.2
[root@server1 ~]# systemctl restart network
[root@server2 ~]# route -n
-bash: route: command not found
[root@server2 ~]# yum install -y net-tools???????????????? //下載route 命令所需的工具
[root@server1 ~]# route -n?????????????? //查看網(wǎng)關(guān)
[root@server1 ~]# ping 172.25.254.3?????????????
//此時(shí)雖然是不同網(wǎng)段,但是可以ping通
2、DNAT????
環(huán)境:
server1 內(nèi)網(wǎng) 172.25.1.1/24
server2 路由 172.25.1.2/24 ? 172.25.254.2/24
server3 外網(wǎng) 172.25.254.3/24
?
分別給三個(gè)主機(jī)寫一個(gè)http頁(yè)面,內(nèi)容為各自的ip,方便判斷連接到的是哪個(gè)主機(jī)
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# echo 172.25.1.1 > /var/www/html/index.html????????????? //寫一個(gè)http頁(yè)面,內(nèi)容為172.25.1.1
[root@server2 ~]# yum install -y httpd
[root@server2 ~]# systemctl start httpd
[root@server2 ~]# echo 172.25.1.2 > /var/www/html/index.html????????????? //寫一個(gè)http頁(yè)面,內(nèi)容為172.25.1.1
[root@server3 ~]# yum install httpd
[root@server3 ~]# systemctl start httpd
[root@server3 ~]# systemctl status httpd
[root@server3 ~]# echo 172.25.254.3 > /var/www/html/index.html????????????? //寫一個(gè)http頁(yè)面,內(nèi)容為172.25.254.3
給路由主機(jī)添加策略:
現(xiàn)在要把外網(wǎng)訪問(wèn)172.25.254.2的所有流量映射到172.25.1.1上
[root@server2 ~]#? iptables -t nat -A PREROUTING -d 172.25.254.2 -j DNAT --to-destination 172.25.1.1??????
[root@server2 ~]#? iptables -t nat -A POSTROUTING -d 172.25.1.1 -j SNAT --to 172.25.1.2
[root@server2 ~]# iptables -nL -t nat
[root@server2 ~]# service iptables save??????????????????? //保存策略
[root@server2 ~]# cat? /etc/sysconfig/iptables????????????? //可以查看策略保存的內(nèi)容
此時(shí),外網(wǎng)用curl命令訪問(wèn)路由主機(jī),相當(dāng)于http訪問(wèn):
[root@server3 ~]# curl 172.25.254.2
curl命令查看172.25.1.2內(nèi)容時(shí)出現(xiàn)的不是172.25.1.2而是server1的內(nèi)容,即172.25.1.1的httpd發(fā)布內(nèi)容
也可以通過(guò)ssh遠(yuǎn)程連接:
[root@server3 ~]# ssh root@172.25.254.2
//本應(yīng)連接到server2,但此時(shí)遠(yuǎn)程連接上的是server1而不是server2,因?yàn)槟繕?biāo)地址進(jìn)行了轉(zhuǎn)換,將172.25.254.2轉(zhuǎn)換成了172.25.1.1
?
總結(jié)
以上是生活随笔為你收集整理的iptables防火墙策略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: rhel-server-7.5-x86_
- 下一篇: linux系统下redhat7之虚拟机控