使用此简单脚本使用iptables创建自己的防火墙

我花了一些时间思考有关iptables的两件事:大多数正在寻找这些教程的人是初学者,其次,许多人已经在寻找相当简单且已经详细阐述的东西。

此示例适用于Web服务器,但您可以轻松添加更多规则并使其适应您的需求。

当您看到ip的“ x”更改时


#!/bin/bash

#我们清理iptables表-F iptables -X#我们清理NAT iptables -t nat -F iptables -t nat -X#修改PPPoE,PPP和ATM iptables的表-t mangle -F iptables -t mangle -X #策略我认为这对初学者来说是最好的方法,并且#仍然不错,我将解释所有输出,因为它们是传出的连接#输入我们会丢弃所有内容,并且任何服务器都不应转发。 iptables -P输入下降iptables -P输出接受iptables -P转发下降#Intranet LAN intranet = eth0 #Extranet wan Extranet = eth1#保持状态。 已连接(已建立)的所有内容都像这样保留:iptables -A INPUT -m状态--state已建立,相关-j接受#循环设备。 iptables -A INPUT -i lo -j ACCEPT#http,https,我们未指定接口,因为#我们希望它适用于所有iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp-dport 443 -j ACCEPT#仅在内部以及ip iptables范围内的ssh -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT#监视例如是否有zabbix或其他一些snmp服务iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet -dport 10050 -j ACCEPT#icmp,ping iptables -A INPUT -p icmp -s 192.168。 xx / 24-i $ intranet -j ACCEPT #mysql with postgres是端口5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh如果要发送一些邮件#iptables -A输出-p tcp --dport 25 -j接受#防欺骗09年07月2014日#SERVER_IP =“ 190.xxx”#服务器IP-服务器的真实局域网IP LAN_RANGE =“ 192.168.xx /您的网络或VLAN的21“#LAN范围#IP永远不要进入Extranet,如果我们有一个纯WAN接口,则将使用#逻辑,它永远不应通过该接口输入#LAN类型的流量SPOOF_IPS =“ 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 .16 / XNUMX“#默认操作-在任何规则与ACTION =” DROP“匹配时执行。#通过wan iptables与我的服务器的IP相同的数据包-A INPUT -i $ Extranet -s $ SERVER_IP -j $ ACTION# iptables -A OUTPUT -o $ Extranet -s $ SERVER_IP -j $ ACTION#与WAN的LAN范围有关的数据包,如果您有#任何特定的网络,我就这样说,但这是多余的,其中包含以下#规则iptables -A INPUT -i $ Extranet -s $ LAN_RANGE -j $ ACTION的iptables -A OUTPUT -o $ Extranet -s $ LAN_RANGE -j $ ACTION ## WAN不允许的所有SPOOF网络$ SPOOF_IPS做iptables -A输入-i $ Extranet -s $ ip -j $操作iptables -A输出-o $ Extranet -s $ ip -j $操作完成

一如既往,我一直在等待您的评论,请继续关注本博客,谢谢


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   HO2Gi

    它帮助我继续学习多一点的感谢。

    1.    布罗迪·戴勒

      不用客气,很高兴能为您提供帮助

  2.   泽维尔

    真的很抱歉,但是我有两个问题(一个是礼物gift):

    您是否打算使用此配置来运行Apache并关闭除SSH以外的其余部分?

    #我们清理桌子
    的iptables-F
    的iptables-X

    我们清理NAT

    iptables -t nat -F
    iptables -t nat -X

    iptables -A输入-p tcp –dport 80 -j接受

    仅在内部和此IP范围内使用ssh

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j ACCEPT

    第二个问题:在此示例中,SSH是否使用7659端口?

    第三,也是最后一个:此配置应保存在哪个文件中?

    非常感谢您的教程,可惜您是这样的新手,不能很好地利用它。

    1.    布罗迪·戴勒

      这是您从apache获取http的规则
      iptables -A输入-p tcp –dport 80 -j接受

      但您还需要声明删除默认策略(在脚本中)
      iptables -P输入滴
      iptables -P OUTPUT ACCEPT
      iptables -P转发掉

      这是因为如果您偏远,它将把您扔掉。
      iptables -A INPUT -m状态–状态已建立,相关-j接受

      如果7659是示例中该ssh的端口,默认情况下为22,尽管我建议您将端口更改为“不知名”
      伙计,我不知道,正如您想要的那样... firewall.sh并将其放置在rc.local(sh firewall.sh)中,以便它可以自动运行,这取决于您所使用的操作系统,在哪里有文件您可以直接放置规则。

  3.   杰格

    嘿,您的脚本很好,经过分析……。您知道我如何拒绝用户对特定网站的所有请求吗?…。 但是这个网站有很多服务器…。

    1.    布罗迪·戴勒

      我建议其他选择:
      1)您可以在您的DNS中创建一个假区域...
      2)您可以使用acl放置代理
      罪禁令
      对于iptables来说,您可能会喜欢...并非总是最好的选择(有更多方法)
      iptables -A INPUT -s 博客。desdelinux.ne -j 删除
      iptables -A 输出 -d 博客。desdelinux.net -j 删除

      告诉我是否有效

  4.   泽维尔

    感谢您的回答,一切都清除了。 我之所以问这个端口,是因为我对使用7659感到惊讶,因为专用端口始于49152,它可能会干扰某些服务或某些功能。
    再次感谢您所做的一切,太好了!

    问候。

  5.   原文

    BrodyDalle,我该如何与您联系? 您的脚本非常有趣。

    1.    布罗迪·戴勒
  6.   卡洛斯

    最后一行“ iptables -A输出-o $ Extranet -s $ ip -j $ ACTION”是否可以防止您自己的计算机进行欺骗? 还是有些中毒的数据包进入并可能与中毒的源一起离开,这就是为什么该规则也包含在OUTPUT中的原因?
    非常感谢您的澄清!!!

  7.   弗兰

    这是我自己的iptables脚本,非常完整:

    #franes.iptables.airoso
    #doc.iptables.airoso:用于旧版和nft的iptables
    #
    #防火墙端口
    ##########################
    #!/斌/庆典
    #
    #清除屏幕
    ##############################开始/etc/f-iptables/default.cfg |||||
    清除
    #留空行
    回音
    出口是=»»否=»回声»
    #您可以更改以允许访问的变量
    ######################变量用$ yes或$ no修改
    出口hayexcepciones =»$否»
    #有例外:$ yes允许例外主机,$ no禁用
    出口干草= = $否»
    #hayping:$是允许第三方ping,而$ no拒绝
    出口haylogserver =»$否»
    #haylogeosserver:$是,可以登录tcp $否,不能登录tcp
    ######
    ######################变量可通过添加“,”或范围为“:”来修改
    导出例外=»baldras.wesnoth.org»
    #例外允许来自防火墙的单个或多个主机或没有值
    导出日志服务器=丢弃,ipp,dict,ssh
    #数据包进入时记录的tcp服务器端口
    导出redserver = 0/0
    #redserver:服务器端口的网络最好是本地网络或几个ips
    导出客户端红色= 0/0
    #clientnet:客户端端口的网络优于所有网络
    出口servidortcp =丢弃,ipp,字典,6771
    #servidortcp:指定的tcp服务器端口
    导出serverudp =丢弃
    #udpserver:指定的udp服务器端口
    导出clientudp =域,bootpc,bootps,ntp,20000:45000
    #udp客户端:指定的udp客户端端口
    导出clienttcp =域,http,https,ipp,git,dict,14999:15002
    #tcp client:指定的tcp客户端端口
    /etc/f-iptables/default.cfg的############################### cfg |||||
    ##############################变量结尾
    导出防火墙= $ 1变量= $ 2
    if [“ $变量” =“ $ NULL”]; 然后获取/etc/f-iptables/default.cfg;
    else source / etc / f-iptables / $ 2; 科幻
    #############################,否则您将使用.cfg文件覆盖变量
    ############################################### ########################################
    导出防火墙= $ 1导出变量= $ 2
    ########################################自动系统变量
    如果[“ $防火墙” =“已断开”]; 然后回显防火墙断开;
    导出activateserver =»$否»activateclient =»$否»湿=»$否»;
    elif [“ $防火墙” =“客户端”];然后回显防火墙客户端;
    导出activateserver =»$ no»activateclient =»»湿=»$ no»;
    elif [“ $防火墙” =“服务器”]; 然后回显防火墙服务器;
    导出activateserver =»»activateclient =»$ no»湿=»$ no»;
    elif [“ $防火墙” =“客户端和服务器”]; 然后回显防火墙客户端和服务器;
    导出激活服务器=»»; 出口activateclient =»»;出口湿== $$»;
    elif [“ $ firewall” =“ permissive”]; 然后回显PERMISSIVE FIREWALL;
    导出activateserver =»$ no»activateclient =»$ no»湿=»»;
    其他
    $检查sudo echo iptables-legacy:
    $检查sudo iptables-legacy -v -L INPUT
    $检查sudo iptables-legacy -v -L OUTPUT
    $检查sudo echo iptables-nft:
    $检查sudo iptables-nft -v -L INPUT
    $检查sudo iptables-nft -v -L输出
    回波_____参数____ $ 0 $ 1 $ 2
    echo“不带参数的广播就是列出iptables。”
    echo“第一个参数(启用iptables):断开连接或客户端或服务器或客户端和服务器或允许的。”
    echo“第二个参数:(可选):默认的.cfg文件选择/etc/f-iptables/default.cfg”
    回声“变量设置:” $(ls / etc / f-iptables /)
    出口0; 科幻
    #################
    回音
    echo抛出$ 0断开连接或客户端或服务器或客户端和服务器或许可或变量,或者不使用参数列出iptables。
    echo $ 0文件内部包含一些可编辑变量。
    ################################以上变量已激活
    ###############################
    回声设置iptables变量
    回声激活变量
    回音
    ############################ iptables规则
    echo设置iptables-legacy
    sudo / usr / sbin / iptables-legacy -t过滤器-F
    须藤/ usr / sbin / iptables-legacy -t nat -F
    须藤/ usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filter -F
    须藤/ usr / sbin / ip6tables-legacy -t nat -F
    须藤/ usr / sbin / ip6tables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $例外情况-j ACCEPT> / dev / null
    $激活服务器sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服务器sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m state-状态已建立-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state建立状态-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-r​​eply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A输出-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $例外情况-j ACCEPT> / dev / null
    $激活sudo服务器/ usr / sbin / iptables-legacy -A输出-p udp -m多端口–体育$ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服务器sudo / usr / sbin / iptables-legacy -A输出-p tcp -m多端口–运动$ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A输出-p udp -m多端口–dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A输出-p tcp -m多端口–dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-r​​equest -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    echo iptables-legacy已启用
    回音
    回声设置iptables-nft
    sudo / usr / sbin / iptables-nft -t过滤器-F
    须藤/ usr / sbin / iptables-nft -t nat -F
    须藤/ usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t过滤器-F
    须藤/ usr / sbin / ip6tables-nft -t nat -F
    须藤/ usr / sbin / ip6tables-nft -t mangle -F
    须藤/ usr / sbin / ip6tables-nft -A输入-j DROP
    须藤/ usr / sbin / ip6tables-nft -A输出-j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A输入-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $例外情况-j ACCEPT> / dev / null
    $激活服务器sudo / usr / sbin / iptables-nft -A输入-p udp -m多端口–dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服务器sudo / usr / sbin / iptables-nft -A输入-p tcp -m多端口-dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state-状态已建立-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A输入-p tcp -m多端口–体育
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp类型的echo-r​​eply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A输出-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $例外-j ACCEPT> / dev / null
    $激活服务器sudo / usr / sbin / iptables-nft -A输出-p udp -m多端口–运动$ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服务器sudo / usr / sbin / iptables-nft -A输出-p tcp -m多端口–运动$ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A输出-p udp -m多端口–dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A输出-p tcp -m多端口–dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A输出-p icmp –icmp类型的echo-r​​equest -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A输出-j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft已启用
    回音
    $湿sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state -state建立状态-j ACCEPT> / dev / null
    $湿sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $湿sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m状态–状态已建立-j ACCEPT> / dev / null
    $湿sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $湿sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    #########################
    回显您抛出的错误$ 0 $ 1 $ 2
    #退出脚本
    退出0

  8.   路易斯·杜兰

    如果该防火墙将其用于我的网关并且在局域网中有一个乌贼,我将如何设置规则?