|
本文将给出25个iptables常用规则示例,这些例子为您提供了些基本的模板,您可以根据特定需求对其进行修改调整以达到期望。 格式 iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]参数 示例1. 删除已有规则 在开始创建iptables规则之前,你也许需要删除已有规则。命令如下: iptables -F9 F) U1 b/ D- f(or) iptables –flush; I& B- q; b- ^ 2.设置链的默认策略 链的默认政策设置为”ACCEPT”(接受),若要将INPUT,FORWARD,OUTPUT链设置成”DROP”(拒绝),命令如下: iptables -P INPUT DROP! v4 j" V8 Q0 G: Siptables -P FORWARD DROP* l1 w8 w4 L$ m$ A8 |, i9 i2 X iptables -P OUTPUT DROP 当INPUT链和OUTPUT链都设置成DROP时,对于每一个防火墙规则,我们都应该定义两个规则。例如:一个传入另一个传出。在下面所有的例子中,由于我们已将DROP设置成INPUT链和OUTPUT链的默认策略,每种情况我们都将制定两条规则。当然,如果你相信你的内部用户,则可以省略上面的最后一行。例如:默认不丢弃所有出站的数据包。在这种情况下,对于每一个防火墙规则要求,你只需要制定一个规则——只对进站的数据包制定规则。 3. 阻止指定IP地址例:丢弃来自IP地址x.x.x.x的包 BLOCK_THIS_IP="x.x.x.x"iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP 注:当你在log里发现来自某ip地址的异常记录,可以通过此命令暂时阻止该地址的访问以做更深入分析 例:阻止来自IP地址x.x.x.x eth0 tcp的包 iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP5 W/ m3 ]2 _' y5 j+ I1 ^iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP 4. 允许所有SSH的连接请求 例:允许所有来自外部的SSH连接请求,即只允许进入eth0接口,并且目标端口为22的数据包 iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT8 \) _; j! z' c& C6 Q3 k! d- niptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 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- P; ]! Y9 r2 ^4 J. Jiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT0 G* t) T6 I4 w1 _$ ^/ [! R, j 6.允许http和https的连接请求 例:允许所有来自web - http的连接请求 iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT5 `8 ^( ~+ \/ z$ @! G, H 例:允许所有来自web - https的连接请求 iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT7 P8 d4 O( b9 D( a2 O 7. 使用multiport 将多个规则结合在一起 允许多个端口从外界连入,除了为每个端口都写一条独立的规则外,我们可以用multiport将其组合成一条规则。如下所示: 例:允许所有ssh,http,https的流量访问 iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT) @* p9 N" G3 p5 L2 h1 h 8. 允许从本地发起的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: ]1 i" M. {1 m+ ]* G2 Z 请注意,这与允许ssh连入的规则略有不同。本例在OUTPUT链上,我们允许NEW和ESTABLISHED状态。在INPUT链上,我们只允许ESTABLISHED状态。ssh连入的规则与之相反。 9. 仅允许从本地发起到一个指定的网络域的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 ACCEPT9 z2 C( h% E4 I' _. i5 Giptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 10. 允许从本地发起的HTTPS连接请求 下面的规则允许输出安全的网络流量。如果你想允许用户访问互联网,这是非常有必要的。在服务器上,这些规则能让你使用wget从外部下载一些文件 iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT5 q7 T( Z, ~; ? 注:对于HTTP web流量的外联请求,只需要将上述命令中的端口从443改成80即可。 11. 负载平衡传入的网络流量使用iptables可以实现传入web流量的负载均衡,我们可以传入web流量负载平衡使用iptables防火墙规则。. K1 \9 i( g9 Z8 b% L+ i- D 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 nth将HTTPS流量负载平衡至三个不同的ip地址。 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:4438 ]& ~# v$ H' _: I2 }! h& q) v 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:4436 m# G! {0 F/ r3 P- L 12. 允许外部主机ping内部主机iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT o+ t6 Z& I! ?) i$ @! K1 O iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT 13. 允许内部主机ping外部主机iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT; j' c0 W I+ V* L- n 14. 允许回环访问 例:在服务器上允许127.0.0.1回环访问。 iptables -A INPUT -i lo -j ACCEPT5 M8 E6 |& m S6 l% piptables -A OUTPUT -o lo -j ACCEPT 15. 允许内部网络域外部网络的通信 防火墙服务器上的其中一个网卡连接到外部,另一个网卡连接到内部服务器,使用以下规则允许内部网络与外部网络的通信。此例中,eth1连接到外部网络(互联网),eth0连接到内部网络(例如:192.168.1.x)。 iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT# S5 m4 b% h& j$ A% C- A9 n9 f1 b9 x16. 允许出站的DNS连接iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT2 U' Z8 q. @! ~, Y" g% C* _' S 17. 允许NIS连接 如果你使用NIS管理用户帐户,你需要允许NIS连接。如果你不允许NIS相关的ypbind连接请求,即使SSH连接请求已被允许,用户仍然无法登录。NIS的端口是动态的,先使用命令rpcinfo –p来知道端口号,此例中为853和850端口。 rpcinfo -p | grep ypbind4 h$ u4 d. @; j! h& l! u例:允许来自111端口以及ypbind使用端口的连接请求 iptables -A INPUT -p tcp --dport 111 -j ACCEPTiptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A INPUT -p tcp --dport 853 -j ACCEPT3 Q9 I8 E }8 Y 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之后端口将不同,上述命令将无效。有两种解决方案:1)使用你NIS的静态IP 2)编写shell脚本通过“rpcinfo - p”命令自动获取动态端口号,并在上述iptables规则中使用。 18. 允许来自指定网络的rsync连接请求例:允许来自网络192.168.101.0/24的rsync连接请求 iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT" S: G f/ T' m- `, y( B 19. 允许来自指定网络的MySQL连接请求 很多情况下,MySQL数据库与web服务跑在同一台服务器上。有时候我们仅希望DBA和开发人员从内部网络(192.168.100.0/24)直接登录数据库,可尝试以下命令: iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT 20. 允许Sendmail, Postfix邮件服务 Sendmail和postfix都使用了25端口,因此我们只需要允许来自25端口的连接请求即可。 iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT/ B6 l7 Q1 q0 n+ W, A& ziptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT 21. 允许IMAP和IMAPS 例:允许IMAP/IMAP2流量,端口为143 iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT; |! }/ g7 ^/ H' e' w9 Biptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT 例:允许IMAPS流量,端口为993 iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT; ^4 l9 A6 D. k. S1 uiptables -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( y8 p- Q; h7 t. V( L3 G Z$ fiptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT5 D, }; [& l/ a" [# c" O 例:允许POP3S访问 iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT 23. 防止DoS攻击iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT 上述例子中: 24. 端口转发 例:将来自422端口的流量全部转到22端口。 这意味着我们既能通过422端口又能通过22端口进行ssh连接。启用DNAT转发。 iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22) E* E, r8 w( b- b; S除此之外,还需要允许连接到422端口的请求 iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT( i5 \7 ~) Y" R. k; X+ Fiptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT6 u% `0 k2 K/ ~9 R6 x; s 25. 记录丢弃的数据表 第一步:新建名为LOGGING的链 iptables -N LOGGING0 ]( e5 h, R, m第二步:将所有来自INPUT链中的数据包跳转到LOGGING链中 iptables -A INPUT -j LOGGING第三步:为这些包自定义个前缀,命名为”IPTables Packet Dropped” iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7. j: E5 G9 v% X1 b" X7 q第四步:丢弃这些数据包 iptables -A LOGGING -j DROP" J; J9 N5 j( c3 k {7 n |
微信公众号
手机版