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

iptables -L

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


ubuntu iptables 命令 ubuntu配置iptables_服务器


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


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的信息


ubuntu iptables 命令 ubuntu配置iptables_root用户_02


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


iptables -L -n --line-numbers

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


ubuntu iptables 命令 ubuntu配置iptables_端口号_03


这时我们要删除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位置


auto eth0 
iface eth0 inet dhcp 
pre-up iptables-restore < /etc/iptables.up.rules

静态ip位置


auto eth0
iface eth0 inet static
address 8.8.8.8
netmask 255.255.255.224
gateway 8.8.8.4
pre-up iptables-restore < /etc/iptables.up.rules
auto eth1
iface eth1 inet static
address 192.168.1.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之前。