欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

iptables

處理流程

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

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

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

五鏈:

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

在這里插入圖片描述

命令與擴展

清空表上的所有規(guī)則,默認為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)負擔(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

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

iptables -P INPUT DROP

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

  • 多端口擴展,-m multiport --dports 80,443
  • recent擴展,每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擴展,限制并發(fā)連接數(shù):
    iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
  • string擴展,字符串匹配禁止:
    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)默認規(guī)則

安裝iptables-services后,/etc/sysconfig/iptables文件中有默認規(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é)合,實現(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)的機器通過網(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)的機器,修改網(wǎng)關(guān)
route add default gw 192.168.1.1

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

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的隨機端口,一般客戶端都工作在NAT網(wǎng)絡(luò)中,客戶端端口須層層路由開放,所以這種模式很少使用。

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

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

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

firewall-cmd命令

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

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

查詢默認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

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

docker的iptables規(guī)則

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

  • none:顧名思義,不使用網(wǎng)絡(luò),只使用lo
  • host:使用主機的網(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ī)則,默認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并不通,怎么實現(xiàn)的呢?
DOCKER-ISOLATION-STAGE-1規(guī)則是源網(wǎng)卡是docker0,而目的地不是docker0就進入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è)計非常精妙

DOCKER-USER鏈用于自定義轉(zhuǎn)發(fā)規(guī)則,優(yōu)先級最高,可以限制進入容器的源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使用宿主機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鏈將主機的80端口流量轉(zhuǎn)發(fā)給172.17.0.2,并通過filter表的FORWARD鏈返回給客戶端

宿主機通過nat表的OUTPUT鏈是可以訪問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)文章

  • 關(guān)于docker部署的jenkins跑git上的程序的問題

    關(guān)于docker部署的jenkins跑git上的程序的問題

    這篇文章主要介紹了docker部署的jenkins跑git上的程序的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用Docker容器部署MongoDB并支持遠程訪問及遇到的坑

    使用Docker容器部署MongoDB并支持遠程訪問及遇到的坑

    MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的,今天通過本文給大家介紹使用Docker容器部署MongoDB并支持遠程訪問及遇到的坑,感興趣的朋友一起看看吧
    2022-07-07
  • Docker 查看鏡像信息的方法

    Docker 查看鏡像信息的方法

    這篇文章主要介紹了Docker 查看鏡像信息的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Docker Compose 網(wǎng)絡(luò)設(shè)置詳解

    Docker Compose 網(wǎng)絡(luò)設(shè)置詳解

    這篇文章主要介紹了Docker Compose 網(wǎng)絡(luò)設(shè)置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Docker Compose環(huán)境變量與配置文件管理全解析

    Docker Compose環(huán)境變量與配置文件管理全解析

    這篇文章主要介紹了Docker Compose環(huán)境變量與配置文件管理全解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • 修改Docker默認存儲路徑的步驟詳解

    修改Docker默認存儲路徑的步驟詳解

    隨著Docker技術(shù)的廣泛應(yīng)用,它極大地簡化了復(fù)雜項目的部署與維護流程,僅憑單一鏡像即可輕松運行,然而,隨著數(shù)據(jù)量不斷增長,Docker的默認數(shù)據(jù)存儲方式可能逐漸成為挑戰(zhàn),本文給大家介紹了如何修改Docker默認存儲路徑,解決系統(tǒng)盤占用90%+問題,需要的朋友可以參考下
    2024-09-09
  • Docker-swarm快速搭建redis集群的方法步驟

    Docker-swarm快速搭建redis集群的方法步驟

    本文主要介紹了Docker-swarm快速搭建redis集群的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • docker.service啟動報錯的一次排查詳解

    docker.service啟動報錯的一次排查詳解

    這篇文章主要介紹了docker.service啟動報錯的一次排查詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Docker安裝RabbitMQ AMQP協(xié)議及重要角色

    Docker安裝RabbitMQ AMQP協(xié)議及重要角色

    這篇文章主要為大家介紹了Docker安裝RabbitMQ AMQP協(xié)議和主要角色詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 利用docker搭建LAMP運行環(huán)境教程詳解

    利用docker搭建LAMP運行環(huán)境教程詳解

    LAMP相信對大家來說都不陌生, Docker是一個開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個輕量級的、可移植的、自給自足的容器,所以這篇文章給大家介紹利用docker快速搭建LAMP運行環(huán)境的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10

最新評論