我错误地认为限制模块是每个源ip的,但它似乎是基于所有请求的:
577 36987 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 limit: avg 3/sec burst 5
46 3478 LOG icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 LOG flags 0 level 4 prefix `INET-PING-DROP:'
46 3478 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8
...
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 limit: avg 3/sec burst 5
0 0 LOG icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 LOG …Run Code Online (Sandbox Code Playgroud) 在处理连接的进程获取流之前,我需要对来自已知 tcp host:port 的传入流量进行一些小的修改。
例如,让 192.168.1.88 成为运行 Web 服务器的远程主机。
我需要的是,当我本地主机上的进程从 192.168.1.88:80(例如浏览器)接收数据时,数据首先被替换text-A为text-B,如下所示:
127.0.0.1:... 发送到 192.168.1.88:80:
GET /
Run Code Online (Sandbox Code Playgroud)192.168.1.88:80 发送到 127.0.0.1:...:
HTTP/1.0 200 OK
Content-Type: text/plain
Some text-A, some other text
Run Code Online (Sandbox Code Playgroud)该数据在某种程度上被系统拦截并传递给一个程序,其输出为:
HTTP/1.0 200 OK
Content-Type: text/plain
Some text-B, some other text
Run Code Online (Sandbox Code Playgroud)系统将如此更改的数据提供给处理 127.0.0.1:... 的进程,就像它来自 192.168.1.88:80 一样。
假设我有一种基于流的方法来进行这种更改(sed例如使用),预处理传入的 tcp 流的最简单方法是什么?
我想这会涉及iptables,但我不是很擅长。
请注意,应用程序应该感觉与原始主机打交道,因此设置代理不太可能是解决方案。
我正在尝试将 iptables 规则设置为每分钟仅允许 3 次 IP 尝试通过 SSH 连接到 servir,然后断开所有连接以防止 SSH 攻击;但似乎我做错了什么!
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个 LXC 容器 ( 10.0.3.2) 在主机上运行。服务正在容器内的端口上运行7000。
从主机 ( 10.0.3.1, lxcbr0),我可以访问服务:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)
我想让外部世界可以访问在容器内运行的服务。因此,我想7002将主机上的端口转发到7000容器上的端口:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)
结果是 ( iptables -t nat -L):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)
尽管如此,我仍无法使用转发端口从主机访问该服务:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)
我觉得我在这里错过了一些愚蠢的东西。我应该检查哪些事项?调试这些情况的好策略是什么?
为了完整起见,这里是如何iptables …
如何将 [!] 选项用于目标 IP?
我正在尝试将出站 WAN DNS 流量重定向到我的天坑,但我无法使用 --destination [!] 选项。
例如:
iptables -A OUTPUT -d ! 134.134.134.134 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
返回:
Bad argument `134.134.134.134'
Run Code Online (Sandbox Code Playgroud)
我一点也不知道我的语法有什么问题。
当您通过 SSH 配置 iptables 或 SSH 并且数据中心在数千公里之外(并且很难让人在那里插入 KVM)时,有哪些标准做法可以防止将自己锁定在外面?
我正在构建一个基于 iptables 的防火墙配置工具,并试图让“线路中的颠簸”场景工作。
给定一个设置有eth0和eth1在桥梁br0和第三界面eth2:
| | |
eth0 eth1 eth2
| == br0== | |
| |
| |
--- linux node ---
Run Code Online (Sandbox Code Playgroud)
在这种情况下,假设我希望 TCP 端口 80 流量在进入连接到的网络时被丢弃eth0,但允许它进入eth1.
因此,我试图可靠地匹配通过特定接口发出的数据包eth0。
如果我在filter表中添加以下 iptables 规则:
-A FORWARD -o br0 --physdev-out eth0 -j LOG
Run Code Online (Sandbox Code Playgroud)
给定一个来自eth1(桥的另一半)的数据包,那么规则匹配得很好,记录:
... IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=eth1 ...
Run Code Online (Sandbox Code Playgroud)
但是,如果数据包来自eth2,则规则不再匹配。
我似乎路由算法无法确定选择哪个桥接接口,因此数据包通过桥接器中的两个接口发送出去。
如果我添加另一个更混杂的日志规则,那么我会得到该数据包的以下日志输出:
... IN=eth2 OUT=br0 ...
Run Code Online (Sandbox Code Playgroud)
我的猜测是,在第一种情况下,路由算法可以只选择网桥上的另一个接口,因为该数据包不应该按照它来的方式出去。在第二种情况下,它没有选择特定的接口,然后您根本没有得到 physdev 信息!
但是,如果网桥已获知目标 MAC 地址(如 …
我遵循了https://help.ubuntu.com/community/IptablesHowTo#More_detailed_Logging 中的iptable 日志示例
sudo iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
Run Code Online (Sandbox Code Playgroud)
我得到如下的日志条目
Oct 20 03:45:50 hostname kernel: iptables denied: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=x.x.x.x DST=x.x.x.x LEN=1059 TOS=0x00 PREC=0x00 TTL=115 ID=31368 DF PROTO=TCP SPT=17992 DPT=80 WINDOW=16477 RES=0x00 ACK PSH URGP=0
Oct 20 03:46:02 hostname kernel: iptables denied: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=x.x.x.x DST=x.x.x.x LEN=52 TOS=0x00 PREC=0x00 TTL=52 ID=763 DF PROTO=TCP SPT=20229 DPT=22 WINDOW=15588 RES=0x00 ACK URGP=0
Oct 20 03:46:14 hostname kernel: iptables …Run Code Online (Sandbox Code Playgroud) 我在 DigitalOcean 上买了一个 512MB 的 VPS。目前,我使用 Firewalld 来允许/拒绝访问某些端口(可能 22、80、443 是开放的)。它使用大约 25-30MB 的内存。
编辑:不要忘记我只有 489MB 的可用内存,其中 50MB 已被使用。因此,如果我切换到其他轻量级替代方案,我可能会节省 15-20MB。
那么,真的有必要使用Firewalld吗?或者我可以使用诸如 iptables 之类的东西(顺便说一句,我以前从未使用过它)。两者之间有什么重大区别吗?如何配置 iptables 以关闭除端口 22、80、443 之外的所有端口?
我问是因为我什至必须考虑服务器安全性。因为不能仅仅为了节省几 MB 而损害服务器安全性。
我读过这个线程,它说
如果可能,您应该使用新的 firewalld 系统