iptables


1.防火墙开启
service iptables start

2.防火墙关闭
service iptables stop

3.防火墙规则保存
service iptables save

4.防火墙状态
service iptables status

5.防火墙规查看
iptables -L -n

6.防火墙规则清除
iptables [-t tables] [-FXZ]
-F 清除所有的已定义规则
-X 清除所有用户自定义规则
-Z 将所有的chain的计数和流量归0


7.iptables定义默认策略
iptables [-t nat] -P [INPUT, OUTPUT, FORWARD] [ACCEPT, DROP]

例:
将本机INPUT设置为DROP,其他设置为ACCEPT
#iptables -P INPUT DROP
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT

 

8.防火墙规则查看

#iptables -nL --line-number

 

9.按行删除防火墙规则

#iptables -D INPUT 2 #删除input的第二行


10.iptables设置规则:
#iptables [-AI 链] [-io 网络接口] [-p 协议] [-s 来源ip/网段] [--sprot 端口范围] [-d 目标ip/网段] [--dport 端口范围] -j [ACCEPT/DROP]

参数介绍:
-AI 针对某点规则进行插入或累加
-A 加在现有规则的最后面
-I 插入现有规则的最前面

-io 网络接口
-i 数据进入接口 如 -i eth0
-o 数据流出接口 需要与OUTPUT配合

-p 协议,主要有tcp,udp, icmp, 及all

-s 来源ip
-d 目标ip

-j 主要有ACCEPT/接受 DROP/丢弃 LOG/记录

开启80端口
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

开启22端口
#iptables -I INPUT -p tcp --dport 22 -j ACCEPT

打开主动模式21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT 

 

开启一个ip段

iptables -I INPUT -s 192.168.118.0/24 -j ACCEPTb

表示接受192.168.118.0-255之间主机的任意端口连接

打开被动模式49152~65534之间的端口
iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

把3306端口设置为只允许本机访问
#iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
#iptables -A OUTPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT

 

开放进出端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

 

设置完iptables后要记得保存下

 

service iptables save

否则重启后将失效

 

 

*******************************************************************************

为了更严厉的防火墙存取限制,一般初学者会这样配配置:
#iptables -P INPUT DROP
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
也就是主机只有打算开放 ssh 服务对外提供存取。

这样乍看之下好像非常正确,但是设定好后外面是可以连到该 port 22 服务,但是却导致了一个后续的问题,也就是 "该主机若是要主动对外要建立连线却被禁止"。比方这台服务主机无法使用 ssh 登入到远端主机,也无法用浏览器看其他主机 port 80 的 http 服务的。

引起该问题的原因呢? TCP/IP 本身是双向的,也就是有出必有进,有进必有出。这个规则没考虑到这点问题。

当主机对外要建立连线时,对方势必也要回应封包到原主机,所以回应的封包是要被允许的。不过该配置来看却没考虑到这点问题,所以导致回应的封包被丢弃,所以连线根本建立失败。

所以设定 -P INPUT DROP 时,一般正确方式应该考虑加上允许主机本身对外连线时对方回应封包项目,也就是:
#iptables -P INPUT DROP
#iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
不过上面规则通常应该考虑的是,主机本身对外只有提供可以连结存取port 22 该 ssh 服务,但是若是自己主机有开 port 80 与 port 25 等  服务项目的话,这样配置却也导致自己存取自己的主机服务也被限制住了。

基于该问题,一般会建议加上由 loopback interface 该界面不受到该 firewall 组态限制而被阻挡,一般会建议改成:
#iptables -P INPUT DROP
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

#iptables -A INPUT -p tcp --dport 22 -j ACCEPT

 

posted @ 2013-10-20 12:21  rorshach  阅读(224)  评论(0编辑  收藏  举报