我一直在 DigitalOcean 上玩 Dokku(以下这指南)并且我正在尝试了解当前的防火墙设置。
以下是我的设置:
- Ubuntu 14.04
- 多库
- Docker(Dokku 的一部分)
- 我的 Dokku 容器中的 PostgreSQL(使用dokku-postgresql-插件)
- fail2ban(我自己安装的,不是 Dokku 模板的一部分)
我无法理解的是 Chain FORWARD 设置 - 特别是tcp dpt:5000
和旁边的 IP 地址tcp dpt:postgresql
。
me:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere XXX.17.0.50 tcp dpt:5000
ACCEPT tcp -- anywhere XXX.17.0.2 tcp dpt:postgresql
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
me:~$
我猜这些XXX.17.0.Y
IP 地址来自我的 Docker 容器 - 这是合理的猜测吗?假设是这样,它们可能无法被外界访问,对吗?
我最终要做的是设置合理的安全防火墙设置;例如,锁定除 SSH、HTTP 和 HTTPS 之外的所有输入。我只是想确保在继续之前了解现有设置。
答案1
锁定所有或关闭所有端口
,仅使用 ssh、http 和 https,只需打开其端口
刷新到困惑你知道什么已经定义
$ iptables -F
然后放弃所有
$ iptables -P INPUT DROP
第一个是 ssh 端口:
IPTABLES 打开端口 22
$ iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
第二个是 http 和 https 端口:
允许从任何地方进行 HTTP 和 HTTPS 连接。
“网站的默认端口”/http 80,https 443。
$ iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
$ iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
最后关闭所有其他流量:
$ iptables -A INPUT -j DROP
全部
$ iptables -F
$ -P INPUT DROP
$ iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
$ iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
$ iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
$ iptables -A RH-Firewall-1-INPUT -p icmp -j ACCEPT
$ iptables -A INPUT -j DROP
或者
$ iptables -F
$ iptables -P INPUT DROP
$ iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
$ iptables -A RH-Firewall-1-INPUT -p icmp -j ACCEPT
$ iptables -A INPUT -j DROP