30个iptables常用示例

格式

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

◎官网:https://netfilter.org

选项

  • -P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)

  • -t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表

  • -F 清空规则链

  • -L 查看规则链

  • -A 在规则链的末尾加入新规则

  • -I num 在规则链的头部加入新规则

  • -D num 删除某一条规则

  • -s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。

  • -d 匹配目标地址

  • -i 网卡名称 匹配从这块网卡流入的数据

  • -o 网卡名称 匹配从这块网卡流出的数据

  • -p 匹配协议,如tcp,udp,icmp

  • --dport num 匹配目标端口号

  • --sport num 匹配来源端口号

表名包括:

  • raw连接跟踪(Connection Tracking),如:网址过滤。

  • Raw表在netfilter框架中非常靠前的表,基本就是用来干一件事,通过 NOTRACK给不需要被连接跟踪的包打标记,也就是说,如果一个连接遇到了-j NOTRACK,conntrack 就不会跟踪该连接,raw的优先级大于mangle, nat, filter,包含PREROUTINGOUTPUT链。所以可以对收到的数据包在连接跟踪前进行处理。

  • mangle包处理(Packet Mangling),数据包修改(QOS),用于实现服务质量。

  • 这个表有五个内建的链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。mangle包操作分别在这5个链中的不同位置上执行,其中PREROUTING在包进入防火墙之后、路由判断之前,POSTROUTING是在所有路由判断之后,OUTPUT在确定包的目的之前,INPUT在包被路由到本地之后以及在用户空间的程序看到它之前,FORWARD在最初的路由判断之后、最后一次更改包的目的之前。注意mangle表不能做任何NAT操作,它只是改变包的TTL、TOS或MARK,而不是其源或目的地址。NAT是在nat表中操作的。

  • nat地址转换(NAT),用于网关路由器。

  • 这个表有三个内建的链:PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址。如果需要的话,OUTPUT链会改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。

  • filter包过滤(Packet Filtering),用于防火墙规则。

    这个表有三个内建的链:FORWARD链过滤所有不是本地产生的并且目的地不是本地的包,而INPUT恰恰针对那些目的地是本地的包。OUTPUT是用来过滤所有本地生成的包的。

  • 30个iptables常用示例

规则链名包括:

  • INPUT链应用在本地防火墙收到远程数据包(入站)时

  • OUTPUT链应用在本地防火墙向外发送数据包(出站)时

  • PORWARD链应用在网络防火墙(针对SNAT/DNAT)中的相互数据包(转发)时

  • PREROUTING链应用在对数据包作路由选择之前时

  • POSTOUTING链应用在对数据包作路由选择之后时

    30个iptables常用示例

动作包括:

  • ACCEPT:允许数据包通过,接收数据包

  • DROP:直接丢弃数据包,不给任何回应信息

  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息。

  • SNAT:源地址转换。在进入路由层面的route之后,出本地的网络栈之前,改写源地址,目标地址不变,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送出去时候的源地址,并发送给主机。解决内网用户用同一个公网地址上网的问题。
    MASQUERADE,是SNAT的一种特殊形式,适用于像adsl这种临时会变的ip上

  • DNAT:目标地址转换。和SNAT相反,IP包经过route之前,重新修改目标地址,源地址不变,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机。可以隐藏后端服务器的真实地址。(感谢网友提出之前这个地方与SNAT写反了)
    REDIRECT:是DNAT的一种特殊形式,将网络包转发到本地host上(不管IP头部指定的目标地址是啥),方便在本机做端口转发,重定向、映射、透明代理。

  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

除去最后一个LOG,前3条规则匹配数据包后,该数据包不会再往下继续匹配了,所以编写的规则顺序极其关键。

数据包在用户空间的状态

NEW状态

NEW状态表示新发出请求,且连接追踪文件中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求。意思就是,这是conntrack模块看到的某个连接的第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。

ESTABLISHED状态

NEW状态之后,连接追踪文件中为其建立的条目失效之前期间内所进行的通信状态都为ESTABLISHED状态。表示双方已经建立连接了,conntrack会注意到两个方向上的数据传输,在连接追踪文件中的ESTABLISHED状态的条目失效之前,如果这个连接的双方再次发起连接,conntrack会直接匹配其为ESTABLISHED状态,直到条目失效,再次发起连接就会认为是NEW状态。

处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。

RELATED状态

RELATED状态表示相关联的连接,什么意思呢?当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED的了,也就是相关联的连接,当然前提是conntrack模块要能理解RELATED

那这个状态有什么用呢?其实是专门为一些特殊协议设定的,比如FTP是个很好的例子,FTP有两个端口,一个是发送指令的端口21,一个是发送数据的端口20(主动模式),所以FTP协议就是RELATED的,指令连接跟数据连接之间是相关联的。(有兴趣看看FTP章节就明白为什么需要RELATED)还有其他的例子,比如,通过IRCDCC连接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。

INVALID状态

INVALID状态说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP错误信息。一般地,我们DROP这个状态的任何东西。

PS:这些状态可以一起使用(最常用就是NEWESTABLISHED组合使用),以便匹配数据包。这可以使我们的防火墙非常强壮和有效。以前,我们经常需要打开1024以上的所有端口来放行应答的数据。现在,有了状态机制,就不需再这样了。因为我们可以只开放那些有应答数据的端口,其他的都可以关闭。这样就安全多了。

30个iptables常用示例

30个iptables常用示例

30个iptables常用示例

查看iptable连接状态工具:iptstate

$ yum install iptstate

$ iptstate -t

▼2小时玩转iptables


1. 删除已有规则

在开始创建iptables规则之前,你也许需要删除已有规则。

  • 命令如下:

  • iptables -F

  • (or)

  • iptables –flush

2.设置链的默认策略

链的默认政策设置为”ACCEPT”(接受),若要将INPUT,FORWARD,OUTPUT链设置成”DROP”(拒绝),命令如下:

  • iptables -P INPUT DROP

  • iptables -P FORWARD DROP

  • iptables -P OUTPUT DROP

当INPUT链和OUTPUT链都设置成DROP时,对于每一个防火墙规则,我们都应该定义两个规则。例如:一个传入另一个传出。在下面所有的例子中,由于我们已将DROP设置成INPUT链和OUTPUT链的默认策略,每种情况我们都将制定两条规则。当然,如果你相信你的内部用户,则可以省略上面的最后一行。例如:默认不丢弃所有出站的数据包。在这种情况下,对于每一个防火墙规则要求,你只需要制定一个规则——只对进站的数据包制定规则。

3. 阻止指定IP地址

例:丢弃来自IP地址x.x.x.x的包

  • iptables -A INPUT -s x.x.x.x -j DROP

  • 注:当你在log里发现来自某ip地址的异常记录,可以通过此命令暂时阻止该地址的访问以做更深入分析

例:阻止来自IP地址x.x.x.x eth0 tcp的包

  • iptables -A INPUT -i eth0 -s x.x.x.x -j DROP

  • iptables -A INPUT -i eth0 -p tcp -s x.x.x.x -j DROP

4. 允许所有SSH的连接请求

例:允许所有来自外部的SSH连接请求,即只允许进入eth0接口,并且目标端口为22的数据包

  • 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

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


  • iptables -I INPUT -p tcp --dport 22 -j DROP

  • iptables -I INPUT -p tcp --dport 22 -s 10.xx.xx.xx -j ACCEPT // 只允许从中控机ssh登陆

6.允许http和https的连接请求

例:允许所有来自web - http的连接请求

  • 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的连接请求

  • 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. 使用multiport 将多个规则结合在一起

允许多个端口从外界连入,除了为每个端口都写一条独立的规则外,我们可以用multiport将其组合成一条规则。如下所示: 例:允许所有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

  • 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状态。在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 ACCEPT

  • iptables -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 ACCEPT

  • iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

注:对于HTTP web流量的外联请求,只需要将上述命令中的端口从443改成80即可。

11. 负载平衡传入的网络流量

使用iptables可以实现传入web流量的负载均衡,我们可以传入web流量负载平衡使用iptables防火墙规则。 例:使用iptables nth将HTTPS流量负载平衡至三个不同的ip地址。

  • 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内部主机

  • iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

  • 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

14. 允许回环访问

例:在服务器上允许127.0.0.1回环访问。

  • iptables -A INPUT -i lo -j ACCEPT

  • iptables -A OUTPUT -o lo -j ACCEPT

15. 允许内部网络域外部网络的通信

防火墙服务器上的其中一个网卡连接到外部,另一个网卡连接到内部服务器,使用以下规则允许内部网络与外部网络的通信。此例中,eth1连接到外部网络(互联网),eth0连接到内部网络(例如:192.168.1.x)。

  • iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16. 允许出站的DNS连接

  • iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

  • iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

17. 允许NIS连接

如果你使用NIS管理用户帐户,你需要允许NIS连接。如果你不允许NIS相关的ypbind连接请求,即使SSH连接请求已被允许,用户仍然无法登录。NIS的端口是动态的,先使用命令rpcinfo –p来知道端口号,此例中为853和850端口。 rpcinfo -p | grep ypbind 例:允许来自111端口以及ypbind使用端口的连接请求

  • 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之后端口将不同,上述命令将无效。有两种解决方案: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 ACCEPT

  • iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

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 ACCEPT

  • iptables -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

  • iptables -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

  • iptables -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

  • 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攻击

  • iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

  • 上述例子中:

  • -m limit: 启用limit扩展

  • –limit 25/minute: 允许最多每分钟25个连接(根据需求更改)。

  • –limit-burst 100: 只有当连接达到limit-burst水平(此例为100)时才启用上述limit/minute限制。

防止服务器被人当肉鸡主动DDOS别人的攻击

  • iptables -A OUTPUT -s 0.0.0.0/0 -d 0.0.0.0/0 -m state --state established -j ACCEPT

  • iptables -P OUTPUT DROP
    大概意思就是只允许已经建立网络连接的用户从OUTPUT出去,针对所有的主机和协议。也就是说你的主机是不允许主动向外发送数据包的,只有别人请求自己时才可以往外发送数据包,避免DDOS别人。当然,这么设定之后是你连ping外部主机和上网都是无法进行的。

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

除此之外,还需要允许连接到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. 记录丢弃的数据表

第一步:新建名为LOGGING的链

  • iptables -N LOGGING

第二步:将所有来自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

第四步:丢弃这些数据包

  • iptables -A LOGGING -j DROP

26.查看iptables规则

iptables -nvL --line-number

    • -L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数

    • -n 不对ip地址进行查,加上这个参数显示速度会快很多

    • -v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口

    • –line-number 显示规则的序列号,这个参数在删除或修改规则时会用到

    27. 添加iptables规则

    添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部
    例如:
    当前规则:

    [root@test ~]# iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    DROP       all  --  192.168.1.4          0.0.0.0/0

    添加一条规则到尾部:

    [root@test ~]# iptables -A INPUT -s 192.168.1.5 -j DROP

    再插入一条规则到第三行:

    [root@test ~]# iptables -I INPUT 3 -s 192.168.1.3 -j DROP

    查看:

    [root@test ~]# iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    DROP       all  --  192.168.1.3          0.0.0.0/0
    4    DROP       all  --  192.168.1.4          0.0.0.0/0
    5    DROP       all  --  192.168.1.5          0.0.0.0/0

    可以看到192.168.1.3插入到第三行,而原来的第三行192.168.1.4变成了第四行。

    28. 删除iptables规则

    删除用-D参数

    删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):

    [root@test ~]# iptables -D INPUT -s 192.168.1.5 -j DROP

    有时候有些规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number查看出该条规则的行号,再通过行号删除

    [root@test ~]# iptables -nv --line-number
    iptables v1.4.7: no command specified
    Try `iptables -h' or 'iptables --help' for more information.
    [root@test ~]# iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    DROP       all  --  192.168.1.3          0.0.0.0/0

    删除第二行规则

    [root@test ~]# iptables -D INPUT 2

    29. iptables备份与恢复

    选项

    -c:指定要保存的iptables表时,保存当权的数据包计算器和字节计数器的值;
    -t:指定要保存的表的名称。

    备份:
    [root@test ~]# service iptables save
    [root@test ~]# iptables-save > iptables

    恢复:
    [root@test ~]# iptables-restore < iptables

    30. iptables脚本示例

    #!/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攻击 轻量
    #######################FORWARD链###########################
    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
    #######################################################################
    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是我的机子,全部放行!
    ############################完#########################################


    #######################################################################
    #!/bin/bash
    #this is a iptables rule script
    ####################变量定义####################
    eth0="172.16.16.1"
     #外网接口地址
    eth1="192.168.10.1"
     #内网接口地址
    ip="192.168.10.0/24"
     #内网地址范围段
    website="192.168.10.2"
     #发布的网站地址
    mode="/sbin/modprobe"
     #modprobe命令的路径
    ctl="/sbin/sysctl"
     #sysctl命令路径
    ipt="/sbin/iptables"
     #iptables命令路径
    ####################加载内核模块####################
    $mode ip_tables
    $mode ip_conntrack
    $mode iptable_filter
    $mode iptable_mangle
    $mode iptable_nat
    $mode ipt_LOG
    $mode ipt_limit
    $mode ipt_state
    $mode ip_conntrack
     #必选模块
    $mode ipt_iprange
    $mode xt_tcpudp
    $mode xt_multiport
    $mode xt_mac
    $mode ip_nat_ftp
     #可选模块
    ####################调整PROC参数 ####################
    $ctl -w net.ipv4.ip_forward=1 > /dev/null
     #打开路由转发功能
    $ctl -w net.ipv4.ip_default_ttl=128 > /dev/null
     #修改icmp响应超时
    $ctl -w net.ipv4.icmp_echo_ignore_all=1 > /dev/null
     #拒绝响应icmp请求
    $ctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
     #拒绝响应icmp广播
    $ctl -w net.ipv4.tcp_syncookies=1 > /dev/null
     #启用syn、cookie机制
    $ctl -w net.ipv4.tcp_syn_retries=3 > /dev/null
     #最大syn请求重试次数
    $ctl -w net.ipv4.tcp_synack_retries=3 > /dev/null
     #最大ack确认重试次数
    $ctl -w net.ipv4.tcp_fin_timeout=60 > /dev/null
     #tcp连接确认重试次数
    $ctl -w net.ipv4.tcp_max_syn_backlog=3200 > /dev/nullsyn
     #请求的队列长度
    ####################默认规则定义####################
    $ipt -t filter -F
    $ipt -t nat -F
    $ipt -t mangle -F
    $ipt -t raw -F
     #清空四个表中的所有规则
    $ipt -P INPUT DROP
    $ipt -P FORWARD DROP
    $ipt -P OUTPUT DROP
     #设置filter表中的默认规则
    ####################自定义规则定义####################
    $ipt -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
    $ipt -A OUTPUT-s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
    $ipt -A INPUT -p icmp --icmp-type 0 -j ACCEPT
    $ipt -A INPUT -s 172.16.16.1 -d 192.168.10.1 -p tcp --dport 22 -j ACCPET
    $ipt -A OUTPUT -d 172.16.16.1 -p tcp --sport 22 -j ACCPET

    #######################################################################
    # 个人网站iptables常用配置
    # Generated by iptables-save v1.4.21 on Wed May  1 12:50:30 2019
    *filter
    :INPUT DROP [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [885:1654106]
    :syn-flood - [0:0]
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 20000:30000 -j ACCEPT
    -A INPUT -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT
    -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
    -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
    -A syn-flood -j REJECT --reject-with icmp-port-unreachable
    COMMIT
    # Completed on Wed May  1 12:50:30 2019

    网上整理的iptables常用规则示例,供参考使用。 

    参考:

    anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/3001.html | ☆★★每天进步一点点,加油!★★☆ | 

    您可能还感兴趣的文章!

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注