2016-06-10 47 views
0

Iam運行託管多個docker容器的Debian服務器,但也可用作我的路由器和Internet網關。 蔭具有主機上工作(而不是在泊塢窗的容器中。以泊塢窗容器的所有接入作品就好麻煩來自外部(具體ipaddresses)ssh訪問。使用Debian上的iptables啓用特定訪問

我可以從我的網絡內部的NMAP看本地IP和我的外部IP,端口是打開的,儘管它只是通過在該端口上啓用ssh而打開,所以如果我將sshd_config中的ssh端口設置爲5501並重新啓動ssh守護進程,那麼將nmap映射到該端口顯示端口處於打開狀態,如果將端口更改爲22,則表明端口處於打開狀態,儘管我沒有更改iptables腳本中的任何內容,所以除了無法通過特定外部IP訪問服務器之外,我的擔心是腳本是公開配置的。

ipt ables -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 

回答

0

在此行中的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鏈中的所有規則。