感觉这个25个命令挺常用的,而且有助于复习iptables,就写下来了。
原文连接地址: http://www.thegeekstuff.com/2011/06/iptables-rules-examples
25个最常用的iptables命令
乍一看,iptables可能有些神秘。
在这篇文章中,我已经复制/粘贴过来25个你最常用iptables命令。
在实际应用当中,你只需要针对实际遇到的问题对下面这些例子进行适当的调整即可。可以收藏起来以备不时之需哦!
为了便于参考,以下25个示例将以shell脚本的格式呈现出来。
1、清空已存在的规则
在你建立一套新的iptables规则时,你可能需要清空默认规则,或者已有规则,如下所示,使用iptables flush 命令可以满足你的需要:
iptables -F (or) iptables --flush
2、设置默认链规则
iptables命令默认规则是ACCEPT,设置INPUT,OUTPUT,FORWARD这些链的默认规则为DROP,命令如下:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
如果你为OUTOUT和INPUT这两条链设置默认规则为DROP,当你设置规则时就需要考虑设置两条,一条控制进入的,一条控制出去的。
在以下所有的示例中,我们都将设置两条规则,因为我们为OUTPUT和INPUT这两条链设置的默认规则为DROP。
如果你信任你的内部用户,你可以忽略上述示例中的最后一条。默认不丢弃所有出去的数据。在这种情况下,你只需要针对进入的数据进行设置,当然所有出去的数据都是被允许的。
注意:如果你不了解iptables的各个链,可以通过这个链接学习下基本知识iptables chains
3、阻断一个IP地址
如果你想在我们进行更深入的学习之前阻断一个IP地址,你可以键入以下命令。把“x.x.x.x“改变成你想要阻断的IP地址。
BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
如果你发现在日志文件中显示有一个固定的ip地址产生很多奇怪的活动,在你进行更深入的调查时,希望临时性的阻断此IP地址,那么此命令就是非常有用的。
你也可以通过简单的变化,来阻断此IP地址在eth0端口上所有基于TCP的连接:
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
4、允许接入的SSH连接
以下的命令允许在eth0接口上接入的ssh连接:
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
注意:如果你想理解规则中每个参数的意义,你可以访问此链接How to Add IPTables Firewall Rules
5、允许来自指定网段的SSH的接入连接
以下命令是允许来自192.168.100.0/24网段的SSH的接入连接:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
在以上的例子中,你也可以用全子网掩码192.168.100.0/255.255.255.0来代替192.168.100.0/24。
6、允许HTTP和HTTPS的入站连接
以下示例是允许入站的web服务连接(http服务端口为80):
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
以下示例是允许入站的安全的web服务连接(https服务端口为443):
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
7、使用多端口扩展减少配置条目
如果你允许对多个端口的入站请求,你可以使用多端口扩展功能,而不必为每个端口都建立一条规则,如下:
以下的示例是允许外部连接对于本机SSH,HTTP,HTTPS三种服务的访问。
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
8、允许本地主机SSH服务的出站连接
如果你想通过SSH连接外部主机,你可以这样做:
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
请注意,这两条规则和SSH的入站连接有些不同,在出站请求OUTPUT链中有NEW,ESTABLISHED两种状态,而入站时候只有ESTABLISHED一种状态,这是因为传输控制协议(TCP)的特点造成的,SSH的入站连接也是此特点。
9、允许SSH对指定网络的出站连接
下面的示例是仅允许SSH服务出站连接到192.168.100.0/24网络地址段内的主机:
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
10、允许对HTTPS服务的出站访问
下面的规则允许对HTTPS服务的出站访问,如果你允许你的用户可以使用WEB服务,那么这条规则是很有用的。如果你想在服务器上使用Wget命令在互联网上下载一些资源,那么这条命令也是起作用的。
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
注意:http服务是80端口,https是443端口
11、负载均衡WEB入站请求
你也可以使用防火墙负载均衡对于web服务的入站请求。
这里演示nth扩展。下面的示例负载均衡https服务至三个不同的ip地址,每第三个数据包开始做目标地址转换。(但是请注意他们的初始值packet不同,下面的例子也就第一条中的ip地址会接入三个请求,下面两条会依次递减一。此处笔者有些疑惑,man了下iptables也不是很清楚,尤其这个 --counter 0 的作用,如果大家比较理解nth,还请留言区留言,原文链接参考文章最底部)
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
12、允许外部主机PING通内部主机
下面的示例允许外部的用户PING通你内部的服务器:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
13、允许内部主机PING通外部主机
下面的示例允许你从内部PING通外部的服务器
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
14、允许本地环回地址的连接
你应该允许环回地址的连接,比如127.0.0.1地址的连接(以便TEST使用)
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
15、允许内部网络连接外部网络
如果你的防火墙服务器有两块网卡,一块eth0连接内网,一块eth1连接外网,使用下面的规则就可以放行内网向外网发起的连接请求(注意方向:内网—>外网):
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
16、允许对DNS服务的出站请求
下面的示例允许想外请求DNS服务:
iptables -A INPUT -p udp -d eth0 --sport 53 -j ACCEPT iptables -A OUTPUT -p udp -s eth0 --dport 53 -j ACCEPT
17、允许NIS连接
如何你正在使用NIS来管理你的用户账户,你应该方向NIS连接。尽管SSH已经被放行,如果你没有对NIS相关的ypbind服务放行,那么你的用户还是不能登录。
NIS服务的端口是动态的,当ypbind服务开始时分配端口。
首先用rpcinfo -p来查询实际使用的端口,下面的例子显示正在使用853和850端口。
rpcinfo -p | grep ypbind
也放行到111端口的入站请求:
iptables -A INPUT -p tcp --dport 111 -j ACCEPT iptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A INPUT -p tcp --dport 853 -j ACCEPT iptables -A INPUT -p udp --dport 853 -j ACCEPT iptables -A INPUT -p tcp --dport 850 -j ACCEPT iptables -A INPUT -p udp --dport 850 -j ACCEPT
上面的示例在ypbind重启之后将会失效,应该端口将会重新分配。有两个解决办法,第一,为你的NIS服务器静态配置IP地址,第二,写一个完美的shell脚本,从“rpcinfo -p”中动态抓取端口号,并在iptables中使用。
18、允许来自指定网段的RSYNC
下面的示例允许来自指定网段的RSYNC:
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
19、允许来自指定网段的对mysql服务的连接
如何你正在运行MySQL,一般来说你希望外部网络可以直连到mysql数据库。在多数情况下,在运行mysql服务器上同时还运行着Web服务。
然而,数据库管理员和程序开发人员可能通过安装在他们个人终端上的mysql客户端直连到数据库。在这种情况下,你就需要允许内部网络直连到数据库了。规则如下:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
20、放行Sendmail和Postfix Traffic服务
下面的规则放行Sendmail,Postfix Traffic邮件服务:
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
21、放行IMAP和IMAPS服务
下面的规则放行IMAP和IMAP2服务:
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
下面的规则方向IMAPs服务:
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
22、放行POP3和POP3s服务
放行POP3服务:
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
放行POP3s服务:
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
23、阻止DoS***
下面的规则将帮助你的服务器避免DoS(Denial of Service)***:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
在上面的例子中:
-m limit:声明使用limit扩展
-limit 25/minute:限制每分钟的服务请求数,可以根据你的实际需要进行调整
-limit-burst 100:这个是使用-limit 25/minute的前提条件,当总请求数达到100时开始执行每分钟25个请求数的限流
24、端口转发
下面的示例将访问端口442的连接路由至端口22。这个意味着ssh的入站连接可以发送至端口422和22。
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
如果你如上面示例所做,你也需要明确地放行对422端口的入站连接:
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
25、记录下丢弃的数据包
你可能希望去记录下所有的被拒绝的数据包,下面的规则应该卸载iptables的最下面。
首先,创建一个名称为LOGGING的心链:
iptables -N LOGGING
然后,确保其余的所有入站连接跳转到LOGGING链上,如下:
iptables -A INPUT -j LOGGING
随后,利用“log-prefix“来对所匹配的数据包进行注释,以免混淆:
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
最后,丢弃这些包:
iptables -A LOGGING -j DROP
以上25种iptables规则都遵循shell脚本的格式 iptables-rules。
由于个人能力有限,以上内容均为笔者个人理解,翻译过来只是希望更多的人看见,也有利于自己认真理解。
其实还是挺方便的,欢迎大家收藏!无意发现已经有很多国内前辈译过本文,不过还是推荐大家阅读原文。
原文链接如下:http://www.thegeekstuff.com/2011/06/iptables-rules-examples