
rt.
要给服务器设置指定的 ip 可以连接.
然后再拒绝所有的 ip 试探或连接?
1 fangdingjun 2015-11-11 16:56:16 +08:00 用搜索引擎能搜到很多 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 |
2 ryd994 2015-11-11 21:51:00 +08:00 @fangdingjun -P INPUT DROP 放最后,很多系统默认 iptables 是空的 |
5 adrianzhang 2015-11-12 12:09:03 +08:00 是要放最后的, iptables 规则是一条条解析的, drop 放第一条那就什么都进不去了。 |
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 |
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 就把这一行删除吧 |
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 一般不需要控制 |
9 kmahyyg 2015-11-12 13:25:35 +08:00 谁能给一个 firewalld 的吗? |
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 |
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 再执行一次保存 |
12 zho6 2015-11-12 14:11:28 +08:00 受教了 原来还有这么容易的方法 |
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 可以把所有放的服放在一自定的中,在以後放新服的候可以直接往那插而不用心插入的位置。 |
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 |
16 LazyZhu 2015-11-12 15:54:52 +08:00 @fangdingjun -A 改成 -I 就可以, 哈哈 |
17 fangdingjun 2015-11-12 16:03:36 +08:00 看来没有人用 iptables-save, iptables-restore |
18 ryd994 2015-11-12 16:23:55 +08:00 @raysonx 没事 flush 干嘛,而且真要 flush 了重启就好。判断-i 比判断 state 要快多了,所以 lo 应该在 state 前面。我一般是把 NEW 全部放到一个单独的链里,不必每次都判断 NEW @fangdingjun 都在用,楼上我早就提过 iptables-persistant 服务了 另外, firewalld 更容易管理 |
21 julyclyde 2015-11-12 18:04:19 +08:00 要分清 结论性的 target 和 通过性的 target DROP 是结论; REJECT 也是结论。有结论之后就不会执行后面的内容了 |
22 ryd994 2015-11-12 23:52:29 +08:00 via Android |
23 neworld07 OP @fangdingjun 很感谢你。你帮我解决了这个问题。 最关键的一条:-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 之前因为没有了这一条规则导致服务器不能联网,虽然是指定连接了! 再次感谢! |
24 neworld07 OP 感谢大家的回复。该帖已经结贴!! |