Ubuntu Server 12.04 配置防火墙iptables

iptables默认已经被安装上了,但如果不配置规则,默认是允许所有的流量的。
(文中所有操作都是在root用户下操作的)
对于防火墙的设置,一般有两种策略:一种是允许所有端口,只是阻止一些不安全的或者容易被利用的端口;
另外一种是先屏蔽所有的端口,只允许指定的端口。这里使用的是第二种原则。
1.查看iptables列表

iptables -L

如果是刚建立的服务器是没有规则的:

想查看更详细的一些信息可以用:

iptables -L -v 

2.入口规则
1)允许建立会话接受流量(入)

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

2)在指定端口上允许入站流量 
如果您是通过SSH来远程工作,我们先允许所有的ssh流量(默认22,如果有修改请明确端口号)入站。

iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT 

命令解析:
-A, --append  添加一条新规则
-P, --policy 策略
-i, --in-interface
-j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE等
eth0 指定网卡 (一般服务器都有多个网卡)

这里如果ssh端口手动修改后,比如说是9000,命令则修改成:

iptables -A INPUT -p tcp -i eth0 --dport 9000 -j ACCEPT

我们再加入一条开入网站80端口的规则试试:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT

如果添加的开放端口很多的话也可以用一条指定来完成:

iptables -A INPUT -p tcp -m multiport --dport 80,9000 -j ACCEPT  

这条指定就开放了80,9000两个端口,多个端口之间用,分隔。
3)添加回环端口(loopbakc)规则 
iptables -A INPUT -i lo -j ACCEPT
4)阻断流量
iptables -A INPUT -j DROP 
一旦一条规则对一个包进行了匹配,其他规则不再对这个包有效。所以我们在最后做个阻断,如果不满足上述规则就阻断。
保存:
iptables-save
3.编辑规则
在进行完上述操作后,我们看一下iptables的信息

这时我们想把第四条删掉,这里就用到了

iptables -L -n --line-numbers

这个命令将所有iptables以序号标记显示

这时我们要删除Chain INPUT里序号为3的规则,执行:

iptables -D INPUT 4

有删除肯定有插入啊,如果我们想在序号1后面插入一条的新的规则怎么办?
很简单,把上面的新增命令中的-A改成-I,在INPUT后面指定行号就可以了,比如:

iptables -I INPUT 1 -p tcp -i eth0 --dport 1433 -j ACCEPT

4.日志
默认流量是不被记录的,如果你需要记录被丢弃的包的话,执行

iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 

5.备份与恢复
保存您的防火墙规则到一个文件 

iptables-save > /etc/iptables.up.rules 

设置开机自动启动
编辑/etc/network/interfaces
动态ip位置

 
  1. auto eth0

  2. iface eth0 inet dhcp

  3. pre-up iptables-restore < /etc/iptables.up.rules

静态ip位置

 
  1. auto eth0

  2. iface eth0 inet static

  3. address 8.8.8.8

  4. netmask 255.255.255.224

  5. gateway 8.8.8.4

  6. pre-up iptables-restore < /etc/iptables.up.rules

  7. auto eth1

  8. iface eth1 inet static

  9. address 192.168.1.10

  10. netmask 255.255.255.0

附:
这时我们配置完成后发现机器比外面是没法进行ping命令的。
如果需要的话须进行下列配置:
被ping:

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

ping别人:

iptables -A OUTPUT -p icmp --icmp

注意要放到 DROP之前。

猜你喜欢

转载自blog.csdn.net/zhangbaoqiang1/article/details/81409885
今日推荐