日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iptables防火墙策略

發(fā)布時(shí)間:2023/11/27 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iptables防火墙策略 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

環(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簡介:

netfilter/iptables(簡稱為iptables)組成Linux平臺(tái)下的包過濾防火墻,與大多數(shù)的Linux軟件一樣,這個(gè)包過濾防火墻是免費(fèi)的,它可以代替昂貴的商業(yè)防火墻解決方案,完成封包過濾、封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。

iptables采用“表”和“鏈”的分層結(jié)構(gòu),在linux中iptables主要有三張表五條鏈:

三張表即filter表、nat表、mangle表,分別用于實(shí)現(xiàn)包過濾,網(wǎng)絡(luò)地址轉(zhuǎn)換、包重構(gòu)(修改)功能

filter表有三個(gè)鏈:INPUT、FORWARD、OUTPUT
作用:過濾數(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ù)過濾或處理數(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ù)包(過濾)

另外注意:

1.沒有指定規(guī)則表則默認(rèn)指filter表。

2.不指定規(guī)則鏈則指表內(nèi)所有的規(guī)則鏈。

3.在規(guī)則鏈中匹配規(guī)則時(shí)會(huì)依次檢查,匹配即停止(LOG規(guī)則例外),若沒匹配項(xiàng)則按鏈的默認(rèn)狀態(tài)處理。

注意:

你所定義的所有內(nèi)容,當(dāng)你重啟的時(shí)候都會(huì)失效,要想我們能夠生效,需要使用一個(gè)命令將它保存起來

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ī)瀏覽器都可以訪問httpd頁面,這里用curl命令

給server1寫一個(gè)Apache的發(fā)布頁面

[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可以訪問該主機(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還是不能訪問,因?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訪問

[root@server1 ~]# iptables -nL

此時(shí)server3也可進(jì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ù)包的來源是被替換的那個(gè) IP 的 主機(jī)

*************************目的地址轉(zhuǎn)換:DNAT*******************************

(目標(biāo)地址轉(zhuǎn)換),就是指數(shù)據(jù)包從網(wǎng)卡發(fā)送出去的時(shí)候,修改數(shù)據(jù)包中的目的 IP,表現(xiàn)為如果你想訪問 A,可是因?yàn)榫W(wǎng)關(guān)做了 DNAT,把所有訪問 A 的數(shù) 據(jù)包的目的 IP 全部修改為 B,那么,你實(shí)際上訪問的是 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)段過來的主機(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頁面,內(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頁面,內(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頁面,內(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頁面,內(nèi)容為172.25.254.3

給路由主機(jī)添加策略:

現(xiàn)在要把外網(wǎng)訪問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命令訪問路由主機(jī),相當(dāng)于http訪問:

[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)容

也可以通過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防火墙策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請(qǐng)說明來源于"生活随笔",并保留原作者的名字。

本文地址:iptables防火墙策略