以下是我使用 UFW 设置 iptables 的方法:
sudo ufw default deny incoming
(拒绝所有传入)sudo ufw default deny outgoing
(拒绝所有传出)sudo ufw allow out 53
(接受传出DNS 流量(tcp 和 udp)sudo ufw allow in 80/tcp
(接受来自端口 80 的所有传入 TCP)sudo ufw allow out 80/tcp
(接受所有到端口 80 的传出 TCP)sudo ufw allow proto tcp from <admin_ip_addr> to <server_ip_addr> port 22
(接受来自管理员办公室 IP 的传入 TCP 端口 22 以进行 ssh)sudo ufw allow out 9418/tcp
(接受传出的 git 连接)sudo ufw allow proto tcp from <server_ip_addr> to any port 22
(接受传出的 ssh 连接以连接 GitHub)
英文:阻止所有内容,但 HTTP、DNS、来自管理员 IP 的传入 SSH、传出 GIT 和传出 SSH 除外。
不幸的是,当我这样做时,它卡在git clone [email protected]:username/project.git
Initialized empty Git repository in /home/adminuser/exper/project/.git/
当我使用 启用所有传出流量sudo ufw default allow outgoing
并重复 git clone 命令时,它确实有效。
因此,显然有一些传出的内容仍然受到阻碍。
谁能告诉我这可能是什么,我应该添加什么规则来允许它?
我也尝试过以下规则,但没有成功:
sudo ufw allow out 1024:65535/udp
答案1
您正在尝试使用 SSH 进行连接,并且(似乎)允许这样做,因此是时候诊断问题了。我喜欢在丢弃任何数据包之前添加一条 LOG 规则,这样我就能确切地知道丢弃了什么。否则,只需执行一些 tcpdump 操作即可识别出不会去往任何地方的流量。一旦您知道丢弃了什么,添加必要的规则以允许它就变得轻而易举了。
答案2
经过多次尝试,我终于把自己锁在了 2 个服务器之外。下面的防火墙规则帮助我执行了“git clone”。希望它也能帮助到大家。
仅供参考:我在“eth0”上运行以下命令,这是我的服务器的私有接口。我从这里获取了 github 子网 IP:https://help.github.com/articles/github-s-ip-addresses/
sudo ufw reset
sudo ufw status verbose
sudo ufw default deny incoming
sudo ufw default deny outgoing
# For resolving DNS problem
sudo ufw allow out on eth0 to any port 53
# For allowing access to github.com
sudo ufw allow out on eth0 to 192.30.252.0/22 port 22
sudo ufw --force enable