[英]Enabling specific access with iptables on Debian
我正在運行一個Debian服務器,該服務器托管多個Docker容器,但也可以用作我的路由器和Internet網關。 我很難從主機上工作的外部(特定ipaddress)(而不是在docker容器中)獲取ssh訪問。對docker容器的所有訪問都可以正常工作。
通過從網絡內部到本地IP和外部IP的nmap,我可以看到該端口是打開的,盡管僅通過在該端口上啟用ssh即可打開該端口。 因此,如果我將sshd_config中的ssh端口設置為5501並重新啟動ssh守護程序,則對該端口的nmap顯示該端口處於打開狀態,如果我將該端口更改為22,則表明該端口處於打開狀態,盡管我沒有進行任何更改。在我的iptables腳本中,因此除了無法從單獨的外部IP到達服務器之外,我擔心的是該腳本是公開配置的。
iptables -L -a命令沒有列出SSH的端口(5501),盡管它列出了腳本中的所有其他端口。 是因為我沒有主機本身的規則表嗎? 在stackoverflow周圍搜索類似問題似乎不需要表格?
以下是我完整的IP表腳本。
PATH=/usr/sbin:/sbin:/usr/bin:/bin
#!/bin/sh
##################################################################################################
# General variables for this script #
##################################################################################################
SERVER_IP="192.168.0.1"
A="xxx.xxx.xxx.xxx"
B="xxx.xxx.xxx.xxx"
C="xxx.xxx.xxx.xxx"
D="xxx.xxx.xxx.xxx"
E="xxx.xxx.xxx.xxx"
InternalNet="192.168.0.1-192.168.0.100"
##################################################################################################
# Docker stop #
##################################################################################################
service docker stop
##################################################################################################
# Flushing all rules #
##################################################################################################
iptables -F
iptables -X
##################################################################################################
# Setting default filter policy #
##################################################################################################
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
##################################################################################################
# Allow unlimited traffic on loopback #
##################################################################################################
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
##################################################################################################
# Allow unlimited traffic to eth1 (homeserver internal) #
##################################################################################################
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
##################################################################################################
# Allow all traffic form internal to all outbound #
# And all related and established traffic from the internet #
##################################################################################################
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
##################################################################################################
# Start Docker #
##################################################################################################
service docker start
##################################################################################################
# Create a PRE_DOCKER table #
##################################################################################################
iptables -N PRE_DOCKER
##################################################################################################
# Insert this as the first table on the FORWARD chain. #
##################################################################################################
iptables -I FORWARD -o docker0 -j PRE_DOCKER
#################################################################################################
# Docker internal use #
##################################################################################################
iptables -A PRE_DOCKER -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A PRE_DOCKER -i docker0 ! -o docker0 -j ACCEPT
iptables -A PRE_DOCKER -m state --state RELATED -j ACCEPT
iptables -A PRE_DOCKER -i docker0 -o docker0 -j ACCEPT
##################################################################################################
# Allow specific trafic from specific ips #
##################################################################################################
iptables -I PRE_DOCKER -p tcp -s $A,$B,$C,$D,$E -d $SERVER_IP --dport 19999 -m state --state NEW,ESTABLISHED -j ACCEPT #Netdata
iptables -I PRE_DOCKER -p tcp -s $SERVER_IP -d A,$B,$C,$D,$E t --sport 19999 -m state --state ESTABLISHED -j ACCEPT #Netdata
iptables -I PRE_DOCKER -p tcp -s A,$B,$C,$D,$E -d $SERVER_IP --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT #Tomcat
iptables -I PRE_DOCKER -p tcp -s $SERVER_IP -d A,$B,$C,$D,$E --sport 8080 -m state --state ESTABLISHED -j ACCEPT #Tomcat
iptables -I PRE_DOCKER -p tcp -s A,$B,$C,$D,$E -d $SERVER_IP --dport 8081 -m state --state NEW,ESTABLISHED -j ACCEPT #Phabricator
iptables -I PRE_DOCKER -p tcp -s $SERVER_IP -d A,$B,$C,$D,$E --sport 8081 -m state --state ESTABLISHED -j ACCEPT #Phabricator
##################################################################################################
# Allow access from internet #
##################################################################################################
#HTTPS(443) from internet to docker apache
iptables -A INPUT -p tcp -d $SERVER_IP --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP --sport 443 -m state --state ESTABLISHED -j ACCEPT
iptables -I PRE_DOCKER -p tcp -d $SERVER_IP --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT #Apache
iptables -I PRE_DOCKER -p tcp -s $SERVER_IP --sport 443 -m state --state ESTABLISHED -j ACCEPT #Apache
##################################################################################################
# Allow specific traffic from specific ips to homeserver #
##################################################################################################
#SSH(on port 5501) from known IPs
iptables -A INPUT -p tcp -s A,$B,$C,$D,$E -d $SERVER_IP --dport 5501 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP -d A,$B,$C,$D,$E --sport 5501 -m state --state RELATED,ESTABLISHED -j ACCEPT
#Netdata(on port 19999) from known IPS
iptables -A INPUT -p tcp -s A,$B,$C,$D,$E -d $SERVER_IP --dport 19999 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP -d A,$B,$C,$D,$E --sport 19999 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -t nat -A PREROUTING -i eth1 -d $SERVER_IP -p tcp --dport 5501 -j DNAT --to-destination 192.168.0.1:5501
此行中的A
缺少$
符號iptables -A INPUT -p tcp -s $A,$B,$C,$D,$E -d $SERVER_IP --dport 5501 -m state --state NEW,ESTABLISHED -j ACCEPT
如果那沒有改變,請用iptables -A INPUT -p tcp --dport 5501 -j ACCEPT
替換以上內容。 它行得通嗎?
而且,這些規則實際上是iptables -P OUTPUT ACCEPT
:
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
您可以使用iptables -P OUTPUT ACCEPT
並刪除OUTPUT
鏈中的所有規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.