我试图通过python检索系统上配置的当前iptables链.如果我strace iptables命令,它输出:
strace iptables -L INPUT
socket(PF_INET, SOCK_RAW, IPPROTO_RAW) = 3
getsockopt(3, SOL_IP, 0x40 /* IP_??? */, "filter\0\377`\2\351\1\0\210\377\377\210}\313\276\0\210\377\377\354\206\0\201\377\377\377\377"..., [84]) = 0
Run Code Online (Sandbox Code Playgroud)
完整输出:http://pastebin.com/e7XEsaZV
在python中我创建套接字obj并尝试调用getsockopt并且它出错:
>>> s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
>>> s.getsockopt(socket.SOL_IP, 0x40)
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
s.getsockopt(socket.SOL_IP, 0x40)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 22] Invalid argument
>>>
>>> s = socket.socket(2, socket.SOCK_RAW, socket.IPPROTO_RAW)
>>> s.getsockopt(socket.SOL_IP, 0x41)
Traceback (most recent call last):
File "<pyshell#48>", line 1, …Run Code Online (Sandbox Code Playgroud) 我在iptable中添加了数据包转发规则,我
sudo iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 10.0.3.126:80
可以看到进入端口1111的数据包被正确转发到10.0.3.126:80.但是,如果我列出规则,我看不到我添加的规则.
sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT udp -- anywhere anywhere udp dpt:bootps
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target …Run Code Online (Sandbox Code Playgroud) 我正在保护我的服务器(使用iptables)以便只有http和ssh端口是打开的,这很好,虽然我mail在某些应用程序中使用命令(服务器:CentOS 6.2)并且由于iptables阻止所有内容它现在无法通过.
我允许它访问哪些端口?
邮件用法: echo "{{message}}" | mail -s "{{subject}}" me@mail.com
我已经尝试过标准邮件端口25,但我没有成功.这是当前的设置:
iptables --flush
iptables -P INPUT DROP
iptables -P OUTPUT DROP
# incoming ssh
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
# outgoing ssh
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 …Run Code Online (Sandbox Code Playgroud) 我的iptables中有这个规则:
sudo iptables -t nat -nvL --line-numbers
Chain PREROUTING (policy ACCEPT 14 packets, 1950 bytes)
num pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 14 packets, 1950 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 577 packets, 41182 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REDIRECT tcp -- * lo 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8090
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法删除它:
sudo iptables -D …Run Code Online (Sandbox Code Playgroud) 一切都很好.有些git推,没有问题.
今天我决定将我的框架更新到最新版本,所以它稍微改变了我项目的目录结构.所以在bitbucket中,我创建了一个新的存储库(dev1.project.com),并将我的项目文件夹从OldName重命名为dev1.project.com
我编辑.git/config指向我的新存储库:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = https://bitbucket.org/user/dev1.project.com.git
fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)
当我做 git remote -v
我得到:origin ssh://git@bitbucket.org/user/dev1.project.com.git(fetch)origin ssh://git@bitbucket.org/user/dev1.project.com.git(push)
我回到我的项目文件夹,然后输入:
git init
git add .
git commit -m 'my first commit'
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
但我一直收到以下错误:
ssh: connect to host bitbucket.org port 22: Connection timed out
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
该命令为ssh -T git@bitbucket.org我提供了与上面相同的消息.
命令:git config --get remote.origin.url …
我们通常将IP地址列入黑名单iptables.但是在Amazon EC2中,如果连接通过Elastic Load Balancer,远程地址将被负载均衡器的地址替换,iptables无法使用.在HTTP的情况下,显然找出真正的远程地址的唯一方法是查看HTTP头HTTP_X_FORWARDED_FOR.对我来说,在Web应用程序级别阻止IP并不是一种有效的方法.
在这种情况下,防御DoS攻击的最佳做法是什么?
在本文中,有人建议我们可以用HAProxy替换Elastic Load Balancer.但是,这样做有一些缺点,我试图看看是否有更好的选择.
PS这是编程问题,而不是用户问题.
我正在尝试编写一个iptables规则,将所有传出的UDP数据包重定向到本地套接字,但我还需要目标信息.我开始了
sudo iptables -t nat -A sshuttle-12300 -j RETURN --dest 127.0.0.0/8 -p udp
sudo iptables -t nat -A sshuttle-12300 -j REDIRECT --dest 0.0.0.0/0 -p udp --to-ports 15000
Run Code Online (Sandbox Code Playgroud)
这很好,现在我可以通过端口15000上的套接字获取所有传出的UDP数据包.
现在,我需要目标信息(目标主机和端口号),因此简单的UDP套接字是不够的; 需要一个原始套接字,以便它获得完整的IP标头.
然而,事实证明,收到的数据包似乎已得到解决localhost:15000.这是有道理的,因为那是套接字的位置,但这不是我想要的; 我希望在重定向数据包之前使用主机/端口iptables.
谷歌搜索导致了这个问题,答案提出了两种方法:TPROXY并且SO_ORIGINAL_DST,推荐前者,这就是我试图使用的方法.
添加了以下iptables规则TPROXY:
sudo iptables -t mangle -A PREROUTING -j TPROXY --dest 0.0.0.0/0 -p udp --on-port 15000
Run Code Online (Sandbox Code Playgroud)
从tproxy.txt读取,我们需要创建一个带有该IP_TRANSPARENT选项的侦听套接字(这是以root身份完成的):
from socket import *
s = socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
# The …Run Code Online (Sandbox Code Playgroud) 我有一个Ubuntu linux系统充当网关系统,上面有两个接口.一个接口用于本地网络,一个接口用于Internet.我可以毫无问题地通过它来路由流量.我使用两个iptables规则来转发内部接口的出站流量:
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
我现在需要创建一个iptables规则,过滤掉并重定向所有tcp端口80和443流量,通过eth1接口离开我的网络,并将其发送到驻留在tcp端口9090上的环回接口上的代理服务器.
我一直在寻找SO,但我找不到一个有效的例子.有没有一种有效的方法来做到这一点?
我在我的Ubuntu Linux 14.04计算机上运行了一个Docker容器,公开了一个端口:
docker run --name spacyapi -d -p 127.0.0.1:7091:7091 jgontrum/spacyapi:en
Run Code Online (Sandbox Code Playgroud)
我可以连接并执行容器中服务器的命令,而不会出现本地机器的问题.例如:
curl http://localhost:7091/api --header 'content-type: application/json' --data '{"text": "This is a test."}' -X POST
Run Code Online (Sandbox Code Playgroud)
该命令忠实执行.但是,如果我从外部机器尝试相同的CURL命令,我会收到"连接被拒绝"错误:
curl http://192.5.169.50:5000/api --header 'content-type: application/json' --data '{"text": "This is a test."}' -X POST
curl: (7) Failed to connect to 192.5.169.50 port 7091: Connection refused
Run Code Online (Sandbox Code Playgroud)
其中192.5.169.50是运行Docker容器的框的IP地址.
我认为我不需要任何iptables规则,因为我不需要在同一个盒子上运行Node.JS服务器.我本地网络上的所有其他计算机都可以正常访问Node.JS服务器.但不是Docker容器充当服务器.
我怎样才能解决这个问题?