20个iptables例子

来源:本站原创 Linux 超过851 views围观 0条评论

systemerror译

Iptables/Netfilter是一款Linux自带的、基于主机的防火墙。Netfilter是Linux 内核集成的 IP 数据包过滤系统。netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是用户自定义的功能)。
Iptables规则例子:
• 在这篇文章中列出的操作,大多是书面上假设的,它们将由root用户执行,运行在bash或其他shell上。不要在远程系统中键入命令,因为它会断开您的访问。
• 下面的演示都是在RHEL 6.x上进行的,但是它应该也同样适用于现在的各个Linux发行版本。
• 这篇文章不是一个怎么去设置iptables的教程,只是一些常见iptables命令的速记。
# 1:显示你的防火墙的状态
以root用户输入下面的命令:
# iptables -L -n –v
输出示例:
clip_image001
以上输出表示防火墙没有激活,下面的命令可以显示防火墙的激活状态:
# iptables -L -n –v
输出样例:
clip_image002
where:
• -L:规则列表。
• -V:显示详细信息。这个选项可以让命令显示网卡名称,规则选项和TOS任务。The packet and byte counters are also listed, with the suffix ‘K’, ‘M’ or ‘G’ for 1000, 1,000,000 and 1,000,000,000 multipliers respectively.
• -n:以数字格式显示IP地址和端口。不要使用DNS来解析名称。这将加快列出速度。
#1.1:用行数检查显示防火墙状态,输入:
# iptables -n -L -v –line-numbers
输出示例:
clip_image003
你可以使用行数来删除或者插入新的防火墙规则。
#1.2:显示INPUT或者OUTPUT链的规则,输入:
# iptables -L INPUT -n –v
# iptables -L OUTPUT -n -v –line-numbers
# 2:停止/启动/重启防火墙
如果你使用的是CentOS/RHEL/Fedora Linux,可输入:
# service iptables stop
# service iptables start
# service iptables restart
你也可以使用防火墙自己的命令去停止或者删除所有规则:
# iptables –F
# iptables –X
# iptables -t nat –F
# iptables -t nat –X
# iptables -t mangle –F
# iptables -t mangle –X
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT
选项注释:
•  -F : 删除(flushing)所有规则。
•  -X : 删除链。
•  -t table_name :选择table并且删除/flush规则。
•  -P :设置默认规则(例如:DROP,REJECT,ACCEPT).
# 3:删除防火墙规则
显示存在的规则以及其他信息的行数,输入:
# iptables -L INPUT -n –line-numbers
# iptables -L OUTPUT -n –line-numbers
# iptables -L OUTPUT -n –line-numbers | less
# iptables -L OUTPUT -n –line-numbers | grep 202.54.1.1
你将会获取到IP的列表,请看左边的行数,然后使用行数去删除它。如果要删除第四行,你可以输入:
# iptables -D INPUT 4
或者要找到源IP为202.54.1.1的规则,并且从规则中删除,你可输入:
# iptables -D INPUT -s 202.54.1.1 -j DROP
注释:
• -D : 从选中的链中删除一个或者多个的规则。
# 4:插入防火墙规则
在选定的链中插入一个或多个规则,指定规则序号使用下面的语法。首先找出行数,输入:
# iptables -L INPUT -n –line-numbers
输出范例:
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  —  202.54.1.1           0.0.0.0/0
2    ACCEPT     all  —  0.0.0.0/0            0.0.0.0/0           state NEW,ESTABLISHED
在第一行和第二行之间插入规则,输入:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP
查看更新后的规则,输入:
# iptables -L INPUT -n –line-numbers
输出样例:
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  —  202.54.1.1           0.0.0.0/0
2    DROP       all  —  202.54.1.2           0.0.0.0/0
3    ACCEPT     all  —  0.0.0.0/0            0.0.0.0/0           state NEW,ESTABLISHE
# 5:保存防火墙规则
在CentOS/RHEL/Fedora Linux保存防火墙规则,可输入:
# service iptablesb save
Drop掉一个ip并且保存防火墙规则:
# iptables –A INPUT –s 202.5.4.1 –j DROP
# service iptables save
其他Linux发行版使用的iptables-save命令:
# iptables-save > /root/my.active.firewall.rules
# cat /root/my.active.firewall.rules
# 6:恢复防火墙规则
从 /root/my.active.firewall.rules文件恢复防火墙规则,输入:
# iptables-restore < /root.active.firewall.rules
在CentOS/RHEL/Fedora Linux下导入防火墙规则,输入:
# service iptables restart
# 7:设置默认防火墙策略
DROP所有的网络通信:
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v –n
#### you will not able to connect anywhere as all traffic is dropped ###
# ping 51cto.com
# wget http://www.kernel.org/pub/linux/ … nux-3.2-rc5.tar.bz2
#7.1:阻止进来的(incoming)网络通信
要drop所有进来的/转发的数据包,但允许传出流量,请输入:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state –state NEW,ESTABLISHED -j ACCEPT
# iptables -L -v –n
### *** now ping and wget should work *** ###
# ping 51cto.com
# wget http://www.kernel.org/pub/linux/ … nux-3.2-rc5.tar.bz2
# 8:drop公共接口上的私有网络地址
IP欺骗是什么都不做但停止IPv4地址范围为专用网络上的公共接口。不可路由的源地址的数据包将被拒绝,使用下面的语法:
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
#8.1:私有网络的IPv4地址范围(确保你在公共网络接口上阻止了它们)
•    10.0.0.0/8 -j (A)
•    172.16.0.0/12 (B)
•    192.168.0.0/16 (C)
•    224.0.0.0/4 (MULTICAST D)
•    240.0.0.0/5 (E)
•    127.0.0.0/8 (LOOPBACK)
# 9:阻止一个IP地址(BLOCK IP)
要阻止一个恶意攻击者的IP地址1.2.3.4,输入:
# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP
#10:阻止进来的端口请求(BLOCK PORT)
阻止在80端口上所有服务的请求,输入:
# iptables -A INPUT -p tcp –dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp –dport 80 -j DROP
只阻止IP地址1.2.3.4在80端口上的请求,输入:
# iptables -A INPUT -p tcp -s 1.2.3.4 –dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 –dport 80 -j DROP
#11:阻止出去的(outgoing)IP地址
要阻止传出的流量到一个特定的主机或域名,例如51cto.com,输入:
# host –t a 51cto.com
输出样例:
51cto.com has address 118.144.78.52
记下它的IP地址,然后键入下面的规则去阻止所有到75.126.153.206的出站流量:
# iptables -A OUTPUT -d 118.144.78.52 -j DROP
你也可以使用下面的网关:
# iptables -A OUTPUT -d 192.168.1.0/24 -j DROP
# iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP
#11.1:例子:阻止访问域名facebook.com
首先,找到facebook的所有IP地址,输入:
# host -t a www.facebook.com
输出样例:
www.facebook.com has address 69.171.228.40
找到69.171.228.40的CIDR,键入:
# whois 69.171.228.40 | grep CIDR
输出样例:
CIDR:           69.171.224.0/19
阻止外出访问www.facebook.com,输入:
# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP
你也可以使用域名,例如:
# iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
# iptables -A OUTPUT -p tcp -d facebook.com -j DROP
From the iptables man page:
… specifying any name to be resolved with a remote query such as DNS (e.g., facebook.com is a really bad idea), a network IP address (with /mask), or a plain IP address …
#12: 记录和丢弃数据包
键入下面的规则来记录和封锁在公有网络接口eth1上面的IP欺骗。
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG –log-prefix “IP_SPOOF A: ”
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
默认情况下,所有的信息都会记录在/var/log/messages文件里。
# tail -f /var/log/messages
# grep –color ‘IP SPOOF’ /var/log/messages
#13: 限制记录和丢弃数据包日志的条目数。
-m限制模块,可以限制单位时间内创建日志条目的数量。这是用来防止flooding你的日志文件。每5分钟丢弃丢弃下欺骗数据包,突发情况下,最多7条。
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix “IP_SPOOF A: ”
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
#14:丢弃或者接受来自特定mac地址的网络通信
使用下面的语法:
# iptables -A INPUT -m mac –mac-source 00:0F:EA:91:04:08 -j DROP
## *only accept traffic for TCP port # 8080 from mac 00:0F:EA:91:04:07 * ##
# iptables -A INPUT -p tcp –destination-port 22 -m mac –mac-source 00:0F:EA:91:04:07 -j ACCEPT
#15:阻止或者容许ICMP ping请求
键入下面的命令来阻止ICMP ping请求:
# iptables -A INPUT -p icmp –icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp –icmp-type echo-request -j DROP
ping响应仅限定在一定的网络或主机:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp –icmp-type echo-request -j ACCEPT
下面的规则只接受被限制类型的ICMP ping 请求:
### ** assumed that default INPUT policy set to DROP ** #############
iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp –icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp –icmp-type time-exceeded -j ACCEPT
## ** all our server to respond to pings ** ##
iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT
#16:开启端口范围
使用下面的语法来开启端口范围
iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 7000:7010 -j ACCEPT
#17:开启IP地址范围
使用下面的语法来开启IP地址范围:
## only accept connection to tcp port 80 (Apache) if ip is between 192.168.1.100 and 192.168.1.200 ##
iptables -A INPUT -p tcp –destination-port 80 -m iprange –src-range          192.168.1.100-192.168.1.200 -j ACCEPT
## nat example ##
iptables -t nat -A POSTROUTING -j SNAT –to-source 192.168.1.20-192.168.1.25
#18:建立的连接和重启防火墙
在RHEL / Fedora / CentOS Linux下,当你重启iptables服务的时候,它将会drop掉建立的连接,因为它会从系统中卸载模块。编辑/etc/sysconfig/iptables-config文件并且像下面例子一样设置IPTABLES_MODULES_UNLOAD:
IPTABLES_MODULES_UNLOAD = no
#19: Help Iptables Flooding My Server Screen
Use the crit log level to send messages to a log file instead of console:
iptables -A INPUT -s 1.2.3.4 -p tcp –destination-port 80 -j LOG –log-level crit
#20:封锁或者开启同类端口
下面的给出的语法是用来开启和关闭同类TCP和UDP端口
clip_image004
#21: 限制每个客户端IP与服务器的并发连接数。
你可以使用connlimit模块来做这样的限制,容许每个客户端主机建立3个SSH连接。则可以输入:
# iptables -A INPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above
3 -j REJECT
设置20个HTTP请求数:
# iptables -p tcp –syn –dport 80 -m connlimit –connlimit-above 20      –connlimit-mask 24 -j DROP
注释:
1.–connlimit-above 3 : 检测存在的连接数是否超过了三个。
2.–connlimit-mask 24 : Group hosts using the prefix length. For IPv4, this must be a number between (including) 0 and 32.
#22:如何同专业人士一样去使用iptables
要获取更多关于iptables的信息,请在命令行输入:man iptables,查看它的帮助手册。
你也可以使用下面的命令去查看帮助文档。
# iptables –h
要查看特定的命令和目标的帮助,则可输入:
# iptables -j DROP –h
#22.1:测试你的防火墙
查看端口是否开放,请输入:
# netstat –tulpn
查看TCP 80端口是否开放,输入:
# netstat -tulpn | grep :80
如果80端口没有开放,启动Apache,输入:
# service httpd start
确保iptables容许访问80端口:
# iptables -L INPUT -v -n | grep 80
或者用iptables为所有用户开放80端口:
# iptables -A INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT
# service iptables save
用telnet命令来查看是否防火墙容许连接80端口:
$ telnet www.cyberciti.biz 80
输出样例:
Trying 75.126.153.206…
Connected to www.cyberciti.biz.
Escape character is ‘^]’.
^]
telnet> quit
Connection closed.
你可以使用nmap来探测自己的服务器信息,使用下面的命令:
$ nmap -sS -p 80 www.cyberciti.biz
输出样例:
Starting Nmap 5.00 ( http://nmap.org ) at 2011-12-13 13:19 IST
Interesting ports on www.cyberciti.biz (75.126.153.206):
PORT   STATE SERVICE
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 1.00 seconds
我也建议你安装、使用sniffer(such as tcpdupm and ngrep)来测试你的防火墙设置。
总结:
这篇文章是写给新手Linux管理员的,只列出了基本的规则。你可以创建、构造更复杂的规则,这需要非常理解TCP /IP协议,可以通过修改sysctl.conf文件,对Linux的内核进行调优:
• 数据包状态检测.
•    Using connection tracking helpers.
• 网络地址转换.
•    2层过滤.
• 防火墙测试工具.
•    Dealing with VPNs, DNS, Web, Proxy, and other protocols.
建议朋友们阅读pdf版,免豆下载地址http://down.51cto.com/data/601985
样图:
clip_image005
clip_image006

文章出自:CCIE那点事 http://www.jdccie.com/ 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。 禁止全文转载。
本文标题:20个iptables例子
本文链接:http://www.jdccie.com/?p=1501转载请注明转自CCIE那点事
如果喜欢:点此订阅本站
  • 相关文章
  • 为您推荐
  • 各种观点

暂时还木有人评论,坐等沙发!
发表评论

您必须 [ 登录 ] 才能发表留言!