Centos/Ubuntu下iptables配置规则

Centos

查看iptables是否运行,查看iptable运行状态

service iptables status

清除已有规则

iptables -F
iptables -X
iptables -Z

开放端口

#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#允许本地访问MySQL3306端口,禁止外部访问
iptables -A INPUT -p tcp -s 127.0.0.1 –dport 3306 -j ACCEPT
iptables -A INPUT -p tcp –dport 3306 -j DROP
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp –dport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#允许ping
iptables -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT  (注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT

查看已添加的iptables规则

iptables -L -n

将所有iptables以序号标记显示

iptables -L -n –line-numbers

删除INPUT里序号为3的规则

iptables -D INPUT 3

保存规则
CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:

chkconfig –level 345 iptables on

保存

service iptables save

屏蔽IP

#如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。
#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP

Ubuntu

1.查看iptables列表

  1. iptables -L

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

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

  1. iptables -L -v

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

  1. iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

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

  1. 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,命令则修改成:

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

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

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

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

  1. 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的信息
这时我们想把第四条删掉,这里就用到了

  1. iptables -L -n –line-numbers

这个命令将所有iptables以序号标记显示
这时我们要删除Chain INPUT里序号为3的规则,执行:

  1. iptables -D INPUT 4

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

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

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

  1. iptables -I INPUT 5 -m limit –limit 5/min -j LOG –log-prefix “iptables denied: ” –log-level 7

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

  1. 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:

  1. iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT

ping别人:

  1. iptables -A OUTPUT -p icmp –icmp

注意要放到 DROP之前。

 

此条目发表在日记分类目录。将固定链接加入收藏夹。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据