最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iptables使用及docker的iptables規(guī)則

 更新時間:2023年12月12日 11:09:13   作者:摩洛哥M  
Docker在創(chuàng)建容器時,會自動添加一些iptables規(guī)則來實(shí)現(xiàn)網(wǎng)絡(luò)隔離和轉(zhuǎn)發(fā)等功能,本文主要介紹了iptables使用及docker的iptables規(guī)則,具有一定的參考價值,感興趣的可以了解一下

iptables

處理流程

iptables是Linux中網(wǎng)絡(luò)鉤子,有四表五鏈。

  • filter表即防火墻規(guī)則,允許、阻止或丟棄進(jìn)出的數(shù)據(jù)包,使用是最多的
  • nat表,網(wǎng)絡(luò)地址轉(zhuǎn)換,內(nèi)網(wǎng)的數(shù)據(jù)包收發(fā)室,有多種類型,常見的有SNAT,PNAT,DNAT,是第二常用的
  • mangle表,修改數(shù)據(jù)包的TTL,給數(shù)據(jù)包做不同的標(biāo)記,策略路由等
  • raw表,一般用于跟蹤狀態(tài),調(diào)試,用的較少

優(yōu)先級:raw,mangle,nat,filter

五鏈:

  • PREROUTING,到達(dá)本機(jī)前的路由規(guī)則
  • INPUT,進(jìn)入本機(jī)的規(guī)則
  • FORWARD,轉(zhuǎn)發(fā)的規(guī)則
  • OUTPUT,本機(jī)發(fā)出的規(guī)則
  • POSTROUTING,發(fā)出后的路由規(guī)則

在這里插入圖片描述

命令與擴(kuò)展

清空表上的所有規(guī)則,默認(rèn)為filter表:

iptables -F

鏈上操作規(guī)則,A追加,I前面插入,D刪除,R替換,N新建一個自定義鏈,例如:
在第5條規(guī)則前插入禁止非192.168.1.0/24訪問80端口

iptables -I INPUT 5 -p tcp --dport 80 ! -s 192.168.1.0/24 -j DROP

查看某個表的所有鏈上的規(guī)則:

iptables -t nat -L -n -v --line-numbers

filter表,常將lo網(wǎng)卡和已建立連接的規(guī)則放在最前面,降低系統(tǒng)負(fù)擔(dān):

iptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允許ping:

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

允許連續(xù)范圍端口:

iptables -A INPUT -p udp --sport 1000:2000 -j ACCEPT

每個鏈都有默認(rèn)規(guī)則,禁止時可以設(shè)置白名單,允許時可以設(shè)置黑名單
INPUT鏈默認(rèn)禁止連接:

iptables -P INPUT DROP

iptables有很多擴(kuò)展,不同的擴(kuò)展有不同的功能,查看文檔,man iptables-extensions常用的:

  • 多端口擴(kuò)展,-m multiport --dports 80,443
  • recent擴(kuò)展,每30秒最多10個連接:
    iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --setiptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 30 --hitcount 10 -j DROP
  • connlimit擴(kuò)展,限制并發(fā)連接數(shù):
    iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
  • string擴(kuò)展,字符串匹配禁止:
    iptables -I INPUT -p tcp --sport 443 -m string --string "xunlei" --algo kmp -j DROP

iptables規(guī)則都是保存在內(nèi)存中的,重啟規(guī)則會丟失,可以使用iptables-saveiptables-restore保存,還可以使用iptables-services

# 禁用firewalld
#systemctl stop firewalld
#systemctl disable firewalld
yum -y install iptables-services
service iptables save
service iptables reload

系統(tǒng)默認(rèn)規(guī)則

安裝iptables-services后,/etc/sysconfig/iptables文件中有默認(rèn)規(guī)則:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited

第四個是允許ssh登錄
第五個是禁止其他連接通過INPUT,并返回icmp-host-prohibited錯誤
第六個是禁止FORWARD

ipset的使用

可與iptables結(jié)合,實(shí)現(xiàn)動態(tài)的白名單,并且可以設(shè)置過期時間
ipset create ssh-allow hash:ip timeout 0ipset add ssh-allow 192.168.47.1 timeout 86400ipset list ssh-allowiptables -A INPUT -p tcp --dport 22 -m set --match-set ssh-allow src -j ACCEPT

SNAT與DNAT

SNAT常用于內(nèi)部無法上網(wǎng)的機(jī)器通過網(wǎng)關(guān)上網(wǎng),需要調(diào)整安全組和解除網(wǎng)關(guān)MAC與IP綁定。

# 網(wǎng)關(guān)打開核心轉(zhuǎn)發(fā)
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# 數(shù)據(jù)包離開前將源地址改為網(wǎng)關(guān)地址,動態(tài)上網(wǎng)時,常用-j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j SNAT --to 172.16.8.1

# 不能上網(wǎng)的機(jī)器,修改網(wǎng)關(guān)
route add default gw 192.168.1.1

DNAT常用于將內(nèi)部機(jī)器暴漏給外部用戶使用。

iptables -t nat -A PREROUTING -d 172.16.8.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.20:8080

ftp規(guī)則

ftp分為主動模式和被動模式。

主動模式數(shù)據(jù)流是server主動連接client的隨機(jī)端口,一般客戶端都工作在NAT網(wǎng)絡(luò)中,客戶端端口須層層路由開放,所以這種模式很少使用。

被動模式,server告知client數(shù)據(jù)連接端口,客戶端連接server的數(shù)據(jù)連接端口,這個端口一般是隨機(jī)的,需要服務(wù)端開放,使用iptables的連接追蹤功能,可以很好的解決這個問題

加載ftp專用的追蹤模塊,modprobe nf_conntrack_ftp

開啟ftp追蹤模塊后,僅需開放21端口即可(INPUT默認(rèn)DROP,OUTPUT默認(rèn)ACCEPT)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTRELATED指明ftp關(guān)聯(lián)的數(shù)據(jù)端口允許連接

firewall-cmd命令

iptables分為ipv4和ipv6,兩者是獨(dú)立的,firewalld是iptables的python腳本,已經(jīng)整合了ipv4和ipv6

與iptables不同的是,firewalld使用zone來管理防火墻
zone可以根據(jù)source,mac,ipset,interface等匹配,匹配不上的進(jìn)入默認(rèn)的public

查詢默認(rèn)zone:
firewall-cmd --get-default-zone修改了規(guī)則需要重新加載才能生效:
firewall-cmd --reload列出zone的所有規(guī)則:
firewall-cmd --list-all --zone=public開放80端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent

進(jìn)行復(fù)雜的控制,需要rich規(guī)則,命令比較復(fù)雜,不推薦使用

docker的iptables規(guī)則

docker網(wǎng)絡(luò)類型

  • none:顧名思義,不使用網(wǎng)絡(luò),只使用lo
  • host:使用主機(jī)的網(wǎng)絡(luò)
  • bridge:橋接,相當(dāng)于nat,通過docker0分配一個172.17.0.x的地址使用
  • container:使用指定容器的網(wǎng)絡(luò)

數(shù)據(jù)包處理流程

為便于測試,啟動兩個容器:

docker run -d --rm --name nginx -p 80:80 nginx:1.16.1

docker run -it --name busybox --rm busybox sh

filter表規(guī)則

iptables -N DOCKER
iptables -N DOCKER-ISOLATION-STAGE-1
iptables -N DOCKER-ISOLATION-STAGE-2
iptables -N DOCKER-USER
iptables -A FORWARD -j DOCKER-USER
iptables -A FORWARD -j DOCKER-ISOLATION-STAGE-1
iptables -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o docker0 -j DOCKER
iptables -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
iptables -A FORWARD -i docker0 -o docker0 -j ACCEPT
iptables -A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
iptables -A DOCKER-ISOLATION-STAGE-1 -j RETURN
iptables -A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
iptables -A DOCKER-ISOLATION-STAGE-2 -j RETURN
iptables -A DOCKER-USER -j RETURN

主要是轉(zhuǎn)發(fā)規(guī)則,默認(rèn)FORWARD為DROP,DOCKER鏈處理到docker0的IP數(shù)據(jù)包,即容器對外的規(guī)則,例如:

iptables -A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT允許非docker0訪問80端口

為了搞清楚DOCKER-ISOLATION-STAGE-2,需要創(chuàng)建一個bridge,開啟一個nginx,并安裝telnet

docker network create docker1
docker run -d --rm --name nginx1 -p 8080:80 --net docker1 nginx:1.16.1
docker exec -it nginx /bin/bash
# 在nginx中安裝telnet
#apt update
#apt install telnet
#telnet 172.18.0.2 80

可以看到telnet 172.18.0.2 80并不通,怎么實(shí)現(xiàn)的呢?
DOCKER-ISOLATION-STAGE-1規(guī)則是源網(wǎng)卡是docker0,而目的地不是docker0就進(jìn)入DOCKER-ISOLATION-STAGE-2

而DOCKER-ISOLATION-STAGE-2中,有一條規(guī)則,iptables -A DOCKER-ISOLATION-STAGE-2 -o br-afba712bfb32 -j DROP,即不允許不同的網(wǎng)卡互相訪問,這對于docker-compose非常有用,設(shè)計(jì)非常精妙

DOCKER-USER鏈用于自定義轉(zhuǎn)發(fā)規(guī)則,優(yōu)先級最高,可以限制進(jìn)入容器的源IP地址:
iptables -I DOCKER-USER ! -s 192.168.47.1 -p tcp --dport 80 -j DROP以上規(guī)則禁止非192.168.47.1的IP地址訪問容器的80端口

nat表規(guī)則

iptables -t nat -N DOCKER
iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
iptables -t nat -A DOCKER -i docker0 -j RETURN

DOCKER鏈方便container自定義規(guī)則
POSTROUTING規(guī)則,使得container使用宿主機(jī)docker0的IP作為網(wǎng)關(guān),便于接收外部返回的數(shù)據(jù)

有如下規(guī)則:
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80通過PREROUTING鏈和DOCKER鏈將主機(jī)的80端口流量轉(zhuǎn)發(fā)給172.17.0.2,并通過filter表的FORWARD鏈返回給客戶端

宿主機(jī)通過nat表的OUTPUT鏈?zhǔn)强梢栽L問container的80端口的

nat表的POSTROUTING規(guī)則使得container可以訪問外網(wǎng)

很奇怪的一條規(guī)則:
iptables -t nat -A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 80 -j MASQUERADE使得容器通過自己的IP172.17.0.2也可以訪問80端口

最后網(wǎng)上的一張流程圖:

在這里插入圖片描述

到此這篇關(guān)于iptables使用及docker的iptables規(guī)則的文章就介紹到這了,更多相關(guān)docker iptables規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用docker快速部署Elasticsearch集群的方法

    使用docker快速部署Elasticsearch集群的方法

    這篇文章主要介紹了使用docker快速部署Elasticsearch集群的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • docker 可用鏡像服務(wù)地址的使用(親測可用)

    docker 可用鏡像服務(wù)地址的使用(親測可用)

    Docker可用的鏡像服務(wù)地址通常指的是Docker鏡像倉庫的地址,用于拉取和推送鏡像,本文就來介紹了docker 可用鏡像服務(wù)地址的使用,感興趣的可以了解一下
    2024-10-10
  • 在docker中配置Oracle11g的過程

    在docker中配置Oracle11g的過程

    這篇文章主要介紹了在docker中配置Oracle11g?,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • docker各種報(bào)錯解決方案小結(jié)

    docker各種報(bào)錯解決方案小結(jié)

    最近在學(xué)習(xí)docker的時候遇到了不少問題,索性給大家整理下,下面這篇文章主要給大家介紹了關(guān)于docker各種報(bào)錯解決的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 使用Docker Compose創(chuàng)建LAMP環(huán)境的詳細(xì)步驟

    使用Docker Compose創(chuàng)建LAMP環(huán)境的詳細(xì)步驟

    現(xiàn)如今,通過 Docker 容器化部署環(huán)境已經(jīng)逐漸成為主流,特別是在部署像 LAMP 這樣的復(fù)雜環(huán)境時,本教程旨在帶您完成使用 Docker-Compose 建立 LAMP 環(huán)境的整個過程,同時還包括定制 PHP 環(huán)境的步驟,需要的朋友可以參考下
    2024-12-12
  • Docker部署Mysql,.Net6,Sqlserver等容器

    Docker部署Mysql,.Net6,Sqlserver等容器

    這篇文章介紹了Docker部署Mysql,.Net6,Sqlserver等容器的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 詳解使用docker搭建hadoop分布式集群

    詳解使用docker搭建hadoop分布式集群

    本篇文章主要介紹了詳解使用docker搭建hadoop分布式集群,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • CentOS修改docker鏡像存儲位置并進(jìn)行數(shù)據(jù)遷移的操作方法

    CentOS修改docker鏡像存儲位置并進(jìn)行數(shù)據(jù)遷移的操作方法

    本文詳細(xì)介紹了在CentOS上修改Docker鏡像存儲位置并進(jìn)行數(shù)據(jù)遷移的步驟,包括停止Docker服務(wù)、創(chuàng)建新的存儲目錄、復(fù)制現(xiàn)有數(shù)據(jù)、修改Docker配置、重啟Docker服務(wù)、驗(yàn)證配置、清理舊數(shù)據(jù)(可選)以及檢查容器和鏡像,感興趣的朋友一起看看吧
    2025-01-01
  • docker-compose網(wǎng)絡(luò)設(shè)置之networks的使用

    docker-compose網(wǎng)絡(luò)設(shè)置之networks的使用

    本文詳細(xì)解釋了在使用 Docker Compose時如何配置網(wǎng)絡(luò),包括創(chuàng)建、使用和問題解決等方面,介紹了如何通過docker-compose.yml文件快速編排和部署應(yīng)用服務(wù),同時解決網(wǎng)絡(luò)隔離問題,感興趣的可以了解一下
    2024-10-10
  • Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑

    Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑

    本文主要介紹了Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑 ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論

边坝县| 南木林县| 进贤县| 武宣县| 武汉市| 临武县| 久治县| 惠来县| 汽车| 吉首市| 威远县| 屯门区| 凉城县| 怀远县| 卢湾区| 宜兰市| 镇平县| 通榆县| 简阳市| 临澧县| 札达县| 开封县| 民县| 青海省| 华亭县| 荣成市| 元谋县| 南澳县| 神农架林区| 锦屏县| 云梦县| 昆明市| 江山市| 新宁县| 阳新县| 沙洋县| 桑植县| 济阳县| 镇远县| 北票市| 佛坪县|