Iptables 实例分析

运维 系统运维
iptables 是与最新的 2.6.x 版本Linux 内核集成的 IP 信息包过滤系统。在上篇文章中,我们介绍了Iptables的配置过程,下面给大家介绍几个Iptables 应用实例供大家参考!

iptables漫长的配置后,我拿出来几个Iptables 应用实例,供大家参考下!

  一、单个规则实例

  iptables -F?

  # -F 是清除的意思,作用就是把 FILTRE TABLE 的所有链的规则都清空

  iptables -A INPUT -s 172.20.20.1/32 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

  #在 FILTER 表的 INPUT 链匹配源地址是172.20.20.1的主机,状态分别是NEW,ESTABLISHED,RELATED 的都放行。

  iptables -A INPUT -s 172.20.20.1/32 -m state --state NEW,ESTABLISHED -p tcp -m multiport --dport 123,110 -j ACCEPT

  # -p 指定协议,-m 指定模块,multiport模块的作用就是可以连续匹配多各不相邻的端口号。完整的意思就是源地址是172.20.20.1的主机,状态分别是NEW, ESTABLISHED,RELATED的,TCP协议,目的端口分别为123 和 110 的数据包都可以通过。

  iptables -A INPUT -s 172.20.22.0/24 -m state --state NEW,ESTABLISHED -p tcp -m multiport --dport 123,110 -j ACCEPT

  iptables -A INPUT -s 0/0 -m state --state NEW -p tcp -m multiport --dport 123,110 -j DROP

  #这句意思为源地址是0/0的 NEW状态的的TCP数据包都禁止访问我的123和110端口。

  iptables -A INPUT -s ! 172.20.89.0/24 -m state --state NEW -p tcp -m multiport --dport 1230,110 -j DROP

  # "!"号的意思 取反。就是除了172.20.89.0这个IP段的地址都DROP。

  iptables -R INPUT 1 -s 192.168.6.99 -p tcp --dport 22 -j ACCEPT

  替换INPUT链中的第一条规则

  iptables -t filter -L INPUT -vn

  以数字形式详细显示filter表INPUT链的规则

  #-------------------------------NAT IP--------------------------------------

  #以下操作是在 NAT TABLE 里面完成的。请大家注意。

  iptables -t nat -F

  iptables -t nat -A PREROUTING -d 192.168.102.55 -p tcp --dport 90 -j DNAT --to 172.20.11.1:800

  #-A PREROUTING 指定在路由前做的。完整的意思是在 NAT TABLE 的路由前处理,目的地为192.168.102.55 的 目的端口为90的我们做DNAT处理,给他转向到172.20.11.1:800那里去。

  iptables -t nat -A POSTROUTING -d 172.20.11.1 -j SNAT --to 192.168.102.55

  #-A POSTROUTING 路由后。意思为在 NAT TABLE 的路由后处理,凡是目的地为 172.20.11.1 的,我们都给他做SNAT转换,把源地址改写成 192.168.102.55 。

  iptables -A INPUT -d 192.168.20.0/255.255.255.0 -i eth1 -j DROP

  iptables -A INPUT -s 192.168.20.0/255.255.255.0 -i eth1 -j DROP

  iptables -A OUTPUT -d 192.168.20.0/255.255.255.0 -o eth1 -j DROP

  iptables -A OUTPUT -s 192.168.20.0/255.255.255.0 -o eth1 -j DROP

  # 上例中,eth1是一个与外部Internet相连,而192.168.20.0则是内部网的网络号,上述规则用来防止IP欺骗,因为出入eth1的包的ip应该是公共IP

  iptables -A INPUT -s 255.255.255.255 -i eth0 -j DROP

  iptables -A INPUT -s 224.0.0.0/224.0.0.0 -i eth0 -j DROP

  iptables -A INPUT -d 0.0.0.0 -i eth0 -j DROP

  # 防止广播包从IP代理服务器进入局域网:

  iptables -A INPUT -p tcp -m tcp --sport 5000 -j DROP

  iptables -A INPUT -p udp -m udp --sport 5000 -j DROP

  iptables -A OUTPUT -p tcp -m tcp --dport 5000 -j DROP

  iptables -A OUTPUT -p udp -m udp --dport 5000 -j DROP

  # 屏蔽端口 5000

  iptables -A INPUT -s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 3306 -j DROP

  iptables -A INPUT -s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

  iptables -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT

  iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP

  # 防止 Internet 网的用户访问 MySQL 服务器(就是 3306 端口)

  iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

  #REJECT, 类似于DROP,但向发送该包的主机回复由--reject-with指定的信息,从而可以很好地隐藏防火墙的存在

#p#

  二、www的iptables实例

  #!/bin/bash

  export PATH=/sbin:/usr/sbin:/bin:/usr/bin

  #加载相关模块

  modprobe iptable_nat

  modprobe ip_nat_ftp

  modprobe ip_nat_irc

  modprobe ip_conntrack

  modprobe ip_conntrack_ftp

  modprobe ip_conntrack_irc

  modprobe ipt_limit

  echo 1 >;/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

  echo 0 >;/proc/sys/net/ipv4/conf/all/accept_source_route

  echo 0 >;/proc/sys/net/ipv4/conf/all/accept_redirects

  echo 1 >;/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

  echo 1 >;/proc/sys/net/ipv4/conf/all/log_martians

  echo 1 >;/proc/sys/net/ipv4/tcp_syncookies

  iptables -F

  iptables -X

  iptables -Z

  ## 允许本地回路?Loopback - Allow unlimited traffic

  iptables -A INPUT -i lo -j ACCEPT

  iptables -A OUTPUT -o lo -j ACCEPT

  ## 防止SYN洪水?SYN-Flooding Protection

  iptables -N syn-flood

  iptables -A INPUT -i ppp0 -p tcp --syn -j syn-flood

  iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN

  iptables -A syn-flood -j DROP

  ## 确保新连接是设置了SYN标记的包?Make sure that new TCP connections are SYN packets

  iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP

  ## 允许HTTP的规则

  iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT

  iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT

  iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 80 -j ACCEPT

  iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 443 -j ACCEPT

  ## 允许DNS的规则

  iptables -A INPUT -i ppp0 -p udp -s 0/0 --sport 53 -m state --state ESTABLISHED -j ACCEPT

  iptables -A INPUT -i ppp0 -p udp -d 0/0 --dport 53 -j ACCEPT

  ## IP包流量限制?IP packets limit

  iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

  iptables -A INPUT -i eth0 -p icmp -j DROP

  ## 允许SSH

  iptables -A INPUT -p tcp -s ip1/32 --dport 22 -j ACCEPT

  iptables -A INPUT -p tcp -s ip2/32 --dport 22 -j ACCEPT

  ## 其它情况不允许?Anything else not allowed

  iptables -A INPUT -i eth0 -j DROP

#p#

  三、一个包过滤防火墙实例

  环境:redhat9 加载了string time等模块

  eth0 接外网──ppp0

  eth1 接内网──192.168.0.0/24

  #!/bin/sh

  #

  modprobe ipt_MASQUERADE

  modprobe ip_conntrack_ftp

  modprobe ip_nat_ftp

  iptables -F

  iptables -t nat -F

  iptables -X

  iptables -t nat -X

  ###########################INPUT键###################################

  iptables -P INPUT DROP

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

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

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

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

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

  #允许dns连接

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

  iptables -A INPUT -p gre -j ACCEPT

  #允许外网vpn连接

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

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

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

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

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

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

  iptables -A INPUT -p icmp -j DROP

  #禁止icmp通信-ping 不通

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

  #内网转发

  iptables -N syn-flood

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

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

  iptables -A syn-flood -j REJECT

  #防止SYN攻击 轻量

  iptables -P FORWARD DROP

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

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

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

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

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

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

  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

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

  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

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

  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

  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

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

  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

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

  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

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

  iptables -I FORWARD -s 192.168.0.0/24 -m string --string "ay2000.net" -j DROP

  iptables -I FORWARD -d 192.168.0.0/24 -m string --string "宽频影院" -j DROP

  iptables -I FORWARD -s 192.168.0.0/24 -m string --string "色情" -j DROP

  iptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP

  #禁止ay2000.net,宽频影院,色情,广告网页连接 !但中文 不是很理想

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

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

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

  #禁止BT连接

  iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24 -j DROP

  #只允许每组ip同时15个80端口转发

  #######################################################################

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

  #打开转发

  #######################################################################

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

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

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

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

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

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

  #######################################################################

  iptables -I INPUT -s 192.168.0.50 -j ACCEPT

  iptables -I FORWARD -s 192.168.0.50 -j ACCEPT

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

通过文章的具体分析和介绍,想必大家通过Iptables的实例分析,对Iptables有个全面认识,希望本文对大家有帮助!

【编辑推荐】

  1. 15.4 iptables的工作原理
  2. 15.5 关于iptables
  3. 解决Linux iptables防火墙和vsftpd的问题
  4. Linux系统下IPtables防火墙简易设置方法
  5. Linux iptables firewall 設定常見 FAQ 整理
  6. 如何用iptables实现Linux下强大的NAT功能
  7. iptables防火墙配置工具ShoreWall的安装和使用实例

 

责任编辑:赵鹏 来源: 网络转载
相关推荐

2011-03-15 09:59:59

iptables实例

2013-02-28 13:18:08

2011-03-15 11:33:18

iptables

2015-08-10 15:12:27

Java实例源码分析

2009-07-20 13:58:07

MySQL JDBC驱

2010-09-08 14:48:27

2010-06-11 14:31:08

通信协议

2009-11-19 11:23:08

Oracle重作日志

2011-01-26 12:56:24

2010-06-30 13:27:42

UML业务建模

2020-07-28 08:54:39

内核通信Netlink

2009-08-27 15:17:18

C# interfacinterface使用

2009-09-01 18:36:35

C#委托实例

2009-09-14 17:03:32

LINQ模糊查询

2010-06-12 09:18:34

UML需求分析

2009-11-05 13:54:07

WCF Service

2011-03-17 17:19:24

iptables

2011-03-18 09:26:13

Iptables规则

2010-06-12 09:09:33

UML需求分析

2012-04-19 17:16:32

Titanium实例代码分析
点赞
收藏

51CTO技术栈公众号