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

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

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

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ā)室,有多種類型,常見(jiàn)的有SNAT,PNAT,DNAT,是第二常用的
  • mangle表,修改數(shù)據(jù)包的TTL,給數(shù)據(jù)包做不同的標(biāo)記,策略路由等
  • raw表,一般用于跟蹤狀態(tài),調(diào)試,用的較少

優(yōu)先級(jí):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新建一個(gè)自定義鏈,例如:
在第5條規(guī)則前插入禁止非192.168.1.0/24訪問(wèn)80端口

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

查看某個(gè)表的所有鏈上的規(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

每個(gè)鏈都有默認(rèn)規(guī)則,禁止時(shí)可以設(shè)置白名單,允許時(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個(gè)連接:
    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ī)則會(huì)丟失,可以使用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

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

ipset的使用

可與iptables結(jié)合,實(shí)現(xiàn)動(dòng)態(tài)的白名單,并且可以設(shè)置過(guò)期時(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ú)法上網(wǎng)的機(jī)器通過(guò)網(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)地址,動(dòng)態(tài)上網(wǎng)時(shí),常用-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分為主動(dòng)模式和被動(dòng)模式。

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

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

加載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來(lái)管理防火墻
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,通過(guò)docker0分配一個(gè)172.17.0.x的地址使用
  • container:使用指定容器的網(wǎng)絡(luò)

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

為便于測(cè)試,啟動(dòng)兩個(gè)容器:

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ù)包,即容器對(duì)外的規(guī)則,例如:

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

為了搞清楚DOCKER-ISOLATION-STAGE-2,需要?jiǎng)?chuàng)建一個(gè)bridge,開啟一個(gè)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)卡互相訪問(wèn),這對(duì)于docker-compose非常有用,設(shè)計(jì)非常精妙

DOCKER-USER鏈用于自定義轉(zhuǎn)發(fā)規(guī)則,優(yōu)先級(jí)最高,可以限制進(jìn)入容器的源IP地址:
iptables -I DOCKER-USER ! -s 192.168.47.1 -p tcp --dport 80 -j DROP以上規(guī)則禁止非192.168.47.1的IP地址訪問(wèn)容器的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通過(guò)PREROUTING鏈和DOCKER鏈將主機(jī)的80端口流量轉(zhuǎn)發(fā)給172.17.0.2,并通過(guò)filter表的FORWARD鏈返回給客戶端

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

nat表的POSTROUTING規(guī)則使得container可以訪問(wèn)外網(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使得容器通過(guò)自己的IP172.17.0.2也可以訪問(wèn)80端口

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

在這里插入圖片描述

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

相關(guān)文章

  • Docker多平臺(tái)安裝與配置指南的實(shí)現(xiàn)

    Docker多平臺(tái)安裝與配置指南的實(shí)現(xiàn)

    這篇文章主要介紹了Docker多平臺(tái)安裝與配置指南的實(shí)現(xiàn),深入研究了Docker在Linux、Windows、和macOS等不同平臺(tái)上的安裝過(guò)程及Docker鏡像管理、容器運(yùn)維、使用Docker Compose進(jìn)行多容器管理,以及網(wǎng)絡(luò)與數(shù)據(jù)管理等,感興趣的可以了解一下
    2024-01-01
  • docker部署運(yùn)行jar全過(guò)程

    docker部署運(yùn)行jar全過(guò)程

    這篇文章主要介紹了docker部署運(yùn)行jar全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • openwrt安裝docker并啟動(dòng)的操作方法

    openwrt安裝docker并啟動(dòng)的操作方法

    這篇文章主要介紹了openwrt安裝docker并啟動(dòng)的操作方法,首先需要大家在軟件包中下載docker和dockerd,然后在建立軟連接,在系統(tǒng)加載時(shí)啟動(dòng)docker服務(wù),感興趣的朋友一起看看吧
    2022-03-03
  • 深入淺析Docker容器中的Patroni

    深入淺析Docker容器中的Patroni

    今天將向大家介紹,如何搭建容器下的Patroni集群環(huán)境,Patroni作為開箱即用PG高可用工具,越來(lái)越多的被各個(gè)廠商用于云環(huán)境下使用
    2021-11-11
  • Docker搭建LibreSpeed的實(shí)現(xiàn)步驟

    Docker搭建LibreSpeed的實(shí)現(xiàn)步驟

    LibreSpeed 是一個(gè)輕量級(jí)的網(wǎng)絡(luò)速度測(cè)試工具,本文主要介紹了Docker搭建LibreSpeed的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Docker安裝Tomcat無(wú)法訪問(wèn)的問(wèn)題及解決

    Docker安裝Tomcat無(wú)法訪問(wèn)的問(wèn)題及解決

    這篇文章主要介紹了Docker安裝Tomcat無(wú)法訪問(wèn)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Ollma本地部署Qwen2.5 14B的詳細(xì)過(guò)程(不使用docker)

    Ollma本地部署Qwen2.5 14B的詳細(xì)過(guò)程(不使用docker)

    本文介紹了如何在不使用Docker的情況下部署Ollama模型和Open-webui實(shí)現(xiàn)可視化界面,Ollama模型通過(guò)命令行操作,包括啟動(dòng)、創(chuàng)建、運(yùn)行等,Open-webui則需要安裝Anaconda環(huán)境,安裝并啟動(dòng)服務(wù)后,通過(guò)瀏覽器訪問(wèn)即可使用,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Docker鏡像修改hosts及dockerfile修改hosts文件的實(shí)現(xiàn)方式

    Docker鏡像修改hosts及dockerfile修改hosts文件的實(shí)現(xiàn)方式

    這篇文章主要介紹了Docker鏡像修改hosts及dockerfile修改hosts文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Docker 查看鏡像信息的方法

    Docker 查看鏡像信息的方法

    這篇文章主要介紹了Docker 查看鏡像信息的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Docker Registry搭建與使用詳解

    Docker Registry搭建與使用詳解

    這篇文章主要介紹了Docker Registry搭建與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05

最新評(píng)論