linux配置防火墙

centos6.5 防火墙开放80端口
iptables -I INPUT -p tcp –dport 80 -j ACCEPT //注意,dport前面是两个-,其中-I是指在防火墙INPUT表最前面插入该条规则-p 用来指定协议的 –dport指定端口
那么我们再看看怎么关闭80端口
iptables -I INPUT -p tcp –dport 80 -j REJECT //很明显,就是把最后的ACCEPT改为REJECT
那么问题来了,重启后,该条规则会在重启后失效,所以我们需要保存对防火墙规则的修改
service iptables save (还没试过行不行)
Centos7 用firewalld代替iptables了,所以在Centos7下,也可以这么写命令

开放80端口
firewall-cmd –permanent –add-port=80/tcp #执行之后会提示success

firewall-cmd --reload #执行这条语句后才能生效

或者

firewalld-cmd --permanent --add-service=httpd

取消80端口对外开放

firewall-cmd –permanent –remove-port=80/tcp

firewalld-cmd --permanent --remove-service=httpd

再来个有趣点的,我们只将80端口对外开放一分钟

firewalld-cmd --permanent --add-service=httpd --timeout=1m

现在我们试着把1566端口的请求转移到80端口

firewall-cmd --add-forward-port=port=1566:proto=tcp:toport=80

让我们更近一步,把端口请求转发到另一个主机上

firewall-cmd --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.3.92

如果没有意外的话,再次访问本地主机网页,发现并没有跳转到10.0.3.92去

这是因为我没哟没有开启防火墙的伪装功能,执行以下语句开启该功能就可以了

firewall-cmd --add-masquerade

这个功能怎么看开没开启呢(很明显,下面这个就没有)

firewall-cmd --zone=public --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client http ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: port=1566:proto=tcp:toport=80:toaddr=
	port=80:proto=tcp:toport=80:toaddr=10.0.3.92
  sourceports: 
  icmp-blocks: 
  rich rules: 

为什么上面加了一个--zone=public呢,这个值可以通过firewall-cmd --get-active-zone 查看

再来一个给力的,拒绝所有包有时候被DDoS攻击了之类的,就可以执行这条语句了。执行之后,ssh以及http等服务均无法从外部连接

firewall-cmd --panic-on

下面这条语句用于恢复正常

firewall-cmd --panic-off

看一下,防火墙目前允许那些服务通过

firewall-cmd --zone=public --list-services

看一下某个区域里面是否有某个接口

firewall-cmd --zone=public --query-interface=eth0

有没有注意到query这个词,于是我试了一下。还真的能查询

[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]#

有时候我们直接firewall-cmd --add-port=80/tcp,忘记加--permanent,但是实际上我们希望这条规则永久生效,应该如何呢

firewall-cmd --runtime-to-permanent

 

posted on 2017-10-25 18:06  标配的小号  阅读(206)  评论(0编辑  收藏  举报

导航