消息关闭
    暂无新消息!
写一脚本,从netstat -an 命令中获取所有IPV4的UDP、TCP协议的侦听端口且对这些端口进行放行,并最多1小时只允许10个新建连接,其他端口拒绝。使用shell脚本.

请求各位大佬,这个怎么写啊,本人linux学的菜,老师让写一个这个

3个回答

︿ 1
上面是全部端口算在一起容许每小时10个连接。

如果是每个端口每小时10个连接的话:
#!/bin/bash

# set the default input policy 
iptables -P INPUT DROP

# get all tcp ports 
PORTS=$(netstat -nt | grep "^tcp" | grep -v "^tcp6" | awk '{print $4}' |  cut -d: -f2)
for p in PORTS; do
TABLE=LMTT_${p}
iptables -A INPUT -p tcp --dport $p -m state --state NEW -m recent --set --name $TABLE --rsource
iptables -A INPUT -p tcp --dport $p -m state --state NEW -m recent --update --seconds 3600 --hitcount 11 --name $TABLE --rsource -j DROP
iptables -A INPUT -p tcp --dport $p -m state --state NEW -j ACCEPT
done 


# get all udp ports 
PORTS=$(netstat -nu | grep "^udp" | grep -v "^udp6" | awk '{print $4}' |  cut -d: -f2)
for p in PORTS; do
TABLE=LMTU_${p}
iptables -A INPUT -p udp --dport $p -m state --state NEW -m recent --set --name $TABLE --rsource
iptables -A INPUT -p udp --dport $p -m state --state NEW -m recent --update --seconds 3600 --hitcount 11 --name $TABLE --rsource -j DROP
iptables -A INPUT -p udp --dport $p -m state --state NEW -j ACCEPT
done 


另外,你老师给你的功课,我这样会不会耽误你学习?
︿ 0
取得所有监听的 tcp 端口:
netstat -nt | grep "^tcp" | awk '{print $4}' |  cut -d: -f2


将全部端口放到 $PORTS 变数里面,用逗号隔开。


iptables -P INPUT DROP

iptables -A INPUT -p tcp --match multiport --dports $PORTS -m state --state NEW -m recent --set --name PORT_LIMIT --rsource
iptables -A INPUT -p tcp --match multiport --dports $PORTS -m state --state NEW -m recent --update --seconds 3600 --hitcount 11 --name PORT_LIMIT --rsource -j DROP
iptables -A INPUT -p tcp --match multiport --dports $PORTS -m state --state NEW -j ACCEPT

这就搞定了 tcp。

取得所有监听的 udp 端口:
netstat -nu | grep "^udp" | awk '{print $4}' |  cut -d: -f2

重复上面。