自己第一次写的Iptables 的脚本,帮我看看

发布于 2022-09-29 00:18:42 字数 1204 浏览 20 评论 0

刚学这个,今天自己写了一个Iptables 的脚本,总有点问题,但自己找不出来,帮我看看,有错误的指出来,不够完善的帮我补充一下。。谢谢

环境:只有一台Web服务器,并且自己就是防火墙,只要让向外发布Web服务器,和可以让远程的机器通过SSH来管理。要保证安全性并且日志记录登录的情况。

脚本:
#!/bin/bash
echo "Starting iptables rules ..."
IPT=/sbin/iptables
WWW-SER=11.0.0.254
$IPT -F
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
$IPT -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "IPTABLES:"
$IPT -A INPUT -p tcp -d $WWW-SER --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -d $WWW-SER--dport 80 -j ACCEPT
$IPT -A INPUT -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPT -A OUTPUT -p tcp  --sport 22 -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -s $WWW-SER --sport 80 -m state --state ESTABLISHED -j ACCEPT
$IPT  -A OUTPUT -p udp --sport 53 -j ACCEPT
$IPT -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

问题1:我是用虚拟机来做的,当我一条条打来挑错时,发现SSH连接有问题,如果我先都把22号端口打开,DROP掉INPUT和FORWARD链不会有问题,但我DROP掉OUTPUT链就连不上了,这是怎么回事。
问题2:在安全方面我还要注意什么,是否完善了。

[ 本帖最后由 ajiangg 于 2007-4-5 19:44 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

清醇 2022-10-06 00:18:42

原帖由 ajiangg 于 2007-4-4 23:05 发表于 1楼  
刚学这个,今天自己写了一个Iptables 的脚本,总有点问题,但自己找不出来,帮我看看,有错误的指出来,不够完善的帮我补充一下。。谢谢

环境:只有一台Web服务器,并且自己就是防火墙,只要让向外发布Web服 ...

tcp/ip 雙向老問題,您可以先閱讀網絡版置頂文章內,可以找到 iptables 設定常見 faq 有你要的一些資訊..

--

桃气十足 2022-10-06 00:18:42

原帖由 kenduest 于 2007-4-4 23:12 发表于 2楼  

tcp/ip 雙向老問題,您可以先閱讀網絡版置頂文章內,可以找到 iptables 設定常見 faq 有你要的一些資訊..

--

谢谢kenduest,我仔细看了你的文章,确实不错。但我同时也发现了点问题。
我也很同意你的说的,但现在我的这个配置经过实验后变成了这个样子:
脚本:

#!/bin/bash
echo "Starting iptables rules ..."
IPT=/sbin/iptables
WWWSER=192.0.0.254
$IPT -F
$IPT -X
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
$IPT -A INPUT -m state --state  ESTABLISHED,NEW -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "IPTABLES:"
$IPT -A INPUT -p tcp -d $WWWSER --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -d $WWWSER --dport 80 -j ACCEPT
$IPT -A INPUT -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPT -A OUTPUT -p tcp  --sport 22 -j ACCEPT
$IPT -A OUTPUT -p tcp -s $WWWSER --sport 80 -m state --state ESTABLISHED -j ACCEPT
$IPT  -A OUTPUT -p udp --sport 53 -j ACCEPT

就是要加一个NEW才可以和SSH连通,我做了很多测试,一个个的删除和建立,最后就只能这样才可以通信。
不知道是怎么回事,可不可以帮我解释一下。
另外:还有个问题:
你在文中说:“不过拉回来看,有必要配置 -P OUTPUT DROP 吗?老实说个人倒是感觉通常都是多此一举,因为实际应用部份通常不会限制自己主机对外连线的功能。”
但是如果服务器中了病毒或者木马,病毒和木马自己出去对外连接,这个安全问题要如何来解决呢?

猫七 2022-10-06 00:18:42

原帖由 ajiangg 于 2007-4-5 19:55 发表于 3楼  
谢谢kenduest,我仔细看了你的文章,确实不错。但我同时也发现了点问题。
我也很同意你的说的,但现在我的这个配置经过实验后变成了这个样子:
脚本:

你的 script 有點亂,不過整個來看就是允許外面可以連 ssh/dns/www 服務的話,應該就是:

  1. # load module
  2. modprobe ip_conntrack
  3. modprobe ip_conntrack_ftp
  4. # clear and flush rule
  5. iptables -F
  6. iptables -X
  7. # set default policy
  8. iptables -P INPUT DROP
  9. iptables -P FORWARD DROP
  10. iptables -P OUTPUT DROP
  11. # input chain
  12. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  13. iptables -A INPUT -i lo -j ACCEPT
  14. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  15. iptables -A INPUT -p udp --dport 53 -j ACCEPT
  16. iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  17. # output chain
  18. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  19. iptables -A OUTPUT -o lo -j ACCEPT

复制代码

這樣就可以了。這個內容也於該 faq 內有提供。

後續若是你希望主機可以有 dns 對外查詢資料的話,多:

  1. iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

复制代码

你還要允許主機主動對外連那邊,你就繼續新增 OUTPUT rule 即可。

--

堇色安年 2022-10-06 00:18:42

原帖由 kenduest 于 2007-4-5 21:29 发表于 4楼  

你的 script 有點亂,不過整個來看就是允許外面可以連 ssh/dns/www 服務的話,應該就是:

谢谢kenduest,确实像您那样写了之后,都清楚很多了.这是一个好习惯,学习。

最后整理,实践也证明是可行的脚本。

#!/bin/bash
#echo messages
echo "Starting iptables rules ..."

#Set variable
IPT=/sbin/iptables
WWWSER=192.168.1.254

#Load module
modprobe ip_conntrack
modprobe ip_conntrack_ftp

#clear and flush rule
$IPT -F
$IPT -X

#Set default policy
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP

#Set input chain
$IPT -A INPUT -m state --state  ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "IPTABLES:"
$IPT -A INPUT -p tcp -d $WWWSER --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -d $WWWSER --dport 80 -j ACCEPT
$IPT -A INPUT -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT

#Set output chain
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT  -A OUTPUT -p udp --sport 53 -j ACCEPT
$IPT -A OUTPUT -o lo  -j ACCEPT

聽兲甴掵 2022-10-06 00:18:42

的确乱!
花里胡哨不中用的也尽往上写!

掩于岁月 2022-10-06 00:18:42

即然这样说了,为什么不写些更实在的
我愿意洗耳恭听

淤浪 2022-10-06 00:18:42

原帖由 marsaber 于 2007-4-8 22:04 发表于 6楼  
的确乱!
花里胡哨不中用的也尽往上写!

这个是marsaber跟我在QQ聊时,他给出的脚本。
#!/bin/bash
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p udp --sport 53 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

首先可以看出来是简单了不少。
有很多地方值得参考,但我今天做了实验,确实也可以访问,但是我在服务器上访问互联网上的东西也是可以的,
我就想这个安全问题是不是就有问题了,如果服务中了木马或者病毒之后,自动向外发送请求,那不也是可以联上的。

marsaber希望你可以看到,因为那个QQ群不见了,我再加,又说我已经有了。但我就是找不到那个群了。
只好在这帖出来,看到后给我回。或者加我的QQ。

还有一个,回环接口是不是也应该考滤进去呢。

路过的人也给点建议和看法。

旧瑾黎汐 2022-10-06 00:18:42

原帖由 ajiangg 于 2007-4-10 21:19 发表于 8楼  

这个是marsaber跟我在QQ聊时,他给出的脚本。
#!/bin/bash
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -p tcp -- ...

請參考 linux 網絡版置頂文章,iptables faq 都有提到你問的東西。

--

美胚控场 2022-10-06 00:18:42

呵呵.....
如果后门是通过web端口往外连的话,咋办?
难不成你把web也关了?
安全是相对的,没有绝对的安全!
你尽可能的使你的服务器安全吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文