Более сложный пример
Предыдущий пример был самым простым. Не все сетевые услуги так просты, как WWW. Давайте добавим сюда сервис посложнее: FTP. Мы хотим, чтобы наши внутренние сетевые пользователи были способны работать с серверами FTP в сети Internet: заходить на них, принимать и передавать файлы. Но мы не хотим, чтобы все желающие из Internet работали с нашими FTP-серверами.
Более сложный пример
Предыдущий пример был самым простым. Не все сетевые услуги так просты, как WWW. Давайте добавим сюда сервис посложнее: FTP. Мы хотим, чтобы наши внутренние сетевые пользователи были способны работать с серверами FTP в сети Internet: заходить на них, принимать и передавать файлы. Но мы не хотим, чтобы все желающие из Internet работали с нашими FTP-серверами.
FTP интересен тем, что он использует два TCP-порта: 20 (данные) и 21 (команды):
# ipfwadm -a deny -P tcp -S 0/0 20 -D 172.16.1.0/24 -y # ipfwadm -a accept -P tcp -S 172.16.1.0/24 -D 0/0 20 -b # ipfwadm -a deny -P tcp -S 0/0 21 -D 172.16.1.0/24 -y # ipfwadm -a accept -P tcp -S 172.16.1.0/24 -D 0/0 21 -b |
Многие сервера FTP делают подключение данных с порта 20 при работе в активном режиме, что несколько упрощает нам жизнь, но, к сожалению, не все это делают.
Смотрите на наше правило для порта 20, порта FTP-данных. Правило считает, что наш пользователь подключается к серверу. Это будет работать, если мы используем пассивный режим. Но очень трудно для нас сконфигурировать удовлетворительное правило, чтобы позволить FTP активный режим, потому что мы не можем знать, какие порты будут использоваться.
Безопасней всего предписать нашим пользователям применять пассивный режим: большинство FTP-серверов и почти все FTP-клиенты его поддерживают. Еще лучше применить прокси-сервер для FTP, который принимает подключение из внутренней сети и устанавливает внешние подключения.