iptables加强系统安全性

我的目的是关闭所有对外服务的端口,只允许ssh服务的22端口接受外面的请求。

查看iptables规则

首先在我的测试服务器上进入root权限,然后用下面的命令查看iptables

root@host2:~# iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 105 packets, 10480 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
2        0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
3        0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
4        0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
2        0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
3        0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
4        0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
5        0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 25 packets, 3380 bytes)
num   pkts bytes target     prot opt in     out     source               destination  

-v 是输出详细信息

-n 指的是显示地址和端口号

-L 指显示链里面的规则

--line-number参数用来显示行号,删除的时候很有用

从上面的结果可以看到,策略上允许所有的输入连接。

仅打开22端口

先添加ssh端口的访问支持防止被阻在外面

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

然后策略上关闭所有的进入请求

iptables -P INPUT DROP

试一下从另外一台机器链接,ssh登录没问题,除了开始要等一会儿。

删除规则

删除所有规则

现在先删除所有的规则,预防万一,一般不使用。

iptables -F
注意,如果在INPUT DROP策略启用的同时,采用了-F删除规则,会导致22端口的规则被删除,因此被阻在服务器外面了。所以要特别小心,-F本身无害,但是和DROP策略在一起的时候,就是危险的。

删除指定规则

iptables -D INPUT 4



允许服务器访问外部

有两种方法解决:

1.如果为了绝对的安全,可以临时手动打开策略,用完后再关闭。

iptables -P INPUT ACCEPT

//DO SOMETHING

iptables -P INPUT DROP


2.添加一个规则,允许已经建立的连接接收进来的数据

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

连接是从本机向外发起的,我们的规则没有限制OUTPUT表,所以连接建立后,就可以用上面的规则从外部网络拉取数据。

不过有些系统上没有conntrack模块, 用下面的命令也一样:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
来自帖子: http://www.webhostingtalk.com/showthread.php?t=1020208


根据自己的需要再添加其他的端口吧。


只接受指定的服务器访问

如果想限制有限的机器向服务器发起请求,可以用-s参数,比如:

iptables -A INPUT -p tcp -s 10.112.18.0/24 --dport 27017 -j ACCEPT

仅在10.112.18.0/0网段的机器才能连接上本机的27017端口。

如果去掉/24,代表指定的某个IP才能访问。


如果仅仅想本机访问,用下面的命令:

iptables -A INPUT -p tcp -s 127.0.0.1 --dport 27017 -j ACCEPT

也可以通过这个命令,将本地访问完全放开:

iptables -A INPUT -i lo -j ACCEPT

ubuntu下的详细iptables操作可以参考:

https://help.ubuntu.com/community/IptablesHowTo


如何保存规则

两步,

1.安装

apt-get install iptables-persistent

注意,有些Ubuntu 12.04安装会有问题,目前这个bug没有修复。

https://bugs.launchpad.net/ubuntu/+source/iptables-persistent/+bug/1002078

2.保存规则文件

service iptables-persistent save

重启即可。


iptables-persistent是一个开机启动脚本,在/etc/init.d/目录下,感兴趣的可以看一下。





你可能感兴趣的:(iptables加强系统安全性)