iptables 拒绝所有的连接,再指定 ip 连接? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
neworld07
V2EX    Linux

iptables 拒绝所有的连接,再指定 ip 连接?

  •  
  •   neworld07 2015-11-11 16:46:57 +08:00 10979 次点击
    这是一个创建于 3691 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt.
    要给服务器设置指定的 ip 可以连接.
    然后再拒绝所有的 ip 试探或连接?

    24 条回复    2015-11-21 04:31:35 +08:00
    fangdingjun
        1
    fangdingjun  
       2015-11-11 16:56:16 +08:00   2
    用搜索引擎能搜到很多 iptables 相关的文章,仔细研究一下你就明白了

    以下 3 条就行
    iptables -P INPUT DROP
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp -s 192.168.1.20 -j ACCEPT
    ryd994
        2
    ryd994  
       2015-11-11 21:51:00 +08:00
    @fangdingjun -P INPUT DROP 放最后,很多系统默认 iptables 是空的
    GNiux
        3
    GNiux  
       2015-11-12 08:21:10 +08:00 via iPhone
    @ryd994 没有关系吧。

    逻辑上,先禁再放开。
    ryd994
        4
    ryd994  
       2015-11-12 09:50:58 +08:00 via Android
    @GNiux ssh 当场阵亡
    adrianzhang
        5
    adrianzhang  
       2015-11-12 12:09:03 +08:00
    是要放最后的, iptables 规则是一条条解析的, drop 放第一条那就什么都进不去了。
    zho6
        6
    zho6  
       2015-11-12 12:52:49 +08:00
    分享我网站服务器上 iptables 脚本
    /sbin/iptables -F -t filter
    /sbin/iptables -F -t nat
    /sbin/iptables -P INPUT DROP
    /sbin/iptables -P OUTPUT ACCEPT
    /sbin/iptables -A INPUT -i lo -j ACCEPT
    /sbin/iptables -A INPUT -s 指定 IP -j ACCEPT
    /sbin/iptables -A INPUT -p icmp -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp -m multiport --ports 110,25,8010,8100,10800 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 65300:65400-j ACCEPT
    /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --syn -m ttl --ttl-eq 117 -j DROP
    /sbin/iptables -A INPUT -p tcp --syn -m length --length :40 -j DROP
    /sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    /sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
    /sbin/iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
    /sbin/iptables -A OUTPUT -p udp -j DROP
    zho6
        7
    zho6  
       2015-11-12 12:57:39 +08:00
    补充:
    /sbin/iptables -A INPUT -p tcp -m multiport --ports 110,25,8010,8100,10800 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp --dport 65300:65400 -j ACCEPT

    以上二条开多了端口,请根据需要增减
    65300:65400 这一段端口是 ftp passive 模式指定使用的一段端口 不开 ftp 就把这一行删除吧
    ryd994
        8
    ryd994  
       2015-11-12 13:20:33 +08:00 via Android
    @zho6 1.你应该使用系统自带的服务 比如 iptables-persist
    2. flush 之前先-P ACCEPT
    3. ESTABLISHED,RELATED 应该靠前,在 lo 后面就可以了
    4.那几个 syn 规则是什么用途?
    5.如果不是极其苛刻, output 一般不需要控制
    kmahyyg
        9
    kmahyyg  
       2015-11-12 13:25:35 +08:00
    谁能给一个 firewalld 的吗?
    zho6
        10
    zho6  
       2015-11-12 13:48:29 +08:00
    @ryd994
    我没有自带的 iptables 服务
    ESTABLISHED,RELATED 应该靠前,在 lo 后面就可以了 这个规定没有冲突 如果有冲突是有前后顺序的差别的 这个靠前靠后都可以
    syn 规则过滤一些提定常用 sys 攻击
    -A OUTPUT -p udp -j DROP 这是只禁了对外的 UDP 没有禁 TCP
    ryd994
        11
    ryd994  
       2015-11-12 14:02:49 +08:00
    @zho6 ……一般发行版都有的吧
    ESTABLISHED,RELATED 靠前是因为方便后面可以放更复杂的规则,性能更好。 lo 一般不需要过滤,所以直接允许

    @kmahyyg firewalld 使用默认的就好,自定义端口的话:
    在 /etc/firewalld/services/ 新建 服务.xml 如果要覆盖现有服务的话就从 /usr/lib/firewalld/services/复制一份过来
    内容一般这样就行:
    <?xml version="1.0" encoding="utf-8"?>
    <service>
    <port protocol="tcp" port="1234"/>
    </service>
    语法参考 man firewalld.service


    service firewalld reload
    firewall-cmd --add-service=服务
    确认结果没有问题之后,加 --permanent 再执行一次保存
    zho6
        12
    zho6  
       2015-11-12 14:11:28 +08:00
    受教了 原来还有这么容易的方法
    raysonx
        13
    raysonx  
       2015-11-12 15:02:08 +08:00
    @fangdingjun
    @ryd994
    @GNiux
    @adrianzhang
    把 INPUT 的默 policy 置 DROP ,哪天手一抽在 SSH 下行了 iptables -F 分分教做人。可以在 INPUT 的最後加一 DROP 或 REJECT 。
    我的是:
    第一先放行所有已建立的接,有利於性能:
    -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    然後放行 lo :
    -A INPUT -i lo -j ACCEPT
    接著放行放的服:
    -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT #SSH
    -A INPUT -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT #HTTPS
    -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT #HTTP
    然後放行 ICMP :
    -A INPUT -p icmp -j ACCEPT
    丢效的包:
    -A INPUT -m conntrack --ctstate INVALID -j DROP
    最後一用於禁止所有其他的包:
    -A INPUT -j REJECT --reject-with icmp-host-prohibited

    可以把所有放的服放在一自定的中,在以後放新服的候可以直接往那插而不用心插入的位置。
    raysonx
        14
    raysonx  
       2015-11-12 15:21:25 +08:00
    firewalld 多了。 firewalld 以 zone 位管理包,一 zone 可以包含一的卡或 IP 段。
    系默把你的卡置於 public zone ,而 public zone 默放行 ssh , dhcpv6-client 服,放 ICMP 封包。
    可以用 firewall-cmd --list-all 查默 zone 所有放的服。
    如果要放行 HTTP ,直接
    firewall-cmd --add-service http
    放行 HTTPS
    firewall-cmd --add-service http
    放行 SMTP
    firewall-cmd --add-service smtp
    上面的方式只是放行,行後立即生效,下次重 firewalld 後丢失。
    要永久保存需要加--permanent 。但是加--permanent 的命令不立即生效,你需要重新 reload 一下服
    firewall-cmd --reload
    或者 firewalld 重
    systemctl restart firewalld

    ---我是分割-----

    如果只某些服放某一段 IP 或者某卡,可以那卡或者 IP 段加入另一 zone ,然後服放那一 zone 。比如:
    eth1 加入 internal zone:
    firewall-cmd --zone internal --add-interface eth1 --permanent
    10.0.0.0/8 IP 段加入 internal zone:
    firewall-cmd --zone internal --add-source 10.0.0.0/8 --permanent
    放 samba 服 internal zone:
    firewall-cmd --zone internal --add-service samba --permanent
    重新 reload 一下服
    firewall-cmd --reload

    ---我是分割-----
    另外可以手加 iptables 。
    下面演示用直接加 iptables 的方法放行 HTTPS :
    firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 1 -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT #IPv4
    firewall-cmd --direct --add-rule ipv6 filter INPUT_direct 1 -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT #IPv6
    raysonx
        15
    raysonx  
       2015-11-12 15:21:44 +08:00
    @kmahyyg
    LazyZhu
        16
    LazyZhu  
       2015-11-12 15:54:52 +08:00
    @fangdingjun
    -A 改成 -I 就可以, 哈哈
    fangdingjun
        17
    fangdingjun  
       2015-11-12 16:03:36 +08:00
    看来没有人用 iptables-save, iptables-restore
    ryd994
        18
    ryd994  
       2015-11-12 16:23:55 +08:00
    @raysonx 没事 flush 干嘛,而且真要 flush 了重启就好。判断-i 比判断 state 要快多了,所以 lo 应该在 state 前面。我一般是把 NEW 全部放到一个单独的链里,不必每次都判断 NEW
    @fangdingjun 都在用,楼上我早就提过 iptables-persistant 服务了
    另外, firewalld 更容易管理
    raysonx
        19
    raysonx  
       2015-11-12 17:11:12 +08:00
    @ryd994 以前管理校器的候出情。重器需要找校和各种人可,然後大老跑到房去重。
    kmahyyg
        20
    kmahyyg  
       2015-11-12 17:51:21 +08:00
    @ryd994 我只想 drop ping 包或者特定 ip 包
    julyclyde
        21
    julyclyde  
       2015-11-12 18:04:19 +08:00
    要分清 结论性的 target 和 通过性的 target
    DROP 是结论; REJECT 也是结论。有结论之后就不会执行后面的内容了
    ryd994
        22
    ryd994  
       2015-11-12 23:52:29 +08:00 via Android
    @raysonx 你们这远程管理………
    服务器主板有些都自带远程,从机房跳板机进去就行

    @kmahyyg ping 可以在 allow icmp 里。更复杂的可以使用 firewalld rich language 。再不行可以 direct rule
    neworld07
        23
    neworld07  
    OP
       2015-11-21 04:30:01 +08:00
    @fangdingjun 很感谢你。你帮我解决了这个问题。
    最关键的一条:-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    之前因为没有了这一条规则导致服务器不能联网,虽然是指定连接了!

    再次感谢!
    neworld07
        24
    neworld07  
    OP
       2015-11-21 04:31:35 +08:00
    感谢大家的回复。该帖已经结贴!!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2543 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:40 PVG 20:40 LAX 04:40 JFK 07:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86