【问题标题】:Enabling specific access with iptables on Debian在 Debian 上使用 iptables 启用特定访问
【发布时间】:2016-07-20 10:42:45
【问题描述】:

我正在运行一个 Debian 服务器,该服务器托管多个 docker 容器,但也用作我的路由器和互联网网关。 我无法从外部(特定 IP 地址)在主机上(不在 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

【问题讨论】:

    标签: linux ssh debian iptables


    【解决方案1】:

    此行中的 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 链中的所有规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2016-08-30
      • 2014-07-21
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 2019-03-24
      相关资源
      最近更新 更多