مواردی پیش میاد که لازمه پورت های یک کانتینر خاص رو به آیپی های مشخص شده محدود کنیم. پس از جستجوهایی که انجام دادم و مطالعه آموزشهای مختلف درباره کانفیگ iptables با داکر، راهحل مناسبی پیدا نکردم. مستندات رسمی داکر هم در این زمینه کافی نبود. اما با ترکیب اطلاعاتی که جمعآوری کردم، تونستم راهکاری ساده و کاربری پیدا کنم. در این آموزش، نحوه استفاده از ipset و قوانین iptables برای محدود کردن دسترسی به IPهای خاص (لیست سفید) را توضیح میدهم. البته میتوان همین روش را برای مسدود کردن IPهای خاص (لیست سیاه) نیز به کار برد.
ابتدا لازمه پکیج ipset رو در سرور نصب کنیم اگه سیستم عامل سرور ما اوبونتو باشه از دستور زیر نصب رو انجام میدیم.
sudo apt install ipset
ابتدا باید یک IPSet ایجاد کنیم تا لیستی از IPهای مجاز به دسترسی به کانتینرهای داکر را نگهداری کند.
sudo ipset create docker-allowed hash:ip
دستور بالا یک IPSet خالی به نام docker-allowed
ایجاد میکند. شما میتوانید هر نام دلخواهی انتخاب کنید. حالا باید لیست IPهای مورد نظر را به این مجموعه اضافه کنیم:
sudo ipset add docker-allowed 10.0.0.2 sudo ipset add docker-allowed 10.0.0.226 sudo ipset add docker-allowed 10.0.0.227
برای بررسی پیکربندی IPSet:
sudo ipset list docker-allowed
خروجی شامل اطلاعاتی درباره نام، نوع، و اعضای IPSet خواهد بود.
ذخیره تنظیمات:
برای جلوگیری از حذف IPSet پس از راهاندازی مجدد سیستم، آن را ذخیره کنید:
mkdir /etc/ipset sudo ipset save > /etc/ipset/ipset
براساس مستندات داکر، قوانین دستی باید در زنجیره DOCKER-USER
اضافه شوند. این قوانین پیش از قوانین زنجیره DOCKER
اعمال میشوند.
ایجاد اولین قانون:
sudo iptables -I DOCKER-USER -i eth0 -m set ! --match-set docker-allowed src -j DROP
این قانون ترافیکی که از IPهای خارج از لیست docker-allowed
باشد را مسدود میکند. توجه داشته باشید که باید eth0
را با نام رابط شبکه خود جایگزین کنید.
افزودن قانون برای ترافیکهای موجود:
sudo iptables -I DOCKER-USER -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
این روش سادهترین و مؤثرترین راهی بود که توانستم برای محدود کردن دسترسی به IPهای خاص در داکر پیدا کنم. این روش بهراحتی قابل تنظیم برای نیازهای مختلف است. اگر شما هم روش دیگری میشناسید، خوشحال میشوم نظراتتان را بشنوم.