Iptables防火墙实例

iptables –F 
#删除已经存在的规则 
iptables -P INPUT DROP 
#配置默认的拒绝规则。基本规则是:先拒绝所有的服务,然后根据需要再添加新的规则。 
(1)iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
#打开WEB服务端口的tcp协议 
(2)iptables -A INPUT -p tcp --dport 110 -j ACCEPT 
#打开POP3服务端口的tcp协议 
(3)iptables -A INPUT -p tcp --dport 25 -j ACCEPT 
#打开SMTP服务端口的tcp协议 
(4)iptables -A INPUT -p tcp --dport 21 -j ACCEPT 
#打开FTP服务端口的tcp协议 
(5)iptables -A INPUT -p tcp -s 202.106.12.130 --dport 22 -j ACCEPT 
#允许IP地址为202.106.12.130这台主机连接本地的SSH服务端口 
(6)iptables -A INPUT -p tcp --dport 53 -j ACCEPT 
#允许DNS服务端口的tcp数据包流入 
(7)iptables -A INPUT -p udp --dport 53 -j ACCEPT 
#允许DNS服务端口的udp数据包流入 
(8)iptables -A INPUT -p icmp -icmp-type echo-request -i eth1 -j DROP 
#防止死亡之ping,从接口eth1进入的icmp协议的请求全部丢弃。 
(9)iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT 
#防止SYN Flood (拒绝服务攻击)

(10)iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.226 -j MASQUERADE
#允许 192.168.0.226通过eth1 IP伪装出外网
(11)iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.4 -p tcp --dport 25 -j MASQUERADE
#允许 192.168.0.4通过eth0 伪装访问外网的 25端口



限制SSH登陆

只允许在172.16.0.2上使用ssh远程登录,从其它计算机上禁止使用ssh

iptables -A INPUT -s 172.16.0.2 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP





#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT


# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT


# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT


#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT


#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT


iptables -A INPUT -p tcp --dport 20 -j ACCEPT




#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT  (注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT



#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP


#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP


#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP


#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP



iptables  -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙)


iptables -A INPUT -p tcp --dport 80 -j ACCEPT


-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙)


[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.

其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)

如果做了WEB服务器,开启80端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了邮件服务器,开启25,110端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

如果做了FTP服务器,开启21端口

[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

如果做了DNS服务器,开启53端口

[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

.

上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP

允许icmp包通过,也就是允许ping,

[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)

[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT  (INPUT设置成DROP的话)

允许loopback!(不然会导致DNS无法正常关闭等问题)

IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.

减少不安全的端口连接

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP

[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP



如:我们只允许192.168.0.3的机器进行SSH连接

[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.

24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.


-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.



在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.

开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)

[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT

丢弃坏的TCP包

[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

处理IP碎片数量,防止攻击,允许每秒100个

[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.

[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

我在前面只所以允许ICMP包通过,就是因为我在这里有限制.


  1. #!/bin/sh  

  2. #  

  3. modprobe ipt_MASQUERADE  

  4. modprobe ip_conntrack_ftp  

  5. modprobe ip_nat_ftp  

  6. iptables -F  

  7. iptables -t nat -F  

  8. iptables -X  

  9. iptables -t nat -X  

  10. ###########################INPUT键###################################  

  11.    

  12. iptables -P INPUT DROP  

  13. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  

  14. iptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPT  

  15. iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT  

  16. #允许内网samba,smtp,pop3,连接  

  17. iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT  

  18. #允许dns连接  

  19. iptables -A INPUT -p tcp --dport 1723 -j ACCEPT  

  20. iptables -A INPUT -p gre -j ACCEPT  

  21. #允许外网vpn连接  

  22. iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT  

  23. iptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP  

  24. #为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃  

  25. iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP  

  26. #为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃  

  27. iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "  

  28. iptables -A INPUT -p icmp -j DROP  

  29. #禁止icmp通信-ping 不通  

  30. iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE  

  31. #内网转发  

  32. iptables -N syn-flood  

  33. iptables -A INPUT -p tcp --syn -j syn-flood  

  34. iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN  

  35. iptables -A syn-flood -j REJECT  

  36. #防止SYN攻击 轻量  

  37. #######################FORWARD链###########################  

  38. iptables -P FORWARD DROP  

  39. iptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPT  

  40. iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT  

  41. iptables -A FORWARD -p gre -s 192.168.0.0/24 -j ACCEPT  

  42. iptables -A FORWARD -p icmp -s 192.168.0.0/24 -j ACCEPT  

  43. #允许 vpn客户走vpn网络连接外网  

  44. iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT  

  45. iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP  

  46. #星期一到星期六的8:00-12:30禁止qq通信  

  47. iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP  

  48. #星期一到星期六的8:00-12:30禁止qq通信  

  49. iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP  

  50. iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP  

  51. #星期一到星期六的13:30-20:30禁止QQ通信  

  52. iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP  

  53. #星期一到星期六的8:00-12:30禁止qq网页  

  54. iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP  

  55. #星期一到星期六的13:30-20:30禁止QQ网页  

  56. iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP  

  57. iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP  

  58. iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP  

  59. #禁止BT连接  

  60. iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24  

  61. #######################################################################  

  62. sysctl -w net.ipv4.ip_forward=1 &>/dev/null  

  63. #打开转发  

  64. #######################################################################  

  65. sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null  

  66. #打开 syncookie (轻量级预防 DOS 攻击)  

  67. sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null  

  68. #设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数)  

  69. sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null  

  70. #设置支持最大连接树为 30W(这个根据你的内存和 iptables 版本来,每个 connection 需要 300 多个字节)  

  71. #######################################################################  

  72. iptables -I INPUT -s 192.168.0.50 -j ACCEPT  

  73. iptables -I FORWARD -s 192.168.0.50 -j ACCEPT  

  74. #192.168.0.50是我的机子,全部放行!  

  75. ############################完#########################################   










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1558595,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值